Existe algo como um gerador de tons estéreo (canal esquerdo e direito) para Linux? Onde você pode definir o volume e o tom / afinação de cada canal e, de preferência, também definir a forma de onda (seno, quadrado, dente de serra, ...) e inverter um canal (em oposição ao outro).
Se não, alguma idéia de bons lugares para começar a fazer um? Eu acho que o mais simples seria adaptar os programas existentes, como sintetizadores ... Mas, se isso funcionar mal, existem bibliotecas (como SDL?) Que podem ser usadas como base para esse programa?
Respostas:
Parece que você está procurando pelo Audacity, um editor de áudio de código aberto de plataforma cruzada. Uma de suas características é permitir gerar tons. É um editor de áudio com várias faixas, para que você possa criar facilmente um som estéreo.
No
Generate
menu, você pode criar tons de onda senoidal, dente de serra e quadrado de frequência, amplitude e comprimento arbitrários, sem a necessidade de gravar ou de arquivos de entrada adicionais.fonte
Você pode ver o
speaker-test
que (em uma máquina Arch) eu encontro no pacote alsa-utils.speaker-test -c2 -t sine
executado a partir de um xterm, me deu uma onda senoidal de 440 Hz por cerca de 6 segundos cada, alternando os alto-falantes esquerdo e direito. No xterm, ele forneceu algumas informações sobre qual orador pensava estar usando.De acordo com a página do manual, ele pode fazer ondas senoidais de frequência arbitrária e ruído rosa.
fonte
speaker-test -c2 -t sine -f 440
complementará seu exemplo, fornecendo o parâmetro frequency. Obrigado.O
siggen
programa deve fazer o truque.Possui dois canais com sinais independentes e uma fase entre eles. Cada canal pode fazer estes tipos de sinais:
Você pode executá-lo no modo estéreo assim:
Como
/dev/dsp
está obsoleto na maioria das distros modernas do Linux, você provavelmente precisará instalar uma biblioteca de compatibilidade. Nas distribuições baseadas no Debian , instale oalsa-oss
pacote e execute-o assim:Você também pode experimentá-lo com o Wrapper PulseAudio OSS:
fonte
ffmpeg
O ffmpeg pode fazer isso, como sempre.
Crie um
out.wav
arquivo de som senoidal mono de 1000Hz e 5 segundos :Estéreo:
O arquivo terá o dobro do tamanho e
ffprobe
dirá que2 channels
sim1 channel
.Reproduza o áudio por 5 segundos sem criar um arquivo:
Jogue para sempre até enlouquecer:
Documentação:
A outra seção sunder Fontes de áudio documentam outros algoritmos úteis de geração de som, além de
sine
, por exemplo:anoisesrc
: ruídos de várias cores, por exemplo, branco, rosa, marromaevalsrc
usa expressões matemáticas arbitrárias e, portanto, deve ser capaz de produzir formas de onda triangulares (expressão TODO)Bibliografia:
Testado no Ubuntu 18.04, ffmpeg 3.4.6.
Exemplo mínimo de geração de áudio C sem bibliotecas extras
Apenas por diversão: /programming/732699/how-is-audio-represented-with-numbers-in-computers/36510894#36510894
fonte
O programa saugns também pode fazer isso. (Atualmente, é um gerador de áudio de linha de comando que suporta 8 tipos de onda e técnicas de modulação FM / PM / AM.)
Para gerar duas ondas de 100 Hz separadas por estéreo, uma senoidal e uma triângulo, e uma com amplitude invertida, o seguinte script pode ser colado em um arquivo e executado no programa (como em
./saugns filename
):Eles
t
especificam o tempo, em segundos.Os
P
são para panorâmica por voz (0,0 = esquerda, 1,0 = direita). Isso pode ser alterado para algo diferente deP
versões futuras; o arquivo LEIA-ME descreve a sintaxe atual.Edit: Eu sou realmente o desenvolvedor do programa.
Além disso, uma maneira alternativa de inverter a amplitude (para alguns tipos de onda, por exemplo,
sin
mas nãosaw
), é definir a fase usando uma letra minúsculap
. A adição dep0.5
fase dos conjuntos a 50% do ciclo das ondas (metade negativa). Além disso, como não há um tipo de cosseno nomeado,p0.25
é a maneira de transformar seno em cosseno (oup0.75
para cosseno negativo).fonte
Você pode estar procurando por Gnaural .
fonte
Você pode sintetizar facilmente tons com o SoX. Havia alguns obstáculos, mas finalmente consegui descobrir.
Eu tive problemas para fazer uma interface do SoX com o PulseAudio, apenas inserindo
sox
dados brutospaplay
.O pipeline é tedioso, então eu criei um script:
por exemplo
O
remix
efeito é usado apenas para enviar o resultado para um canal específico. É muito mais poderoso, mas usamos apenas a funcionalidade básica aqui. Neste exemplo, temos um dispositivo de seis canais e estamos enviando um tom para o terceiro canal.Originalmente, criei um dispositivo ALSA envolvendo o dispositivo PulseAudio, mas então achei impossível controlar o mapeamento de canais usando o ALSA; portanto, canais aleatórios estavam se misturando de acordo com a diferença entre meu mapa de canais personalizado e o padrão ALSA. É por isso que eu tenho
--no-remix --no-remap
empaplay
cima; Eu só quero o canal bruto pedindo o comando sox.Eu meio que gostaria que as coisas de áudio no Linux tivessem uma melhor documentação e relatórios de erros.
Você pode estar interessado em uma resposta que publiquei recentemente, mostrando como definir o equalizador do PulseAudio na linha de comando .
fonte