PlaySound в C звучит, но не воспроизводит wav-файл

В C моя PlaySound не бросает никаких ошибок … но вместо того, чтобы играть в файл, который я хочу, он просто подает звуковой сигнал.

Какие-либо предложения?

Я старался :

 PlaySound("song1.wav", NULL, SND_ALIAS | SND_APPLICATION); 

А также:

 PlaySound("song1.wav", NULL, SND_FILENAME); 

Но я получил тот же результат.

Вместо использования относительного пути, как вы это делали:

 PlaySound("song1.wav", NULL, SND_FILENAME); 

Используйте абсолютный путь, например:

 PlaySound("F:\\path\\to\\your\\song\\song1.wav", NULL, SND_FILENAME); 

Цитата из описания API PlaySound, на msdn.microsoft.com:

PlaySound ищет следующие каталоги для звуковых файлов: текущий каталог; каталог Windows; системный каталог Windows; каталоги, перечисленные в PATH среды PATH ; и список каталогов, отображаемых в сети.

Если функция не может найти указанный звук, а флаг SND_NODEFAULT не указан, PlaySound вместо этого использует звуковой сигнал системного события по умолчанию (в вашем случае BEEP).

Если функция не может найти ни системной записи по умолчанию, ни звука по умолчанию, она не производит звука и возвращает FALSE .

Итак, добавьте путь к файловому каталогу в PATH среды PATH в Windows. Это должно решить вашу проблему.

У меня были проблемы с той же ситуацией, что и у OP, и я нашел решение для меня. Мое решение устраняет метаданные wav-файла.

Почта (японский)

Ссылаясь на сообщение, API PlaySound () не может воспроизводить некоторые wav-файлы, которые экспортируются с помощью известного аудио-инструмента. (например, ProTools, CUBASE, StudioOne и т. д.)

И устранение метаданных заставляет его работать. в блоге он открыл какой-то «тревожный» волновой файл с SoundEngine (японский) и просто «сохранил как» новый файл, чтобы удалить метаинформацию wav RIFF.