diff --git a/zh-cn/application-dev/media/audio-renderer.md b/zh-cn/application-dev/media/audio-renderer.md
index b89aaaf0c4fea4a8f1ccbdebf05512f9cb7511cf..2179c1a06e17b4bf594ef8dde767a896e510951b 100644
--- a/zh-cn/application-dev/media/audio-renderer.md
+++ b/zh-cn/application-dev/media/audio-renderer.md
@@ -1,28 +1,29 @@
-# AudioRenderer音频渲染开发指导
+# 音频渲染开发指导
## 场景介绍
-AudioRenderer提供了渲染音频文件和控制播放的接口,开发者可以通过本指导,了解如何在输出设备中播放音频文件并管理播放任务。
-同时,AudioRenderer支持音频中断的功能。
-**音频中断:** 当优先级较高的音频流需要播放时,AudioRenderer会中断优先级较低的流。例如,当用户在收听音乐时有来电,则优先级较低音乐播放将被暂停,具体可参考[开发步骤](#开发步骤)。
+AudioRenderer提供了渲染音频文件和控制播放的接口,开发者可以通过本指导,了解如何在输出设备中播放音频文件并管理播放任务。
-## 状态检查
+同时,AudioRenderer支持音频中断的功能。
-您还应该记住,AudioRenderer 是基于状态的。
-也就是说,AudioRenderer 有一个内部状态,在调用播放控制 API 时必须始终检查它,因为某些操作仅在音频播放器处于给定状态时才可接受。
-如果您在不正确的状态下执行操作,系统可能会抛出错误/异常或生成其他未定义的行为。
+### 音频中断
-## 异步操作
+当优先级较高的音频流需要播放时,AudioRenderer会中断优先级较低的流。例如,当用户在收听音乐时有来电,则优先级较低音乐播放将被暂停,具体可参考[开发步骤](#开发步骤)。
-大多数AudioRenderer调用都是异步的。因此,UI线程不会被阻塞。
对于每个API,框架都提供callback函数和promise函数。
-在本例中,为了简单起见,使用了promise函数。[**js api audio.md**](../reference/apis/js-apis-audio.md)为callback和promise提供参考。
+### 状态检查
+
+在进行应用开发的过程中,建议开发者通过on('stateChange')方法订阅AudioRenderer的状态变更。因为针对AudioRenderer的某些操作,仅在音频播放器在固定状态时才能执行。如果应用在音频播放器处于错误状态时执行操作,系统可能会抛出异常或生成其他未定义的行为。
+
+### 异步操作
+
+为保证UI线程不被阻塞,大部分AudioRenderer调用都是异步的。对于每个API均提供了callback函数和Promise函数,以下示例均采用Promise函数,更多方式可参考[js-apis-audio](../reference/apis/js-apis-audio.md#audiorenderer8)。
## 开发步骤
1. 使用createAudioRenderer()创建一个AudioRenderer实例。
在audioCapturerOptions中设置相关参数。该实例可用于音频渲染、控制和获取采集状态,以及注册通知回调。
- ```
+ ```js
var audioStreamInfo = {
samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100,
channels: audio.AudioChannel.CHANNEL_1,
@@ -43,12 +44,16 @@ AudioRenderer提供了渲染音频文件和控制播放的接口,开发者可
let audioRenderer = await audio.createAudioRenderer(audioRendererOptions);
```
-
-2. 使用on('interrupt')方法订阅音频中断事件。
当优先级更高或相等的Stream-B请求激活并使用输出设备时,Stream-A被中断。
- 在某些情况下,框架会采取暂停播放、降低音量等强制操作,并通过InterruptEvent通知应用。在其他情况下,应用可以自行对InterruptEvent做出响应。
+
+2. 使用on('interrupt')方法订阅音频中断事件。
+
+ 当优先级更高或相等的Stream-B请求激活并使用输出设备时,Stream-A被中断。
+
+ 在某些情况下,框架会采取暂停播放、降低音量等强制操作,并通过InterruptEvent通知应用。在其他情况下,应用可以自行对InterruptEvent做出响应。
+
在音频中断的情况下,应用可能会碰到音频数据写入失败的问题。所以建议不感知、不处理中断的应用在写入音频数据前,使用audioRenderer.state检查播放器状态。而订阅音频中断事件,可以获取到更多详细信息,具体可参考[InterruptEvent](../reference/apis/js-apis-audio.md#interruptevent8)。
-```
+ ```js
audioRenderer.on('interrupt', (interruptEvent) => {
console.info('InterruptEvent Received');
console.info('InterruptType: ' + interruptEvent.eventType);
@@ -92,12 +97,14 @@ AudioRenderer提供了渲染音频文件和控制播放的接口,开发者可
}
}
});
-```
+ ```
-3. 调用start()方法来启动/恢复播放任务。
- 启动完成后,渲染器状态将变更为STATE_RUNNING,然后应用可以开始读取缓冲区。
+3. 调用start()方法来启动/恢复播放任务。
+
- ```
+启动完成后,渲染器状态将变更为STATE_RUNNING,然后应用可以开始读取缓冲区。
+
+ ```js
async function startRenderer() {
var state = audioRenderer.state;
// state should be prepared, paused or stopped.
@@ -119,9 +126,10 @@ AudioRenderer提供了渲染音频文件和控制播放的接口,开发者可
```
4. 调用write()方法向缓冲区写入数据。
+
将需要播放的音频数据读入缓冲区,重复调用write()方法写入。
- ```
+ ```js
async function writeBuffer(buf) {
var state = audioRenderer.state;
if (state != audio.AudioState.STATE_RUNNING) {
@@ -166,7 +174,7 @@ AudioRenderer提供了渲染音频文件和控制播放的接口,开发者可
5. (可选)调用pause()方法或stop()方法暂停/停止渲染音频数据。
- ```
+ ```js
async function pauseRenderer() {
var state = audioRenderer.state;
if (state != audio.AudioState.STATE_RUNNING) {
@@ -203,9 +211,10 @@ AudioRenderer提供了渲染音频文件和控制播放的接口,开发者可
```
6. 任务完成,调用release()方法释放相关资源。
+
AudioRenderer会使用大量的系统资源,所以请确保完成相关任务后,进行资源释放。
- ```
+ ```js
async function releaseRenderer() {
if (state_ == RELEASED || state_ == NEW) {
console.info('Resourced already released');