Самый простой способ создания гитарных аккордов в Linux и / или python
То, что я пытаюсь достичь, играет на гитарном аккорде из моего приложения python. Я знаю (или могу рассчитать) частоты в аккорде, если это необходимо.
Я думаю, что даже если я выполняю низкоуровневую работу по созданию нескольких синусоидальных волн на правильных частотах, она не будет звучать правильно из-за того, что конверт тоже должен быть прав, иначе он не будет звучать как гитара, а скорее гул.
Успокоительно, командная игра linux sox может привести к довольно убедительной индивидуальной ноте:
play -n synth 0 pluck E3
Так что действительно, что я прошу,
a) можно ли выставить команду воспроизведения для выполнения целого аккорда (в идеале с немного отличающимся временем начала, чтобы имитировать штрих струны plectrum) – я не смог это сделать, но, возможно, у вас есть какая-то бад-фея, которая будет развиваться процесс или так, чтобы это звучало правильно. Если это возможно, я бы согласился просто вызвать команду bash из моего кода (мне не нравится изобретать колесо).
б) (еще лучше) есть ли способ в питоне достижения этого (звук гитарного аккорда)? Я видел несколько доступных midi-библиотек python, но откровенно midi не подходит для звука, который я хочу, насколько я могу судить.
- Чтение файла * .au в python
- Получить длину или продолжительность файла .wav
- Как играть вектор в Python?
- Как вызвать аудио плагины из Python?
- pyaudio – «Прослушать» до тех пор, пока не будет обнаружен голос, а затем запишите в .wav-файл
В этом руководстве приведен пример:
play -n synth pl G2 pl B2 pl D3 pl G3 pl D4 pl G4 \ delay 0 .05 .1 .15 .2 .25 remix - fade 0 4 .1 norm -1
Это создает 6 одновременных экземпляров синтезатора (как отдельные аудиоканалы), задержки 5 каналов несколько увеличиваются, а затем смешивает их с одним каналом.
Результат – довольно убедительный гитарный аккорд; вы можете, конечно, легко изменить заметки или задержки. Вы также можете играть с сустейном и тоном «гитары» или добавить эффект овердрайва – подробнее см. В руководстве.
a) Хакерский способ – создать подпроцесс фона для запуска каждой команды play
. Поскольку фоновый подпроцесс не заставит оболочку ждать завершения, вы можете сразу запустить несколько play
. Что-то вроде этого будет работать:
for p in "C3" "E3" "G3"; do ( play -n synth 3 pluck $p & ); done
Я вижу, что ниньягеко отправил в основном то же самое, что и я.
б) Ключевым моментом для реализации данных MIDI является то, что он больше похож на рецепт высокого уровня для создания звука, а не самого звука. Другими словами, каждая нота MIDI выражается как шаг, динамический уровень, время начала и остановки и различные метаданные. Фактический звук создается синтезатором, а разные синтезаторы выполняют работу с разными уровнями качества. Если вам не нравится звук, который вы получаете от ваших MIDI-файлов, это не проблема с MIDI, это проблема с вашим синтезатором, поэтому вам просто нужно найти лучший. (На практике это обычно занимает $$$, большинство бесплатных или дешевых синтезаторов довольно плохи).
Альтернативой было бы, например, вырыть под капот и реализовать алгоритм для создания собственного гитарного звука. Для этого вы захотите изучить цифровую обработку сигнала , в частности что-то вроде алгоритма Karplus-Strong (один из многих способов создания синтезированного струнного звука). Это увлекательный сюжет, но если ваша единственная экспозиция к синтезу звука находится на уровне play
и создания MIDI-файлов, вы бы немного научились делать. Кроме того, Python, вероятно, не лучший выбор языка, так как скорость выполнения довольно критическая.
Если вам интересно узнать о DSP, вы можете загрузить и играть с ChucK .
а) Можно ли обучить игру команде, чтобы сделать целый аккорд …?
Если ваша звуковая архитектура поддерживает его, вы можете запускать несколько команд, которые выводят звук одновременно. Если вы используете ALSA, вам нужно dmix или другие варианты в ~/.asoundrc
. Используйте subprocess.Popen
чтобы вызвать множество дочерних процессов. Если бы это было гипотетически сценарий bash, вы могли бы сделать:
command1 & command2 & ...
б) (еще лучше) есть ли способ в питоне достижения этого (звук гитарного аккорда)?
Компиляция с MIDI и вывод с помощью программного синтезатора, такого как FluidSynth.
- Синтезатор звука реального времени с изменяющегося входа в Python
- Python: создание звукового сигнала
- Python + winsound – проверьте, воспроизводится ли аудиофайл
- Динамическое деформирование времени с помощью python (окончательное отображение)
- Синтезируйте музыкальные ноты (с фортепианными звуками) в Python
- Спектрограмма волнового файла
- Как извлечь аудиофайл из видеофайла с помощью python?
- Как объединить аудиофайл (формат wav) в 1 сек сращивания в python?
- Как создать pysub AudioSegment с использованием массива numpy?