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?
Odpowiedzi:
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
Generate
menu 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.źródło
Możesz spojrzeć na to
speaker-test
, co (na maszynie Arch) znajduję w pakiecie alsa-utils.speaker-test -c2 -t sine
uruchamiany 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.
źródło
speaker-test -c2 -t sine -f 440
uzupełni Twój przykład, podając parametr częstotliwości. Dziękuję.siggen
Program powinien załatwić sprawę.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:
Możesz uruchomić go w trybie stereo w następujący sposób:
Ponieważ
/dev/dsp
jest przestarzały w większości współczesnych dystrybucji Linuksa, prawdopodobnie będziesz musiał zainstalować bibliotekę kompatybilności. W dystrybucjach opartych na Debianie zainstalujalsa-oss
pakiet i uruchom go w następujący sposób:Możesz także wypróbować to z PulseAudio OSS Wrapper:
źródło
ffmpeg
ffmpeg może to zrobić, jak zwykle.
Utwórz 5-sekundowy sinusoidalny
out.wav
plik dźwiękowy mono 1000 Hz :Zamiast tego stereo:
Plik będzie 2x większy i
ffprobe
powie, że ma2 channels
zamiast1 channel
.Odtwarzaj dźwięk przez 5 sekund bez tworzenia pliku:
Graj wiecznie, aż oszalejesz:
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ązowyaevalsrc
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
źródło
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
):Do
t
s określić czas, w sekundach.Do
P
S można na per głosu przesuwania (0,0 = lewo, prawo = 1,0). Można to zmienić na coś innego niżP
w 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.
sin
Ale niesaw
), jest ustawienie fazy za pomocą małych literp
. Dodaniep0.5
zestawów faz do 50% cyklu fali (połowa ujemna). Ponadto, ponieważ nie ma nazwanego typu cosinus,p0.25
jest sposobem na przekształcenie sinusu w cosinus (lubp0.75
dla cosinusa ujemnego).źródło
Być może szukasz Gnaural .
źródło
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
sox
dane surowepaplay
.Rurociąg jest żmudny, więc stworzyłem skrypt:
na przykład
remix
Efekt 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-remap
wpaplay
wyż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ń .
źródło