sdl — Playsound в C ++: ошибка файла с WAV-файлом

Я копирую, а затем работаю с различными примерами PlaySound, чтобы выяснить, как воспроизвести файл .wav в программе на C ++.

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

Повторим: программа собирается и запускается без проблем. Именно в работающей программе появляется ошибка. Я не могу понять, в чем проблема. Может ли это быть просто проблемой местоположения?

Ошибка говорит: «Wave :: file error: drake.wav»

Я настроил SDL, хотя возможно, что сделал это неправильно. Я использовал руководство на Lazyfoo. Я использую Codeblocks и MinGW.

Вот код, который я нашел Вот:

#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;
}

** РЕДАКТИРОВАТЬ: Спасибо всем за вашу помощь. Мне понадобилось время, чтобы понять это.

Вот что я сделал:

1) Я поместил файл .wav в корневую папку.
2) Я пошел в:
проект
свойства
Параметры сборки проекта
Поиск в каталогах
Ресурсный Компилятор

и я поместил расположение файла в компилятор ресурсов.

**

0

Решение

В вашем коде есть проверка:

ifstream infile(filename, ios::binary);
if (!infile)
{
std::cout << "Wave::file error: " << filename << std::endl;
return;
}

Итак, похоже, что проблема проста: файл не найден. Это означает, что этот вопрос не о PlaySound, но об открытии файла.

Вам нужно использовать полный путь (что-то вроде Wave one("c:\\project\\drake.wav");) или поместите wav-файл прямо в каталог программы (если вы запускаете программу из IDE, текущий путь к программе может быть немного неожиданным для вас — не путь к исполняемому файлу, а путь к файлу проекта или как то так).

0

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

Других решений пока нет …

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