Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Audiere] Odtwarzanie dźwięku - jak przerwać odtwarzanie?

Ostatnio zmodyfikowano 2009-03-28 12:24
Autor Wiadomość
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:
C/C++
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();
    //graj->setPosition(10000000);
   
    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 );
}
P-5065
DejaVu
» 2009-03-28 00:01:04
graj->stop();
Tak na logikę, może to przerwie muzykę?
P-5066
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???
P-5067
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.
P-5068
Miroslaw
Temat założony przez niniejszego użytkownika
» 2009-03-28 00:37:38
moze jakas sugestia dotyczaca rozwiazania tego problemu?
P-5069
DejaVu
» 2009-03-28 00:52:50
C/C++
#include <conio.h>
#include <windows.h>
//...
for(; graj->isPlaying(); )
{
    if( kbhit() )
    {
        graj->stop();
        break;
    }
    Sleep( 1 );
} //for
P-5070
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:
C/C++
//-------------------

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" );
}
P-5084
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.
P-5085
« 1 » 2
  Strona 1 z 2 Następna strona