La configurazione dell'audio di MythTV

Devo ammettere che la configurazione dell'audio di MythTV mi ha portato sul confine della decisione di rinunciare.

Il problema principale è che non riuscivo a capire la logica di funzionamento.

Fedora 12, come tutte le distribuzioni moderne, utilizza PulseAudio per la gestione del suono, ma inspiegabilmente PulseAudio sembrava smettere di funzionare appena mettevo in esecuzione MythTV.

Ci ho messo un pò per capire che MythTV sospende deliberatamente PulseAudio al suo avvio in quanto si basa sull'interfacciamento ALSA e, solo a necessità, fa partire PulseAudio.

Capito questo, nascono due distinti tipi di problemi e di tipologie di audio.

In ogni caso lanciamo MythTv (il frontend) ed andiamo nella sezione delle configurazioni scegliendo Advanced -> Impostazioni -> Generale

La terza videata

Audio Analogico

Qui ci ho perso un sacco di tempo.

I contenuti proposti nelle caselle disponibili nel Frontend NON COMBINANO MAI con la configurazione della macchina che si sta usando; e non ho trovato nessuna spiegazione "sicuramente funzionante" per la configurazione dell'audio, visto che l'audio funzionava perfettamente fino a quando non si lanciava MythTV, ma alla fine ecco la spiegazione:

MythTV "ragiona" con ALSA, quindi occorre adeguare la configurazione del tutto a ciò che ALSA "vede"

Scoprire i device ALSA presenti sulla macchina

Il comando aplay -L ci da la lista esatta dei device presenti sulla macchina.

Sul Pundit in questione ecco l'output:

aplay -L
front:CARD=IXP,DEV=0
ATI IXP, ATI IXP AC97
Front speakers
surround40:CARD=IXP,DEV=0
ATI IXP, ATI IXP AC97
4.0 Surround output to Front and Rear speakers
surround41:CARD=IXP,DEV=0
ATI IXP, ATI IXP AC97
4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=IXP,DEV=0
ATI IXP, ATI IXP AC97
5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=IXP,DEV=0
ATI IXP, ATI IXP AC97
5.1 Surround output to Front, Center, Rear and Subwoofer speakers
iec958:CARD=IXP,DEV=0
ATI IXP, ATI IXP IEC958 (AC97)
IEC958 (S/PDIF) Digital Audio Output
null
Discard all samples (playback) or generate zero samples (capture)
pulse
PulseAudio Sound Server
default
Default

Ora può sembrare da matti, ma la dicitura da utilizzare per la configurazione dell'output è ALSA: seguito dal nome completo, che ho evidenziato in grassetto, del device che desideriamo utilizzare.

Quindi se vogliamo utilizzare il surround 51, dovremo scrivere nel box di configurazione dell'audio:

ALSA:surround51:CARD=IXP,DEV=0

e non, come ho trovato in un sacco di esempi ALSA:surround51

E default e pulse, ovviamente, non funzionano!

Questa configurazione funziona benissimo e "manda" l'audio sui connettori analogici della scheda audio.

Attenzione che se si usa una scheda ALSA con più di 2 canali, occorre impostare l'upmix in quanto diversamente in presenza di meno canali di quelli specificati (ad esempio MP3 stereo) non si avrà audio

La stessa configurazione va riportata nelle impostazioni musica nella opportuna sezione di MythTV

E non dimenticare di controllare i livelli impostati nel mixer ALSA con il comando da terminale

alsamixer

Ecco di seguito l'immagine dell'intuitivo alsamixer:

alsamixer

Per spostarsi tra gli ingressi si usa il tasto TAB, i pulsanti + e - alzano ed abbassano il livello del canale selezionato, il pusante m mette o toglie il mute e con il pulsante F5 si seleziona la visualizzazione di tutti gli ingressi.

Il pulsante F6 permette di selezionare la scheda sulla quale desideriamo operare.

Audio Digitale

Presa SPDIFCome dicevo all'inizio il mio obbiettivo è ottenere un output interamente digitale, sempre e comunque indipendentemente dalla presenza della codifica digitale AC3 o del DTS, in questo modo posso interfacciare il Pundit con l'ampli ed acoltare indifferentemente audio, video o DVD senza dovere cambiare ingresso.

In pratica voglio collegarmi mediante un cavo TOSLINK in fibra ottica ad una presa SPDIF che è presente sul Pundit

E qui la cosa si è rivelata parzialmente più difficile.

Se il "gioco" dell'ALSA ormai era scoperto, e bastava utilizzare l'uscita ALSA:iec958:CARD=IXP,DEV0 per ottenere l'audio digitale sull'uscita ottica del Pundit, il problema era che la musica, campionata a 44 Khz e non a 48 Khz, non "passava" per errore di campionamento.

In pratica i video andavano benissimo, ma gli MP3 non funzionavano.

Dopo ore di ricerche ho trovato la soluzione: bastava creare un file .asounrc nella home dell'utente che avvia MythTV in modo da creare un alias dell'uscita digitale che accettasse, e all'occorrenza ricampionasse, il tutto

Ecco il file di configurazione .asoundrc che ho messo nella mia home:

##### Configuration File #####

# Override the default output used by ALSA. If you do not override the
# default, your default device is identical to the (unmixed) "analog" device
# shown below. If you prefer mixed and/or digital output, uncomment the
# appropriate four lines below (only one slave.pcm line).
#
# Note, also, that as of ALSA 1.0.9, "software" sound cards have been modified
# such that their default "default" device is identical to the "mixed-analog"
# device. Whether using an ALSA version before or after 1.0.9, it does no harm
# and has no affect on performance to redefine the device (even if the
# redefinition does not change anything). Also, by using this ALSA
# configuration file, you once again have access to unmixed analog output using
# the "analog" device.
pcm.!default {
type plug
## Uncomment the following to use (unmixed) "analog" by default
# slave.pcm "analog-hw"
## Uncomment the following to use "mixed-analog" by default
# slave.pcm "dmix-analog"
## Uncomment the following to use (unmixed) "digital" by default
slave.pcm "digital-hw"
## Uncomment the following to use "mixed-digital" by default
# slave.pcm "dmix-digital"
}

# Control device (mixer, etc.) for the card
ctl.!default {
type hw
card 0
}

# Alias for (converted) analog output on the card
# - This is identical to the device named "default"--which always exists and
# refers to hw:0,0 (unless overridden)
# - Therefore, we can specify "hw:0,0", "default", or "analog" to access analog
# output on the card
# - Note that as of ALSA 1.0.9, "software" sound card definitions redefine
# "default" to do mixing, meaning this device is different from "default" and
# allows playback while blocking other sound sources (until playback
# completes).
pcm.analog {
type plug
slave.pcm "analog-hw"
}

# Control device (mixer, etc.) for the card
ctl.analog {
type hw
card 0
}

# Alias for (converted) mixed analog output on the card
# - This will accept audio input--regardless of rate--and convert to the rate
# required for the dmix plugin (in this case 48000Hz)
# - Note that as of ALSA 1.0.9, "software" sound card definitions redefine
# "default" to do mixing, meaning this device is identical to "default" for
# "software" sound cards.
pcm.mixed-analog {
type plug
slave.pcm "dmix-analog"
}

# Control device (mixer, etc.) for the card
ctl.mixed-analog {
type hw
card 0
}

# Questa scheda converte digitalmente il sample rate in modo automatico
# Alias for (converted) digital (S/PDIF) output on the card
# - This will accept audio input--regardless of rate--and convert to the rate
# required for the S/PDIF hardware (in this case 48000Hz)
pcm.digital {
type plug
slave.pcm "digital-hw"
}

# Control device (mixer, etc.) for the card
ctl.digital {
type hw
card 0
}


# Alias for mixed (converted) digital (S/PDIF) output on the card
# - This will accept audio input--regardless of rate--and convert to the rate
# required for the S/PDIF hardware (in this case 48000Hz)
pcm.mixed-digital {
type plug
slave.pcm "dmix-digital"
}

# Control device (mixer, etc.) for the card
ctl.mixed-digital {
type hw
card 0
}

# The following devices are not useful by themselves. They require specific
# rates, channels, and formats. Therefore, you probably do not want to use
# them directly. Instead use of of the devices defined above.

# Il numero del device lo prendiamo da aplay -l ANALOGICO
# Alias for analog output on the card
# Do not use this directly--it requires specific rate, channels, and format
pcm.analog-hw {
type hw
card 0
# The default value for device is 0, so no need to specify
# - Uncomment one of the below or create a new "device N" line as appropriate
# for your sound card or
# device 1
# device 4
}

# Control device (mixer, etc.) for the card
ctl.analog-hw {
type hw
card 0
}

# Il numero del device lo prendiamo da aplay -l DIGITALE
# Alias for digital (S/PDIF) output on the card
# Do not use this directly--it requires specific rate, channels, and format


pcm.digital-hw {
type hw
card 0
device 1
# - Comment out "device 1" above and uncomment one of the below or create a
# new "device N" line as appropriate for your sound card or
# device 2
# device 4
}

# Control device (mixer, etc.) for the card
ctl.digital-hw {
type hw
card 0
}

# Direct software mixing plugin for analog output on the card
# Do not use this directly--it requires specific rate, channels, and format
pcm.dmix-analog {
type dmix
ipc_key 1234
slave {
pcm "analog-hw"
period_time 0
period_size 1024
buffer_size 4096
rate 48000
}
}

# Control device (mixer, etc.) for the card
ctl.dmix-analog {
type hw
card 0
}

# Direct software mixing plugin for digital (S/PDIF) output on the card
# Do not use this directly--it requires specific rate, channels, and format
pcm.dmix-digital {
type dmix
ipc_key 1235
slave {
pcm "digital-hw"
period_time 0
period_size 1024
buffer_size 4096
rate 48000
}
}

# Control device (mixer, etc.) for the card
ctl.dmix-digital {
type hw
card 0
}

Di conseguenza la videata di configurazione generale di MythTv diventa come segue:

Audio digitale MythTV

ALSA:plughw:0,1 indica il device 1 della scheda 0.

Questi dati si ottengono come detto sopra dal comando aplay -l che sul mio Pundit da quanto segue:

aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: IXP [ATI IXP], device 0: ATI IXP AC97 [ATI IXP AC97]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: IXP [ATI IXP], device 1: ATI IXP IEC958 [ATI IXP IEC958 (AC97)]
Subdevices: 0/1

Qui vediamo che il device 1 della scheda 0 è l'uscita digitale

Ecco quindi la configurazione della scheda Musica:

MythTv musica

Qui uso ALSA:pcm:digital che accetta qualsiasi sample rate.

Occorre infine verificare con il comando

alsamixer

che i livelli dei canali siano a posto e che l'uscita ottica non sia impostata a mute, in tale caso selezionarla e abilitarla con il tasto M.

Ok, con la musica siamo a posto, vediamo come siamo messi con la TV digitale.