Witam, borykam się z małym (?) problemem, 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żke 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 i znajdują się tam również przyciski do utworzenia, panel i jakieś pola tekstowe, wxFileDialog i wxListBox (korzystam z wxWidgets).
Chciałem, żeby w programie użytkownik sam mógł wybrać jaki plik przypisze do klawisza, w tym celu napisałem taką funkcję składową:
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.