捕获音频时出现 OpenAL 错误
OpenAL error capturing audio
我正在使用OpenAL框架(https://github.com/kcat/openal-soft(从麦克风捕获音频。主文件是(在stackoverflow上找到(:
#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
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 时,我得到了这个:
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
你知道为什么吗?
第一个警告很容易解决:如果之前没有调用过 OpenAL 函数,请不要调用alGetError
。
那么请看 https://openal.org/documentation/openal-1.1-specification.pdf 中的第 6.4.2 节。
您可以读到失败时alcCaptureOpenDevice
返回 NULL。您应该检查返回值。
此外,在这里您将 NULL 作为回退到您可能没有的默认设备alcCaptureOpenDevice
的第一个参数。建议查询可用设备的列表,然后打开其中一个(这也在pdf中描述(。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 捕获音频时出现 OpenAL 错误
- OpenAL alGenBuffers 错误代码 40964 解决方案
- SFML内部OpenAL错误
- 试图在Mac上使用Eclipse编译OpenAL,结果在符号(s)中找不到架构x86_64错误
- OpenAL取消排队错误代码,不完整的文档