а) Хакерский способ - запустить фоновый подпроцесс для запуска каждой команды play
. Поскольку фоновый подпроцесс не заставляет оболочку ждать его завершения, вы можете запустить несколько play
одновременно. Примерно так будет работать:
for p in "C3" "E3" "G3"; do ( play -n synth 3 pluck $p & ); done
Я вижу, что ninjagecko опубликовал в основном то же самое, что и я, пишу это.
b) Ключевым моментом, который нужно понять о данных MIDI, является то, что это больше похоже на высокоуровневый рецепт для создания звука, а не на сам звук. Другими словами, каждая нота MIDI выражается в виде высоты тона, динамического уровня, времени начала и окончания и различных других метаданных. Настоящий звук воспроизводится синтезатором, и разные синтезаторы выполняют работу с разными уровнями качества. Если вам не нравится звук, который вы получаете из своих MIDI-файлов, это не проблема с MIDI, это проблема с вашим синтезатором, поэтому вам просто нужно найти лучший. (На практике это обычно занимает $$$; большинство бесплатных или дешевых синтезаторов довольно плохие.)
Альтернативой может быть, собственно говоря, копание под капотом и реализация алгоритма для создания собственного звука гитары. Для этого вам нужно взглянуть на цифровую обработку сигналов , в частности что-то вроде алгоритма Карплюса-Стронга (один из многих способов создания синтетического звука с оторванными струнами). Это увлекательная тема, но если ваше единственное знакомство с синтезом звука находится на уровне play
и создании файлов MIDI, вам придется немного научиться делать. Кроме того, Python, вероятно, не лучший выбор языка, так как скорость выполнения довольно критична.
Если вам интересно узнать о DSP, вы можете скачать и поиграть с ChucK .