WinAPI i funkcja PlaySound

WinAPI i funkcja PlaySound
MI
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 5 lat
  • 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.

spartanPAGE
luezie, dajcie spokój temu winapi.
MI
A z czego polecasz odtwarzać muzykę albo dźwięki w C++?
spartanPAGE
zależy co robisz
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
1

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


KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:2 minuty
  • Lokalizacja:Gorlice
1

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


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
MI
W ogóle nie działa. Nic się nie odtwarza wtedy.
KA
@Mikilll niemożliwe, bo po napisaniu posta sprawdzałem i działa dokładnie tak jak potrzebujesz. Nie wiem co zrobiłeś ale powinieneś mieć SND_ASYNC | SND_FILENAME | SND_NOSTOP.
MI
Dobra. Jednak faktycznie działa. Dzięki.
MI
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 5 lat
  • 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.

edytowany 3x, ostatnio: Mikilll
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • 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:ponad 21 lat
  • Ostatnio:około 8 godzin
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:ponad 13 lat
  • Ostatnio:około 5 lat
  • 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.