首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenAL错误捕获音频

OpenAL错误捕获音频
EN

Stack Overflow用户
提问于 2017-05-10 08:25:03
回答 1查看 1.1K关注 0票数 1

我使用OpenAL框架(https://github.com/kcat/openal-soft)从麦克风捕捉音频。主文件(在堆栈溢出中找到):

代码语言:javascript
复制
#include <stdio.h>
#include "AL/al.h"
#include "AL/alc.h"
using namespace std;

const int SRATE = 44100;
const int SSIZE = 1102;

ALbyte buffer[220500];
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;
}

要编译主文件,我使用以下CMakeLists.txt

代码语言:javascript
复制
cmake_minimum_required(VERSION 2.8)

project( SharedLibrary C CXX )

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -fPIC -fpermissive")

set(OPENAL_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/openal/")

set(OPENAL_LIB_DIR "${OPENAL_ROOT}build")
set(OPENAL_INCLUDE_DIR "${OPENAL_ROOT}include/AL")

include_directories(${OPENAL_INCLUDE_DIR})

link_directories(${OPENAL_LIB_DIR})

add_executable( main main.cpp )

target_link_libraries( main openal)

编译工作正常,但是当我运行./main时,我获得了以下内容:

代码语言:javascript
复制
AL lib: (WW) alGetError: Querying error state on null context (implicitly 0xa004)
AL lib: (WW) jack_msg_handler: Cannot connect to server socket err = No such file or directory
AL lib: (WW) jack_msg_handler: Cannot connect to server request channel
AL lib: (WW) jack_msg_handler: jack server is not running or cannot be started
AL lib: (WW) jack_msg_handler: JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
AL lib: (WW) jack_msg_handler: JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
AL lib: (WW) ALCjackBackendFactory_init: jack_client_open() failed, 0x11
AL lib: (WW) alc_initconfig: Failed to initialize backend "jack"
AL lib: (WW) alGetError: Querying error state on null context (implicitly 0xa004)
AL lib: (EE) alc_cleanup: 1 device not closed

你知道为什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-10 08:46:37

第一个警告很容易解决:如果以前没有调用过alGetError函数,就不要调用OpenAL。

然后,请查看https://openal.org/documentation/openal-1.1-specification.pdf中的6.4.2节。

您可以看到alcCaptureOpenDevice在失败时返回NULL。您应该检查返回值。

此外,这里给出了NULL作为alcCaptureOpenDevice返回到您可能没有的默认设备的第一个参数。建议查询可用设备的列表,然后打开其中一个设备(这在pdf中也有描述)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43887173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档