Qt Sound

Alles rund um die Programmierung mit Qt
Antworten
tailor81
Beiträge: 6
Registriert: 15. Juli 2011 08:07

Qt Sound

Beitrag von tailor81 »

Hallo.

ich bin gerade am Austesten des QT-Sounds.

Und zwar habe ich eine kleine GUI mit einer UHR, die logischerweise jede Sekunde eine neue Zeit anzeigt.... ;-) Das Programm soll unter KDE/GNOME/FVWM2 etc. laufen.

Jetzt möchte ich mein Programm erweitern um 2 Tasks:
1. Ich möchte einen VolumeSlider einbauen, mit dem ich die MASTER-Volume von meimen PC lauter, leiser und muten kann.
2. Ich möchte pro Update von meiner Uhr, d.h. also jede Sekunde, einen Beep-Ton hören (.wav)

Wie mache ich das? Habe Qt 4.7.2 auf SLES11.
Geht das mit QAudioOutput oder QAudioDeviceInfo???????
Phonon hatte ich auch schon mal in der Hand aber das läuft scheinbar nur unter KDE....

Danke schon mal im voraus

#T
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Beitrag von Exasperation »

Kenn mich zwar nicht so sehr mit Phonon aus, aber müsste das nicht plattformunabhängig in Qt sein?

Kannst es ja mal ausprobieren...

Ein Phonon Player:

Code: Alles auswählen

Phonon::MediaObject *player= Phonon::createPlayer( Phonon::MusicCategory, Phonon::MediaSource("/beep.wav") );
Und ein Timer, der jede Sekunde nen Slot aufruft:

Code: Alles auswählen

QTimer *timer = new QTimer(this);
connect( timer, SIGNAL( timeout() ), this, SLOT( on_play_beep() ) );
timer->start(1000);
Und der dazugehörige Slot on_play_beep():

Code: Alles auswählen

player->play();
Wobei beep.wav natürlich kürzer als eine Sekunde dauern sollte. Und ich hab keine Ahnung, ob das performancetechnisch so gut ist, kenn mich wie gesagt mit Phonon nicht wirklich aus.
Phonon bringt auch einen VolumeSlider mit, mit dem kannst du für ein Ausgabegerät die Lautstärke einstellen. Vielleicht hilft dir das ja.

/edit

Links:
tailor81
Beiträge: 6
Registriert: 15. Juli 2011 08:07

ohne Phonon

Beitrag von tailor81 »

geht das ganze auch ohne Phonon?????

komme ich sonst irgendwie an die soundkarte heran und kann den volume pegel ändern?
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Qt Sound

Beitrag von RHBaum »

Phonon iss nur ne Biblio, kein Daemon, kein Server ...
Normal sollt das Teil überall installierbar sein, wo Du entsprechende Backends zur verfügung hasst (Alsa )
installierst du die qt devel packete ueber deinen packet-manager, wirst du phonon fast sicher schon mit dabei haben ...
komme ich sonst irgendwie an die soundkarte heran und kann den volume pegel ändern?
Das solltest du schleunigst vergessen :-)
weil:
Welchen Pegel ???
lad dir unter Linux mal ne GUI fuern alsa Mixxer. Die meisten Distros haben noch nen Sound-Server drauf (Pulse Audio), welcher Alsa Channels emuliert und wrappt.
Bei mir, (C-Media Oxygen Audio chip) , alle regler sichtbar, sind das 20-30
Die richtigen zu finden iss scho ne Kunst. Und bei jeder Soundkarte heissen die dann anders !
Viel Spass beim Programmieren.

Ausserdem wuerd ich ned moegen, wenn mir andere Programme an meinen Pegeleinstellungen rumfummeln.

Lautstaerke einstellen ja, aber nur fuer dein programm und deine Audioquelle die du grad verwendest ...
und das geht easy wenn fuer dein Phonon AudioOutput da einfach nur die lautstaerke einstellst mit setvolume !!!

Ciao ...
tailor81
Beiträge: 6
Registriert: 15. Juli 2011 08:07

Re: Qt Sound

Beitrag von tailor81 »

merci. also ich hab es nun doch mit phonon realisiert. funzt.... danke euch für die antworten!!!
tailor81
Beiträge: 6
Registriert: 15. Juli 2011 08:07

Re: Qt Sound

Beitrag von tailor81 »

noch ein frage zu phonon.

ich habe genau mediaobject mit genau 1 wav datei (Dauer 3:00 sekunden = piepton mit etwas Hall...).
jetzt möchte ich diese eine wav datei nochmals abspielen aber die andere vorher läuft noch deswegen tut das nicht.
wie kann ich das mit phonon realisieren?
brauche ich dafür mehrere mediaobjects..... die ich dann mit dem 1 audiooutput verknüpfe und abspiele.
stecke gerade in einer sackgasse und verzweifle gerade ein wenig!

danke schon mal für eine antwort!!!
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Re: Qt Sound

Beitrag von Exasperation »

Willst du sie gleichzeitig abspielen? Also mit dem einen anfangen während das andere noch läuft?

Wenn du sie hintereinander abspielen möchtest, kannst du bei deinem mediaObject das Signal finishedmit nem slot connecten.
In dem slot nochmal play() aufrufen und zählst halt nen Zähler hoch oder so.. Sagen wir du möchtest drei beeps also brauchst halt nen zähler der verhindert dass mehr als 3 mal dein *.wav abgespielt wird.

Also:
  1. my_media_object->finished() auf einen selbstgeschrieben Slot connecten
  2. Im Slot: Abfragen ob schon oft genug abgespielt (Zählervariable). wenn nicht dann nochmal play aufrufen
  3. Alternative: MediaObject::setQueue( const QList<MediaSource> & sources ) anschauen und behelfsmäßig den Pointer auf deine mediaSource mehrmals reinstecken
tailor81
Beiträge: 6
Registriert: 15. Juli 2011 08:07

Re: Qt Sound

Beitrag von tailor81 »

richtig ich möchte die waves GLEICHZEITIG abspielen!!!
das hintereinanderabspielen funktioniert schon bestens mit den signalen usw.! ;-)

also mein problem ist jenes....
ich habe ein MediaObject und AudioOutput über createpath miteinander verbunden.
das MediaObject hat als abspielquelle eine .wav datei.

durch ein event wird mit mediaObject->play() mein wav abgespielt.

[b]UND JETZT KOMMTS: [/b]wir das event nochmals aktiviert während das abspielen des alten eventsaufruf noch läuft,
soll das abspielen der wav-datei ein 2. mal angestoßen werden. d.h. das abspielen der wav-datei vom ersten aufruf läuft noch fertig
aber gleichzeitig wird das abspielen der wav-datei beim 2.ten aufruf auch angestoßen....



hier (http://vir.homelinux.org/blog/archives/ ... ltech.html) habe ich was von einem mixer (1 audioutput mit VIELEN mediaobjects)
gelesen. allerdings finde ich diesen MIXER in der QT4-PHONON-API


danke schon mal für die antworten!
tailor81
Beiträge: 6
Registriert: 15. Juli 2011 08:07

Re: Qt Sound

Beitrag von tailor81 »

AHHH mittlerweile habe ich herausgefunden, dass je sich je 1 mediaobject mit je 1 audiooutput GLEICHZEITIG abspielen lassen.
also funzen tut das schon mal. aber die feine englische art ist das noch nicht!!!!

somit bleiben noch 2 fragen:
1. kann ich 1 mediaobject mit 1 audiooutput mit play() mehrmals aufrufen? ODER
2. kann ich viele mediaobject gleichzeitig auf 1 audiooutput abspielen lassen....

danke für die phonon antworten!!!!
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Qt Sound

Beitrag von RHBaum »

also reine theorie, so genau kenn ich mich auch ned aus ...

Ich denk jede Application soll(te) nur 1 Phonon::AudioOutputDevice von einem Bestimmten typ aufmachen ...
Also je nach datenquelle wirst nicht umhinkommen, ein Device fuer PCM (Wave) eines fuer Midi's und eines fuer video ...
Also was am Ende am selber kanal einer Soundkarte landen soll, sollte üeber ein device gehen ...
Sonst regelst dich am Mixer tot. Normal sollte unter Linux mit PulseAudio fuer jedes AudioDevice nen eigener kanal im Mixer aufgehen ....

Aber du kannst natuerlich mehrere QAudioOutput auf ein Phonon::AudioOutputDevice legen, phononsollt dann (iss ja ne lib) in deiner App mixxen ...

Ciao ...
Antworten