C + + 프로그램에서 .wav 파일을 재생하는 방법을 알아 내기 위해 PlaySound의 다양한 예제를 사용하여 복사하여 시도하고 있습니다.Playsound in C++ : .wav 파일의 파일 오류
지금 당장 다른 파일보다 더 많이 작동하는 것으로 보이지만 파일을 실행하면 .wav 파일이 재생되지 않고 창 내부에서 .wav 파일 오류가 있음을 알 수 있습니다. 파일.
반복해서 말하기를 : 프로그램은 아무런 문제도 일으키지 않고 실행합니다. 실행중인 프로그램에서 오류가 표시됩니다. 나는 그 문제가 무엇인지 알 수 없다. 단순히 위치 문제 일 수 있습니까?
오류가 말한다 : "웨이브 :: 파일 오류 : 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;
}
** 편집 : 당신의 도움을 주셔서 감사합니다 여러분. 이것을 이해하는 데는 시간이 걸렸습니다.
는 여기에 내가했던 일이야 :
1) 나는 루트 폴더 안에 .wav 파일을 배치. 2) 나는 갔다 : 프로젝트 속성 프로젝트의 빌드 옵션 검색 디렉토리 리소스 컴파일러
나는 리소스 컴파일러에서 파일의 위치를 배치했다. 파일을 찾을 수 없습니다
ifstream infile(filename, ios::binary);
if (!infile)
{
std::cout << "Wave::file error: " << filename << std::endl;
return;
}
그래서,이 문제는 간단한 것 같다 :
**
예, 파일 위치 문제 일 수 있습니다. Code :: Blocks **는 프로젝트의 루트 디렉토리를 현재 디렉토리로 사용하여 실행 파일을 실행한다는 것을 기억하십시오 (또는 배우십시오!). Windows 탐색기 (또는 Linux Equiv)에서 exe를 실행하면 프로그램이 ** 현재 디렉토리 **의 폴더로 실행됩니다. 현재 디렉토리는 파일을 열 때 사용되며 사용자는 (0) 전체 경로를 지정하지 않았거나 (1) 상대 경로를 지정하지 않았습니다. – enhzflep
또한 WAV 형식은 매우 간단하며 Petzold의 책을 읽었다면 사운드 하드웨어를 사용하는 것이 상당히 간단하다는 것을 알 수 있습니다. 약 200 줄의 코드를 사용하여 디스크에서 파일을 읽고 사운드 카드로 직접 보낼 수 있습니다. 당연히 PlaySound가 제공하는 것보다 더 많은 제어력을 확보하고 있습니다. 예를 들어, 디스크에 존재하지 않는 사운드를 재생하거나 재생 속도를 높이거나 낮추는 기능. 음표를 녹음 한 다음 재생 속도를 변경하면 피치가 변경됩니다 (불행하게도 음장 길이도 불편 함). :) – enhzflep