PlaySound () mmslib не воспроизводит существующий звук - PullRequest
2 голосов
/ 26 июля 2011

РЕДАКТИРОВАТЬ: Решено. Просто .wav файл не был принят Windows. Я взял один из собственных файлов Windows и переименовал его в то, что назывался мой предыдущий файл, и он воспроизводится без проблем.

Я не знаю, почему это не может воспроизвести существующий файл. Windows сообщает, что что-то не так, но я понятия не имею, что.

Я добавил проверку прямо перед тем, чтобы убедиться, что она существует. Я также пробовал абсолютные пути.

string wavPath = "c:\\frog.wav";

struct stat stFileInfo;
bool blnReturn = (stat(wavPath.c_str(), &stFileInfo) == 0); //this returns true

FILE* fp = fopen(wavPath.c_str(), "r");
if (fp) {
   fclose(fp); //this triggers
}

PlaySound(wavPath.c_str(), NULL, SND_FILENAME | SND_ASYNC); //m_hinstance
//C:\\Users\\Wollan\\My Code\\A\\Debug\\frog.wav
//TEXT("frog.wav")
//TEXT(wavPath.c_str())
//(LPCSTR)"frog.wav¨

Файл отлично воспроизводится в WMP.

Ответы [ 3 ]

1 голос
/ 26 июля 2011

Этот следующий код прекрасно работает:

PlaySound(L"C:\\Windows\\Media\\Cityscape\\Windows Balloon.wav", 0, SND_FILENAME ); 

Добавление SND_ASYNC не удается воспроизвести.

0 голосов
/ 12 августа 2017

PlaySound (L "C: \ Windows \ Media \ Cityscape \ Windows Balloon.wav", 0, SND_FILENAME);Добавление SND_ASYNC не удается воспроизвести.Этот ответ правильный!Это происходит из-за того, что режим ASYNC воспроизводит музыку после возврата из функции.Ваш код мог выйти до того, как музыка заиграет.используйте int x, cin >> x, после функции PlaySound вы обнаружите, что она работает хорошо.

0 голосов
/ 26 июля 2011

В документации написано:

Параметр pszSound - это имя файла. Если файл не может быть найден, функция воспроизводит звук по умолчанию, если только флаг SND_NODEFAULT не установлен установлен.

И

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

Никаких других случаев для этого исхода не указано.

Следовательно, то, что вы слышите звуковой сигнал, означает, что файл не найден, несмотря на ваши заверения об обратном.

Я бы дважды проверил результат этого stat вызова; Я даже не могу найти stat в документации; он не является частью Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...