cat um arquivo de áudio no microfone / dispositivo de gravação

3

Eu preciso simular o processo de gravação de um arquivo de áudio, usando uma gravação existente.

Estou rodando o Ubuntu 8.10 e achei que isso seria bem simples, mas agora parece ser   não tão simples.

Meu "conceito" do que eu quero fazer é,


$ cat myaudio.wav > /dev/mic

Existe outro programa escutando / esperando pela entrada.

Editar: Talvez não esteja claro do jeito que eu expliquei isso, mas eu quero basicamente falsificar o entrada de microfone transmitindo um arquivo de som pré-gravado para o dispositivo de microfone.
Eu posso fazer


$ cat /dev/dsp > myfile.au 

para capturar a entrada bruta e


$ cat myfile.au > /dev/dsp

para transmitir a entrada gravada para meus alto-falantes, então estou um pouco confuso sobre o porquê de não poder fazer algo análogo ao microfone / função de gravação? Eu ainda não sei quase nada sobre baixo nível coisas de som no linux, mas parece estranho que isso não seja possível.

    
por e7zkw9120 17.08.2009 / 14:15

6 respostas

0

Obrigado por todas as respostas. Isto acabou por ser uma experiência bastante de aprendizagem. Em particular, aprendi que o linux ainda tem algumas áreas ruins e a configuração do som é (talvez a maior) uma delas.

É muito fácil inserir a entrada do microfone em um arquivo (ou soquete) e, intuitivamente, ser igualmente simples de catar um arquivo em qualquer coisa que o microfone ler - de modo que tudo o que for lido mic pode ler o referido arquivo de som. Isto, no entanto, infelizmente não é o caso.

Como resultado, acabei modificando o programa de escuta para que ele pudesse ouvir em um soquete em vez do entrada de mic em bruto. Eu então escrevi um cliente perl simples para redirecionar a entrada do microfone para o soquete,



#!/usr/bin/perl -w                                                                                                           
use strict;
use warnings;
use IO::Socket;

my $dspdev = '/dev/dsp';
my $port   = 8000;
my $host   = "127.0.0.1";

my $sock = new IO::Socket::INET(
    PeerAddr => $host,
    PeerPort => $port,
    Type     => SOCK_STREAM,
    Proto    => "tcp",
    ) || die "Couldn't open socket: $!\n";

open(DSP, "<", $dspdev)||die "can't open $dspdev: $!\n";

while( 1 ) {
    my $rbuf = "";
    sysread(DSP, $rbuf, 4096);
    syswrite($sock, $rbuf);
}

Neste estágio, isso é tudo que eu precisava, mas parece que é necessário um pouco mais de esforço do que deveria. Eu encontrei uma solução, mas na verdade não respondi à minha pergunta original, então deixarei isso em aberto.

edit: decidiu fechar isso, já que não parece atrair mais atenção.

    
por 21.08.2009 / 18:21
1

Substitua o nó do dispositivo por outra coisa

Afaste o nó do dispositivo ou recompile a biblioteca de som para abrir outra coisa. Dessa forma, você poderia colocar o seu próprio driver de som loopback, ou algo assim.

    
por 19.08.2009 / 09:31
0

O PulseAudio permitirá que você faça isso, supondo que sua ferramenta de gravação também use o PulseAudio. Tenho certeza de que o ALSA pode ser configurado para usar uma fonte diferente para o seu áudio. Eu estou supondo que a resposta realmente depende de qual aplicativo você está usando para gravar e qual pilha eles estão usando.

    
por 17.08.2009 / 14:47
0

O Vsound também ajudará você a fazer isso. E o legal é que você pode dar um loop no som para qualquer coisa. De uma chance. vsound.org

    
por 17.08.2009 / 14:52
0

Grave-se jogando

Verifique se você não pode definir a fonte de gravação para a saída, , em seguida, reproduzi-lo. Eu acho que esta é uma característica comum das placas de som, mas é algo que você teria que persuadir o hardware a fazer.

    
por 19.08.2009 / 09:30
0

O primeiro passo foi instalar o pacote alsa-utilities (assumindo apenas RHEL / CentOS e linha de comando): yum instala o alsa-utils

Em seguida, ative a reprodução com a interface de usuário de texto da linha de comando do mixer alsa: alsamixer

Para testar as configurações, usei o utilitário de teste de alto-falante: teste de alto-falante -c2

Fiquei um pouco empolgado com o que o teste de alto-falante pode realmente fazer, então aqui vai um divertido que vai irritar pequenos animais: teste de altifalante -c2 -t sine -f 4400

A parte final foi ver se a gravação funcionou com este comando: arecord -v -f cd > soundfile.sound

E reproduza com: aplay soundfile.sound

    
por 20.08.2009 / 04:50