Hallo,
ich möchte CAudioPlayer Klasse (driver/audioplay.h) von Neutrino in meinem Programmchen benutzen. Deswegen wollte sie um ein paar Tips, wie man diese Klasse benutzen kann bitten.
Kann jemand mir bitte so grob erklären wie man die Klasse benutzen kann?
Muss etwas vor dem CAudioPlayer::play aufgerufen werden?
Und noch was. Die Klasse scheint ein Singleton zu sein, aber Konstructor von dieser Klasse als "public" deklariert.
Danke
reuser
reusing parts of neutrino
-
- Einsteiger
- Beiträge: 223
- Registriert: Samstag 25. Januar 2003, 11:18
-
- Developer
- Beiträge: 867
- Registriert: Mittwoch 14. August 2002, 19:50
Bsp.:
CAudioFile af;
af.Filename="test.mp3";
CAudioPlayer->getInstance()->play(af, false); // Abspielen
CAudioPlayer->getInstance()->pause(); //Pause
CAudioPlayer->getInstance()->pause(); //Un-Pause
CAudioPlayer->getInstance()->stop(); //Stop
... usw.
Es gibt noch div. andere Methoden und auch ein Meta-Daten Handling (Artist,Title,...), schau dir einfach mal gui/audioplayer.cpp an
Was ist ein singelton
Der Konstruktor ist public, weil die Klasse ganz normal instanziieren kannst.
Das wird ja bei getInstance() auch einmal gemacht.
Dieses getInstance dient lediglich dazu, dass das Audioplayer-Objekt nur einmal instanziiert wird und man sich keine Referenz auf diese Instanz merken muss...
Noch Fragen ?
Nur zu...
Zwen
CAudioFile af;
af.Filename="test.mp3";
CAudioPlayer->getInstance()->play(af, false); // Abspielen
CAudioPlayer->getInstance()->pause(); //Pause
CAudioPlayer->getInstance()->pause(); //Un-Pause
CAudioPlayer->getInstance()->stop(); //Stop
... usw.
Es gibt noch div. andere Methoden und auch ein Meta-Daten Handling (Artist,Title,...), schau dir einfach mal gui/audioplayer.cpp an
Was ist ein singelton
Der Konstruktor ist public, weil die Klasse ganz normal instanziieren kannst.
Das wird ja bei getInstance() auch einmal gemacht.
Dieses getInstance dient lediglich dazu, dass das Audioplayer-Objekt nur einmal instanziiert wird und man sich keine Referenz auf diese Instanz merken muss...
Noch Fragen ?
Nur zu...
Zwen
-
- Einsteiger
- Beiträge: 223
- Registriert: Samstag 25. Januar 2003, 11:18
Danke,Zwen hat geschrieben:Bsp.:
CAudioFile af;
af.Filename="test.mp3";
CAudioPlayer->getInstance()->play(af, false); // Abspielen
CAudioPlayer->getInstance()->pause(); //Pause
CAudioPlayer->getInstance()->pause(); //Un-Pause
CAudioPlayer->getInstance()->stop(); //Stop
... usw.
Es gibt noch div. andere Methoden und auch ein Meta-Daten Handling (Artist,Title,...), schau dir einfach mal gui/audioplayer.cpp an
Was ist ein singelton
Der Konstruktor ist public, weil die Klasse ganz normal instanziieren kannst.
Das wird ja bei getInstance() auch einmal gemacht.
Dieses getInstance dient lediglich dazu, dass das Audioplayer-Objekt nur einmal instanziiert wird und man sich keine Referenz auf diese Instanz merken muss...
Noch Fragen ?
Nur zu...
Zwen
Singleton - ist ein Design Pattern. besagt dass die Klasse nur eine Instance haben kann. Aber es ist unwichtig.
Noch Mal Danke.
PS.
CAudioPlayer::init() muss nicht aufgerufen werden?
-
- Developer
- Beiträge: 331
- Registriert: Freitag 7. Februar 2003, 22:17
hi,
normalerweise sollten bei singletons constructor und destructor
private sein, damit man wirklich sicher sein kann, das niemand die klasse instanziert oder nutzt OHNE das er CClassName::getInstance() aufruft.
da hat the_moon schon recht. aber im neutrino ist halt viel gewachsen, und keiner hat im nachhinein lust/zeit gehabt, das zu verändern oder aber z.b. die singleton geschichten durch ein template zu lösen.
gruss
mws
normalerweise sollten bei singletons constructor und destructor
private sein, damit man wirklich sicher sein kann, das niemand die klasse instanziert oder nutzt OHNE das er CClassName::getInstance() aufruft.
da hat the_moon schon recht. aber im neutrino ist halt viel gewachsen, und keiner hat im nachhinein lust/zeit gehabt, das zu verändern oder aber z.b. die singleton geschichten durch ein template zu lösen.
gruss
mws
cu
mws
mws
-
- Developer
- Beiträge: 867
- Registriert: Mittwoch 14. August 2002, 19:50
-
- Einsteiger
- Beiträge: 223
- Registriert: Samstag 25. Januar 2003, 11:18
Danke, jetzt habe ich das auch gesehen. Ich habe alles zusammen gebastellt und versuchte auf meinem PC laufen lassen aber es macht Segmentation Fault.Zwen hat geschrieben:Nein, dass macht der öffentliche Konstruktor des Singeltons ;-)the_moon hat geschrieben: CAudioPlayer::init() muss nicht aufgerufen werden?
Die Ursache dafür ist das in CAudioPlayer::play wird CAudioPlayer::stop aufgerufen und da wird pthread_join aufgerufen. Aber beim ersten Aufruf von play thrPlay structure ist noch nicht initializiert, da ist nämlich irgend ein Mühl drine.
Und noch was. Auf meinem PC wenn ich dateien abspielen lasse, kommt nur Krach aus'm Lautsprächer. Ich hoffe nur dass auf dem dbox wird es besser klingen-
noch mal danke für Ihre Unterstutzung.