2011-01-02 32 views
11

Tengo un problema donde necesito "simular" la salida del micrófono.Simular micrófono (micrófono virtual)

Los datos vendrán a través de la red, se decodificarán en PCM y básicamente se escriben en el micrófono, que luego otros programas pueden leer/grabar/lo que sea.

He estado leyendo en alsa pero la información es bastante escasa. El plugin de archivos parece prometedor: estaba pensando en tener una pipa nombrada como "infile" a la que luego podría entregar datos desde mi aplicación. No puedo hacer que funcione sin embargo (vlc/audacity solo segfault).

pcm.testing { 
    type file 
    slave { 
    pcm { 
     type hw 
     card 0 
     device 0 
    } 
    } 
    infile "/dev/urandom" 
    format "raw" 
} 

¿Hay alguna forma mejor de hacerlo? ¿Alguna sugerencia sobre los complementos de alsa (particularmente el plugin de archivos)?

Respuesta

7

Su sonido vendrá a través de la red y lo almacenaría en caché hasta que algo quiera leer? ¿O se descartarían los datos? En general, algo como el siguiente (apenas probado) debería funcionar como un micrófono virtual, pero creo que siempre leerá el archivo desde el principio cuando se abra el dispositivo y deberá comprobar cómo funciona al final del archivo. Quizás la aplicación que lee de la red deba manejar lo que se intentará con las tuberías, pero luego almacenar en caché/descartar los datos entrantes.

pcm.virtmic { 
    type file 
    format "raw" 
    slave.pcm "default" 
    file '/dev/null' 
    infile '/dev/urandom' 
} 

Ver alsa docs para más opciones.

Una vez más, no estoy seguro si esta herramienta es lo que realmente necesita para la tarea. Hubiera sido realmente ingenioso si pudieras comenzar un comando con la opción 'infile', como puedes con 'archivo' pero desafortunadamente no puedes ...

Espero que ayude.

ACTUALIZACIÓN: slave.pcm no debe ser "nulo", pero es un dispositivo real. Parece que se usa para sincronizar o no sé, pero el uso de nulo hace que el proceso de grabación se bloquee para siempre. Este dispositivo podría obligarte a una velocidad de muestreo dada, así que ten cuidado. El uso de "predeterminado" es un valor predeterminado razonable. infile necesita proporcionar datos de sonido en bruto con el formato y la frecuencia correctos/coincidentes. Por cierto, puede ver alsa server and jackd y otros sistemas de sonido y bibliotecas para encontrar soluciones alternativas para su tarea

Cuestiones relacionadas