Стерео «генератор тона» для Linux?


14

Есть ли что-то вроде стерео (отдельного левого и правого канала) генератора тона для Linux? Где вы можете установить громкость и тон / высоту звука для каждого канала, а также, предпочтительно, установить форму волны (синус, квадрат, пилообразная, ...) и инвертировать один канал (в отличие от другого).

Если нет, какие-нибудь идеи для хороших мест, чтобы начать делать один? Я предполагаю, что самым простым было бы адаптировать существующие программы, такие как синтезаторы ... Но если это плохо работает, есть ли какие-либо библиотеки (например, SDL?), Которые можно использовать в качестве основы для такой программы?


Вы могли бы быть в состоянии сделать это с sox.
Ренан

Ответы:


15

Похоже, вы ищете Audacity, который является кроссплатформенным редактором аудио с открытым исходным кодом. Одной из его функций является возможность генерировать тоны. Это многодорожечный аудиоредактор, так что вы можете легко создать стерео тон.

В Generateменю вы можете создавать сигналы синусоидальной, пилообразной и прямоугольной формы с произвольной частотой, амплитудой и длиной без необходимости записи или дополнительных входных файлов.


Но может ли он генерировать тоны "из ничего"? И я не собираюсь ничего записывать и воспроизводить, просто сгенерирую два немного разных тона (по одному для каждого канала) «на вечность».
Баард Копперуд

1
@BaardKopperud Да, я обновил свой ответ, чтобы уточнить.
j883376

8

Вы можете посмотреть на speaker-test , что (на машине Arch) я нахожу в пакете alsa-utils.

speaker-test -c2 -t sineпри запуске от xterm, мне давали синусоидальные волны 440 Гц по 6 секунд каждый, чередуя левый и правый динамики. В xterm он дал некоторую информацию о том, какой динамик, по его мнению, он использует.

Согласно справочной странице, он может создавать синусоидальные волны произвольной частоты и розовый шум.


1
speaker-test -c2 -t sine -f 440дополню ваш пример, указав параметр частоты. Спасибо.
Кристиан

4

siggenПрограмма должна сделать трюк.

скриншот сиггена

Имеет два канала с независимыми сигналами и фазу между ними. Каждый канал может делать эти типы сигналов:

  • синус
  • косинус
  • площадь
  • треугольник
  • пилообразный
  • пульс
  • шум

Вы можете запустить его в режиме стерео, например так:

$ siggen -2

Поскольку /dev/dspв большинстве современных дистрибутивов Linux это не рекомендуется, вам, вероятно, потребуется установить библиотеку совместимости. В дистрибутивах на основе Debian установите alsa-ossпакет и запустите его так:

$ aoss siggen -2

Вы также можете попробовать это с PulseAudio OSS Wrapper:

$ padsp siggen -2

Я получаю: [siggen] Ошибка ввода / вывода: / dev / dsp
Ole Tange

Гектометр Оболочка PulseAudio OSS помогает вообще?
Натаниэль М. Бивер

Ага. Это сработало.
Оле Танге

3

FFmpeg

ffmpeg может сделать это, как обычно.

Создайте 5-секундный синусоидальный out.wavзвуковой файл 1000 Гц :

sudo apt-get install ffmpeg
ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" out.wav

Стерео вместо:

ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" -ac 2 out.wav

Файл будет в 2 раза больше, и вместо ffprobeнего будет указано, что он имеет .2 channels1 channel

Воспроизведите аудио в течение 5 секунд без создания файла:

ffplay -f lavfi -i "sine=frequency=1000:duration=5" -autoexit -nodisp

Играй вечно, пока не сойдешь с ума

ffplay -f lavfi -i "sine=frequency=1000" -nodisp

Документация:

В другом разделе источников звука sunder документируются другие полезные алгоритмы генерации звука sine, например:

  • anoisesrc: шумы нескольких цветов, например, белый, розовый, коричневый
  • aevalsrc принимает произвольные математические выражения и поэтому должен иметь возможность создавать треугольные сигналы (выражение TODO)

Список используемой литературы:

Протестировано в Ubuntu 18.04, ffmpeg 3.4.6.

Пример создания аудио на минимальном С без дополнительных библиотек

Просто для удовольствия: /programming/732699/how-is-audio-represented-with-numbers-in-computers/36510894#36510894


1

Программа Saugns также может сделать это. (Это аудио генератор командной строки (в настоящее время), поддерживающий 8 типов волн и методы модуляции FM / PM / AM.)

Чтобы сгенерировать две стерео-разделенные волны 100 Гц, одну синусоидальную, одну треугольную и одну с инвертированной амплитудой, следующий скрипт можно вставить в файл и запустить через программу (как в ./saugns filename):

Osin f100 a0.5 t2 P0
Otri f100 a(-0.5) t2 P1

В ts указать время, в секундах.

В Pы предназначены для голоса за панорамирование (0.0 = влево, 1.0 = право). Это может быть изменено на что-то другое, чем Pв будущих версиях; файл README описывает текущий синтаксис.

Редактировать: я действительно разработчик программы.

Кроме того, альтернативный способ переключения амплитуды (для некоторых типов волн, например, sinно не saw), состоит в установке фазы с использованием строчных букв p. Добавление p0.5устанавливает фазу до 50% волнового цикла (отрицательная половина). Кроме того, поскольку нет названного типа косинуса, p0.25есть способ превратить синус в косинус (или p0.75для отрицательного косинуса).


Привет Джоэл. Добро пожаловать в Unix и Linux . Я проголосовал за ваш ответ, так как это отличный первый пост. Я подумал, что упомяну, что если вы сопровождающий или разработчик проекта, это стандартная практика раскрытия этой информации. Хотя на самом деле это не проблема для программного обеспечения GPL, стоит знать о unix.stackexchange.com/help/promotion Для полезного программного обеспечения Free / Libre, я полагаю, что вы, скорее всего, проголосуете на этом сайте, если пользователи знают Вы один из разработчиков проекта.
Энтони


0

Вы можете легко синтезировать тоны с 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 из командной строки .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.