¿Cómo configuro mi sonido para Jasper en Raspbian Jessie?

19

Estoy usando Raspbian Jessie (21/11/2015) para ejecutar Jasper (rama maestra) en el Raspberry Pi 2 Modelo B. Las instrucciones de instalación en la documentación parecen ser para Wheezy y no para Jessie.

Ejecutar Jasper en Wheezy funciona bien. Pero, en Jessie, tuve problemas para configurar el sonido. O mi micrófono funcionaba pero no el hablante o viceversa.

Lo que debe hacerse es que la tarjeta de sonido predeterminada debe estar configurada en USB porque allí es donde está conectado mi micrófono USB y Jasper lo requiere. Hay muchas respuestas que hablan sobre la configuración de ALSA a través de ~/.asoundrc, /etc/asound.confe incluso, /usr/share/alsa/alsa.confpero ninguna de ellas funcionó para mí.

Cuando abro mi mesa de mezclas alsamixery presiono F6, siempre veo bcm2835como la tarjeta predeterminada. Esa es la tarjeta predeterminada de Pi2, pero quiero que mi USB sea la tarjeta predeterminada.

¿Cómo hago esto?

Housni
fuente

Respuestas:

25

Según el Wiki de ALSA , bajo el título que dice " Cómo elegir un orden particular para múltiples tarjetas instaladas ", establece lo siguiente:

Qué tarjeta es el número de tarjeta 0, 1 y, por lo tanto, está determinada de manera predeterminada por el orden de carga del módulo. Esto es particularmente útil para elegir qué tarjeta se convierte en la predeterminada.

En teoría, por lo tanto, es posible elegir cuál de varias tarjetas instaladas se convierte en la tarjeta 0, la predeterminada, asegurando que su módulo de controlador se cargue primero. (Nota: esto supone que cada tarjeta de sonido requiere un controlador diferente. Si tiene dos tarjetas de sonido del mismo tipo, pase a la siguiente sección).

Hay dos maneras de lograr esto, la opción "antigua" index = del módulo del controlador de la tarjeta y la opción alternativa (y nueva) slots = del módulo snd.

Documenta dos métodos para hacer esto:

  1. El antiguo método "index ="
  2. El nuevo método "slots ="

Lo primero es lo que recomiendan las instrucciones de instalación de Jasper. También es de lo que habla la mayoría de las soluciones. Sin embargo, este es el método más antiguo y puede no funcionar en imágenes Raspbian Jessie más actuales.

Una combinación de ambos métodos es lo que funcionó para mí.

En primer lugar, verifique en qué orden se han cargado sus tarjetas:

$ cat /proc/asound/modules
 0 snd_bcm2835
 1 snd_usb_audio

El recuento de tarjetas comienza de 0modo que el valor predeterminado bcm2835se carga primero y mi tarjeta USB que tiene mi micrófono se carga en segundo lugar.

Para reordenar mis tarjetas, primero creo un archivo llamado /etc/modprobe.d/alsa-base.conf. Se le puede poner el nombre que desee siempre que termine .conf. Luego agregué lo siguiente:

# This sets the index value of the cards but doesn't reorder.
options snd_usb_audio index=0
options snd_bcm2835 index=1

# Does the reordering.
options snd slots=snd_usb_audio,snd_bcm2835

Los comentarios deben explicar qué hace cada línea. Una vez que hagas eso, parece que tienes que reiniciar tu máquina para que funcione.

Una vez que reinicie, debería poder grabar algo de audio con la tarjeta predeterminada que ahora debería ser su micrófono:

$ arecord temp.wav

y luego reproducirlo, especificando la tarjeta como 1 y el dispositivo como 0, que es donde debe estar la salida de su altavoz:

aplay -D plughw:1,0 temp.wav

Inicialmente solo agregué la línea con slotsella. Esto funcionó para hacer que mi tarjeta USB sea la tarjeta predeterminada pero se indexó incorrectamente. Por ejemplo, una vez que hice eso, así es /proc/asound/modulescomo se veía mi :

$ cat /proc/asound/modules
 1 snd_usb_audio
 2 snd_bcm2835

Idealmente, debería verse así:

 0 snd_usb_audio
 1 snd_bcm2835

Y es por eso que también uso el indexmétodo para lograr esto.

Housni
fuente
Me alegra que haya ayudado :) Tendré un script de configuración de bash, así como un libro de cocina Chef para hacer todo esto en unos días, en mi cuenta de Github (enlace en mi perfil).
Housni
Tengo dos dispositivos llamados snd_usb_audio, por desgracia.
kleinfreund
@Housni ¿Ya hiciste ese guión?
not2qubit
0

Después de intentar depurar todos los problemas de este proyecto y hacer que AMBOS micrófonos usb y altavoces bcm2835 funcionen, creo que hay un problema básico que TODOS los consejos de ALSA que recibí no resuelven.

El directorio / usr / share / alsa / cards no tiene un archivo bcm2835.conf. El archivo de directorio / usr / share / alsa alsa.conf deja MUCHOS stubs que deben especificarse. A menos que se suministre una tarjeta para bcm2835, la activación de Jasper.py muestra muchos mensajes de error supuestamente no fatales. Al elaborar un archivo bcm2835.conf, puede deshacerse de los mensajes irritantes.

Me parece que este es un error de Jessie; Realmente debería haber un archivo que resuelva estos mensajes de error. Parece un poco flojo para el programador jessie que se ocupa de ALSA de no haber creado uno que haya sido probado.

No he trabajado a través de todos los mensajes de error, pero sospecho que otros mensajes también son causados ​​por esto.

Otro caso de no tener una versión madura es la falla para verificar el firmware antiguo durante el arranque. El firmware antiguo en mi jessie resultó en un escritorio que no respondía al teclado o al mouse, lo cual es un excelente ejemplo para usar jessie con firmware antiguo, a menos que sepa ssh. No es una situación de usuario ingenua.

rchoppin
fuente
1
WRT "parece un poco flojo para el programador jessie que trata con ALSA no haber creado uno que sea probado", no se confunda en creer que Debian 8, alias. jessie, a partir del cual se construye Raspbian, está destinado principalmente para Raspberry Pi y BCM2835 SoC. Este último representaría <1% de los usuarios de Debian, por lo que difícilmente puede considerarse una prioridad para ellos. El hecho de que un grupo de voluntarios principalmente no quiera trabajar en un teclado 25 horas / día para ser todo para todos no los hace perezosos ...
goldilocks
... Simplemente indica que no hay suficiente interés de las personas en la comunidad con la experiencia técnica necesaria para hacer el trabajo.
Ricitos de oro