Witam, borykam się z małym (?) problemem. Na samym początku proszę o cierpliwość, wiem, że jest trochę tego tekstu, ale starałem się wszystko dostatecznie jasno wytłumaczyć. Problem sam w sobie być może okazać się prosty jeśli przeanalizujecie moją sytuację, bo nie jestem zaawansowanym programistą, uczę się tego od października i to jako dodatkowy przedmiot jedynie.
W programie moim użyłem biblioteki wxWidgets - powszechnie znana do robienia aplikacji okienkowych i malutkiej biblioteki "audiere" która to zajmuje się dźwiękiem.
Otóż napisałem taki mini sampler który po naciśnięciu klawiszy odgrywa przypisane im dźwięki. Znajdują się one na dysku komputera oczywiście. Dźwięki przypisałem manualnie w kodzie i wprowadziłem ścieżkę do obiektu biblioteki audiere:
AudioDevicePtr audiodevice( OpenDevice() );
sound[ 'R' ] = OpenSoundEffect( audiodevice, "C:/Users/samsung/Desktop/Synth Effects/FX-RISEUP.wav", audiere::MULTIPLE );
Objaśnienie: sound to mapa która wiąże klawisz z dźwiękiem. Obydwie linijki znajdują się w konstruktorze klasy która dzidziczy z wxFrame: public . Klasa tą utworzyłem, żeby posługując się biblioteką okienkową, tworzyć w niej okno, przyciski, i inne rzeczy wyświetlane w okienku.
Chciałem, żeby w programie użytkownik sam mógł wybrać jaki plik przypisze do klawisza, w tym celu umieściłem wxFileDialog (eksplorator do wyboru plików z dysku) i połączyłem jego naciśnięcie z taką funkcją składową klasy bito_blaster:
void bito_blaster::WybierzPlik( wxCommandEvent & event ) {
okno_wyboru->ShowModal();
string path = okno_wyboru->GetPath();
string klawisze = "ASDFHJKLXCBN";
wxString path2 = MakePath( path );
if( lista_klawiszy->GetSelection() != - 1 ) {
sound[ klawisze[ lista_klawiszy->GetSelection() ] ] = OpenSoundEffect( audiodevice, path2,
audiere::MULTIPLE );
tekst->SetLabel( "Wybrales klawisz: " + num2str( lista_klawiszy->GetSelection() ) + "\n sciezka: " + path2 );
}
else { tekst->SetLabel( "WYBIERZ KLAWISZ DO PRZYPISANIA" ); }
}
//tekst - pomocniczy tekst do sprawdzania czy wszystko ok
//lista_klawiszy - wxListBox wybierasz klawisz do ktorego bedzie przypisane
okno_wyboru- wxFileDialog - wybierasz plik, funkcja getPath zwraca dobrą ścieżkę, sprawdzałem
(MakePath() zwraca string i jedynie zamienia \ na / w ścieżce, bo takie ukośniki są wymagane)
Niestety jak wywołuje w programie funkcje WybierzPlik, to następnie po naciśnięciu klawisza do którego przypisałem dźwięk program się zawiesza. Co mogę robić źle? To jakiś problem z pamięcią, w złym miejscu konstruuje jakiś z obiektów klasy audiere do odtwarzania dźwięku? Co może być nie tak, proszę o pomoc.