Как использовать функцию PlaySound несколько раз?

PlaySound работает отлично, если мне нужен один звуковой сигнал. Следующее иллюстрирует мой фрагмент кода:

PlaySound(TEXT("C:\\Test1.wav"), NULL, SND_ASYNC);

У меня вопрос, как использовать эту функцию дважды или более, так как она воспроизводится только один раз, независимо от количества повторений, которые я собрал. Я также попробовал это:

PlaySound(TEXT("C:\\Test1.wav"), NULL,SND_FILENAME|SND_LOOP|SND_ASYNC);

который воспроизводит звуковой сигнал в непрерывном цикле. Как играть в это дважды или трижды и т. Д.?

Использование цикла тоже не помогает.

3

Решение

Проблема заключается в SND_ASYNC флаг. Это говорит о том, что вы хотите, чтобы этот вызов немедленно вернулся и воспроизводил звук в фоновом режиме.

Если вы сделаете это в цикле, так как он вернется с воспроизводимым звуком, он будет перекрываться со следующим вызовом и ничего не делать, поскольку приложение IIRC может одновременно выполнить только один вызов PlaySound.

Решение состоит в том, чтобы заменить SND_ASYNC с SND_SYNC (или удалите его, так как это по умолчанию). Если вам нужно, чтобы вызов был асинхронным, вы можете создать поток и использовать звуки, которые хотите воспроизвести. Поток будет воспроизводиться синхронно, но другие ваши потоки не заметят.

1

Другие решения

У вас есть два варианта с этим API. Либо играть синхронно, либо асинхронно.

Если вы играете синхронно, то ваш поток будет блокироваться, пока не закончится воспроизведение звука. Вы можете поместить его в цикл и вызывать его столько раз, сколько захотите, но тогда ваш поток будет блокироваться во время воспроизведения звука.

Если вы играете асинхронно, то ваш поток не будет блокироваться, но у вас нет надежного способа контролировать количество повторений.

Я вижу два решения для вас: либо создать новый звук из оригинала, добавив правильное количество повторов, и воспроизвести его один раз, либо создать фоновый поток для воспроизведения звука указанное количество раз — в этом фоновом потоке вы можете безопасно используйте метод синхронного воспроизведения, как описано выше.

1

По вопросам рекламы [email protected]