HarmonyOS鸿蒙Next中opensl es接口进行音频录制失败
HarmonyOS鸿蒙Next中opensl es接口进行音频录制失败
SLresult result; result = slCreateEngine(&engineObject, 0, nullptr, 0, nullptr, nullptr); assert(SL_RESULT_SUCCESS == result); result = (*engineObject)->Realize(engineObject, SL_BOOLEAN_FALSE); assert(SL_RESULT_SUCCESS == result);
SLEngineItf engineItf = nullptr;
result = (*engineObject)->GetInterface(engineObject, SL_IID_ENGINE, &engineItf);
assert(SL_RESULT_SUCCESS == result);
SLDataLocator_IODevice io_device = {SL_DATALOCATOR_IODEVICE, SL_IODEVICE_AUDIOINPUT, SL_DEFAULTDEVICEID_AUDIOINPUT,
nullptr};
SLDataSource audioSource = {&io_device, NULL};
SLDataLocator_BufferQueue buffer_queue = {SL_DATALOCATOR_BUFFERQUEUE, 3};
// 具体参数需要根据音频文件格式进行适配
SLDataFormat_PCM format_pcm = {SL_DATAFORMAT_PCM, // 输入的音频格式
1, // 单声道
SL_SAMPLINGRATE_44_1, // 采样率: 8000HZ
SL_PCMSAMPLEFORMAT_FIXED_16, // 音频采样格式,小尾数,带符号的16位整数
0,
0,
0};
SLDataSink audioSink = {&buffer_queue, &format_pcm};
const SLInterfaceID id[1] = {SL_IID_OH_BUFFERQUEUE};
const SLboolean req[1] = {SL_BOOLEAN_TRUE};
result = (*engineItf)->CreateAudioRecorder(engineItf, &pcmCapturerObject, &audioSource, &audioSink, 1, id, req);
assert(SL_RESULT_SUCCESS == result);
result = (*pcmCapturerObject)->Realize(pcmCapturerObject, SL_BOOLEAN_FALSE);
assert(SL_RESULT_SUCCESS == result);
result = (*pcmCapturerObject)->GetInterface(pcmCapturerObject, SL_IID_RECORD, &recordItf);
assert(SL_RESULT_SUCCESS == result);
SLOHBufferQueueItf bufferQueueItf;
result = (*pcmCapturerObject)->GetInterface(pcmCapturerObject, SL_IID_OH_BUFFERQUEUE, &bufferQueueItf);
//assert(SL_RESULT_SUCCESS == result);
result = (*bufferQueueItf)->RegisterCallback(bufferQueueItf, RecordBufferQueueCallback, self);
assert(SL_RESULT_SUCCESS == result);
SLuint32 state;
(*recordItf)->GetRecordState(recordItf, &state);
TSK_DEBUG_INFO("GetRecordState %d",state);
result = (*recordItf)->SetRecordState(recordItf, SL_RECORDSTATE_RECORDING);
assert(SL_RESULT_SUCCESS == result);
更多关于HarmonyOS鸿蒙Next中opensl es接口进行音频录制失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html
4 回复
我也是无法收到回调,怎么解决的?
在HarmonyOS鸿蒙Next中使用OpenSL ES接口进行音频录制失败,可能原因包括:
-
权限未正确配置,确保已申请
RECORD_AUDIO
权限; -
OpenSL ES引擎或录音器未正确初始化,检查
SLObjectItf
和SLRecordItf
的创建与配置; -
音频参数设置不当,如采样率、声道数等需与设备兼容;
-
设备资源冲突,确保无其他应用占用音频资源。
建议逐步排查并参考官方文档调试。