Stereo „generator tonów” dla systemu Linux?


14

Czy jest coś takiego jak generator dźwięku stereo (osobny lewy i prawy kanał) dla Linuksa? Gdzie możesz ustawić głośność i ton / ton dla każdego kanału, a najlepiej także ustawić kształt fali (sinusoidalny, kwadratowy, piłokształtny ...) i odwrócić jeden kanał (w przeciwieństwie do drugiego).

Jeśli nie, jakieś pomysły na dobre miejsca, aby zacząć je tworzyć? Myślę, że najprostszym byłoby dostosowanie istniejących programów, takich jak syntezatory ... Ale jeśli to działa źle, czy są jakieś biblioteki (takie jak SDL?), Które mogą być użyte jako podstawy dla takiego programu?


Możesz być w stanie to zrobić za pomocą sox.
Renan

Odpowiedzi:


15

Wygląda na to, że szukasz Audacity, który jest wieloplatformowym edytorem audio typu open source. Jedną z jego funkcji jest generowanie dźwięków. Jest to wielościeżkowy edytor audio, dzięki czemu możesz łatwo stworzyć dźwięk stereo.

W Generatemenu możesz tworzyć przebiegi sinusoidalne, piłokształtne i kwadratowe o dowolnej częstotliwości, amplitudzie i długości, bez potrzeby nagrywania lub dodatkowych plików wejściowych.


Ale czy może generować dźwięki „z niczego”? I nie zamierzam niczego nagrywać ani odtwarzać, po prostu generuję dwa nieznacznie różne tony (jeden dla każdego kanału) „na wieczność”.
Baard Kopperud

1
@BaardKopperud Tak, zaktualizowałem swoją odpowiedź, aby wyjaśnić.
j883376,

8

Możesz spojrzeć na to speaker-test, co (na maszynie Arch) znajduję w pakiecie alsa-utils.

speaker-test -c2 -t sineuruchamiany z xtermu, dał mi falę sinusoidalną 440 Hz przez około 6 sekund każda, na przemian lewy i prawy głośnik. W xtermie podano informacje o tym, z którego głośnika się korzysta.

Według strony podręcznika może on wykonywać sinusoidy o dowolnej częstotliwości i różowym szumie.


1
speaker-test -c2 -t sine -f 440uzupełni Twój przykład, podając parametr częstotliwości. Dziękuję.
chrześcijanin

4

siggenProgram powinien załatwić sprawę.

zrzut ekranu siggen

Ma dwa kanały z niezależnymi sygnałami i fazę między nimi. Każdy kanał może wykonywać następujące typy sygnałów:

  • sinus
  • cosinus
  • plac
  • trójkąt
  • piłokształtny
  • puls
  • hałas

Możesz uruchomić go w trybie stereo w następujący sposób:

$ siggen -2

Ponieważ /dev/dspjest przestarzały w większości współczesnych dystrybucji Linuksa, prawdopodobnie będziesz musiał zainstalować bibliotekę kompatybilności. W dystrybucjach opartych na Debianie zainstaluj alsa-osspakiet i uruchom go w następujący sposób:

$ aoss siggen -2

Możesz także wypróbować to z PulseAudio OSS Wrapper:

$ padsp siggen -2

Dostaję: [siggen] Błąd wejścia / wyjścia: / dev / dsp
Ole Tange 17.04.19

Hm Czy opakowanie PulseAudio OSS w ogóle pomaga?
Nathaniel M. Beaver

Tak. Zadziałało.
Ole Tange 18.04.19

4

ffmpeg

ffmpeg może to zrobić, jak zwykle.

Utwórz 5-sekundowy sinusoidalny out.wavplik dźwiękowy mono 1000 Hz :

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

Zamiast tego stereo:

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

Plik będzie 2x większy i ffprobepowie, że ma 2 channelszamiast 1 channel.

Odtwarzaj dźwięk przez 5 sekund bez tworzenia pliku:

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

Graj wiecznie, aż oszalejesz:

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

Dokumentacja:

Druga sekcja zawiera źródła audio Dokumentuje inne przydatne algorytmy generowania dźwięku oprócz sine, np .:

  • anoisesrc: dźwięki w kilku kolorach, np. biały, różowy, brązowy
  • aevalsrc przyjmuje dowolne wyrażenia matematyczne i dlatego powinien być w stanie wytwarzać przebiegi trójkątne (wyrażenie TODO)

Bibliografia:

Testowane w Ubuntu 18.04, ffmpeg 3.4.6.

Przykład generowania minimalnego dźwięku C bez dodatkowych bibliotek

Dla zabawy: /programming/732699/how-is-audio-represented-w--umbles-in-computers/36510894#36510894


1

Program saugns również może to zrobić. (Jest to generator audio z wiersza poleceń (obecnie) obsługujący 8 typów fal i techniki modulacji FM / PM / AM.)

Aby wygenerować dwie rozdzielone stereofonicznie fale 100 Hz, jedną sinusoidalną i jedną trójkątną, a drugą o odwróconej amplitudzie, poniższy skrypt można wkleić do pliku i uruchomić w programie (jak w ./saugns filename):

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

Do ts określić czas, w sekundach.

Do PS można na per głosu przesuwania (0,0 = lewo, prawo = 1,0). Można to zmienić na coś innego niż Pw przyszłych wersjach; plik README opisuje bieżącą składnię.

Edycja: Rzeczywiście jestem programistą programu.

Alternatywnym sposobem odwrócenia amplitudy (w przypadku niektórych rodzajów fal, np. sinAle nie saw), jest ustawienie fazy za pomocą małych liter p. Dodanie p0.5zestawów faz do 50% cyklu fali (połowa ujemna). Ponadto, ponieważ nie ma nazwanego typu cosinus, p0.25jest sposobem na przekształcenie sinusu w cosinus (lub p0.75dla cosinusa ujemnego).


Cześć Joel. Witamy w systemach Unix i Linux . Głosowałem za odpowiedzią, ponieważ jest to świetny pierwszy post. Pomyślałem, że wspomnę, że jeśli jesteś opiekunem lub deweloperem projektu, standardową praktyką jest ujawnianie tych informacji. Chociaż tak naprawdę nie stanowi problemu dla oprogramowania GPL, warto wiedzieć o unix.stackexchange.com/help/promotion W przypadku przydatnego oprogramowania Free / Libre wyobrażam sobie, że bardziej prawdopodobne jest, że zostaniesz pozytywnie oceniony na tej stronie, jeśli użytkownicy będą wiedzieć jesteś jednym z programistów projektu.
Anthony Geoghegan,


0

Możesz łatwo syntetyzować dźwięki za pomocą SoX. Było kilka przeszkód, ale w końcu udało mi się to rozgryźć.

Miałem problem z połączeniem SoX z PulseAudio, więc po prostu wprowadziłem soxdane surowe paplay.

Rurociąg jest żmudny, więc stworzyłem skrypt:

$ 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

na przykład

sox-paplay synth sine 1000 gain -5 remix -m 0 0 1 0 0 0

remixEfekt jest właśnie używany do wysyłania wynik do określonego kanału. Jest o wiele potężniejszy, ale tutaj używamy tylko podstawowej funkcjonalności. W tym przykładzie mamy urządzenie sześciokanałowe i wysyłamy sygnał do trzeciego kanału.

Najpierw stworzyłem urządzenie ALSA owijające urządzenie PulseAudio, ale potem stwierdziłem, że niemożliwe jest kontrolowanie mapowania kanałów za pomocą ALSA, więc losowe kanały mieszały się w zależności od tego, jak moja niestandardowa mapa kanałów różniła się od domyślnej ALSA. Dlatego mam --no-remix --no-remapw paplaywyżej; Chcę tylko surowego porządkowania kanałów dla polecenia sox.

Trochę żałuję, że materiały audio w Linuksie nie miały lepszej dokumentacji i raportów o błędach.

Być może zainteresuje Cię opublikowana przeze mnie odpowiedź pokazująca, jak ustawić Korektor dźwięku PulseAudio z wiersza poleceń .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.