2010-06-16 92 views
13

我一直在比较C++中提供的各种音频库。我想知道,我从OpenAL开始就陷入了困境。有人能指出一个示例程序如何使用C++中的OpenAL从麦克风记录。使用OpenAL录制音频

提前致谢!

回答

7

我上次检查OpenAL时很简单。您创建录制设备并开始录制。然后您只需调用get缓冲区函数。它会一直等到有足够的数据填满缓冲区,然后在有足够数据时返回。

为什么不看看OpenAL SDK附带的“捕获”示例......?

+1

这将是一个名为testcapture.c文件,如果你正在寻找的OpenAL的源代码,获取样品。 – 2010-07-02 08:03:24

25

打开输入设备,并开始使用alcCaptureStart记录和使用alcCaptureSamples

#include <OpenAL/al.h> 
#include <OpenAL/alc.h> 
#include <iostream> 
using namespace std; 

const int SRATE = 44100; 
const int SSIZE = 1024; 

ALbyte buffer[22050]; 
ALint sample; 

int main(int argc, char *argv[]) { 
    alGetError(); 
    ALCdevice *device = alcCaptureOpenDevice(NULL, SRATE, AL_FORMAT_STEREO16, SSIZE); 
    if (alGetError() != AL_NO_ERROR) { 
     return 0; 
    } 
    alcCaptureStart(device); 

    while (true) { 
     alcGetIntegerv(device, ALC_CAPTURE_SAMPLES, (ALCsizei)sizeof(ALint), &sample); 
     alcCaptureSamples(device, (ALCvoid *)buffer, sample); 

     // ... do something with the buffer 
    } 

    alcCaptureStop(device); 
    alcCaptureCloseDevice(device); 

    return 0; 
}