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 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
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
w paplay
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ń .