PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mplayer, Soundblaster Live! 5.1 und die Sache mit dem SPDIF-Out



schnebeck
28.04.02, 12:48
Auf vielfachen Wunsch von Zaphod-B ;-) hier eine Kurzanleitung, wie ich das aktuelle mplayer-CVS dazu überredet habe, AC-Streams an einen externen Dekoder weiterzuleiten.

(Für Fortgeschrittene!)


Hintergrund
========

MPlayer bietet verschiedene Plugins an, die der Verarbeitung von Audio-Daten dienen. Auf diese Weise kann Kompatibilität zwischen verschiedensten Audio-Treibern der verschiedensten Audiosystemen hergestellt werden.

Eine der Aufgaben eines DVD-Players ist es, den AC3-Audio-Datenstream, der üblicherweise Dolby-5.1-codierten Mehrkanalton enthält nach Stereo oder Dolby-Surround umzuwandeln.

In der Zwischenzeit hat aber Dolby-5.1 auch in Soundkarten und exteren Verstärkern für das Heimkino-Wohnzimmer Einzug gehalten. Mplayer besitzt deshalb einen Codec, der nichts anderes Macht, als die Software-AC3-Codierung zu unterlassen und der Soundkarte unverfälscht zur Verfügung zu stellen. Hier fangen nun die Probleme an.

Leider gibt es keine verlässliche Methode, einer Soundkarte wie der SB Live! 5.1 zu sagen, dass sie _nicht_ ihren Hardware-Dekoder verwenden soll, sondern selbst die Daten unverfälscht zu einem externen Dekoder über den SPDIF-Ausgang der Karte weiterreichen soll. Es kusieren etwa 4 Lösungen, wie es gehen soll, aber leider wollte keine bei mir funktionieren, weder mit OSS-Treiber noch mit welchen von Alsa. Also habe ich mich drangemacht, das Problem für mich zu klären.

Erste Erkenntnis war, dass OSS keine wirklich Schnittstelle für eine solche Aufgabe bereitstellt. Es muss zuvor der Ausgang der Soundkarte individuell konfiguriert werden. Die OSS-Treiber zur Soundblaser bringen dafür extra Tools mit. Zusätzlich muss im Datenpaket an die Soundkarte eine spezielle "Magic-Number" eingefügt werden.

Alsa-CVS (0.9) dagegen, bietet eine vollständige Schnittstelle für kartenunabhängiges Digital-out! Da Alsa auch der künftige Linux-Standard sein wird, erscheint es sinnvoll OSS links liegen zu lassen und nur noch auf Alsa zu gehen. Deshalb könnte es sein, das meine Lösung auch mit anderen Karten, die Digital-Out bereitstellen, funktioniert.

Hier nun also, meine Lösung in Kurzform:


Digital-Out für eine SB Live! 5.1
====================

ALSA-CVS nach Anleitung compilieren und installieren.

Leider sind die ./configure-scripts für alsa-utils und alsa-tools fehlerhaft, sie suchen ein altes Alsa-0.5. Man lade also das Script und kommentiert, den Abruch (exit) wegen nicht gefundener Alsa-Bibliotheken einfach aus ;-)
Die Soundblaster Live! 5.1 wird mit
#*************************************************
# module : ALSA
#*************************************************
alias char-major-116 snd
alias snd-card-0 snd-emu10k1 snd_cards_limit=1
options snd-emu10k1 snd_index=0 snd_id="EMU10K1" snd_extout=0x1f0f

# OSS/Free portion
alias char-major-14 soundcore
alias sound-slot-0 snd-card-0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
options snd-pcm-oss snd_dsp_map=0 snd_adsp_map=3

in der /etc/modules.conf eingerichet.

Ein Start mit
/etc/rd.d/alsasound start
sollte folgende Ausgabe in /proc/asound/card0/emu10k1 liefern:
movie:~ # cat /proc/asound/card0/emu10k1
EMU10K1

Card : Creative
Internal TRAM (words) : 0x2000
External TRAM (words) : 0x8000

Effect Send Routing : A=0, B=1, C=2, D=3

Captured FX Outputs :
Output 00 [PCM Left]
Output 12 [MIDI Reverb]

All FX Outputs :
Output 00 [PCM Left]
Output 01 [PCM Right]
Output 02 [PCM Surround Left]
Output 03 [PCM Surround Right]
Output 04 [MIDI Left]
Output 05 [MIDI Right]
Output 06 [PCM Center]
Output 07 [PCM LFE]
Output 08 [???]
Output 09 [???]
Output 10 [???]
Output 11 [???]
Output 12 [MIDI Reverb]
Output 13 [MIDI Chorus]
Output 14 [???]
Output 15 [???]
Output 16 [???]
Output 17 [???]
Output 18 [ADC Left / CDROM S/PDIF Left]
Output 19 [ADC Right / CDROM S/PDIF Right]
Output 20 [MIC / Zoom Video Left]
Output 21 [Zoom Video Right]
Output 22 [S/PDIF Left]
Output 23 [S/PDIF Right]
Output 24 [???]
Output 25 [???]
Output 26 [???]
Output 27 [???]
Output 28 [???]
Output 29 [???]
Output 30 [???]
Output 31 [???]

S/PDIF Output 0
Professional Mode : no
Not Audio Data : no
Copyright : yes
Emphasis : none
Mode : 0
Category Code : 0x12
Generation Status : original
Source Mask : 0
Channel Number : left
Sample Rate : 48000Hz
Clock Accuracy : 1000ppm

S/PDIF Output 1
Professional Mode : no
Not Audio Data : no
Copyright : yes
Emphasis : none
Mode : 0
Category Code : 0x12
Generation Status : original
Source Mask : 0
Channel Number : left
Sample Rate : 48000Hz
Clock Accuracy : 1000ppm

S/PDIF Output 2/3
Professional Mode : no
Not Audio Data : no
Copyright : yes
Emphasis : none
Mode : 0
Category Code : 0x12
Generation Status : original
Source Mask : 0
Channel Number : left
Sample Rate : 48000Hz
Clock Accuracy : 1000ppm

CD-ROM S/PDIF
Professional Mode : yes
Not Audio Data : yes
Copyright : yes
Emphasis : 7
Mode : 3
Category Code : 0x7f
Generation Status : original
Source Mask : 15
Channel Number : 15
Sample Rate : 15Hz
Clock Accuracy : unknown
S/PDIF Locked : off
Rate Locked : off
Estimated Sample Rate : 0x0

General purpose S/PDIF
Professional Mode : yes
Not Audio Data : yes
Copyright : yes
Emphasis : 7
Mode : 3
Category Code : 0x7f
Generation Status : original
Source Mask : 15
Channel Number : 15
Sample Rate : 15Hz
Clock Accuracy : unknown
S/PDIF Locked : off
Rate Locked : off
Estimated Sample Rate : 0x0

Zoomed Video
Rate Locked : off
Estimated Sample Rate : 0x0

dieser Status wird gesichert:
alsactl store

Jetzt zu MPlayer, CVS ziehen und auf AMD-Maschinen _ohne_ Unterstützung für 3dnow, 3dnow_ex kompilieren. Dieser Rat kommt aus der Mailingliste von mplayer.

Abspielen von mp3/a52-softdecode/downsampling:

alsactl restore
mplayer -ao alsa9 /path/to/movie.xyz

Abspielen von AC3/spdif-Passthru
alsactrl restore
amixer sset "IEC958 Optical Raw" on
mplayer -ao alsa9:iec958:AES0=0x87,AES1=0x0,AES2=0x0,AES3=0x0 -ac hwac3 /path/to/movie.xyz

====================

Have fun!

Thorsten