Lo que quiero es lo siguiente:
- Cuando conecto mis auriculares, quiero que el sonido no sea silenciado y esté configurado en un nivel de volumen específico.
- Cuando desconecto mis auriculares, quiero que el sonido se silencie (o se ajuste a un nivel de volumen específico).
Establecer los niveles de volumen no es el problema, pero de alguna manera necesito hacer esto al desconectar / enchufar los auriculares, así que estoy buscando una manera de recibir notificaciones de esos eventos.
Rápidamente descubrí /proc/asound/card0/codec#0
que indica si los auriculares están enchufados o no, así que intenté monitorearlo usando inotifywait
y cambiar el nivel de volumen en función de las notificaciones modificadas . Desafortunadamente inotifywait
falló porque proc no es un sistema de archivos ordinario.
¿Hay otras formas de hacer esto (tal vez a través de PulseAudio)?
Dispositivo de audio: Intel HDA , códec de audio: Conexant CX20585 .
Para resumir lo que he intentado hasta ahora:
- Ear Candy: no se ejecutó en absoluto en mi sistema. Parece ser un proyecto abandonado?
- El código publicado por Karl Bielefeldt podría funcionar en algún hardware, no en el mío.
- La idea de StephenPaulger falla debido a la falta de un canal 'Speaker'.
- Motivado por aking1012, lo hice funcionar al piratear el código del núcleo (después de encontrar el código de detección de jack del códec), pero esa es una solución bastante engorrosa.
Entonces, todavía estoy buscando una manera fácil de hacer esto.
fuente
Respuestas:
Para establecer el nivel de volumen desde la consola, use el comando amixer. Por ejemplo:
Establecerá tu nivel en 0%
No sé cómo cambiar esto cuando conectas los auriculares ... pero tal vez alguien pueda ayudarte con eso
fuente
Durante el UDS para Oneiric ha habido una sesión sobre detección de jack. Vea el plano para más detalles. Parece que esto hará exactamente lo que estoy buscando: diferentes niveles de volumen para diferentes dispositivos, pero no en cada hardware:
Actualización para 11.10
Esto debería funcionar ahora en Oneiric ; desafortunadamente, mi ThinkPad T510 parece ser uno de los sistemas que actualmente no es compatible.
Otro seguimiento de David Henningsson:
Más aquí .
Actualización para 12.04
Ahora funciona con mi ThinkPad T510 (y muchos otros modelos) en Ubuntu 12.04 (versión de desarrollo).
fuente
Ear Candy tiene alguna funcionalidad para lidiar con la inserción / extracción de auriculares.
fuente
No sé cuánta experiencia en codificación tiene, pero lo mencionó,
inotifywait
así que voy a suponer que al menos se siente cómodo con los scripts de shell. El siguiente programa C, basado en este artículo , debería ser capaz de detectar que sus auriculares estén enchufados o desenchufados, después de lo cual puede realizar las acciones que desee.El programa toma un argumento, que debería ser una ruta al dispositivo de evento de entrada para sus auriculares. Esto es
/dev/input/event7
para mí, pero es posible que tenga que probar algunos para encontrar cuál está en su sistema. Necesitará permisos de lectura en ese dispositivo. El programa imprimirá el nombre del dispositivo y el tipo, código y valor del primer evento antes de salir.fuente
event.value
hecho está cambiado ... pero laread
operación solo vuelve cuando el valor cambia ... ¿tal vez sabes cómo hacer que no se bloquee? ¡gracias de cualquier manera!O_NONBLOCK
cuando abre el dispositivo y verifica el valor de retorno deread
. Si es negativo, la lectura se habría bloqueado o se habría producido algún otro error. Hay otras formas más complicadas de hacerlo sin sondeo si está incorporando esto en un programa más grande.Verifique dmesg y otros archivos de registro. Probablemente enchufar / desconectar dispara algunos mensajes particulares.
Luego, podría usar un demonio para analizar ese archivo de registro y detectar los eventos. Creo que sabes qué hacer desde este punto :)
fuente
Si lo haces
el volumen del altavoz se silenciará pero los auriculares seguirán funcionando. Desenchufar los auriculares significa que no hay sonido. Que es casi lo que quieres ...
Sin embargo ...
Si modifica el control de volumen, la configuración de volumen 'Altavoz' se configurará nuevamente. Esto se debe a que pulseaudio intenta ser inteligente con la configuración de volúmenes (consulte http://pulseaudio.org/wiki/PulseAudioStoleMyVolumes para obtener más información). Sin embargo, podemos evitar que se meta con los volúmenes.
Abra /etc/pulse/default.pa
y encuentra la línea
y cambiarlo a
Reinicie pulseaudio.
Ahora, si silencia el volumen del altavoz, cambiar el volumen maestro no lo afectará. Entonces los auriculares funcionarán pero el altavoz permanecerá en silencio.
fuente
Verifique los cambios en el socket ACPID, se puede hacer con la ayuda de Python o C o script de shell ( código de Python para controlar la reproducción y pausa del complemento de auriculares en rhythmbox). Verifique los cambios en el voltaje ACPID para detectar el enchufe del auricular y el enchufe del auricular. Sin embargo, se puede esperar una demora de segundos.
fuente
Pulseaudio tiene un módulo enviado por defecto que está diseñado para lograr exactamente esto:
http://pulseaudio.org/wiki/Modules#module-device-restore
fuente
Creo que puede lograr lo que necesita usando esto: https://bbs.archlinux.org/viewtopic.php?pid=1105458#p1105458
fuente