代码之家  ›  专栏  ›  技术社区  ›  Cenoc

用openal[关闭]录制音频

  •  13
  • Cenoc  · 技术社区  · 15 年前

    我已经比较了C++中的各种音频库。我在想,从Openal开始我有点困。有人可以指出一个例子程序如何记录从MIC使用OpenAL在C++中。

    事先谢谢!

    2 回复  |  直到 12 年前
        1
  •  7
  •   Goz    15 年前

    上次我检查Openal的时候很简单。创建录制设备并开始录制。然后调用get buffer函数。它将等待直到有足够的数据填充缓冲区,然后在有足够的数据时返回。

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

        2
  •  26
  •   Nikolaus Gradwohl    15 年前

    打开输入设备并使用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;
    }