Вы можете легко синтезировать тоны с SoX. Были некоторые камни преткновения, но я в конце концов смог разобраться.
У меня были проблемы с сопряжением SoX с PulseAudio, поэтому я просто передаю sox
необработанные данные paplay
.
Конвейер утомителен, поэтому я создал скрипт:
$ cat sox-paplay
#!/bin/bash
: ${HZ:=44100}
: ${NCHAN:=6}
: ${SINK:=mysink}
sox -c $NCHAN -n -t raw -r $HZ -L -b 16 - "$@" | paplay --no-remix --no-remap --raw -v -p --rate $HZ -d $SINK --channels $NCHAN
например
sox-paplay synth sine 1000 gain -5 remix -m 0 0 1 0 0 0
remix
Эффект используется только для отправки результата на определенный канал. Он намного мощнее, но здесь мы используем только основные функции. В этом примере у нас есть шестиканальное устройство, и мы посылаем тональный сигнал на третий канал.
Первоначально я создал устройство ALSA, обертывающее устройство PulseAudio, но затем обнаружил, что невозможно управлять сопоставлением каналов с помощью ALSA, и поэтому случайные каналы смешивались вместе в зависимости от того, как моя пользовательская карта каналов отличалась от стандартной ALSA. Вот почему у меня --no-remix --no-remap
в paplay
выше; Я просто хочу упорядочить необработанный канал для команды sox.
Я хотел бы, чтобы аудио материал в Linux имел лучшую документацию и отчеты об ошибках.
Возможно, вас заинтересует ответ, который я недавно опубликовал и который показывает, как настроить эквалайзер PulseAudio из командной строки .