reusing parts of neutrino

the_moon
Einsteiger
Einsteiger
Beiträge: 223
Registriert: Samstag 25. Januar 2003, 11:18

reusing parts of neutrino

Beitrag von the_moon »

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
Zwen
Developer
Beiträge: 867
Registriert: Mittwoch 14. August 2002, 19:50

Beitrag von Zwen »

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 :oops:
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
the_moon
Einsteiger
Einsteiger
Beiträge: 223
Registriert: Samstag 25. Januar 2003, 11:18

Beitrag von the_moon »

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 :oops:
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
Danke,

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?
mws
Developer
Beiträge: 331
Registriert: Freitag 7. Februar 2003, 22:17

Beitrag von mws »

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
cu
mws
Zwen
Developer
Beiträge: 867
Registriert: Mittwoch 14. August 2002, 19:50

Beitrag von Zwen »

the_moon hat geschrieben: CAudioPlayer::init() muss nicht aufgerufen werden?
Nein, dass macht der öffentliche Konstruktor des Singeltons ;-)
the_moon
Einsteiger
Einsteiger
Beiträge: 223
Registriert: Samstag 25. Januar 2003, 11:18

Beitrag von the_moon »

Zwen hat geschrieben:
the_moon hat geschrieben: CAudioPlayer::init() muss nicht aufgerufen werden?
Nein, dass macht der öffentliche Konstruktor des Singeltons ;-)
Danke, jetzt habe ich das auch gesehen. Ich habe alles zusammen gebastellt und versuchte auf meinem PC laufen lassen aber es macht Segmentation Fault.

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.