Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
3999b6b0
D
Docs
项目概览
OpenHarmony
/
Docs
大约 1 年 前同步成功
通知
159
Star
292
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3999b6b0
编写于
5月 10, 2022
作者:
L
liuyuehua1
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Reference file improvement.
Signed-off-by:
N
liuyuehua1
<
liuyuehua1@huawei.com
>
上级
f5eaab9a
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
53 addition
and
25 deletion
+53
-25
zh-cn/application-dev/media/Readme-CN.md
zh-cn/application-dev/media/Readme-CN.md
+1
-1
zh-cn/application-dev/media/opensles-capture.md
zh-cn/application-dev/media/opensles-capture.md
+34
-21
zh-cn/application-dev/reference/native-apis/OpenSLES_OpenHarmony.md
...ication-dev/reference/native-apis/OpenSLES_OpenHarmony.md
+18
-3
未找到文件。
zh-cn/application-dev/media/Readme-CN.md
浏览文件 @
3999b6b0
...
...
@@ -6,7 +6,7 @@
-
[
音频录制开发指导
](
audio-recorder.md
)
-
[
音频渲染开发指导
](
audio-renderer.md
)
-
[
音频采集开发指导
](
audio-capturer.md
)
-
[
音频录制
开发指导
](
opensles-capture.md
)
-
[
OpenSL ES录音
开发指导
](
opensles-capture.md
)
-
视频
-
[
视频播放开发指导
](
video-playback.md
)
...
...
zh-cn/application-dev/media/opensles-capture.md
浏览文件 @
3999b6b0
# OpenSL ES音频
播放
开发指导
# OpenSL ES音频
录制
开发指导
## 场景介绍
OpenSL ES™ 是无授权费、跨平台、针对嵌入式系统精心优化的硬件音频加速API。
开发者可以通过本文了解到在
**OpenHarmony**
如何使用
**OpenSL ES**
进行录音相关操作;当前仅实现了部分[
**OpenSL ES**
接口]
(https://gitee.com/openharmony/third_party_opensles/blob/master/api/1.0.1/OpenSLES.h),未实现接口调用后会返回
**SL_RESULT_FEATURE_UNSUPPORTED**
...
...
@@ -10,7 +11,15 @@ OpenSL ES™ 是无授权费、跨平台、针对嵌入式系统精心优化的
以下步骤描述了在
**OpenHarmony**
如何使用
**OpenSL ES**
开发音频录音功能:
1.
使用
**slCreateEngine**
接口创建引擎对象和实例化引擎对象
**engine**
。
1.
添加头文件
```c++
#include <OpenSLES.h>
#include <OpenSLES_OpenHarmony.h>
#include <OpenSLES_Platform.h>
```
2.
使用
**slCreateEngine**
接口创建引擎对象和实例化引擎对象
**engine**
。
```c++
SLObjectItf engineObject = nullptr;
...
...
@@ -20,7 +29,7 @@ OpenSL ES™ 是无授权费、跨平台、针对嵌入式系统精心优化的
2
.
获取接口
**SL_IID_ENGINE**
的引擎接口
**engineEngine**
实例
3
.
获取接口
**SL_IID_ENGINE**
的引擎接口
**engineEngine**
实例
```c++
SLEngineItf engineItf = nullptr;
...
...
@@ -29,7 +38,7 @@ OpenSL ES™ 是无授权费、跨平台、针对嵌入式系统精心优化的
3
.
配置录音器信息(配置输入源audiosource、输出源audiosink),创建录音对象
**pcmCapturerObject**
。
4
.
配置录音器信息(配置输入源audiosource、输出源audiosink),创建录音对象
**pcmCapturerObject**
。
```c++
SLDataLocator_IODevice io_device = {
...
...
@@ -59,6 +68,7 @@ OpenSL ES™ 是无授权费、跨平台、针对嵌入式系统精心优化的
0,
0
};
SLDataSink audioSink = {
&buffer_queue,
&format_pcm
...
...
@@ -70,14 +80,14 @@ OpenSL ES™ 是无授权费、跨平台、针对嵌入式系统精心优化的
(*pcmCapturerObject)->Realize(pcmCapturerObject, SL_BOOLEAN_FALSE);
```
4
.
获取录音接口
**SL_IID_RECORD**
的
**recordItf**
接口实例
5
.
获取录音接口
**SL_IID_RECORD**
的
**recordItf**
接口实例
```
SLRecordItf recordItf;
(*pcmCapturerObject)->GetInterface(pcmCapturerObject, SL_IID_RECORD, &recordItf);
```
5
.
获取接口
**SL_IID_OH_BUFFERQUEUE**
的
**bufferQueueItf**
实例
6
.
获取接口
**SL_IID_OH_BUFFERQUEUE**
的
**bufferQueueItf**
实例
```
SLOHBufferQueueItf bufferQueueItf;
...
...
@@ -86,12 +96,12 @@ OpenSL ES™ 是无授权费、跨平台、针对嵌入式系统精心优化的
6
.
注册
**BuqqerQueueCallback**
回调
7
.
注册
**BuqqerQueueCallback**
回调
```c++
static void Bu
qq
erQueueCallback(SLOHBufferQueueItf bufferQueueItf, void *pContext, SLuint32 size)
static void Bu
ff
erQueueCallback(SLOHBufferQueueItf bufferQueueItf, void *pContext, SLuint32 size)
{
AUDIO_INFO_LOG("Bu
qq
erQueueCallback");
AUDIO_INFO_LOG("Bu
ff
erQueueCallback");
FILE *wavFile = (FILE *)pContext;
if (wavFile != nullptr) {
SLuint8 *buffer = nullptr;
...
...
@@ -107,12 +117,11 @@ OpenSL ES™ 是无授权费、跨平台、针对嵌入式系统精心优化的
}
//wavFile_ 需要设置为用户想要播放的文件描述符
(*bufferQueueItf)->RegisterCallback(bufferQueueItf, Bu
qq
erQueueCallback, wavFile_);
(*bufferQueueItf)->RegisterCallback(bufferQueueItf, Bu
ff
erQueueCallback, wavFile_);
```
7.
开始录音
8.
开始录音
```c++
static void CaptureStart(SLRecordItf recordItf, SLOHBufferQueueItf bufferQueueItf, FILE *wavFile)
...
...
@@ -128,7 +137,7 @@ OpenSL ES™ 是无授权费、跨平台、针对嵌入式系统精心优化的
fwrite(buffer, 1, pSize, wavFile);
(*bufferQueueItf)->Enqueue(bufferQueueItf, buffer, pSize);
} else {
AUDIO_INFO_LOG("
BuqqerQueueCallback
, buffer is null or pSize: %{public}lu.", pSize);
AUDIO_INFO_LOG("
CaptureStart
, buffer is null or pSize: %{public}lu.", pSize);
}
}
...
...
@@ -137,15 +146,19 @@ OpenSL ES™ 是无授权费、跨平台、针对嵌入式系统精心优化的
```
7.
结束录音
9.
结束录音
```c++
static void CaptureStop(SLRecordItf recordItf)
{
AUDIO_INFO_LOG("Enter CaptureStop");
fflush(wavFile_);
(*recordItf)->SetRecordState(recordItf, SL_RECORDSTATE_STOPPED);
(*pcmCapturerObject)->Destroy(pcmCapturerObject);
(*engineObject)->Destroy(engineObject);
fclose(wavFile_);
wavFile_ = nullptr;
return;
}
```
...
...
zh-cn/application-dev/reference/native-apis/OpenSLES_OpenHarmony.md
浏览文件 @
3999b6b0
...
...
@@ -11,8 +11,23 @@
### Functions
| Function | Description |
| -------- | -------- |
| SLresult (
*Enqueue)(SLOHBufferQueueItf self, const void *
buffer, SLuint32 size) | 将保存
玩
录音数据后的buffer加入空闲的buffer队列 |
| SLresult (
*Enqueue)(SLOHBufferQueueItf self, const void *
buffer, SLuint32 size) | 将保存
完
录音数据后的buffer加入空闲的buffer队列 |
| SLresult (
*
Clear) (SLOHBufferQueueItf self) | 录音结束后销毁BufferQueue接口对象 |
| SLresult (
*GetState) (SLOHBufferQueueItf self, SLOHBufferQueueState *
state) | 获取buffer的状态 |
| SLresult (
*GetBuffer) (SLOHBufferQueueItf self, SLuint8*
*
buffer, SLuint32& size) | 获取从输入设备存入录音数据的buffer |
| SLresult (
*RegisterCallback) (SLOHBufferQueueItf self, SlOHBufferQueueCallback callback, void*
pContext) | 注册读取音频数据的回调函数 |
### **Details**
如下是对以上接口函数形参的解释
| Function | Parameter introduction |
| -------- | -------- |
| Enqueue() | SLOHBufferQueueItf self :BufferQueue接口对象; const void
*
buffer: 使用后的空闲buffer; SLuint32 size:buffer 长度; |
| Clear() | SLOHBufferQueueItf self :BufferQueue接口对象; |
| GetBuffer() | SLOHBufferQueueItf self :BufferQueue接口对象; SLuint8
**
buffer: 获取带有录音数据的buffer; SLuint32& size:buffer 长度; |
| RegisterCallback() | SLOHBufferQueueItf self :BufferQueue接口对象; SlOHBufferQueueCallback callback: 回调函数; void
*
pContext: 录音文件; |
### **Third party reference**
[
接口函数使用详情参考
](
https://gitee.com/openharmony/third_party_opensles/blob/master/api/1.0.1/OpenSLES.h
)
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录