“Gerador de tom” estéreo para linux?


13

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?


Você pode conseguir fazer isso com o sox.
Renan

Respostas:


15

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 Generatemenu, 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.


Mas pode gerar tons "do nada"? E não pretendo gravar e reproduzir nada, apenas gerar dois tons ligeiramente diferentes (um para cada canal) "para a eternidade".
Baard Kopperud 07/07

1
@BaardKopperud Sim, atualizei minha resposta para esclarecer.
J883376

8

Você pode ver o speaker-testque (em uma máquina Arch) eu encontro no pacote alsa-utils.

speaker-test -c2 -t sineexecutado 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.


1
speaker-test -c2 -t sine -f 440complementará seu exemplo, fornecendo o parâmetro frequency. Obrigado.
cristão

4

O siggenprograma deve fazer o truque.

captura de tela do siggen

Possui dois canais com sinais independentes e uma fase entre eles. Cada canal pode fazer estes tipos de sinais:

  • seno
  • cosseno
  • quadrado
  • triângulo
  • dente de serra
  • pulso
  • ruído

Você pode executá-lo no modo estéreo assim:

$ siggen -2

Como /dev/dspestá obsoleto na maioria das distros modernas do Linux, você provavelmente precisará instalar uma biblioteca de compatibilidade. Nas distribuições baseadas no Debian , instale o alsa-osspacote e execute-o assim:

$ aoss siggen -2

Você também pode experimentá-lo com o Wrapper PulseAudio OSS:

$ padsp siggen -2

Eu recebo: [siggen] Erro de entrada / saída: / dev / dsp
Ole Tange

Hum. O wrapper PulseAudio OSS ajuda em tudo?
Nathaniel M. Beaver

Sim. Funcionou.
precisa saber é o seguinte

2

ffmpeg

O ffmpeg pode fazer isso, como sempre.

Crie um out.wavarquivo de som senoidal mono de 1000Hz e 5 segundos :

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

Estéreo:

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

O arquivo terá o dobro do tamanho e ffprobedirá que 2 channelssim 1 channel.

Reproduza o áudio por 5 segundos sem criar um arquivo:

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

Jogue para sempre até enlouquecer:

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

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, marrom
  • aevalsrc 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


1

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):

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

Eles tespecificam o tempo, em segundos.

Os Psão para panorâmica por voz (0,0 = esquerda, 1,0 = direita). Isso pode ser alterado para algo diferente de Pversõ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, sinmas não saw), é definir a fase usando uma letra minúscula p. A adição de p0.5fase 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 (ou p0.75para cosseno negativo).


Oi Joel. Bem-vindo ao Unix e Linux . Votei na sua resposta, pois é uma excelente primeira postagem. Eu pensei em mencionar que, se você é um mantenedor ou desenvolvedor de um projeto, é uma prática padrão divulgar essas informações. Embora não seja realmente um problema para o software GPL, vale a pena conhecer o unix.stackexchange.com/help/promotion Para um software gratuito / gratuito, eu imagino que você provavelmente será mais votado neste site se os usuários souberem. você é um dos desenvolvedores por trás do projeto.
Anthony Geoghegan

0

Você pode estar procurando por Gnaural .


3
Seria melhor editar esta resposta para incluir mais informações sobre como este programa fornece os recursos que estão sendo perguntados - semelhante às outras respostas postadas anteriormente.
Anthony Geoghegan

0

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 soxdados brutos paplay.

O pipeline é tedioso, então eu criei um script:

$ 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

por exemplo

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

O remixefeito é 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-remapem paplaycima; 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 .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.