Audio Devices / Channel Mapping

Sound, Digitalkameras, TV+Video und Spiele.
Antworten
s25a
Beiträge: 54
Registriert: 29.05.2016 10:59:57

Audio Devices / Channel Mapping

Beitrag von s25a » 27.06.2018 12:29:45

Hallo Zusammen,

ein bisschen spezieller zum Thema Audio Geräte unter Linux. Suche schon eine ganze Weile vielleicht hat sich jemand shconmal damit beschäftigt.
Rufe ich die AudioGeräte auf meinem System auf sehe ich folgendes:

Code: Alles auswählen

sov@audioserver:~$ sudo uname -r
4.9.0-6-amd64

sov@audioserver:~$ sudo aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC662 rev3 Analog [ALC662 rev3 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: DantePCIe [DantePCIe], device 0: DantePCIe [DantePCIe PCM]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
  
sov@audioserver:~$ sudo alsamixer
ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Access denied

cannot open mixer: Connection refused
Card 1 ist eine Dante Audio- Karte die 64 Kanäle hat. (Wobei das Thema mit jeder X-beliebigen Mehrkanal Karte das gleich ist- Karte 0 PCH hat beispielsweise auch 8 Kanäle)
Laut Hersteller sind diese auch separat ansprechbar. Leider ohne weitere Beschreibung.
Nun würde ich gerne die unterschiedlichen Kanäle nutzen (z.B. Kanal 1+2 Raum 1 / Kanal 3+4 Raum 2 usw.). Weiß aber nicht wie ich diese abrufen soll.

Ich habe zusätzlich noch einen Pulseaudio Server installiert das Gerät wird hier auch als PulseAudio Device erkannt.

Hat jemand eine Idee einen Link wie ich am Besten damit anfange.
Zudem bekomme ich noch einen Fehler im Alsamixer den ich nicht ganz zuordnen kann. Jemand eine Idee?

Sorry für die sehr offene Frage aber momentan fehlt mir gänzlich die Idee.

Viele Grüße und Danke

S

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Audio Devices / Channel Mapping

Beitrag von rendegast » 27.06.2018 14:20:41

$ sudo alsamixer
ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Access denied

cannot open mixer: Connection refused
Versuch das mal nicht als sudo-root.
Dessen pulseaudio ist zu dem Punkt wohl nicht gestartet.


Hier wird mir als normaler Benutzer bei 'alsamixer' das PA-dummy-device angezeigt,
als sudo-root das soundblaster Audigy.


---------------------------------------------------------------
Bei mir ist /etc/asound.conf leer, die Konfiguration erfolgt über pulseaudio-Tools.
(abgesehen von den Vorgaben in /usr/share/alsa/)
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

s25a
Beiträge: 54
Registriert: 29.05.2016 10:59:57

Re: Audio Devices / Channel Mapping

Beitrag von s25a » 27.06.2018 14:30:48

Hi,

vielen Dank für deine schnelle Antwort. Hab jetzt mal den PulseAudio entfernt nun kann ich auch den Alsamixer wieder aufrufen.
Was mich jetzt allerdings etwas verwundert ist dass ich bei Auswahl meiner Dante Karte nichts angezeigt bekomme (siehe Screenshots) bei meinen anderen Audiokarten aber durchaus die Unterkanäle.

gallery/image/1805
gallery/image/1804
gallery/image/1803

Viele Grüße

S

s25a
Beiträge: 54
Registriert: 29.05.2016 10:59:57

Re: Audio Devices / Channel Mapping

Beitrag von s25a » 27.06.2018 14:34:46

Hallo nochmals,

gerade vor einer Minute habe ich dazu einen Hinweis vom Hersteller bekommen:
der Treiber stellt nur das reine 128 Kanal IO PCM Interface zur Verfügung.
Ein Mixerinterface existiert dazu nicht.
Sie haben entweder die Möglichkeit, Kanale über die asoundrc zu definieren, mehr dazu hier
https://wiki.ubuntuusers.de/.asoundrc/
Weiter unten gibt es auch Beispiele für die Auftrennung von 8-Kanal Karten in mehrere unabhängige Stereogeräte.
Dem werde ich mich mal widmen.

Viele Grüße

S

Benutzeravatar
smutbert
Moderator
Beiträge: 8315
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Audio Devices / Channel Mapping

Beitrag von smutbert » 27.06.2018 15:01:20

Ein Tipp:
Entscheide dich für Pulseaudio oder Alsa (und verwende möglichst nur die zugehörigen Tools und Konfigurationsdateien und deinstalliere Pulseaudio, wenn du Alsa verwenden willst), damit sich die beiden nicht in die Quere kommen.

(Grundsätzlich lassen sich Pulseaudio und Alsa natürlich gleichzeitig verwenden, allein schon deshalb, weil Pulseaudio gewissermaßen auf Alsa aufsetzt, aber besonders am Anfang hat man es leichter, wenn man sich für eines von beiden entscheidet.)

s25a
Beiträge: 54
Registriert: 29.05.2016 10:59:57

Re: Audio Devices / Channel Mapping

Beitrag von s25a » 27.06.2018 16:38:35

Hallo nochmals,
Ein Tipp:
Entscheide dich für Pulseaudio oder Alsa (und verwende möglichst nur die zugehörigen Tools und Konfigurationsdateien und deinstalliere Pulseaudio, wenn du Alsa verwenden willst), damit sich die beiden nicht in die Quere kommen.
Ja das ist eine super Idee. Habe Pulse entfernt. Danke dafür.

Nun habe ich mich etwas in den Artikel eingelesen aber das Ganze gestaltet sich doch erheblich schwieriger als erwartet. Ich habe das 8 Kanal Beispiel aus dem Artikel genommen und folgendes angelegt:

nano /home/sov/.asoundrc

Code: Alles auswählen

pcm.snd-card {
         type hw
         card 1
         device 0
}

ctl.snd-card {
         type hw
         card 1
         device 0
}

pcm.dmixer {
    type dmix
    ipc_key 1024
    ipc_perm 0666
    slave.pcm "snd-card"
    slave {
        period_time 0
        period_size 1024
        buffer_size 4096
        rate 96000
        channels 8
    }
    bindings {
        0 0
        1 1
        2 2
        3 3
        4 4
        5 5
        6 6
        7 7
    }
}

pcm.!default {
    type plug
    slave.pcm "dmixer"
}

pcm.stereo1 {
    type plug
    slave {
        pcm "dmixer"
        channels 8
    }
    ttable.0.0 1
    ttable.1.1 1
}

pcm.stereo2 {
    type plug
    slave {
        pcm "dmixer"
        channels 8
    }
    ttable.0.2 1
    ttable.1.3 1
}

pcm.stereo3 {
    type plug
    slave {
        pcm "dmixer"
        channels 8
    }
    ttable.0.4 1
    ttable.1.5 1
}

pcm.stereo4 {
    type plug
    slave {
        pcm "dmixer"
        channels 8
    }
    ttable.0.6 1
    ttable.1.7 1
}
Dann meine Alsa neu geladen mit:

Code: Alles auswählen

sudo /etc/init.d/alsa-utils reload
Nun sehe ich in den APLAY weitere Geräte :-) Das ist schon mal ein Großer Fortschritt.

Da ich damit noch keinerlei Erfahrungen habe wäre die Frage:

- Passt das jetzt so aus diesem Beispiel oder kann man da noch die ein oder andere Verbesserung einbauen
- Das mit dem Resampler benötige ich nicht. Der soll einfach das ausgeben was er rein bekommt. Weiß jemand wie man das ändert?

Viele Grüße

S

Code: Alles auswählen

sov@audioserver:~/programs$ aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
dmixer
default
stereo1
stereo2
stereo3
stereo4
sysdefault:CARD=PCH
    HDA Intel PCH, ALC662 rev3 Analog
    Default Audio Device
front:CARD=PCH,DEV=0
    HDA Intel PCH, ALC662 rev3 Analog
    Front speakers
surround21:CARD=PCH,DEV=0
    HDA Intel PCH, ALC662 rev3 Analog
    2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=PCH,DEV=0
    HDA Intel PCH, ALC662 rev3 Analog
    4.0 Surround output to Front and Rear speakers
surround41:CARD=PCH,DEV=0
    HDA Intel PCH, ALC662 rev3 Analog
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=PCH,DEV=0
    HDA Intel PCH, ALC662 rev3 Analog
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=PCH,DEV=0
    HDA Intel PCH, ALC662 rev3 Analog
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=PCH,DEV=0
    HDA Intel PCH, ALC662 rev3 Analog
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
hdmi:CARD=PCH,DEV=0
    HDA Intel PCH, HDMI 0
    HDMI Audio Output
hdmi:CARD=PCH,DEV=1
    HDA Intel PCH, HDMI 1
    HDMI Audio Output
dmix:CARD=PCH,DEV=0
    HDA Intel PCH, ALC662 rev3 Analog
    Direct sample mixing device
dmix:CARD=PCH,DEV=3
    HDA Intel PCH, HDMI 0
    Direct sample mixing device
dmix:CARD=PCH,DEV=7
    HDA Intel PCH, HDMI 1
    Direct sample mixing device
dsnoop:CARD=PCH,DEV=0
    HDA Intel PCH, ALC662 rev3 Analog
    Direct sample snooping device
dsnoop:CARD=PCH,DEV=3
    HDA Intel PCH, HDMI 0
    Direct sample snooping device
dsnoop:CARD=PCH,DEV=7
    HDA Intel PCH, HDMI 1
    Direct sample snooping device
hw:CARD=PCH,DEV=0
    HDA Intel PCH, ALC662 rev3 Analog
    Direct hardware device without any conversions
hw:CARD=PCH,DEV=3
    HDA Intel PCH, HDMI 0
    Direct hardware device without any conversions
hw:CARD=PCH,DEV=7
    HDA Intel PCH, HDMI 1
    Direct hardware device without any conversions
plughw:CARD=PCH,DEV=0
    HDA Intel PCH, ALC662 rev3 Analog
    Hardware device with all software conversions
plughw:CARD=PCH,DEV=3
    HDA Intel PCH, HDMI 0
    Hardware device with all software conversions
plughw:CARD=PCH,DEV=7
    HDA Intel PCH, HDMI 1
    Hardware device with all software conversions
sysdefault:CARD=DantePCIe
    DantePCIe, DantePCIe PCM
    Default Audio Device
dmix:CARD=DantePCIe,DEV=0
    DantePCIe, DantePCIe PCM
    Direct sample mixing device
dsnoop:CARD=DantePCIe,DEV=0
    DantePCIe, DantePCIe PCM
    Direct sample snooping device
hw:CARD=DantePCIe,DEV=0
    DantePCIe, DantePCIe PCM
    Direct hardware device without any conversions
plughw:CARD=DantePCIe,DEV=0
    DantePCIe, DantePCIe PCM
    Hardware device with all software conversions

Benutzeravatar
smutbert
Moderator
Beiträge: 8315
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Audio Devices / Channel Mapping

Beitrag von smutbert » 27.06.2018 23:09:54

s25a hat geschrieben: ↑ zum Beitrag ↑
27.06.2018 16:38:35
[…]
- Passt das jetzt so aus diesem Beispiel oder kann man da noch die ein oder andere Verbesserung einbauen
- Das mit dem Resampler benötige ich nicht. Der soll einfach das ausgeben was er rein bekommt. Weiß jemand wie man das ändert?
[…]
Also wenn es funktioniert, dann passt es auch :wink: Eventuell kannst du noch das eine oder andere bedenken. Bei deiner jetzigen Konfiguration könnte eine Wiedergabe zB so ablaufen

Programmpcm.stereo1pcm.dmixerpcm.snd-card (hw:1)
  1. Konvertierungen (Samplerate, -format, Zahl der Kanäle)
    Darauf kannst du vielleicht gar nicht so einfach verzichten. dmixer muss die Audiodaten in einem Format liefern, das die Soundkarte und deren Treiber unterstützt, macht selbst aber keinerlei Resampling oder ähnliches. Du hast das Format sogar manuell festgelegt auf 8 Kanäle und 96 kHz, also kann und muss sich dmixer mit der Soundkarte nur mehr über das Sampleformat (8, 16, 24 Bit, little oder big endian,…) einigen.

    Selbst wenn das Format von dmixer noch nicht so festgelegt wäre, müssten die Audioformate der einzelnen pcm.stereo*-Ausgaben immer noch übereinstimmen, damit sie dmixer miteinander „mischen“ und weiterleiten kann.

    Wenn mich meine vage Erinnerung an vergangene Threads nicht täuscht (viewtopic.php?f=25&t=147913) kommt dazu noch die Tatsache, dass die einzelnen pcm.stereo* 8 Kanäle erwarten bzw. liefern müssen, aber als Eingabe bei einer Stereodatei natürlich nur 2 bekommen.
    Voerst würde ich also lieber nicht auf das plug-Plugin verzichten, das für das Konvertieren zuständig ist.

    Bei den 8 Kanälen wundert es mich übrigens ein bisschen, dass/wenn es funktioniert. Die meisten Soundkarten unterstützen meiner Erfahrung nach meist nur entweder 2 oder alle, also in deinem Fall 64 Kanäle.
  2. Definitionen
    Du hast einige pcm.* und ctl.*, die du gar nicht verwendest bzw. auf die du leicht verzichten könntest. pcm.- und ctl.snd-card könntest du zum Beispiel weglassen und in dmix direkt die entsprechende Soundkarte eintragen.

    Außerdem ist in der Konfiguration als Ziel hw:1 eingetragen, du verlässt dich damit also auf die Nummerierung der Soundkarten. Die erfolgt aber mehr oder weniger zufällig allein durch die Reihenfolge in der die Treiber geladen werden und kann sich bei einem Kernelupdate oder sogar einfach nur so von Systemstart zu Systemstart ändern.
    Deshalb ist es meistens besser die Namen der Soundkarten einzutragen, hier also hw:DantePCIe.
  3. pcm.default und ctl.default
    Hier wird ja definiert was passieren soll, wenn ein Programm Ton ausgibt und nirgendwo speziell angegeben wird über welche Soundkarte der Ton wiedergegeben werden soll.
    Eigentlich gehe ich davon aus, dass eine solche Definition bei einer Soundkarte, die wie hier mit 8 Kanälen vier verschiedene Räume mit je einem Stereosignal versorgen soll, nicht sehr sinnvoll ist, deshalb habe ich das bei meinem Konfigurationsvorschlag am Ende des Beitrags einfach weggelassen.
    Sollte das ein Trugschluss sein, könntest du, wenn die 64-Kanal-Karte der default sein sollte, stattdessen dmixer weglassen und dmix direkt in pcm.default eintragen.
  4. alsa-utils
    Das

    Code: Alles auswählen

    $ sudo /etc/init.d/alsa-utils reload
    das du ausgeführt hast, hat nichts mit der Konfiguration in »~/.asoundrc« oder der systemweiten Variante davon »/etc/asound.conf« zu tun und war überflüssig.
    Früher einmal war das anders und die Alsa-Startskripte haben mehr gemacht, aber inzwischen werden beim Ausführen des Startskripts lediglich die Lautstärkeeinstellungen gespeichert bzw. wiederhergestellt.
Testen würde ich, falls du das noch nicht gemacht hast, zum Beispiel mit aplay (natürlich wahlweise auch mit beliebigen anderen Mono- oder Stereo-wav-dateien)

Code: Alles auswählen

$ aplay -D stereo1 /usr/share/sounds/alsa/Front_Left.wav
Hier habe ich noch eine entsprechend meinen Vorschlägen angepasste Version deiner Konfiguration angehängt (getestet habe ich allerdings nichts - das mache ich erst, wenn du sagst, dass es nicht funktioniert :wink: ):
NoPaste-Eintrag40370

Benutzeravatar
smutbert
Moderator
Beiträge: 8315
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Audio Devices / Channel Mapping

Beitrag von smutbert » 09.07.2018 22:02:19

Falls sich jemand über meine Antwort wundert, für die es scheinbar keinen Anlaß gibt: Der TE, s25a hat mir eine PN geschrieben, dass es noch nicht funktioniert.


Ich würde einmal damit anfangen, ob Soundkarte/Treiber das verwendete Audioformat unterstützen. Ich kenne leider keinen Weg zuverlässig und einfach festzustellen welche Audioformate ein Audiogerät unterstützt. Am nächsten dran wäre noch »alsa-capabilities« [1], aber da bekommt man nur eine Liste der unterstützten Sampleformate.
Deshalb würde ich einfach andersherum vorgehen und testen ob das Format aus dem letzten Versuch – also eine Samplerate 96 kHz bei 8 Kanälen – funktioniert, wobei ich im Gegensatz zur bisherigen Konfiguration auch das Sampleformat festlegen würde (auf S32_LE)

Code: Alles auswählen

$ aplay -D hw:DantePCIe -c 8 -r 96000 -f S32_LE /dev/zero
Ton soll dabei gar keiner erklingen, aber wenn es keine Fehlermeldung gibt, wissen wir, dass das Format funktioniert und wenn doch, wäre die Meldung natürlich interessant und obendrein eventuell ein zweiter Test mit den nativen 64 Kanälen (wie gesagt ich bin es so gewohnt, dass Soundkarten nur die volle Kanalzahl und zusätzlich vielleicht noch Stereo mit 2 Kanälen unterstützen, aber ich hatte es auch noch nie mit 64-kanäligen Kalibern zu tun).

Code: Alles auswählen

$ aplay -D hw:DantePCIe -c 64 -r 96000 -f S32_LE /dev/zero
Achso und die beiden Befehle laufen, wenn sie funktionieren, endlos weiter. Abbrechen musst du sie, wenn du sicher bist, dass sie laufen nach ein paar Sekunden selbst mit <Strg>+<C> (^C).

[1] https://lacocina.nl/detect-alsa-output-capabilities

s25a
Beiträge: 54
Registriert: 29.05.2016 10:59:57

Re: Audio Devices / Channel Mapping

Beitrag von s25a » 09.07.2018 22:32:34

Hallo Zusammen,

vielen Dank an @smutbert für die Tipps. Hat sich etwas überschnitten. Hab noch ein paar Sachen rausgefunden:

1) Zunächst einmal habe ich die das ganze von der /home/User/.asoundrc in die /etc/asound.conf gepackt. Bin über einen Beitrag gestoßen in einem anderem Forum und dort war das die Lösung. Und tatsächlich das Ganze hat funktioniert :-)
Es hat immer wieder ALSA Fehler gegeben insbesondere bei höheren Sampling-Raten. Habe dann etwas mit den Parametern gespielt und bin auch hier einen Schritt weiter.
2) Ziel war es möglichst ohne Konvertierung und resampling zu arbeiten also habe ich das Skript von smubert etwas angepasst sieht jetzt so aus:
Habe die Zeile "rate 96000" entfernt und die Buffer_size auf 16384 erhöht. Nun sind auch die ALSA Fehler weg.

3) Ich konnte auch die Kanäle 1-8 im Dante Routing zuordnen und sogar während des Abspielens umverteilen. 2 mal ist mir dabei allerdings der Player abgestürzt. Hier habe ich allerdings schon eine Vermutung und hoffe dass ich das in den nächsten 2-3 Tagen lösen kann.

Leider habe ich derzeit nur 4 Endgeräte da zum Testen aber werde noch 4 dazu bekommen dann kann ich auch 16 Kanäle Testen. Auf jeden Fall eine sehr spannende Sache:

Code: Alles auswählen

pcm.dmixer {
    type dmix
    ipc_key 1024
    ipc_perm 0666
    slave {
	pcm "hw:DantePCIe"
        period_time 0
        period_size 1024
        buffer_size 16384
        channels 8
    }
    bindings {
        0 0
        1 1
        2 2
        3 3
        4 4
        5 5
        6 6
        7 7
    }
}

pcm.stereo1 {
    type plug
    slave {
        pcm "dmixer"
        channels 8
    }
    ttable.0.0 1
    ttable.1.1 1
}

pcm.stereo2 {
    type plug
    slave {
        pcm "dmixer"
        channels 8
    }
    ttable.0.2 1
    ttable.1.3 1
}

pcm.stereo3 {
    type plug
    slave {
        pcm "dmixer"
        channels 8
    }
    ttable.0.4 1
    ttable.1.5 1
}

pcm.stereo4 {
    type plug
    slave {
        pcm "dmixer"
        channels 8
    }
    ttable.0.6 1
    ttable.1.7 1
}

Benutzeravatar
smutbert
Moderator
Beiträge: 8315
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Audio Devices / Channel Mapping

Beitrag von smutbert » 09.07.2018 22:43:27

zu deinem 2.)
Liegt alles, was du abspielen willst mit derselben Samplingrate vor?

Dann würde es nämlich deinem Vorhaben unter Umständen mehr entgegenkommen diese Samplerate einzutragen. Trägst du wie jetzt keine ein, liegt der default von dmix glaube ich bei 48 kHz und wenn du jetzt zum Beispiel Musik abspielen willst, die häufig mit 44100 Hz Samplerate vorliegt, wird auch jetzt bei dir geresampelt.

s25a
Beiträge: 54
Registriert: 29.05.2016 10:59:57

Re: Audio Devices / Channel Mapping

Beitrag von s25a » 10.07.2018 08:07:50

Hi,

nein es liegt alles in unterschiedlichsten Formaten vor 44.1 bis 192Khz. Das meiste in 48Khz oder 96Khz.
Ist es denn möglich das Ganze ohne resampling durchzuführen?

Vielen Dank und Viele Grüße

S

Benutzeravatar
smutbert
Moderator
Beiträge: 8315
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Audio Devices / Channel Mapping

Beitrag von smutbert » 10.07.2018 11:33:05

Nein, denn mit dmix bedienst du die Soundkarte mit einem einzigen Audiodatenstrom mit einer bestimmten Samplerate, einem bestimmten Sampleformat und eben zum Beispiel 8 Kanälen.

pcm.stereo1, pcm.stereo2, ... müssen mit pcm.dmixer das Format aushandeln, wobei das dmix bei deiner jetzigen Konfiguration auf 8 Kanäle, den dmix-default von 48 kHz Samplerate und ein von der Hardware unterstütztes Sampleformat (per default vermutlich S16_LE oder S32_LE) besteht.
Anwendungen können beliebige Formate an pcm.stereo1, pcm.stereo2, ... liefern und die konvertieren die Audiosignale dann in das gewünschte Format. Die ttable-Einträge von pcm.stereo1, pcm.stereo2, ... sorgen dafür, dass das ursprüngliche Stereosignal der jeweiligen Anwendung auf den beiden gewünschten der ausgehenden 8 Kanäle liegt und dass die jeweils restlichen 6 Kanäle still sind.

pcm.dmixer mischt diese verschiedenen 8 kanaligen Signale nur noch zu einem einzigen, was in diesem Fall natürlich trivial ist, weil jeweils 6 Kanäle der zu mischenden Signale stumm sind.

s25a
Beiträge: 54
Registriert: 29.05.2016 10:59:57

Re: Audio Devices / Channel Mapping

Beitrag von s25a » 11.07.2018 15:25:47

Hallo,

vielen Dank für die weiteren Infos. Mein Player hat ebenfalls einen guten Resampler. Damit nicht unnötigerweise mehrfach gewandelt wird wäre doch das vernünftigste:

Musik (beliebiges Format) ---> Player resampelt (wenn notwendig) auf eine festgelegt Rate - Z.B. 48Khz

Dann wird an die Karte übergeben dort ist die festgelegt Rate eingetragen. Dann dürfte doch dort nichts mehr passieren an umwandlungen oder?
Bzw. des Samplingformates bin ich mir noch nicht ganz sicher....Gibt es denn eine Möglichkeit zu sehen was rein und wieder rauskommt um auch hier unnötige Wandlungen zu vermeiden?

Viele Grüße und Danke

S

Benutzeravatar
smutbert
Moderator
Beiträge: 8315
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Audio Devices / Channel Mapping

Beitrag von smutbert » 11.07.2018 16:08:18

Beim Sampleformat sieht es ja grundsätzlich schon etwas freundlicher aus:
Beim Konvertieren zu größeren Sampletiefen, etwa von 16 auf 24 Bit, werden nur die niederwertigen Bit mit 0 ergänzt, es wird dadurch also nichts schlechter. Nur zu kleineren Sampletiefen hin werden die niederwertigeren Bit zwangsweise abgeschnitten.
Ob die Bit umsortiert werden müssen (LittleEndian vs BigEndian) spielt sowieso keine Rolle und die Gleitkommaformate sind meines Wissens auch nur für die Bearbeitung interessant.

Von dem her wärst du mit S32_LE, das von den meisten Soundkarten unterstützt wird wahrscheinlich am besten beraten (auch wenn ich das Befürfnis nach mehr als 44100 Hz und 16 Bit nicht nachvollziehen kann).

Um im Vorhinein herauszufinden was die Soundkarte unterstützt kannst du die Sampleformate einzeln ausprobieren, wie ich es bereits beschrieben habe

Code: Alles auswählen

$ aplay -D hw:DantePCIe -c 8 -r 48000 -f S16_LE /dev/zero
$ aplay -D hw:DantePCIe -c 8 -r 48000 -f S24_LE /dev/zero
$ aplay -D hw:DantePCIe -c 8 -r 48000 -f S32_LE /dev/zero
(wird das Format nicht unterstützt gibt es eine Fehlermeldung)
oder du führst das Skript »alsa-capabilities« aus, das ich bereits verlinkt habe:
https://lacocina.nl/detect-alsa-output-capabilities

Code: Alles auswählen

$ alsa-capabilities -a hw:1,0
Du kannst das gewünschte Format dann folgendermaßen eintragen

Code: Alles auswählen

pcm.dmixer {
    type dmix
    ipc_key 1024
    ipc_perm 0666
    slave {
	pcm "hw:DantePCIe"
        period_time 0
        period_size 1024
        buffer_size 16384
        channels 8
        format S32_LE
…
Natürlich kannst du auch während einer beliebigen Wiedergabe nachsehen in welchem Format die Audiodaten übergeben werden

Code: Alles auswählen

$ cat /proc/asound/DantePCIe/pcm0p/sub0/hw_params
(da sollte dann alles stehen, angefangen mit der Zahl der Kanäle, über die Samplerate bis zum Sampleformat. Eventuell sieht der Pfad im procfs bei dir etwas anders aus)



und schließlich noch der Hinweis, dass auch Alsa mit dem Paket Debianlibasound2-plugins über sehr gute Resampling-Algorithmen verfügt. Dabei wird libsamplerate verwendet, für das unter anderem die Voreinstellungen samplerate, samplerate_medium und samplerate_best zur Verfügung stehen, die du mit einer zusätzlichen Zeile in der »/etc/asound.conf« oder »~/.asoundrc« einstellen kannst

Code: Alles auswählen

defaults.pcm.rate_converter "samplerate_best"
(das betrifft dann alle Konvertierungen, die das plug-Plugin und das rate-Plugin machen)

s25a
Beiträge: 54
Registriert: 29.05.2016 10:59:57

Re: Audio Devices / Channel Mapping

Beitrag von s25a » 11.07.2018 19:36:09

Hi,

nochmals vielen Dnak für die schnelle Antwort :-)

Folgendes dazu

Code: Alles auswählen

$ aplay -D hw:DantePCIe -c 8 -r 48000 -f S16_LE /dev/zero
$ aplay -D hw:DantePCIe -c 8 -r 48000 -f S24_LE /dev/zero
$ aplay -D hw:DantePCIe -c 8 -r 48000 -f S32_LE /dev/zero
-->

Code: Alles auswählen

sov@audioserver:~/programs$ aplay -D hw:DantePCIe -c 8 -r 48000 -f S32_LE /dev/zero
Playing raw data '/dev/zero' : Signed 32 bit Little Endian, Rate 48000 Hz, Channels 8
aplay: set_params:1294: Access type not available
Kommt bei allen 3 Abfragen bin mir jetzt nicht ganz sicher ob ich da noch was anpassen müsste.

Das Script hatte ich übrigens getestet - sorry vergessen letztes Mal anzuhängen auch hier Fehler:

Code: Alles auswählen

 bash <(wget -q -O - "https://lacocina.nl/alsa-capabilities")
 1) Analog alsa audio output interface `hw:0,0'
 - device name       = PCH
 - interface name    = ALC887-VD Analog
 - usb audio class   = (n/a)
 - character device  = /dev/snd/pcmC0D0p
 - encoding formats  = S16_LE, S32_LE
 - monitor file      = /proc/asound/card0/pcm0p/sub0/hw_params
 - stream file       = (n/a)

 2) Analog alsa audio output interface `hw:0,1'
 - device name       = PCH
 - interface name    = ALC887-VD Digital
 - usb audio class   = (n/a)
 - character device  = /dev/snd/pcmC0D1p
 - encoding formats  = S16_LE, S32_LE
 - monitor file      = /proc/asound/card0/pcm1p/sub0/hw_params
 - stream file       = (n/a)

 3) Analog alsa audio output interface `hw:0,3'
 - device name       = PCH
 - interface name    = HDMI 0
 - usb audio class   = (n/a)
 - character device  = /dev/snd/pcmC0D3p
 - encoding formats  = S16_LE, S32_LE, IEC958_SUBFRAME_LE
 - monitor file      = /proc/asound/card0/pcm3p/sub0/hw_params
 - stream file       = (n/a)

 4) Analog alsa audio output interface `hw:0,7'
 - device name       = PCH
 - interface name    = HDMI 1
 - usb audio class   = (n/a)
 - character device  = /dev/snd/pcmC0D7p
 - encoding formats  = S16_LE, S32_LE, IEC958_SUBFRAME_LE
 - monitor file      = /proc/asound/card0/pcm7p/sub0/hw_params
 - stream file       = (n/a)

 5) Analog alsa audio output interface `hw:0,8'
 - device name       = PCH
 - interface name    = HDMI 2
 - usb audio class   = (n/a)
 - character device  = /dev/snd/pcmC0D8p
 - encoding formats  = S16_LE, S32_LE, IEC958_SUBFRAME_LE
 - monitor file      = /proc/asound/card0/pcm8p/sub0/hw_params
 - stream file       = (n/a)

 6) Analog alsa audio output interface `hw:1,0'
 - device name       = DantePCIe
 - interface name    = DantePCIe
 - usb audio class   = (n/a)
 - character device  = /dev/snd/pcmC1D0p
 - encoding formats  =
 - monitor file      = /proc/asound/card1/pcm0p/sub0/hw_params
 - stream file       = (n/a)
Habe jetzt die rate und das Format in die /etc/asound eingetragen - sieht jetzt so aus:

Code: Alles auswählen

pcm.dmixer {
    type dmix
    ipc_key 1024
    ipc_perm 0666
    slave {
        pcm "hw:DantePCIe"
        period_time 0
        period_size 1024
        buffer_size 16384
        rate 96000
        channels 8
        format S32_LE
    }
    bindings {
        0 0
        1 1
        2 2
        3 3
        4 4
        5 5
        6 6
        7 7
    }
}

pcm.stereo1 {
    type plug
    slave {
        pcm "dmixer"
        channels 8
    }
    ttable.0.0 1
    ttable.1.1 1
}

pcm.stereo2 {
    type plug
    slave {
        pcm "dmixer"
        channels 8
    }
    ttable.0.2 1
    ttable.1.3 1
}

pcm.stereo3 {
    type plug
    slave {
        pcm "dmixer"
        channels 8
    }
    ttable.0.4 1
    ttable.1.5 1
}

pcm.stereo4 {
    type plug
    slave {
        pcm "dmixer"
        channels 8
    }
    ttable.0.6 1
    ttable.1.7 1
}
Trotzdem sehe ich da nur 48000 Khz.

Code: Alles auswählen

cat /proc/asound/DantePCIe/pcm0p/sub0/hw_params
access: MMAP_NONINTERLEAVED
format: S32_LE
subformat: STD
channels: 8
rate: 48000 (48000/1)
period_size: 1024
buffer_size: 16384
Vielen Dank und Grüße

S

Benutzeravatar
smutbert
Moderator
Beiträge: 8315
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Audio Devices / Channel Mapping

Beitrag von smutbert » 12.07.2018 00:20:16

Damit ist zwar klar, dass die 32 Bit kein Problem sind, aber das mit der Samplerate ist merkwürdig und die Fehlermeldung von aplay ist (für mich) ungewohnt. Versuch es einmal mit diesen Varianten und poste die Ausgabe:

Code: Alles auswählen

$ aplay -M -D hw:DantePCIe -d 2 -c 8 -r 48000 -f S32_LE /dev/zero
$ aplay -M -D hw:DantePCIe -d 2 -c 8 -r 96000 -f S32_LE /dev/zero
$ aplay -M -D hw:DantePCIe -d 2 -c 8 -r 192000 -f S32_LE /dev/zero
(Der access-Type in der Fehlermeldung ist die Art wie die Daten transportiert werden. Mit der Option -M wird das auf memory-mapped, mmap gesetzt – das ist das was in der letzten Ausgabe als access-type ausgegeben wird.)

s25a
Beiträge: 54
Registriert: 29.05.2016 10:59:57

Re: Audio Devices / Channel Mapping

Beitrag von s25a » 12.07.2018 08:45:24

Hi,

hier die Ausgabe mit dem Zusätzlichen Parameter

Code: Alles auswählen

sov@audioserver:~/programs$ aplay -M -D hw:DantePCIe -d 2 -c 8 -r 48000 -f S32_LE /dev/zero
Playing raw data '/dev/zero' : Signed 32 bit Little Endian, Rate 48000 Hz, Channels 8

sov@audioserver:~/programs$ aplay -M -D hw:DantePCIe -d 2 -c 8 -r 96000 -f S32_LE /dev/zero
Playing raw data '/dev/zero' : Signed 32 bit Little Endian, Rate 96000 Hz, Channels 8
Warning: rate is not accurate (requested = 96000Hz, got = 48000Hz)
         please, try the plug plugin

sov@audioserver:~/programs$ aplay -M -D hw:DantePCIe -d 2 -c 8 -r 192000 -f S32_LE /dev/zero
Playing raw data '/dev/zero' : Signed 32 bit Little Endian, Rate 192000 Hz, Channels 8
Warning: rate is not accurate (requested = 192000Hz, got = 48000Hz)
         please, try the plug plugin
Viele Grüße

S

Benutzeravatar
smutbert
Moderator
Beiträge: 8315
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Audio Devices / Channel Mapping

Beitrag von smutbert » 12.07.2018 11:38:52

Das erweckt den Eindruck als würden lediglich 48 kHz unterstützt, was mir allerdings merkwürdig vorkäme. Kann man vielleicht im Mixer eine Samplerate fix einstellen?

Code: Alles auswählen

$ alsamixer -D hw:DantePCIe
(oder alternativ grafisch in Debianqasmixer)
Gibt es da irgendeine Einstellmöglichkeit für die Samplerate oder einen Schalter der „(Multi Track Sample)Rate Locking“ oder so ähnlich heißt?

s25a
Beiträge: 54
Registriert: 29.05.2016 10:59:57

Re: Audio Devices / Channel Mapping

Beitrag von s25a » 12.07.2018 12:24:35

Hi nochmals,

über den ALSAMIXER bekomme i9ch nur angezeigt; "This Sound Device does not have any controls"

Ich hab den Hersteller angeschrieben...Folgendes hat er dazu gesagt:
........
der Treiber stellt nur das reine 128 Kanal IO PCM Interface zur Verfügung.
Ein Mixerinterface existiert dazu nicht.
Sie haben entweder die Möglichkeit, Kanale über die asoundrc zu definieren, mehr dazu hier
https://wiki.ubuntuusers.de/.asoundrc/
Weiter unten gibt es auch Beispiele für die Auftrennung von 8-Kanal Karten in mehrere unabhängige Stereogeräte.
.......
Irgendwie verwirrt mich dieses Teil :-)

VG S

Benutzeravatar
smutbert
Moderator
Beiträge: 8315
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Audio Devices / Channel Mapping

Beitrag von smutbert » 12.07.2018 21:47:55

Es verhält sich so, als ob Treiber bzw Soundkarte 48 kHz verlangen würden. Von der Alsaseite her könntest du höchstens noch der Vollständigkeit halber testen, ob 44100 Hz

Code: Alles auswählen

$ aplay -M -D hw:DantePCIe -d 2 -c 8 -r 44100 -f S32_LE /dev/zero
oder Kombinationen mit anderen Sampleformaten laufen

Code: Alles auswählen

$ aplay -M -D hw:DantePCIe -d 2 -c 8 -r 96000 -f S24_LE /dev/zero
$ aplay -M -D hw:DantePCIe -d 2 -c 8 -r 96000 -f S16_LE /dev/zero

Ich glaube aber nicht, dass das etwas ausmacht sondern, dass es an der Besonderheit der Hardware liegt. Ich habe jetzt nach deiner Soundkarte gegoogelt und dabei erst gemerkt, dass das auch abgesehen von auffallend vielen Kanälen alles andere als eine normale Soundkarte ist, wenn ich es recht verstanden habe. Mein Eindruck ist, dass du die Samplerate an anderer Stelle einstellen musst.
Im „Dante Controller User Guide“, habe ich – ohne genau zu wissen was genau ein Dante Controller ist – einen Hinweis gefunden, dass es einen Tab namens Device Config geben sollte, bei dem man die Sampleraten einstellen kann. Wenn du also einen Computer hast auf dem diese Software läuft, dann wäre das wohl der richtige Ort um die Samplerate einzustellen und du kannst es in der Alsa-Konfiguration weglassen.

s25a
Beiträge: 54
Registriert: 29.05.2016 10:59:57

Re: Audio Devices / Channel Mapping

Beitrag von s25a » 08.06.2019 08:49:09

Hallo Zusammen,

ihr hattet mir damals sehr weitergeholfen zu dieser Karte. Ist brav im Einsatz und tut was es soll :-)

Nun ist eine weitere Frage aufgekommen - vielleicht hat jemand schon mal so etwas probiert. Es handelt sich um eine PCIe Audio (Dante) Karte.
Mithilfe der asound.conf werden dann die entsprechenden Kanäle gemappt (In meinem,m Fall sogar bis zu 128 Stück - wobei ich diese Menge nie probiert habe aber mit 24 läuft es problemlos)

Ist es denn möglich dies in einer Virtuellen Maschine zu nutzen? Mir geht es nicht darum den PCIe Bus irgendwie ind er Virtuellen Maschine zu simulieren und die Ganze karte dort zu nutzen sonder die Kanäle die auf dem Hypervisor erstellt wurde.
Hintergrund ist einfach dass ich die Karte gerne in mehreren virtuellen Maschinen nutzen möchte.

Falls so etwas irgendwie möglich ist bzw. ihr eine andere Idee habt wie man sowas realisieren könnte würde ich mich sehr über Feedback freuen. Vielleicht auch mit Hilfe von Docker wobei ich mich damit noch nicht auseinandergesetzt habe.

Danke und VG

S

Benutzeravatar
smutbert
Moderator
Beiträge: 8315
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Audio Devices / Channel Mapping

Beitrag von smutbert » 09.06.2019 13:39:46

Mit ausgewachsenen virtuellen Maschinen wie zum Beispiel mit VirtualBox wird es wohl sehr schwierig (bis unmöglich), denn dort müsste ja die virtuelle Soundkarte die vielen Kanäle unterstützen, aber es wird meiner Erfahrung nach immer nur irgendeine früher weit verbreitete (Stereo)soundkarte, wie die Soundblaster 16 emuliert.

Mit „leichteren“ Virtualisierungen wie lxc (oder docker?) sollte es funktionieren – zumindest sollte es bei entsprechender Konfiguration möglich sein auf die bzw. eine oder mehrere komplette Soundkarte(n) zuzugreifen (und diese damit zu blockieren). Ich habe es jetzt zwar so verstanden, dass das nicht das ist, was du willst, sondern viel mehr willst du auf deine auf dem Host konfigurierten stereo1, stereo2,... zugreifen, aber selbst wenn das nicht funktioniert, könntest du immer noch den Umweg über virtuelle Loopbacksoundkarten gehen.


Als Notlösung, die immer funktioniert bliebe noch ein netzwerktransperentes Audiosystem wie pulseaudio, aber dann wird das ganze wesentlich übersichtlicher, wenn du auf die Alsakonfiguration komplett verzichtest und alles in Pulseaudio machst.

Sind dir eigentlich niedrige Latenzen wichtige?

Antworten