Стерео “генератор тонів” для Linux?


14

Чи є щось на зразок стерео (окремого лівого та правого каналу) тонального генератора для Linux? Там, де ви можете встановити гучність і тон / висоту для кожного каналу, а також бажано також встановити форму хвилі (синус, квадрат, пилоподібний зуб, ...) та інвертувати один канал (на відміну від іншого).

Якщо ні, то якісь ідеї для хороших місць почати створювати? Я думаю, найпростішим було б адаптувати існуючі програми на зразок синтезаторів ... Але якщо це погано працює, чи існують бібліотеки (на зразок SDL?), Які можуть бути використані як бази для такої програми?


Можливо, ви зможете це зробити з sox.
Ренан

Відповіді:


15

Здається, ви шукаєте Audacity, який є міжплатформовим аудіоредактором з відкритим кодом. Однією з його особливостей є можливість генерування тонів. Це багатодорогий аудіоредактор, тому ви можете легко створити стерео-тон.

У Generateменю ви можете створювати тони сигналу Sine, Sawtooth та Square з довільною частотою, амплітудою та довжиною без необхідності запису чи необхідності додаткових вхідних файлів.


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

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?
Натаніель М. Бівер

Так. Це спрацювало.
Оле Танге

4

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 channelsзамість 1 channel.

Відтворюйте аудіо протягом 5 секунд, не створюючи файл:

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

Грайте вічно, поки не з’їдете з розуму:

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

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

Інший розділ джерел аудіодокументів додатково документує додаткові алгоритми генерації звуку sine, наприклад:

  • anoisesrc: шум декількох кольорів, наприклад, білий, рожевий, коричневий
  • aevalsrc приймає довільні математичні вирази, і тому має бути здатним створювати трикутні форми хвиль (TODO вираз)

Бібліографія:

Тестовано в Ubuntu 18.04, ffmpeg 3.4.6.

Приклад створення мінімального звуку C без додаткових бібліотек

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


1

Програма саунів також може це зробити. (Це аудіогенератор командного рядка (на даний момент), що підтримує 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 Equalizer з командного рядка .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.