WinAPI i funkcja PlaySound

0
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.

1

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

1

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

0

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

 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.

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.

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.

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1