WinAPI i funkcja PlaySound

WinAPI i funkcja PlaySound
MI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 243
0
Kopiuj
PlaySound(TEXT("any_sound.wav"), NULL, SND_ASYNC | SND_FILENAME); 

Mam tu funkcję PlaySound, którą uruchamiam asynchronicznie w osobnym wątku. Wywołuje ją bardzo często i gdy to robię zbyt często to efekt jest taki, że dźwięk się urywa i zaczyna się następny. Jak zrobić mechanizm, żeby podczas odtwarzania dźwięku nie dało się w ogóle wywołać funkcji PlaySound, tak aby nie zakłócała niepotrzebnie trwającego dźwięku.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1

Uruchamiaj ją w następnym wątku bez flagi SND_ASYNC.

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gorlice
1

Dodaj flagę SND_NOSTOP jeżeli dobrze rozumiem dokumentację to powinno pomóc (nie sprawdzałem).

MI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 243
0

No, dobra. Uruchomiłem w osobnym wątku bez flagi SND_ASYNC

Kopiuj
 std::thread t([](){PlaySound(TEXT("any_key.wav"), NULL, SND_FILENAME); });
t.detach();

Teraz nie przerywa już tylko odtwarza wszystkie dźwięki po kolei. A ja chciałbym, aby podczas odtwarzania jakiegoś dźwięku, nie dało się uruchomić nowego odtwarzania dźwięku.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Nie masz każdego PlaySound odtwarzać w następnym wątku - zrób sobie jeden wątek zajmujący się odtwarzaniem dźwięków i operuj na nim.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

Wywołuje ją bardzo często i gdy to robię zbyt często to efekt jest taki, że dźwięk się urywa i zaczyna się następny. Jak zrobić mechanizm, żeby podczas odtwarzania dźwięku nie dało się w ogóle wywołać funkcji PlaySound, tak aby nie zakłócała niepotrzebnie trwającego dźwięku.

A nie pomyślałeś, by nie wywoływać zbyt często?

A jeśli to ma być często, a dźwięki mają się nakładać, to użyj DirectSound.

gswidwa
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 839
0

bass.dll
3 funkcje - BASS_Init(), BASS_CreateChannel(), Bass_ChannelPlay(). Moim zdaniem to bardzo przyjemna biblioteka w obsłudze.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.