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

Otwarzanie wybranej przez użytkownika muzyki w tle asynchronicznie w pętli.

Ostatnio zmodyfikowano 2022-05-25 20:49
Autor Wiadomość
Masterofironfist
Temat założony przez niniejszego użytkownika
Otwarzanie wybranej przez użytkownika muzyki w tle asynchronicznie w pętli.
» 2022-05-25 18:49:57
C/C++
LPCWSTR PlayBackground( GAME & G1 )
{
   
wstring tmp = L"play \"";
   
tmp += G1.arrayOfUserDefinedMusic[ G1.selectedMusicNumber ].wstring(); //std::vector <std::filesystem::path> MusicList[index];
   
tmp += L"\" repeat";
   
LPCWSTR MusicPathToFile = tmp.c_str();
   
return MusicPathToFile;
}


int main()
{
   
GAME & G1; //Tutaj ten obiekt tej oto klasy
   
std::cin >> G1.selectedMusicNumber; //W programie jest nieco inaczej to rozwiązane, to jest uproszczenie;
   
mciSendString( PlayBackground( G1 ), 0, NULL, 0 ); //chcę tutaj zacząć odtwarzać tę wybraną muzykę jako muzykę w tle. Jest ona w formacie mp3. Ale to nie działa;
   
mciSendString( L"play \"Music/HeatHazeShadow.mp3\" repeat", 0, NULL, 0 ); //to rozwiązanie odtwarza muzyke bez problemu, ale nie daje możliwości wyboru muzyki przez użytkownika;
}
Witam mam problem z odtwarzaniem wybranej muzyki w tle za pomocą mciSendString ponieważ muzyka się nie odtwarza (aplikacja działa ale w głośnikach jest cisza) przy powyższym wariancie mimo iż rozwiązanie z C-stringiem działą bez problemu.
Niemniej chce uzyskać działające to rozwiązanie z wyborem muzyki bo taki był plan że użytkownik może wrzucić muzykę do lokalnego folderu Music wewnątrz folderu z projektem w formacie MP3 i później ją wybrać z listy.
Jeśli ktoś ma pomysł jak zrobic to samo ale np za pomocą innej biblioteki, nie ma problemu jestem otwarty na propozycje, byle tylko ta biblioteka obsługiwała format MP3.
Powyższy kod jest częścią prostej gry konsolowej.
Z góry dziękuje za pomoc.
P-179458
DejaVu
» 2022-05-25 18:53:02
P-179459
Masterofironfist
Temat założony przez niniejszego użytkownika
» 2022-05-25 19:02:13
Czytałem właśnie ten konkretny artykuł tylko z niego nie wynika dlaczego to konkretne rozwiązanie co ja mam nie funkcjonuje.
Bo przecież nawet pod tym moim widać rozwiązanie które działa tylko ze ja chce uzyskać działąjące konkretne rozwiązanie które skorzysta z tego wektora filesystem::path co mam i zacznie odtwarzac wwybraną muzykę.
P-179460
pekfos
» 2022-05-25 19:38:40
C/C++
LPCWSTR PlayBackground( GAME & G1 )
{
   
wstring tmp = L"play \"";
   
tmp += G1.arrayOfUserDefinedMusic[ G1.selectedMusicNumber ].wstring(); //std::vector <std::filesystem::path> MusicList[index];
   
tmp += L"\" repeat";
   
LPCWSTR MusicPathToFile = tmp.c_str();
   
return MusicPathToFile;
}
Powinieneś zwracać std::wstring, nie LPCWSTR. Wartość zwrócona z c_str() jest poprawna tylko gdy oryginalny string wciąż istnieje i nie był zbyt zmodyfikowany, a tu jest zniszczony wraz z wyjściem z funkcji. Wywołaj c_str() dopiero na zwróconej wartości.
C/C++
mciSendString( PlayBackground( G1 ).c_str(), 0, NULL, 0 );
P-179461
Masterofironfist
Temat założony przez niniejszego użytkownika
» 2022-05-25 20:49:31
Dziękuję za pomoc, zapomniałem że funkcja składowa c_str() zwraca wskaźnik do miejsca gdzie string jest składowany,i że jak przecież jak wstring jest niszczony to przecież to jak zwracać adres nieistniejącego budynku już jakiegos dziękuję za pomoc.
P-179462
« 1 »
  Strona 1 z 1