Я копирую, а затем перебираю различные примеры PlaySound, чтобы выяснить, как играть в WAV-файл в программе на C++.Playsound в C++: Ошибка файла с .wav-файлом
Прямо сейчас у меня есть тот, который работает больше, чем любой другой, но когда файл выполняет его, он не воспроизводит .wav-файл и внутри окна он сообщает мне, что есть ошибка файла с .wav файл.
Повторить: программа создает и запускает никаких проблем. В запущенной программе появляется ошибка. Я не могу понять, в чем проблема. Может ли это быть проблемой местоположения?
Ошибка говорит: «Wave :: Ошибка файла: drake.wav»
Я настроил SDL, хотя это возможно, я сделал это неправильно. Я использовал руководство по телефону Lazyfoo. Я использую Codeblocks и MinGW.
Вот код, который я нашел here:
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <mmsystem.h>
#include <iostream>
#include <fstream>
#include <conio.h>
using namespace std;
class Wave {
public:
Wave(char * filename);
~Wave();
void play(bool async=true);
bool isok();
private:
char * buffer;
bool ok;
HINSTANCE HInstance;
};
Wave::Wave(char * filename)
{
ok = false;
buffer = 0;
HInstance = GetModuleHandle(0);
ifstream infile(filename, ios::binary);
if (!infile)
{
std::cout << "Wave::file error: " << filename << std::endl;
return;
}
infile.seekg (0, ios::end);
int length = infile.tellg();
buffer = new char[length];
infile.seekg (0, ios::beg);
infile.read (buffer, length);
infile.close();
ok = true;
}
Wave::~Wave()
{
PlaySound(NULL, 0, 0);
delete [] buffer;
}
void Wave::play(bool async)
{
if (!ok)
return;
if (async)
PlaySound(buffer, HInstance, SND_MEMORY | SND_ASYNC);
else
PlaySound(buffer, HInstance, SND_MEMORY);
}
bool Wave::isok()
{
return ok;
}
int main(int argc, char *argv[]) {
std::cout << "Trying to play sound...\n";
Wave one("drake.wav");
one.play();
std::cout << "press key to exit";
getch();
return 0;
}
** EDIT: Спасибо всем за вашу помощь. Мне потребовалось некоторое время, чтобы понять это.
Вот что я сделал:
1) Я поместил файл .wav в корневой папке. 2) Я пошел: проекта Свойства параметры сборки Проекта Поиск Каталоги ресурсов Компилятор
и я поместил местоположение файла в компилятором ресурсов.
**
Да, это может быть проблема с расположением файлов. Помните (или учитесь!), Что Code :: Blocks ** запускает ваш исполняемый файл с корневым каталогом проекта в качестве текущего каталога **. Запуск exe из Windows Explorer (или linux equiv) запускает программу с ** ее папкой в качестве текущего каталога **. Текущий каталог используется при открытии файла, и вы либо (0) не указали полный путь, либо (1) не указали относительный путь. – enhzflep
Кроме того, формат WAV довольно прост и, если вы прочитали книгу Петцольда, вы увидите, что использование звукового оборудования довольно прямолинейно. Примерно в 200 строк кода вы можете прочитать файл с диска и отправить его на звуковую карту самостоятельно. Естественно, у вас есть больше контроля, чем то, что предлагает вам PlaySound. Например, способность воспроизводить звуки, которые не существуют на диске, или ускорить/замедлить скорость воспроизведения. Запись музыкальной ноты, а затем изменение скорости воспроизведения изменяет высоту тона (и продолжительность, к сожалению). Со звуком очень весело. :) – enhzflep