ALSA: Inbetriebnahme einer USB-Audio-Class-Soundkarte oder wie binde ich in Linux den DJ-Controller Pioneer DDJ-ERGO-V ein?

  • Servus ihr Linux-Fachleute,


    als notorischer Linux-Dauernoob möchte ich meinen DJ-Controller Pioneer DDJ-ERGO-V unter Linux einrichten, um ihn auf meinem Laptop und anschließend eventuell sogar auf einem RPi 4B (4GB) mit Mixxx zu betreiben. Das Ding läuft zwar plug+play unter Windows mit der Software Virtual DJ, aber ich will jetzt von Windows komplett weg. Bitte darüber keine Diskussion, es ist einfach so :)


    Solche DJ-Konsolen sind prinzipiell ein USB-Gerät mit Hub(?), an dem ein HID-Gerät, sozusagen eine aufgemotzte Tastatur (allerdings als MIDI-Gerät) und eine USB-Soundkarte mit zwei Stereo-Ausgängen (Masterausgang und Kopfhörerausgang zum Vorhören) und einem Stereoeingang (für Mikrofon oder externe Audioquelle) hängen. Die eigentliche Steuerung und Berechnung der Audiodaten erfolgt komplett in der DJ-Software.


    Teil 1, die Umsetzung (Mapping) der einzelnen Bedienelemente über MIDI dürfte in Linux out-of-the-box funktionieren. Unter Linux (Mint) wird auf meinem Laptop beim Anstecken des DDJ-ERGO-V an USB die Gerätedatei /dev/midi1 angelegt. Mit cat /dev/midi1 sieht man die Datenbytes, die von der DJ-Konsole an den PC gesendet werden. Ebenso ist ein schreibender Zugriff problemlos möglich. Die für's Mapping erforderlichen Werte sind in der Bedienungsanleitung ab Seite 25, "Liste der MIDI-Meldungen" aufgeführt. Für erste Tests habe ich ganz einfache C++-Programme erstellt und die waren prinzipiell erfolgreich.


    Mit Teil 2, der Audioanbindung habe ich Probleme:

    Die Soundeinheit des DDJ-ERGO-V wird unter Linux zwar als USB-Soundkarte nach USB-Audio-Class 1(?) für den Treiber snd-usb-audio erkannt, aber natürlich kommt kein Ton heraus, denn sonst wär's ja einfach.

    Dann hat es mich interessiert, wie der DDJ-ERGO-V im Inneren aufgebaut ist und habe ihn geöffnet, in der Hoffnung, auf einen linus-bekannten Chipsatz zu stoßen. Aber als USB-Baustein wurde der (mittlerweile von TI als deprecated klassifizierte) Baustein TUSB3200A verwendet. eigentlich ein cooles Teil mit integriertem 8052-µC. Daran hängen zwei DAC-Wandler AK4387 (Audioausgänge) und ein ADC-Wandler AK5358 (Audioeingang) und dahinter jeweils entsprechende Audio-OpAmps vom Typ RC4580:

    bzw. hier als Foto:



    und jetzt die Frage: Wie bindet man das in Linux ein? Die Anzahl der Audiokanäle wird nicht (richtig) erkannt.

    Momentan denke ich, dass es vielleicht funzt, wenn man die ALSA-Steuerdatei /etc/asound.conf bzw. ~/.asoundrc erstellt.

    Mit aplay fand ich heraus, dass die DDJ-ERGO-V-Soundkarte nativ eine WAV mit signed24bit-PWM verarbeitet. Allerdings wird die Anzahl der Audiokanäle nicht richtig erkannt



    Hier noch ein paar Dateien

  • Wenn man im alsamixer mit F6 die entsprechende Soundkarte auswählt, wird kein einziger Mixerregler angezeigt. Das vergaß ich zu schreiben.


    Heute abend will ich außerdem noch die Ausgabe von aplay -L und arecord -L nachreichen. Dort werden nämlich etliche Untergeräte angezeigt für Stereo, Surround5.1, Surround 7.1 etc. Wobei letztere eigentlich nicht sein können, da der DJ-Controller nur vier Mono-Audioausgänge hat.

  • alsamixer -D hw:2 liefert mit und ohne sudo

    --> also kein Rechteproblem.


    alsa-test gibt es auf meinem PC nicht, auch nicht nach sudo apt install alsa-utils: alsa-utils ist schon die neueste Version (1.1.0-0ubuntu5).

    Mit speaker-test -c 2 -Dhw:2 erhalte ich folgende Ausgabe:

    Code: Ausgabe von speaker-test -c 2 -Dhw:2
    speaker-test 1.1.0
    
    Wiedergabe-Gerät ist hw:2
    Stream-Parameter sind 48000 Hz, S16_LE, 2 Kanäle
    Verwende 16 Oktaven rosa Rauschen
    Sample-Format nicht unterstützt: Das Argument ist ungültig
    Fehler beim Setzen der Hardware-Parameter: Das Argument ist ungültig

    ebenso bei speaker-test -c 2 -Dhw:2,0

    EDIT: Bei speaker-test wird die falsche PCM-Kodierung gesetzt: S16_LE, ich bräuchte jedoch S24_3LE. Siehe im erstern Beitrag im Spoiler "aplay-Aufrufe"


    Hier noch die versprochenen Ausgabelisten von aplay/arecord -L:

    Mich wundert die Ausgabe der ganzen Surround-Geschichten wie surround71:CARD=DDJERGO,DEV=0.


    Mein Gefühl ist, dass vom Hersteller Pioneer auf dem EEPROM des DJ-Controllers für die USB-Enumeration ein Eintrag Standard USB-Audio-Class Device abgelegt wurde. Da unter Windows ja grundsätzlich spezifische Treiber mitgeliefert werden, tritt dann dort ein mögliches Kompatibilitätsproblem offenbar nicht auf. Aber für Linux habe ich keinen Treiber. Auf der mitgelieferten CD befinden sich nur welche für Windows XP/Vista/7 in Form einer Installations-EXE und (angeblich) welche für Mac OS X

  • EDIT: Ergänzung zur onboard-Soundkarte meines Laptops zum Vergleich:


    lspci  liefert für die onboard-Soundkarten Karte 0: SB [HDA ATI SB], Gerät 0: ALC259 Analog [ALC259 Analog] und Karte 1: HDMI [HDA ATI HDMI], Gerät 3: HDMI 0 [HDMI 0]:

    Code
    00:14.2 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 Azalia (Intel HDA) (rev 40)
        Subsystem: Toshiba America Info Systems SBx00 Azalia (Intel HDA)
        Flags: bus master, slow devsel, latency 32, IRQ 16
        Memory at ff700000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: <access denied>
        Kernel driver in use: snd_hda_intel
        Kernel modules: snd_hda_intel

    und

    Code
    01:05.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] RS880 HDMI Audio [Radeon HD 4200 Series]
        Subsystem: Toshiba America Info Systems RS880 HDMI Audio [Radeon HD 4200 Series]
        Flags: bus master, fast devsel, latency 0, IRQ 19
        Memory at ff510000 (32-bit, non-prefetchable) [size=16K]
        Capabilities: <access denied>
        Kernel driver in use: snd_hda_intel
        Kernel modules: snd_hda_intel

    wobei ich dies nicht eindeutig auf "Karte 0: SB" bzw. "Karte 1: HDMI" zuordnen kann:

    EDIT: steht doch in der ersten Zeile dabei. Wer lesen kann, ist im Vorteil! :wallbash:

  • Moin, in Ubuntu Bionic zu finden => /usr/sbin/alsa-info ==> /tmp/alsa-info.txt.vTHg0EvN9R


    Auszug aus dem durch alsa-info erzeugten alsa-info.txt

  • ich habe einen neuen Laptop (tuxedo BC1710), von daher sind die Ausgaben bezüglich der onboard-Komponenten zu den obigen Beiträgen leider nicht mehr konsistent.Aber auch mit dem relativ aktuellen Kernel 5.3.0-40-generic wird der DDJ-ERGO-V nicht richtig/vollständig erkannt.


    Ich habe jetzt mal /usr/sbin/alsa-info jeweils mit und ohne DDJ-ERGO-V durchgeführt, siehe Dateianhänge.


    Interessant ist jedoch, dass zwar aplay -L für den DDJ-ERGO-V folgendes liefert, u.a. diverse surround-Einstellungen:

    Aber das GUI-Programm PulseAudio-Lautstärkeregler erkennt zumindest irgendwie die Gesamtanzahl der Einzelkanäle: PIONEER DDJ-ERGO Analog Surround 4.0 (zwei Stereokanäle für Master Out und Kopfhörer):



    Auch auf dem neuen PC mit Kernel 5.3 erkennt das Programm alsamixer keine Regler:



    Ich bin damit zu folgender Zwischenerkenntnis gelangt:

    Wenn der DDJ-ERGO-V auf einem Linux-PC nur mit dem allgemeinen ALSA-Treiber snd-usb-audio laufen soll, also ohne spezifischen Treiber, dann kann es nur über die ALSA-Steuerdatei /etc/asound.conf bzw. ~/.asoundrc funktionieren. Aber da muss ich mich in die Details einlesen. So "einfach" wie die Software-Lautstärkeregelung beim HifiBerry MiniAmp wird es nicht werden....

  • Neue Erkenntnisse (aber es funzt immer noch nicht)


    Bezüglich ALSA habe ich mich bei ubuntuusers.de in folgende Artikel eingelesen:

    https://wiki.ubuntuusers.de/Soundsystem/

    https://wiki.ubuntuusers.de/ALSA/

    https://wiki.ubuntuusers.de/.asoundrc/

    https://wiki.ubuntuusers.de/Sound_Problembehebung/

    sowie ferner direkt auf der ALSA-Projektseite unter alsa-project.org, aber das ist mehr als kryptisch:

    https://alsa-project.org/wiki/Asoundrc

    https://www.alsa-project.org/a…alsa-lib/pcm_plugins.html


    Es hängt nach wie vor an der Kanalanzahl:


    cat /proc/asound/cards liefert

    Code: cat /proc/asound/cards
     0 [SB             ]: HDA-Intel - HDA ATI SB
                          HDA ATI SB at 0xff700000 irq 16
     1 [HDMI           ]: HDA-Intel - HDA ATI HDMI
                          HDA ATI HDMI at 0xff510000 irq 19
     2 [DDJERGO        ]: USB-Audio - PIONEER DDJ-ERGO
                          Pioneer PIONEER DDJ-ERGO at usb-0000:00:12.0-2, full speed

    Die Soundkarte wird also als Gerät 2 erkannt und kann in ALSA über den Hardwarenamen hw:2,0 oder nur hw:2 angesprochen werden.


    Zudem lese ich es aus den diversen Links oben so heraus, dass wenn lsusb -t folgendes (an Bus 3.Port 1) liefert,

    das USB-Audiogerät im Pioneer DDJ-ERGO-V wirklich als USB-Soundkarte nach dem Standard USB-Audio-Class erkannt und eingebunden wird. Ein spezieller (proprietärer) Treiber sollte nicht erforderlich sein. Bitte korrigieren, falls ich mich an dieser Stelle irren sollte. Dafür spricht auch, dass für MAC-OS (ebenfalls ein unixoides Betriebssystem) keine Treiber für dieses Gerät geliefert werden müssen.


    Allerdings liefert die Suche nach Ausgaben zu den Audiokanälen über lsusb -d 08e4: -v | grep han folgende Ausgabe mit der bisher von mir nicht beachteten Fehlermeldung:

    Code
    Couldn't open device, some information will be missing
            bNrChannels             4
            wChannelConfig     0x0000
            iChannelNames           7 
            bNrChannels             2
            wChannelConfig     0x0000
            iChannelNames           5 
            bNrChannels             4
            bNrChannels             2


    Ich habe die ~/.asoundrc gemäß dem Beispiel Kanal-Splitting auf ubuntuusers.de auf eine Vierkanal-Karte angepasst, siehe Dateianhang in diesem Beitrag.


    Hier noch die Ergebnisse diverser aplay-Kommandos: