Miroslaw Temat założony przez niniejszego użytkownika |
[Audiere] Odtwarzanie dźwięku - jak przerwać odtwarzanie? » 2009-03-27 22:23:37 Pisze odtwarzacz mp3 z wykorzystaniem biblioteki audiere imam oto taki problem: napisałem funkcje która odtwarza mp3 jedna po drogiej ale chciałbym w dowolnym miejscu zakonczyć odtwarzanie mp3 ale nieumiem.Prosiłbym o pomoc ,ewentualnie jak innaczej to zrobic oto kod tej funkcji: void odtworz() { char sciezka[ 100 ] = "a.mp3"; char znak; struct _finddata_t mp3_file; long uchwyt; AudioDevicePtr audiodevice( OpenDevice() ); if( chdir( sciezka ) ) cout << "Niemozna odtworzyc mp3"; else uchwyt = _findfirst( "*.mp3", & mp3_file ); cout << mp3_file.name << endl;; OutputStreamPtr graj( OpenSound( audiodevice, mp3_file.name, true ) ); graj->setVolume( 0.5 ); graj->setRepeat( false ); graj->setPitchShift( 1 ); graj->play(); for(; graj->isPlaying(); ); while( _findnext( uchwyt, & mp3_file ) == 0 ) { cout << mp3_file.name << endl;; OutputStreamPtr graj( OpenSound( audiodevice, mp3_file.name, true ) ); graj->setVolume( 0.5 ); graj->setRepeat( false ); graj->play(); for(; graj->isPlaying(); ); } _findclose( uchwyt ); }
|
|
DejaVu |
» 2009-03-28 00:01:04 graj->stop(); Tak na logikę, może to przerwie muzykę? |
|
Miroslaw Temat założony przez niniejszego użytkownika |
» 2009-03-28 00:13:55 tak graj->stop() przerywa odtwarzanie muzyki ale chciałbym to zrobic w dowolnym momencie a nie po wysłuchaniu 1000-ca mp3 jak zrobić aby wyjśc z funkcj np po dowolnej mp3-ce??? |
|
DejaVu |
» 2009-03-28 00:20:43 Czego oczekujesz, skoro masz pętlę: for(; graj->isPlaying(); ); Sam wstawiłeś kod, który nie dość, że nie pozwala przerwać odtwarzania jak sam to powiedziałes, to obciąża całą moc jednego rdzenia procesora. |
|
Miroslaw Temat założony przez niniejszego użytkownika |
» 2009-03-28 00:37:38 moze jakas sugestia dotyczaca rozwiazania tego problemu? |
|
DejaVu |
» 2009-03-28 00:52:50 #include <conio.h> #include <windows.h>
for(; graj->isPlaying(); ) { if( kbhit() ) { graj->stop(); break; } Sleep( 1 ); }
|
|
Miroslaw Temat założony przez niniejszego użytkownika |
» 2009-03-28 11:35:50 napisałem taki oto kod w ktorym listuje katalog znajduje pliki muzyczne i jeden po drugim ładuje do tablicy (mniejsza z wymiarami tych tablic narazie),i chce po koleji odtwarzać te mp3 z czytując ich nazwy z tablic (to zrobiłem w petli), kazdorazowe nacisnięcie dowolnego klawisza poduje przejscie do następnej mp3 i tu zaczynają sie problemy: po którymś kolejnym nacisnięciu wyskakuje błąd systemowy ( niechodzi tu o to że podanej nazwy mp3 niema w tablicy bo w katalogu znajduje sie zał ok 20 mp3 ktore załadowałem do tablicy a błąd wyskakuje załużmy po raz 3 a rza po 10 mp3-ce odtworzonej) niewiem może chodzi o jakiś strumien ktory sie zatyka czy cuś? Prosił bym o jaką kolwiek pomoc. Zaznaczam że zaciekawił mnie artykuł na forum o bibliotece audiere, ale nijak niemoge napisać własnego odtwarzacza mp3, same problemy . oto kod:
char sciezka[ 100 ] = "D:\\Muzyczka"; char znak; struct _finddata_t mp3_file; long uchwyt; string tablica[ 20 ]; if( chdir( sciezka ) ) cout << "Niemozna odtworzyc mp3"; else uchwyt = _findfirst( "*.mp3", & mp3_file );
cout << mp3_file.name << endl; tablica[ 0 ] = mp3_file.name;
int i = 1;
while( _findnext( uchwyt, & mp3_file ) == 0 ) { cout << mp3_file.name << endl;; tablica[ i ] = mp3_file.name; i++; } _findclose( uchwyt ); cout << "zawartosc tablicy :\n\n"; for( int i = 0; i < 20; i++ ) cout << tablica[ i ] << endl;;
AudioDevicePtr audiodevice( OpenDevice() );
for( int i = 0; i < 10; i++ ) { OutputStreamPtr graj( OpenSound( audiodevice, tablica[ i ].c_str(), true ) ); graj->setVolume( 1 ); graj->setRepeat( false ); graj->setPitchShift( 1.0 ); graj->play(); system( "pause" ); }
|
|
DejaVu |
» 2009-03-28 11:59:00 Jeden temat - jedna sprawa. Odpowiem jednak na to drugie pytanie, które postawiłeś. Sprawa jest prosta - gdzie masz licznik do zliczania ile plików *.mp3 znaleziono w katalogu? Jedziesz po tablicy i próbujesz wczytać plik o nazwie, której nie wczytałeś. Czytaj: masz 5 plików w katalogu, pętlę zrobiłeś aby odtwarzał 10 plików w katalogu. Na 6'stym program się wywali, ponieważ nazwa pliku nie została wczytana.
/edit: W konsekwencji wskaźnik graj będzie równy NULL, a Ty nie sprawdzając tego faktu wywołujesz metody klasy, którą niewątpliwie jest zmienna graj. |
|
« 1 » 2 |