本文主要是介绍最简单OPENAL例子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
// soundtest.cpp : 定义控制台应用程序的入口点。//
#include "stdafx.h"
#include <stdlib.h>
#include <AL/alut.h>
#include <al.h>
#include <alc.h>
#include <iostream>
#include <string>
#include <boost/lexical_cast.hpp>
using namespace boost;
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
#define AUDIO_DATA_SIZE 898986
ALCdevice * device = alcOpenDevice(NULL);
if (device)
{
ALCcontext * context = alcCreateContext(device, NULL);
alcMakeContextCurrent(context);
}
else
{
cout << "device open error" << endl;
}
FILE *audioFile;
unsigned char *audioBuffer = new unsigned char[AUDIO_DATA_SIZE];
ALuint buffer, source;
// Read the audio data from the file
audioFile = fopen("OutPcm.pcm", "r");
if (audioFile == NULL)
{
cout << "open file error" << endl;
return 0;
}
fread(audioBuffer, sizeof(unsigned char),
AUDIO_DATA_SIZE, audioFile);
// Generate an OpenAL buffer for the data
int err;
alGetError();
alGenBuffers(1, &buffer);
if ((err = alGetError()) != AL_NO_ERROR)
{
string error_str = lexical_cast<string>(err);
cout << "gen buffer error" << endl;
cout << error_str.c_str() << endl;
}
alBufferData(buffer, AL_FORMAT_MONO16, audioBuffer,
AUDIO_DATA_SIZE, 16000);
if ((err = alGetError()) != AL_NO_ERROR)
{
string error_str = lexical_cast<string>(err);
cout << "gen alBufferData error" << endl;
cout << error_str.c_str() << endl;
}
// Pass the buffer to an OpenAL source and play it
alGenSources(1, &source);
if ((err = alGetError()) != AL_NO_ERROR)
{
cout << "gen alGenSources error" << endl;
}
alSourcei(source, AL_BUFFER, buffer);
if ((err = alGetError()) != AL_NO_ERROR)
{
cout << "gen alSourcei error" << endl;
}
alSourcePlay(source);
if ((err = alGetError()) != AL_NO_ERROR)
{
cout << "gen alSourcePlay error" << endl;
}
alutSleep (10);
alutExit ();
return EXIT_SUCCESS;
}
这篇关于最简单OPENAL例子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!