Самый простой способ создания гитарных аккордов в linux и / или python
то, что я пытаюсь достичь, это играть гитарный аккорд из моего приложения python. Я знаю (или могу вычислить) частоты в аккорде, если это необходимо.
Я думаю, что даже если я сделаю низкоуровневую работу ноги, производящую несколько синусоидальных волн на правильных частотах, это не будет звучать правильно из-за того, что огибающая также должна быть правильной, иначе это не будет звучать как гитара, но больше гул.
Tantilisingly, игра команды linux sox может произвести довольно убедительная индивидуальная записка с:
play -n synth 0 pluck E3
Так что на самом деле я спрашиваю,
a) можно ли запустить команду play, чтобы сделать целый аккорд (в идеале с немного отличающимися временами начала для имитации хода строки plectrum) - я не смог этого сделать, но, возможно, есть какая-то bash fairydust, которая разветвит процесс или такой, что это звучит правильно. Если это возможно, я бы согласился просто вызвать команду bash из моего кода (мне не нравится изобретение колеса).
b) (еще лучше) есть ли способ в python достичь этого (звук гитарного аккорда)? Я видел несколько доступных библиотек python midi, но, честно говоря, midi не подходит для звука, который я хочу, насколько я могу судить.
3 ответов
в руководстве приведен следующий пример:
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 каналов в несколько раз, а затем смешивает их до одного канала.
результат довольно убедительный аккорд гитары; вы можете, конечно, изменить ноты или задержки очень легко. Вы также можете поиграть с sustain и тоном "гитары" или добавить эффект овердрайва-см. Руководство для подробности.
a) можно ли включить команду play, чтобы сделать целый аккорд... ?
Если ваша звуковая архитектура поддерживает его, вы можете запускать несколько команд, которые выводят аудио одновременно. Если вы используете ALSA, вам нужен dmix или другие варианты в вашем ~/.asoundrc
. Использовать subprocess.Popen
чтобы породить много дочерних процессов. Если бы это был гипотетически сценарий bash, вы могли бы сделать:
command1 &
command2 &
...
b) (еще лучше) есть ли способ в python достичь этого (гитара звук аккорда)?
компиляция в MIDI и вывод через программный синтезатор, такой как FluidSynth.