Функция PlaySound() из WinAPI
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Здравствуйте.
Пишу игру. Понадобилось воспроизвести звук. Пытаюсь воспроизвести звук функцией
PlaySound()
, но так, что бы не остановилось выполнение программы. Пишу так:Вот ссылка на описание функции в MSDN.
Работаю в
devcpp 5.4.2
.Во вкладке
Сервис->Параметры компилятора->добавить эти команды к командной строке компоновщика
приписалwinmm.lib
. В результате линковщик выдаёт ошибку:Что я делаю не так?
Используешь неправильный компилятор. В MS Windows есть только один правильный компилятор — MS VC++ :-)
А если серьезно то в Dev-C++ добавлять
winmm.lib
надо в Параметрах проекта на вкладке Параметры, нажав кнопку Добавить библиотеку. В открывшемся окошке надо найти и выбрать файл winmm.lib.Только winmm.lib не входит в поставку MinGW. Если у тебя установлена Visual Studio, то ищи в
C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/Lib/x64/
.А чем вам
gcc
не угодил?Кстати, спасибо, добавил библиотеку
libwinmm.a
в параметрах проекта и всё компилировалось, правда звук всё равно не воспроизводится :(Мне то пофиг. Это вам звук из программы нужен ))
Вот такая программка (узнаешь?) под MS VC++ скомпилировалась и работает «на ура»:
Если теперь у тебя программа все-таки компилируется, то может она файл со звуком не находит? Кстати PlaySound возвращает булево значение. Проверять не пробовал?
Да, еще... Если для gcc в проекте прикрутить winmm.lib от Вижуал студии, то тоже все работает. С libwinmm.a не пробовал — у меня нет такой либы.
и причем тут компилятор?
Функция не работает, но возвращает не нулевое значение.
Вот код:
Сообщение об ошибке ни разу не выводится, зато
PlaySound()
воспроизводитSND_NODEFAULT
.Вот что по этому поводу написано в
MSDN
:Если я правильно понял, то в случае неудачи
PlaySound()
попытается воспроизвести как раз этот самыйSND_NODEFAULT
и возвратитFALSE
если и это не возможно.Я в отчаянии :(
Используй отладчик.
Где лежит твой файл «1.wav»? В MSVS пробовал компилить?
файл лежит в текущей директории( папка с exe-шником )
MSVS не держу на своём компе, поскольку недолюбливаю сие творение.
UPD
Попробовал в MSVS, результат тот же
Колонки включал? :)
P.S. Попробуй sleep сделать больше, либо вызвать функцию в синхронном режиме. Возможно, оно не успевает подгрузить звук в память и воспроизвести его за 1 секунду.
если запускаете из среды студии, то ложите файл в одну папку с проектом.
Всё, проблема решена :)
Помогло это:
Оказывается, первые 1-1.5 секунды музыки были пустые. Ну и дурак же я :)
Всём спасибо
С чувством юмора — плохо, даже несмотря на смайлик (((
Тогда давайте скучно и по делу.
а) Видимо из всех присутствующих только у меня данный код работает:
б) Работает при компиляции в Dev-C++/gcc (TDM-GCC 4.8.1 64-bit), и при компиляции в MS Visual Studio 2012.
в) В обоих случаях использую библиотеку от Microsoft C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/Lib/x64/WinMM.lib. Обращаем внимание, что для компиляции в x64 используем либу x64 (для x32 — соответственно).
г) Удостоверяемся, что wav имеет правильный формат (а не, допустим, mp3, который сконвертировали в wav путем переименования файла).
Нет, у меня тоже работает.
мечтать не вредно )))