Seite 1 von 1

QAudioDeviceInfo und Ubuntu

Verfasst: 9. Dezember 2010 23:07
von betocool
Hallo zusammen,

Seit ein paar Monate arbeite ich an einem Soundkarte basierten Signalanalysator. Da Qt jetzt die QAudioInput / Output Klassen liefert kann man direkt auf die Rohdaten Zugriff haben. Die Verzögerung ist für mich ok, und es dient ja nur als billiges Ersatz für ein Oszi und Spectrum Analysator.

Bei Win7 läuft alles wie gehabt, die üblichen Fehler sind normalerweise meine Ursache. Ich will jetzt den aktuellen (nich fertigen) Stand auch auf Ubuntu Linux portieren.

Die Kompilierung und das Linken funktionieren auch richtig, nur wenn das Programm startet findet QAudioDeviceInfo keine Audio Ein- oder Ausgänge. Somit läuft alles schief!

Es scheint allerdings ein bekannter Problem zu sein, aber ich kann die Lösung entweder nicht finden oder nicht verstehen.

Vielleicht hat einer von Euch auch die Erfahrung gemacht? Falls mir jemand helfen kann, kann ich per Email das Code für Win7 und Linux schicken aber im Prinzip geht es um

Code: Alles auswählen

deviceInfoList = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput);
wo die Liste dann leer ist.

Nun Danke im voraus,

Betocool

Verfasst: 10. Dezember 2010 10:48
von kater
Das klingt ehr nach irgendein Fehler in Linux statt Qt.
Ist Qt Abhänig von ALSA OSS Pulseaudio und was es da noch alles gibt? Oder langen einfach nur die Treiber der Soundkarte.

Dann stell mal fest ob/was davon installiert ist. Und ich gehe mal davon aus, dass Sound bei anderen Anwendungen funktioniert.

Verfasst: 10. Dezember 2010 13:56
von betocool
Hi,

So weit ich weiß. ist Qt abhängig von ALSA, und es scheint definitiv ein Linux Thema zu sein. Und auch ja, alle andere Anwendungen funktionieren einwandfrei.

ALSA und PulseAudio sind per Default installiert, es kann auch sein dass Qt mit den beiden in Verwirrung kommt... leider habe ich keine weitere hilfreiche Information gefunden. Es gibt einen Patch bei Qt (QTXXX.patch Datei). Leider habe ich auch nicht herausgefunden was ich alles damit anfangen kann.

Mal schauen, vielleicht kennt jemand die Lösung... ich google und frage mal weiter.

Grüßle!

Betocool

Verfasst: 10. Dezember 2010 15:17
von RHBaum
Audio und Linux sind sowieso nen Thema für sich ....

Du hasst bei Ubuntu folgendes Schema:

- Hardware/Kernel Treiber (Kernel Module, meist ueber das ALSA project geliefert)
- ALSA als 1. Abstraktions Ebene einheitliches Audiointerface
- PulseAdio als Desktop-Abstraktion ... bringt nen Software-Mixxer (falls das treiber ned koennen) und Netzwerk-Transportschicht.
- Phonon - Programmierschnittstelle fuer Multimedia von ursprünglich KDE glaub ich.

PulseAudio , ESD und Konsorten sind aber nun eher Desktopgebunden, waehrend ALSA Linux global ist.
Es wird Anwendungen geben, die Koennen mit AlSA, und welche die koennen mit PulsAudio z.b.

Wobei PulseAdio Alsa-Channels okkupiert, dafuer aber eigene Channel ins ALSA interface einklingt. theorethisch.
Praktisch funktioniert das alles andere als zuverlaessig. ALso UBUNTU und Teamspeak3(unterstuetzt ALSA) zum laufen zu bringen ist ne frickelei.
Du solltest aber mal damit "rumspielen" damit du nen gefuehl fuer den Sch.... bekommst.
http://wiki.ubuntuusers.de/PulseAudio?h ... pulseaudio
Installier dir auf alle faelle die ganzen pa-tools, die sind bei Ubuntu eigenartiger weisse gar ned drauf, und sobald du aber hand an PulseAudio anlegen und testen musst, sind die unabkoemmlich.

Wie gesagt, du musst nen Gefuehl bekommen wie das ganze funktiort, und was die "Denkweisse" dahinter ist, dann wird einem einiges klar(er). Und vor allem ist das Grundvorraussetzung, um mit nem Alsamixxer (Mischpult fuer Pegel) ueberhaupt umgehen zu koennen. Weil es ist ueberhaupt nicht mehr klar, welcher Regler fuer was ist, wenn den Hintergrund zu ned kenmst. Bei mir ca. 20 output, und 7 inputchannels , und ich hab nur ne pissige Asus Sonar dran.

Dann kommt PHONON obendrauf. Das untersteutzt zig Backends. Wichtig, damit Phonon Devices erkennt, muss es auf das richtige Backend aufgesetzt werden. Dabei kannst fuer jeden Quellen/Sourcentyp Channels aus unterschiedlichen Backends teilweisse waehlen.
Phonon Einstellungen kann man irgendwo global machen ....

Also wenn Du Daten an ein Ausgabegeraet schickst, hasst du unter Linux meistens folgenden Weg (Phonon steht auf ALSA Output)....

QAudiOutput -> Phonon::AudioOutput -> Phonon::AudioOutputDevice -> AlsaVirtualOutputCHannel -> Redirektet von PulseAudioAusgabeChannel -> realer ALSAAusgabeChannel -> KernelModul/HW Treiber
(dafuer hasst 4 mal die möglichkeit die Laustaerke zu regeln. einmal programmierbar ueber Phonon, 2 mal ueber ALSA(virtuelle und HW Channel) und klar, einmal ueber das PulseAudio Loopback im pamixer).

viel Spass beim Konfigurieren :-)
und wenn Du denkst, DU kannst es, dann warte einfach mal aufs naechste Ubuntu Release :twisted:

Ciao ...

Verfasst: 10. Dezember 2010 16:57
von kater
// Offtopic
was war das früher so einfach: cat audiodump > /dev/dsp
und der Kram kam mit voller Lautstärke aus den Boxen ;)

Verfasst: 10. Dezember 2010 22:11
von betocool
Erstmals bedanke ich mich herzlich für die Antworten! Sieht so aus als ob ich die QAudioInput / QAudioOutput Klassen in Ubuntu mit Alsa oder PulseAudio ersetzen werde. Es ist ja "nur" Audiodaten rausschieben oder reinschreiben (was bei einem DSP wesentlich einfacher geht!).

Schade, ich wollte das "Plattform - Unabhängige" an QT verwenden. Bin immer noch nicht schlauer geworden.

@RHBaum: Danke für die Einleitung, vielleicht klappts jetzt!

Grüßle!

Betocool