From 264c77fc614abcde33a2311e2e251338802e7748 Mon Sep 17 00:00:00 2001 From: zengyawen Date: Sat, 19 Mar 2022 07:02:04 +0000 Subject: [PATCH 1/9] update zh-cn/application-dev/media/Readme-CN.md. Signed-off-by: zengyawen --- zh-cn/application-dev/media/Readme-CN.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/zh-cn/application-dev/media/Readme-CN.md b/zh-cn/application-dev/media/Readme-CN.md index f56564610a4..42191af14d1 100755 --- a/zh-cn/application-dev/media/Readme-CN.md +++ b/zh-cn/application-dev/media/Readme-CN.md @@ -3,8 +3,10 @@ - 音频 - [音频开发概述](audio-overview.md) - [音频播放开发指导](audio-playback.md) - - [音频管理开发指导](audio-management.md) - [音频录制开发指导](audio-recorder.md) + - [音频渲染开发指导](audio-renderer.md) + - [音频采集开发指导](audio-capturer.md) + - [音频管理开发指导](audio-management.md) - 视频 - [视频播放开发指导](video-playback.md) -- Gitee From e16695a2ff56a55172d2fcc55448ac3b15949387 Mon Sep 17 00:00:00 2001 From: zengyawen Date: Sat, 19 Mar 2022 07:07:25 +0000 Subject: [PATCH 2/9] =?UTF-8?q?=E6=8B=BC=E5=86=99=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20Signed-off-by:=20zengyawen=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zh-cn/application-dev/media/video-playback.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh-cn/application-dev/media/video-playback.md b/zh-cn/application-dev/media/video-playback.md index cecce9c3b62..16cdafc618a 100644 --- a/zh-cn/application-dev/media/video-playback.md +++ b/zh-cn/application-dev/media/video-playback.md @@ -466,9 +466,9 @@ await videoPlayer.play().then(() => { ```js // 设置窗口宽高等属性 + onload = 'LoadXcomponent' // 默认加载接口 + style = "width:720px;height:480px;border-color:red;border-width:5px;"> // 设置窗口宽高等属性 ``` -- Gitee From c04eac70e12d4a236974c01fc0818f4da1d4807c Mon Sep 17 00:00:00 2001 From: zengyawen Date: Sat, 19 Mar 2022 07:10:00 +0000 Subject: [PATCH 3/9] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E6=8F=8F=E8=BF=B0?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E4=BF=AE=E6=94=B9=20Signed-off-by:=20zengyaw?= =?UTF-8?q?en=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zh-cn/application-dev/media/audio-playback.md | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/zh-cn/application-dev/media/audio-playback.md b/zh-cn/application-dev/media/audio-playback.md index a142a8b0106..826e2fa10f5 100644 --- a/zh-cn/application-dev/media/audio-playback.md +++ b/zh-cn/application-dev/media/audio-playback.md @@ -79,10 +79,10 @@ function printfDescription(obj) { } } -//1、创建实例 +//1. 创建实例 let audioPlayer = media.createAudioPlayer(); SetCallBack(audioPlayer); //设置事件回调 -//2、用户选择音频,设置uri +//2. 用户选择音频,设置uri let fdPath = 'fd://' let path = 'data/accounts/account_0/appdata/ohos.xxx.xxx.xxx/01.mp3'; await fileIO.open(path).then(fdNumber) => { @@ -95,15 +95,15 @@ await fileIO.open(path).then(fdNumber) => { }); audioPlayer.src = fdPath; //设置src属性,并触发'dataLoad'事件回调 -//3、播放音频 +//3. 播放音频 audioPlayer.play(); //需等待'dataLoad'事件回调完成后,才可调用play进行播放,触发'play'事件回调 -//4、跳转播放位置 +//4. 跳转播放位置 audioPlayer.seek(30000); //触发'timeUpdate'事件回调,seek到30000ms处播放 -//5、设置音量 +//5. 设置音量 audioPlayer.setVolume(0.5); //触发'volumeChange'事件回调 -//6、暂停播放 +//6. 暂停播放 audioPlayer.pause(); //触发'pause'事件回调,暂停播放 -//7、获取轨道信息 +//7. 获取轨道信息 audioPlayer.getTrackDescription((error, arrlist) => { //通过回调方式获取音频轨道信息 if (typeof (arrlist) != 'undefined') { for (let i = 0; i < arrlist.length; i++) { @@ -113,11 +113,11 @@ audioPlayer.getTrackDescription((error, arrlist) => { //通过回调方式获 console.log(`audio getTrackDescription fail, error:${error.message}`); } }); -//8、停止播放 +//8. 停止播放 audioPlayer.stop(); //触发'stop'事件回调 -//9、重置播放资源 +//9. 重置播放资源 audioPlayer.reset(); //触发'reset'事件回调后,重新设置src属性,可完成切歌 -//10、释放资源 +//10. 释放资源 audioPlayer.release(); //audioPlayer资源被销毁 audioPlayer = undefined; ``` @@ -145,7 +145,7 @@ function SetCallBack(audioPlayer) { let audioPlayer = media.createAudioPlayer(); //创建一个音频播放实例 SetCallBack(audioPlayer); //设置事件回调 -/* 用户选择视频设置fd(本地播放) */ +/* 用户选择音频设置fd(本地播放) */ let fdPath = 'fd://' let path = 'data/accounts/account_0/appdata/ohos.xxx.xxx.xxx/01.mp3'; await fileIO.open(path).then(fdNumber) => { @@ -183,7 +183,7 @@ function SetCallBack(audioPlayer) { let audioPlayer = media.createAudioPlayer(); //创建一个音频播放实例 SetCallBack(audioPlayer); //设置事件回调 -/* 用户选择视频设置fd(本地播放) */ +/* 用户选择音频设置fd(本地播放) */ let fdPath = 'fd://' let path = 'data/accounts/account_0/appdata/ohos.xxx.xxx.xxx/01.mp3'; await fileIO.open(path).then(fdNumber) => { @@ -199,7 +199,7 @@ audioPlayer.src = fdPath; //设置src属性,并触 /* 播放一段时间后,下发切歌指令 */ audioPlayer.reset(); -/* 用户选择视频设置fd(本地播放) */ +/* 用户选择音频设置fd(本地播放) */ let fdNextPath = 'fd://' let nextPath = 'data/accounts/account_0/appdata/ohos.xxx.xxx.xxx/01.mp3'; await fileIO.open(nextPath).then(fdNumber) => { @@ -237,7 +237,7 @@ function SetCallBack(audioPlayer) { let audioPlayer = media.createAudioPlayer(); //创建一个音频播放实例 SetCallBack(audioPlayer); //设置事件回调 -/* 用户选择视频设置fd(本地播放) */ +/* 用户选择音频设置fd(本地播放) */ let fdPath = 'fd://' let path = 'data/accounts/account_0/appdata/ohos.xxx.xxx.xxx/01.mp3'; await fileIO.open(path).then(fdNumber) => { -- Gitee From ca0bc72168b2c30055d1b3e30c1971c94789b2c3 Mon Sep 17 00:00:00 2001 From: zengyawen Date: Sat, 19 Mar 2022 07:35:33 +0000 Subject: [PATCH 4/9] =?UTF-8?q?=E9=87=8D=E5=A4=8D=E8=AF=AD=E5=8F=A5?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=20Signed-off-by:=20zengyawen=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zh-cn/application-dev/media/audio-renderer.md | 55 +++++++++++-------- 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/zh-cn/application-dev/media/audio-renderer.md b/zh-cn/application-dev/media/audio-renderer.md index b89aaaf0c4f..2179c1a06e1 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'); -- Gitee From 87ff04c552ca8b7f33dd4a01c8e7b2135e971eb0 Mon Sep 17 00:00:00 2001 From: zengyawen Date: Sat, 19 Mar 2022 07:36:37 +0000 Subject: [PATCH 5/9] =?UTF-8?q?=E9=87=8D=E5=A4=8D=E8=AF=AD=E5=8F=A5?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=20Signed-off-by:=20zengyawen=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zh-cn/application-dev/media/audio-renderer.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/zh-cn/application-dev/media/audio-renderer.md b/zh-cn/application-dev/media/audio-renderer.md index 2179c1a06e1..c0507191311 100644 --- a/zh-cn/application-dev/media/audio-renderer.md +++ b/zh-cn/application-dev/media/audio-renderer.md @@ -101,8 +101,7 @@ AudioRenderer提供了渲染音频文件和控制播放的接口,开发者可 3. 调用start()方法来启动/恢复播放任务。 - -启动完成后,渲染器状态将变更为STATE_RUNNING,然后应用可以开始读取缓冲区。 + 启动完成后,渲染器状态将变更为STATE_RUNNING,然后应用可以开始读取缓冲区。 ```js async function startRenderer() { -- Gitee From 98bd8197cb8df21160d756a5457b13c3bf676ca5 Mon Sep 17 00:00:00 2001 From: zengyawen Date: Sat, 19 Mar 2022 07:37:18 +0000 Subject: [PATCH 6/9] =?UTF-8?q?=E9=87=8D=E5=A4=8D=E8=AF=AD=E5=8F=A5?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=20Signed-off-by:=20zengyawen=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zh-cn/application-dev/media/audio-capturer.md | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/zh-cn/application-dev/media/audio-capturer.md b/zh-cn/application-dev/media/audio-capturer.md index 8e35b35a461..89dfe30f66c 100644 --- a/zh-cn/application-dev/media/audio-capturer.md +++ b/zh-cn/application-dev/media/audio-capturer.md @@ -1,23 +1,20 @@ -# AudioCapturer音频采集开发指南 +# 音频采集开发指导 ## 场景介绍 AudioCapturer提供了用于获取原始音频文件的方法。开发者可以通过本指导了解应用如何通过AudioCapturer采集音频。 -## 注意事项 +### 状态检查 在进行应用开发的过程中,建议开发者通过on('stateChange')方法订阅AudioCapturer的状态变更。因为针对AudioCapturer的某些操作,仅在音频采集器在固定状态时才能执行。如果应用在音频采集器处于错误状态时执行操作,系统可能会抛出异常或生成其他未定义的行为。 -## 状态检查 - -应用程序开发人员应该记住,AudioCapturer 是基于状态的。
也就是说,AudioCapturer 有一个内部状态,应用程序在调用录制器控制 API 时必须始终检查该状态,因为某些操作仅在录制器处于给定状态时才可接受。 -如果应用程序在录制器处于不正确状态时执行操作,系统可能会抛出错误/异常或生成其他未定义的行为。 - ## 开发步骤 -1. 使用createAudioCapturer()创建一个AudioCapturer实例。
在audioCapturerOptions中设置音频采集器的相关参数。该实例可用于音频采集、控制和获取采集状态,以及注册通知回调。 +1. 使用createAudioCapturer()创建一个AudioCapturer实例。 - ``` + 在audioCapturerOptions中设置音频采集器的相关参数。该实例可用于音频采集、控制和获取采集状态,以及注册通知回调。 + + ```js var audioStreamInfo = { samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100, channels: audio.AudioChannel.CHANNEL_1, @@ -39,10 +36,11 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以 var state = audioRenderer.state; ``` -2. 调用start()方法来启动/恢复采集任务。 +2. 调用start()方法来启动/恢复采集任务。 + 启动完成后,采集器状态将变更为STATE_RUNNING,然后应用可以开始读取缓冲区。 - ``` + ```js await audioCapturer.start(); if (audioCapturer.state == audio.AudioState.STATE_RUNNING) { console.info('AudioRecLog: Capturer started'); @@ -53,15 +51,16 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以 3. 使用getBufferSize()方法获取要读取的最小缓冲区大小。 - ``` + ```js var bufferSize = await audioCapturer.getBufferSize(); console.info('AudioRecLog: buffer size: ' + bufferSize); ``` 4. 读取采集器的音频数据并将其转换为字节流。重复调用read()方法读取数据,直到应用准备停止采集。 + 参考以下示例,将采集到的数据写入文件。 - ``` + ```js import fileio from '@ohos.fileio'; const path = '/data/data/.pulse_dir/capture_js.wav'; @@ -106,7 +105,7 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以 6. 任务结束,调用release()方法释放相关资源。 - ``` + ```js await audioCapturer.release(); if (audioCapturer.state == audio.AudioState.STATE_RELEASED) { console.info('AudioRecLog: Capturer released'); -- Gitee From e5a447e3d764e6095887ce48574c42774e672285 Mon Sep 17 00:00:00 2001 From: zengyawen Date: Sat, 19 Mar 2022 16:30:54 +0800 Subject: [PATCH 7/9] update docs Signed-off-by: zengyawen --- en/application-dev/media/Readme-EN.md | 4 +- en/application-dev/media/audio-management.md | 394 ------------------ zh-cn/application-dev/media/Readme-CN.md | 1 - .../application-dev/media/audio-management.md | 138 ------ .../reference/apis/js-apis-camera.md | 2 +- 5 files changed, 2 insertions(+), 537 deletions(-) delete mode 100644 en/application-dev/media/audio-management.md delete mode 100644 zh-cn/application-dev/media/audio-management.md diff --git a/en/application-dev/media/Readme-EN.md b/en/application-dev/media/Readme-EN.md index 1ffa6f76d57..3c25a2ca04e 100755 --- a/en/application-dev/media/Readme-EN.md +++ b/en/application-dev/media/Readme-EN.md @@ -8,12 +8,10 @@ - [Audio Playback Development Using AudioRenderer](audio-renderer.md) - - [Audio Management Development](audio-management.md) - - [Audio Recording Development](audio-recorder.md) - [Audio Recorder Development Using AudioCapturer](audio-capturer) -- Video +- Video - [Video Playback Development](video-playback.md) diff --git a/en/application-dev/media/audio-management.md b/en/application-dev/media/audio-management.md deleted file mode 100644 index db344ecdd7e..00000000000 --- a/en/application-dev/media/audio-management.md +++ /dev/null @@ -1,394 +0,0 @@ -# Audio Management Development - -## When to Use - -You use audio management APIs to set and obtain volume, and get information about input/output devices. - -## Available APIs - -**Table 1** APIs for audio management - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

API

-

Description

-

getAudioManager(): AudioManager

-

Obtains an AudioManager instance.

-

AudioManager

-

Manages audio volume and audio device information. For details, see AudioManager.

-

AudioDeviceDescriptor

-

Describes audio devices.

-

AudioVolumeType

-

Enumerates audio volume types.

-

DeviceFlag

-

Enumerates flags of supported devices.

-

DeviceRole

-

Enumerates device roles.

-

DeviceType

-

Enumerates device types.

-

AudioScene

-

Enumerates audio scenes.

-
- -**Table 2** AudioManager methods - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Method

-

Description

-

setVolume(audioType: AudioVolumeType,volume: number,callback: AsyncCallback<void>): void

-

Sets the volume of a stream asynchronously and uses a callback to return the execution result.

-

setVolume(audioType: AudioVolumeType,volume: number): Promise<void>

-

Sets the volume of a stream asynchronously and uses a Promise to return the execution result.

-

getVolume(audioType: AudioVolumeType, callback: AsyncCallback<number>): void

-

Obtains the volume of a stream asynchronously and uses a callback to return the result.

-

getVolume(audioType: AudioVolumeType): Promise<number>

-

Obtains the volume of a stream asynchronously and uses a Promise to return the result.

-

getMinVolume(audioType: AudioVolumeType, callback: AsyncCallback<number>): void

-

Obtains the minimum volume of a stream asynchronously and uses a callback to return the result.

-

getMinVolume(audioType: AudioVolumeType): Promise<number>

-

Obtains the minimum volume of a stream asynchronously and uses a Promise to return the result.

-

getMaxVolume(audioType: AudioVolumeType, callback: AsyncCallback<number>): void

-

Obtains the maximum volume of a stream asynchronously and uses a callback to return the result.

-

getMaxVolume(audioType: AudioVolumeType): Promise<number>

-

Obtains the maximum volume of a stream asynchronously and uses a Promise to return the result.

-

getDevices(deviceFlag: DeviceFlag, callback: AsyncCallback<AudioDeviceDescriptors>): void

-

Obtains the device list asynchronously and uses a callback to return the result.

-

getDevices(deviceFlag: DeviceFlag): Promise<AudioDeviceDescriptors>

-

Obtains the device list asynchronously and uses a Promise to return the result.

-

setDeviceActive(deviceType: ActiveDeviceType, active: boolean, callback: AsyncCallback<void>): void

-

Activates the device asynchronously and uses a callback to return the execution result.

-

setDeviceActive(deviceType: ActiveDeviceType, active: boolean): Promise<void>

-

Activates the device asynchronously and uses a Promise to return the execution result.

-

isDeviceActive(deviceType: ActiveDeviceType, callback: AsyncCallback<boolean>): void

-

Checks whether a device is active asynchronously and uses a callback to return the result.

-

isDeviceActive(deviceType: ActiveDeviceType): Promise<boolean>

-

Checks whether a device is active asynchronously and uses a Promise to return the result.

-

on(type: 'deviceChange', callback: AsyncCallback<DeviceChangeAction>): void

-

Subscribes to device change events. Registered clients will receieve the callback when a device is connected/disconnected.

-

setAudioScene(scene: AudioScene, callback: AsyncCallback<void>): void

-

Sets the audio scene mode asynchronously and uses a callback to return the execution result.

-

setAudioScene(scene: AudioScene): Promise<void>

-

Sets the audio scene mode asynchronously and uses a Promise to return the execution result.

-

getAudioScene(callback: AsyncCallback<AudioScene>): void

-

Obtains the audio scene mode asynchronously and uses a callback to return the result.

-

getAudioScene(): Promise<AudioScene>

-

Obtains the audio scene mode asynchronously and uses a Promise to return the result.

-
- -**Table 3** AudioDeviceDescriptor attributes - - - - - - - - - - - - - -

Parameter

-

Description

-

deviceRole: DeviceRole

-

Audio device role

-

deviceType: DeviceType

-

Audio device type

-
- -**Table 4** AudioVolumeType enums - - - - - - - - - - - - - - - - - - - - -

Enum

-

Description

-

VOICE_CALL = 0

-

Audio streams for voice calls

-

MEDIA = 1

-

Audio streams for media purpose

-

RINGTONE = 2

-

Audio streams for ring tones

-

VOICE_ASSISTANT = 9

-

Audio streams for voice assistant

-
- -**Table 5** DeviceFlag enums - - - - - - - - - - - - - - - - -

Enum

-

Description

-

OUTPUT_DEVICES_FLAG = 1

-

Output devices

-

INPUT_DEVICES_FLAG = 2

-

Input devices

-

ALL_DEVICES_FLAG = 3

-

All devices

-
- -**Table 6** DeviceRole enums - - - - - - - - - - - - - -

Enum

-

Description

-

INPUT_DEVICE = 1

-

Input role

-

OUTPUT_DEVICE = 2

-

Output role

-
- -**Table 7** DeviceType enums - - - - - - - - - - - - - - - - - - - - - - - - - -

Enum

-

Description

-

INVALID = 0

-

Invalid device

-

SPEAKER = 2

-

Speaker

-

WIRED_HEADSET = 3

-

Wired headset

-

BLUETOOTH_SCO = 7

-

Bluetooth device using the synchronous connection oriented (SCO) link

-

BLUETOOTH_A2DP = 8

-

Bluetooth device using advanced audio distribution profile (A2DP)

-

MIC = 15

-

Microphone

-
- -**Table 8** AudioScene enums - -Enumerates audio scenes. - -| Name | Description | -| :----------------------------- | :---------------------------- | -| AUDIO_SCENE_DEFAULT = 0 | Default audio scene.
| -| AUDIO_SCENE_RINGING = 1 | Ringing audio scene.
| -| AUDIO_SCENE_PHONE_CALL = 2 | Phone call audio scene.
| -| AUDIO_SCENE_VOICE_CHAT = 3 | Voice chat audio scene.
| - - -## Development Procedure - -1. Obtain an audio manager. - - ``` - const audioManager = audio.getAudioManager(); - ``` - -2. Obtain the audio stream volume. - - ``` - audioManager.getVolume(audio.AudioVolumeType.MEDIA, (err, value) => { - if (err) { - console.error(`failed to get volume ${err.message}`); - return; - } - console.log(`Media getVolume ${value}`); - }); - ``` - -## Usage - -**setAudioScene** - -**Example** - -Here's an example of how to use setAudioScene to change the audio strategy for the phone call scene. - -1. Obtain an audio manager. - - ``` - const audioManager = audio.getAudioManager(); - ``` - -2. Change the audio scene to phone call. - - ``` - audioManager.setAudioScene(audio.AudioScene.AUDIO_SCENE_PHONE_CALL, (err) => { - if (err) { - console.error('Failed to set the audio scene mode.​ ${err.message}'); - return; - } - console.log('Audio scene mode setting is successful.'); - }); - ``` - -**getAudioScene** - -**Example** - -Here's an example of how to use getAudioScene to obtain the current audio scene. - -1. Obtain an audio manager. - - ``` - const audioManager = audio.getAudioManager(); - ``` - -2. Obtain the current audio scene. - - ``` - audioManager.getAudioScene((err, value) => { - if (err) { - console.error('Failed to obtain the audio scene mode.​ ${err.message}'); - return; - } - console.log('Audio scene mode ${value)'); - }) - ``` diff --git a/zh-cn/application-dev/media/Readme-CN.md b/zh-cn/application-dev/media/Readme-CN.md index 42191af14d1..f069d43ad04 100755 --- a/zh-cn/application-dev/media/Readme-CN.md +++ b/zh-cn/application-dev/media/Readme-CN.md @@ -6,7 +6,6 @@ - [音频录制开发指导](audio-recorder.md) - [音频渲染开发指导](audio-renderer.md) - [音频采集开发指导](audio-capturer.md) - - [音频管理开发指导](audio-management.md) - 视频 - [视频播放开发指导](video-playback.md) diff --git a/zh-cn/application-dev/media/audio-management.md b/zh-cn/application-dev/media/audio-management.md deleted file mode 100644 index 380e6639d92..00000000000 --- a/zh-cn/application-dev/media/audio-management.md +++ /dev/null @@ -1,138 +0,0 @@ -# 音频管理开发指导 - -## 场景介绍 - -音频管理的主要工作是音量调节与音量查询,以及输入/输出设备查询。 - - -## 接口说明 - -**表1** audio的相关接口 - -| 接口名 | 描述 | -| -------- | -------- | -| getAudioManager(): AudioManager | 获得音频管理器。 | -| AudioManager | 音频管理器。具体参考表 音频管理相关的interface AudioManager。 | -| AudioDeviceDescriptor | 描述音频设备。 | -| AudioVolumeType | 表示音频流类型的枚举。 | -| DeviceFlag | 表示可获取的设备种类的枚举。 | -| DeviceRole | 表示设备角色的枚举。 | -| DeviceType | 表示设备类型的枚举。 | -| AudioScene | 表示音频场景的枚举。 | - -**表2** 音频管理相关的interface **AudioManager** - -| 接口名 | 描述 | -| -------- | -------- | -| setVolume(audioType: AudioVolumeType,volume: number,callback: AsyncCallback<void>): void | 改变某个流的音量。 | -| setVolume(audioType: AudioVolumeType,volume: number): Promise<void> | 改变某个流的音量。 | -| getVolume(audioType: AudioVolumeType, callback: AsyncCallback<number>): void | 获得某个流的音量。 | -| getVolume(audioType: AudioVolumeType): Promise<number> | 获得某个流的音量。 | -| getMinVolume(audioType: AudioVolumeType, callback: AsyncCallback<number>): void | 获得某个流的最小音量。 | -| getMinVolume(audioType: AudioVolumeType): Promise<number> | 获得某个流的最小音量。 | -| getMaxVolume(audioType: AudioVolumeType, callback: AsyncCallback<number>): void | 获得某个流的最大音量。 | -| getMaxVolume(audioType: AudioVolumeType): Promise<number> | 获得某个流的最大音量。 | -| getDevices(deviceFlag: DeviceFlag, callback: AsyncCallback<AudioDeviceDescriptors>): void | 获得设备列表。 | -| getDevices(deviceFlag: DeviceFlag): Promise<AudioDeviceDescriptors> | 获得设备列表。 | -| setDeviceActive(deviceType: ActiveDeviceType, active: boolean, callback: AsyncCallback): void | 激活设备,使用callback返回异步结果 | -| setDeviceActive(deviceType: ActiveDeviceType, active: boolean): Promise | 激活设备,使用Promise返回异步结果。 | -| isDeviceActive(deviceType: ActiveDeviceType, callback: AsyncCallback): void | 检查设备是否激活,使用callback返回异步结果。 | -| isDeviceActive(deviceType: ActiveDeviceType): Promise | 检查设备是否激活,使用Promise返回异步结果。 | -| on(type: 'deviceChange', callback: AsyncCallback): void | 订阅设备更改事件。 当设备连接或断开时,注册的客户端将收到回调。 | -| setAudioScene(scene: AudioScene, callback: AsyncCallback): void | 设置音频场景模式,使用callback返回异步结果。 | -| setAudioScene(scene: AudioScene): Promise | 设置音频场景模式,使用Promise返回异步结果。 | -| getAudioScene(callback: AsyncCallback): void | 获取音频场景模式,使用callback返回异步结果。 | -| getAudioScene(): Promise | 获取音频场景模式,使用Promise返回异步结果。 | - -**表3** 表示音频设备的interface **AudioDeviceDescriptor** - -| 属性 | 描述 | -| -------- | -------- | -| deviceRole: DeviceRole | 设备角色。 | -| deviceType: DeviceType | 设备类型。 | - -**表4** 表示音频流类型的枚举**AudioVolumeType** - -| 枚举值 | 描述 | -| -------- | -------- | -| VOICE_CALL = 0 | 语音通话。 | -| MEDIA = 1 | 媒体声音。 | -| RINGTONE = 2 | 铃声。 | -| VOICE_ASSISTANT = 9 | 语音助手。 | - -**表5** 表示可获取的设备种类的枚举**DeviceFlag** - -| 枚举值 | 描述 | -| -------- | -------- | -| OUTPUT_DEVICES_FLAG = 1 | 输出设备。 | -| INPUT_DEVICES_FLAG = 2 | 输入设备。 | -| ALL_DEVICES_FLAG = 3 | 所有设备。 | - -**表6** 表示设备角色的枚举**DeviceRole** - -| 枚举值 | 描述 | -| -------- | -------- | -| INPUT_DEVICE = 1 | 输入设备。 | -| OUTPUT_DEVICE = 2 | 输出设备。 | - -**表7** 表示设备类型的枚举**DeviceType** - -| 枚举值 | 描述 | -| -------- | -------- | -| INVALID = 0 | 无效。 | -| SPEAKER = 2 | 扬声器。 | -| WIRED_HEADSET = 3 | 有线耳机。 | -| BLUETOOTH_SCO = 7 | 蓝牙设备。 | -| BLUETOOTH_A2DP = 8 | 支持A2DP的蓝牙设备。 | -| MIC = 15 | 麦克风。 | - -**表8** 表示音频模式的枚举** **AudioScene ** - -| Name | Description | -| :------------------------- | :----------------------- | -| AUDIO_SCENE_DEFAULT = 0 | 默认的音频。
| -| AUDIO_SCENE_RINGING = 1 | 响铃音频场景。
| -| AUDIO_SCENE_PHONE_CALL = 2 | 电话音频场景。
| -| AUDIO_SCENE_VOICE_CHAT = 3 | 语音聊天音频场景。
| - -## 开发步骤 - -1. 获取音频控制器。 - ``` - const audioManager = audio.getAudioManager(); - ``` - -2. 改变媒体流的声音。 - ``` - audioManager.getVolume(audio.AudioVolumeType.MEDIA, (err, value) => { - if (err) { - console.error(`failed to get volume ${err.message}`); - return; - } - console.log(`Media getVolume ${value}`); - }); - ``` - -## 使用方法 - -**setAudioScene** - -**示例** - -1. 获取音频管理器。 - - ``` - const audioManager = audio.getAudioManager(); - ``` - -2. 获取当前的音频场景。 - - ``` - audioManager.getAudioScene((err, value) => { - if (err) { - console.error('Failed to obtain the audio scene mode.​ ${err.message}'); - return; - } - console.log('Audio scene mode ${value)'); - }) - ``` \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis/js-apis-camera.md b/zh-cn/application-dev/reference/apis/js-apis-camera.md index ab8cf746f11..9df4fb1133a 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-camera.md +++ b/zh-cn/application-dev/reference/apis/js-apis-camera.md @@ -1,7 +1,7 @@ # 相机管理 > **说明:** -> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 +> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 ## 导入模块 -- Gitee From 8c56522d70a2ce99abf1b38d312e5de279d54aaf Mon Sep 17 00:00:00 2001 From: zengyawen Date: Sat, 19 Mar 2022 08:33:15 +0000 Subject: [PATCH 8/9] update en/application-dev/media/Readme-EN.md. Signed-off-by: zengyawen --- en/application-dev/media/Readme-EN.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/en/application-dev/media/Readme-EN.md b/en/application-dev/media/Readme-EN.md index 3c25a2ca04e..b7e2079141e 100755 --- a/en/application-dev/media/Readme-EN.md +++ b/en/application-dev/media/Readme-EN.md @@ -13,6 +13,6 @@ - [Audio Recorder Development Using AudioCapturer](audio-capturer) - Video - - [Video Playback Development](video-playback.md) + - [Video Playback Development](video-playback.md) - - [Video Recording Development](video-recorder.md) + - [Video Recording Development](video-recorder.md) -- Gitee From b967b199198cfea1185a631a729ba15efc17b780 Mon Sep 17 00:00:00 2001 From: zengyawen Date: Sat, 19 Mar 2022 09:07:12 +0000 Subject: [PATCH 9/9] update zh-cn/application-dev/media/audio-renderer.md. Signed-off-by: zengyawen --- zh-cn/application-dev/media/audio-renderer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh-cn/application-dev/media/audio-renderer.md b/zh-cn/application-dev/media/audio-renderer.md index c0507191311..7ea9ce05ffc 100644 --- a/zh-cn/application-dev/media/audio-renderer.md +++ b/zh-cn/application-dev/media/audio-renderer.md @@ -51,7 +51,7 @@ AudioRenderer提供了渲染音频文件和控制播放的接口,开发者可 在某些情况下,框架会采取暂停播放、降低音量等强制操作,并通过InterruptEvent通知应用。在其他情况下,应用可以自行对InterruptEvent做出响应。 - 在音频中断的情况下,应用可能会碰到音频数据写入失败的问题。所以建议不感知、不处理中断的应用在写入音频数据前,使用audioRenderer.state检查播放器状态。而订阅音频中断事件,可以获取到更多详细信息,具体可参考[InterruptEvent](../reference/apis/js-apis-audio.md#interruptevent8)。 + 在音频中断的情况下,应用可能会碰到音频数据写入失败的问题。所以建议不感知、不处理中断的应用在写入音频数据前,使用audioRenderer.state检查播放器状态。而订阅音频中断事件,可以获取到更多详细信息,具体可参考[InterruptEvent](../reference/apis/js-apis-audio.md#interruptevent9)。 ```js audioRenderer.on('interrupt', (interruptEvent) => { -- Gitee