From 04cb82bcfbebc4f5ecb704636c344648799e4235 Mon Sep 17 00:00:00 2001 From: zengyawen Date: Wed, 4 Aug 2021 18:39:37 +0800 Subject: [PATCH] update media docs Signed-off-by: zengyawen --- ...63\351\242\221\346\222\255\346\224\276.md" | 385 ++-- ...63\351\242\221\347\256\241\347\220\206.md" | 1900 ++++++++++++++--- ...6\347\212\266\346\200\201\346\234\272.png" | Bin 29333 -> 23062 bytes ...00\345\217\221\346\214\207\345\257\274.md" | 102 +- 4 files changed, 1866 insertions(+), 521 deletions(-) diff --git "a/zh-cn/application-dev/js-reference/\351\237\263\351\242\221\346\222\255\346\224\276.md" "b/zh-cn/application-dev/js-reference/\351\237\263\351\242\221\346\222\255\346\224\276.md" index a2d57bc60fd..cdfdbb07237 100644 --- "a/zh-cn/application-dev/js-reference/\351\237\263\351\242\221\346\222\255\346\224\276.md" +++ "b/zh-cn/application-dev/js-reference/\351\237\263\351\242\221\346\222\255\346\224\276.md" @@ -1,60 +1,59 @@ -# 音频播放 - -- [导入模块](#zh-cn_topic_0000001103383404_s56d19203690d4782bfc74069abb6bd71) -- [权限](#zh-cn_topic_0000001103383404_section11257113618419) -- [方法](#zh-cn_topic_0000001103383404_section125675489541) -- [createAudioPlayer\(\)](#zh-cn_topic_0000001103383404_section582314017253) -- [附录](#zh-cn_topic_0000001103383404_section1933416317165) -- [AudioPlayer](#zh-cn_topic_0000001103383404_section5174142818365) - - [属性](#zh-cn_topic_0000001103383404_section4947115405) - - [play\(\)](#zh-cn_topic_0000001103383404_section964512672913) - - [pause\(\)](#zh-cn_topic_0000001103383404_section78173258296) - - [stop\(\)](#zh-cn_topic_0000001103383404_section122114334296) - - [seek\(number\)](#zh-cn_topic_0000001103383404_section1387113816298) - - [setVolume\(number\)](#zh-cn_topic_0000001103383404_section164235176552) - - [release\(\)](#zh-cn_topic_0000001103383404_section9224621145512) - - [事件](#zh-cn_topic_0000001103383404_section5453721192911) - - [play](#zh-cn_topic_0000001103383404_section87307411494) - - [pause](#zh-cn_topic_0000001103383404_section198217471590) - - [stop](#zh-cn_topic_0000001103383404_section437616531910) - - [dataLoad](#zh-cn_topic_0000001103383404_section982114219106) - - [timeUpdate](#zh-cn_topic_0000001103383404_section13687114181014) - - [volumeChange](#zh-cn_topic_0000001103383404_section139227715717) - - [finish](#zh-cn_topic_0000001103383404_section15181321181018) - - [error](#zh-cn_topic_0000001103383404_section5593132921016) -- [AudioState](#zh-cn_topic_0000001103383404_section5181155710523) - ->![](public_sys-resources/icon-note.gif) **说明:** ->由于权限问题,此部分功能在标准系统暂不可用,待更新。 - -## 导入模块 +# 音频播放 + +- [导入模块](#s56d19203690d4782bfc74069abb6bd71) +- [权限](#section11257113618419) +- [方法](#section125675489541) +- [createAudioPlayer\(\)](#section582314017253) +- [附录](#section1933416317165) +- [AudioPlayer](#section5174142818365) + - [属性](#section4947115405) + - [play\(\)](#section964512672913) + - [pause\(\)](#section78173258296) + - [stop\(\)](#section122114334296) + - [seek\(number\)](#section1387113816298) + - [setVolume\(number\)](#section164235176552) + - [reset\(\)7+](#section1473283011356) + - [release\(\)](#section9224621145512) + - [事件](#section5453721192911) + - [play](#section87307411494) + - [pause](#section198217471590) + - [stop](#section437616531910) + - [dataLoad](#section982114219106) + - [timeUpdate](#section13687114181014) + - [volumeChange](#section139227715717) + - [finish](#section15181321181018) + - [error](#section5593132921016) + +- [AudioState](#section5181155710523) + +## 导入模块 ``` import audio from '@ohos.multimedia.media'; ``` -## 权限 +## 权限 无 -## 方法 +## 方法 -## createAudioPlayer\(\) +## createAudioPlayer\(\) 创建音频播放的实例来控制音频的播放。 **返回值:** - -

类型

+ + - - - @@ -66,164 +65,201 @@ import audio from '@ohos.multimedia.media'; var audioplayer = audio.createAudioPlayer(); ``` -## 附录 +## 附录 -## AudioPlayer +## AudioPlayer 音频播放器。 -### 属性 +### 属性 - -

类型

说明

+

说明

AudioPlayer

+

AudioPlayer

返回AudioPlayer类实例,失败时返回null。

+

返回AudioPlayer类实例,失败时返回null。

名称

+ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

参数类型

+

参数类型

可读

+

可读

可写

+

可写

说明

+

说明

src

+

src

string

+

string

+

+

音频媒体URI。

+

音频媒体URI。

loop

+

loop

boolean

+

boolean

+

+

音频循环播放属性。

+

音频循环播放属性。

currentTime

+

currentTime

number

+

number

+

+

音频的当前播放阶段。

+

音频的当前播放阶段。

duration

+

duration

number

+

number

+

+

音频播放的时长。

+

音频播放的时长。

state

+

state

AudioState

+

AudioState

+

+

音频播放的状态。

+

音频播放的状态。

-### play\(\) +### play\(\) 开始播放音频资源。 **示例:** ``` -audioplayer.src = 'common/mydream.mp3'; +audioplayer.on('dataload', (err, action) => { + if (err) { + console.info('Error returned in the prepare() callback.'); + return; + } + console.info('Start to play the audio.'); + audioplayer.play(); +}; + audioplayer.on('play', (err, action) => { if (err) { - console.log(`err returned in play() callback`); + console.info('Error returned in the play() callback.'); return; } - console.log('start to play'); - audioplayer.pause(); + console.info('Succeeded in playing the audio.'); }; -audioplayer.play(); +audioplayer.src = 'common/mydream.mp3'; ``` -### pause\(\) +### pause\(\) 暂停播放音频资源。 **示例:** ``` -audioplayer.src = 'common/mydream.mp3'; +audioplayer.on('dataload', (err, action) => { + if (err) { + console.info('Error returned in the prepare() callback.'); + return; + } + console.info('Start to play the audio.'); + audioplayer.play(); +} +audioplayer.on('play', (err, action) => { + if (err) { + console.info('Error returned in the play() callback.'); + return; + } + console.info('Start to pause audio playback.'); + audioplayer.pause(); +}; audioplayer.on('pause', (err, action) => { if (err) { - console.log(`err returned in pause() callback`); + console.info('Error returned in the pause() callback.'); return; } - console.log('playback pause'); + console.info('Succeeded in pausing audio playback.'); }; -audioplayer.pause(); +audioplayer.src = 'common/mydream.mp3'; ``` -### stop\(\) +### stop\(\) 停止播放音频资源。 **示例:** ``` -audioplayer.src = 'common/mydream.mp3'; -audioplayer.on('stop',(err, action) => { +audioplayer.on('dataload', (err, action) => { if (err) { - console.log(`err returned in stop() callback`); + console.info('Error returned in the prepare() callback.'); return; } - console.log('playback stop'); + console.info('Start to play the audio.'); + audioplayer.play(); }; -audioplayer.stop(); +audioplayer.on('play', (err, action) => { + if (err) { + console.info('Error returned in the play() callback.'); + return; + } + console.info('Start to pause audio playback.'); + audioplayer.pause(); +}; +audioplayer.on('stop', (err, action) => { + if (err) { + console.info('Error returned in the stop() callback.'); + return; + } + console.info('Succeeded in stopping audio playback.'); +}; +audioplayer.src = 'common/mydream.mp3'; ``` -### seek\(number\) +### seek\(number\) 跳转到指定播放位置。 **参数:** - -

参数名

+ + - - - - - - - @@ -232,46 +268,58 @@ audioplayer.stop(); **示例:** ``` -audioplayer.src = 'common/mydream.mp3'; -audioplayer.on('timeupdate', (err, action) => { +audioplayer.on('dataload', (err, action) => { if (err) { - console.log(`err returned in seek() callback`); + console.info('Error returned in the prepare() callback.'); return; } + console.info('Start to play the audio.'); + audioplayer.play(); +}; +audioplayer.on('play', (err, action) => { + if (err) { + console.info('Error returned in the play() callback.'); + return; + } + console.info('Succeeded in playing the audio.') +}; +audioplayer.on('timeUpdate', (seekTime, action) => { + console.info('Seek time returned in the seek() callback: ' + seekTime); var newTime = audioplayer.currenTime; - if(newTime = 30000) { - console.info('Seek success, new time : ' + newTime); + if(newTime == 30000) { + console.info('Seek succeeded. New time: ' + newTime); } else { - console.info('Seek Failed'); + console.info('Seek failed.'); } }; +audioplayer.src = 'common/mydream.mp3'; audioplayer.seek(30000); ``` -### setVolume\(number\) +### setVolume\(number\) 设置音量。 **参数:** - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

timeMs

+

timeMs

number

+

number

+

想要跳转到的时间点。

+

想要跳转到的时间点。

参数名

+ + - - - - - - - @@ -280,18 +328,58 @@ audioplayer.seek(30000); **示例:** ``` -audioplayer.src = 'common/mydream.mp3'; +audioplayer.on('dataload', (err, action) => { + if (err) { + console.error('Error returned in the prepare() callback.'); + return; + } + console.info('Start to play the audio.'); + audioplayer.play(); +}; +audioplayer.on('play', (err, action) => { + if (err) { + console.error('Error returned in the play() callback.'); + return; + } + console.info('Succeeded in playing the audio.') +}; audioplayer.on('volumeChange', (err, action) => { if (err) { - console.log(`err returned in setVolume() callback`); + console.error('Error returned in the setVolume() callback.'); + return; + } + console.info('Playback volume changed.'); +}; +audioplayer.src = 'common/mydream.mp3'; +audioplayer.setVolume(0.5); +``` + +### reset\(\)7+ + +切换播放音频资源。 + +**示例:** + +``` +audioplayer.on('dataload', (err, action) => { + if (err) { + console.error('Error returned in the prepare() callback.'); return; } - console.log('playback volume change'); + console.info('Start to reset audio playback.'); + audioplayer.reset(); }; -audioplayer.setVolume(30); +audioplayer.on('reset', (err, action) => { + if (err) { + console.error('Error returned in the reset() callback.'); + return; + } + console.info('Reset succeeded.'); +}; +audioplayer.src = 'common/mydream.mp3'; ``` -### release\(\) +### release\(\) 释放音频资源。 @@ -301,83 +389,88 @@ audioplayer.setVolume(30); audioplay.release(); ``` -### 事件 +### 事件 -### play +### play 在调用play方法后的回调事件。 -### pause +### pause 在调用pause方法后的回调事件。 -### stop +### stop 在调用stop方法后的回调事件。 -### dataLoad +### dataLoad 在音频数据加载后的回调事件。 -### timeUpdate +### timeUpdate 在播放时间改变后的回调事件。 -### volumeChange +### volumeChange 在播放音量改变后的回调事件。 -### finish +### finish 在播放完成后的回调事件。 -### error +### error 在播放错误时的回调事件。 - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

vol

+

vol

number

+

number

+

想要设置的音量值。

+

想要设置的音量值(0-1)。

参数名

+ + - - - - -

参数名

类型

+

类型

说明

+

说明

callback

+

callback

ErrorCallback

+

ErrorCallback

错误事件的回调函数。

+

错误事件的回调函数。

-## AudioState +## AudioState 音频播放的状态机。 - -

名称

+ + - - + + + - - - - - diff --git "a/zh-cn/application-dev/js-reference/\351\237\263\351\242\221\347\256\241\347\220\206.md" "b/zh-cn/application-dev/js-reference/\351\237\263\351\242\221\347\256\241\347\220\206.md" index f032c9c9050..d84cf90dfae 100644 --- "a/zh-cn/application-dev/js-reference/\351\237\263\351\242\221\347\256\241\347\220\206.md" +++ "b/zh-cn/application-dev/js-reference/\351\237\263\351\242\221\347\256\241\347\220\206.md" @@ -1,61 +1,78 @@ -# 音频管理 - -- [导入模块](#zh-cn_topic_0000001149807881_s56d19203690d4782bfc74069abb6bd71) -- [权限](#zh-cn_topic_0000001149807881_section11257113618419) -- [方法](#zh-cn_topic_0000001149807881_section1580114415416) -- [getAudioManager\(\)](#zh-cn_topic_0000001149807881_section84581011418) -- [枚举](#zh-cn_topic_0000001149807881_section115029181495) -- [AudioVolumeType](#zh-cn_topic_0000001149807881_section92261857172218) -- [DeviceFlag](#zh-cn_topic_0000001149807881_section11285183164210) -- [DeviceRole](#zh-cn_topic_0000001149807881_section380038142619) -- [DeviceType](#zh-cn_topic_0000001149807881_section11727420122710) -- [附录](#zh-cn_topic_0000001149807881_section1933416317165) -- [AudioManager](#zh-cn_topic_0000001149807881_section8265143814015) - - [setVolume\(AudioVolumeType, number, AsyncCallback\)](#zh-cn_topic_0000001149807881_section189141826104616) - - [setVolume\(AudioVolumeType, number\)](#zh-cn_topic_0000001149807881_section102021249114612) - - [getVolume\(AudioVolumeType, AsyncCallback\)](#zh-cn_topic_0000001149807881_section4387320194714) - - [getVolume\(AudioVolumeType\)](#zh-cn_topic_0000001149807881_section04121965119) - - [getMinVolume\(AudioVolumeType, AsyncCallback\)](#zh-cn_topic_0000001149807881_section188714283511) - - [getMinVolume\(AudioVolumeType\)](#zh-cn_topic_0000001149807881_section41556389511) - - [getMaxVolume\(AudioVolumeType, AsyncCallback\)](#zh-cn_topic_0000001149807881_section690395418516) - - [getMaxVolume\(AudioVolumeType\)](#zh-cn_topic_0000001149807881_section155151345217) - - [getDevices\(DeviceFlag, AsyncCallback\)](#zh-cn_topic_0000001149807881_section11536182020523) - - [getDevices\(DeviceFlag\)](#zh-cn_topic_0000001149807881_section181733125210) - -- [AudioDeviceDescriptor](#zh-cn_topic_0000001149807881_section17427121913310) -- [AudioDeviceDescriptors](#zh-cn_topic_0000001149807881_section5181155710523) - ->![](public_sys-resources/icon-note.gif) **说明:** ->由于权限问题,此部分功能在标准系统暂不可用,待更新。 - -## 导入模块 +# 音频管理 + +- [导入模块](#s56d19203690d4782bfc74069abb6bd71) +- [权限](#section11257113618419) +- [getAudioManager\(\): AudioManager](#section84581011418) +- [AudioVolumeType](#section92261857172218) +- [DeviceFlag](#section11285183164210) +- [DeviceRole](#section380038142619) +- [DeviceType](#section11727420122710) +- [AudioRingMode7+](#section14948916131018) +- [AudioManager](#section8265143814015) + - [setVolume\(volumeType: AudioVolumeType, volume: number, callback: AsyncCallback\): void](#section189141826104616) + - [setVolume\(volumeType: AudioVolumeType, volume: number\): Promise](#section102021249114612) + - [getVolume\(volumeType: AudioVolumeType, callback: AsyncCallback\): void](#section4387320194714) + - [getVolume\(volumeType: AudioVolumeType\): Promise](#section04121965119) + - [getMinVolume\(volumeType: AudioVolumeType, callback: AsyncCallback\): void](#section188714283511) + - [getMinVolume\(volumeType: AudioVolumeType\): Promise](#section41556389511) + - [getMaxVolume\(volumeType: AudioVolumeType, callback: AsyncCallback\): void](#section690395418516) + - [getMaxVolume\(volumeType: AudioVolumeType\): Promise](#section155151345217) + - [mute\(volumeType: AudioVolumeType, mute: boolean, callback: AsyncCallback\): void7+](#section13516136134613) + - [mute\(volumeType: AudioVolumeType, mute: boolean\): Promise7+](#section7519036144616) + - [isMute\(volumeType: AudioVolumeType, callback: AsyncCallback\): void7+](#section10684183819585) + - [isMute\(volumeType: AudioVolumeType\): Promise7+](#section6920211145610) + - [isActive\(volumeType: AudioVolumeType, callback: AsyncCallback\): void7+](#section380012544121) + - [isActive\(volumeType: AudioVolumeType\): Promise7+](#section1880315481216) + - [setRingerMode\(mode: AudioRingMode, callback: AsyncCallback\): void7+](#section18572131483613) + - [setRingerMode\(mode: AudioRingMode\): Promise7+](#section55741914143615) + - [getRingerMode\(callback: AsyncCallback\): void7+](#section149044108162) + - [getRingerMode\(\): Promise7+](#section13908210101620) + - [setAudioParameter\(key: string, value: string, callback: AsyncCallback\): void7+](#section1691957174818) + - [setAudioParameter\(key: string, value: string\): Promise7+](#section18121057174820) + - [getAudioParameter\(key: string, callback: AsyncCallback\): void7+](#section1415145714812) + - [getAudioParameter\(key: string\): Promise7+](#section3185577485) + - [getDevices\(deviceFlag: DeviceFlag, callback: AsyncCallback\): void](#section11536182020523) + - [getDevices\(deviceFlag: DeviceFlag\): Promise](#section181733125210) + - [setDeviceActive\(deviceType: DeviceType, active: boolean, callback: AsyncCallback\): void7+](#section103558400222) + - [setDeviceActive\(deviceType: DeviceType, active: boolean\): Promise7+](#section1235914401228) + - [isDeviceActive\(deviceType: DeviceType, callback: AsyncCallback\): void7+](#section12363240122219) + - [isDeviceActive\(deviceType: DeviceType\): Promise7+](#section18366184012213) + - [setMicrophoneMute\(mute: boolean, callback: AsyncCallback\): void7+](#section14703163618122) + - [setMicrophoneMute\(mute: boolean\): Promise7+](#section56287111791) + - [isMicrophoneMute\(callback: AsyncCallback\): void7+](#section6632141119912) + - [isMicrophoneMute\(\): Promise7+](#section196363111918) + +- [AudioDeviceDescriptor](#section164657411927) + - [属性](#section4947115405) + +- [AudioDeviceDescriptors](#section5181155710523) + +## 导入模块 ``` import audio from '@ohos.multimedia.audio'; ``` -## 权限 +## 权限 无 -## 方法 - -## getAudioManager\(\) +## getAudioManager\(\): AudioManager 获取音频管理器。 **返回值:** - -

名称

描述

+

描述

playing

+

idle

+

音频播放空闲。

+

playing

音频正在播放。

+

音频正在播放。

paused

+

paused

音频暂停播放

+

音频暂停播放

stopped

+

stopped

音频播放停止。

+

音频播放停止。

类型

+ + - - - @@ -67,261 +84,298 @@ import audio from '@ohos.multimedia.audio'; var audioManager = audio.getAudioManager(); ``` -## 枚举 - -## AudioVolumeType +## AudioVolumeType -音频流类型。 +枚举,音频流类型。 - -

类型

说明

+

说明

AudioManager

+

AudioManager

音频管理类。

+

音频管理类。

名称

+ + - - - - - - - -

名称

默认值

+

默认值

描述

+

描述

MEDIA

+

RINGTONE

1

+

2

表示媒体。

+

表示铃声。

RINGTONE

+

MEDIA

2

+

3

表示铃声。

+

表示媒体。

-## DeviceFlag +## DeviceFlag -可获取的设备种类。 +枚举,可获取的设备种类。 - -

名称

+ + - - - - - - - - - - -

名称

默认值

+

默认值

描述

+

描述

OUTPUT_DEVICES_FLAG

+

OUTPUT_DEVICES_FLAG

1

+

1

表示输出设备种类。

+

表示输出设备种类。

INPUT_DEVICES_FLAG

+

INPUT_DEVICES_FLAG

2

+

2

表示输入设备种类。

+

表示输入设备种类。

ALL_DEVICES_FLAG

+

ALL_DEVICES_FLAG

3

+

3

表示所有设备种类。

+

表示所有设备种类。

-## DeviceRole +## DeviceRole -设备角色。 +枚举,设备角色。 - -

名称

+ + - - - - - - - -

名称

默认值

+

默认值

描述

+

描述

INPUT_DEVICE

+

INPUT_DEVICE

1

+

1

输入设备角色。

+

输入设备角色。

OUTPUT_DEVICE

+

OUTPUT_DEVICE

2

+

2

输出设备角色。

+

输出设备角色。

-## DeviceType +## DeviceType -设备类型。 +枚举,设备类型。 - -

名称

+ + - - - - - - - - - - - - - - - - - - - -

名称

默认值

+

默认值

描述

+

描述

INVALID

+

INVALID

0

+

0

无效设备。

+

无效设备。

SPEAKER

+

SPEAKER

1

+

1

扬声器。

+

扬声器。

WIRED_HEADSET

+

WIRED_HEADSET

2

+

2

有线耳机。

+

有线耳机。

BLUETOOTH_SCO

+

BLUETOOTH_SCO

3

+

3

SCO(Synchronous Connection Oriented Link)蓝牙设备。

+

SCO(Synchronous Connection Oriented Link)蓝牙设备。

BLUETOOTH_A2DP

+

BLUETOOTH_A2DP

4

+

4

A2DP(Advanced Audio Distribution Profile )蓝牙设备。

+

A2DP(Advanced Audio Distribution Profile )蓝牙设备。

MIC

+

MIC

5

+

5

麦克风。

+

麦克风。

-## 附录 +## AudioRingMode7+ + +枚举,铃声模式。 + + + + + + + + + + + + + + + + + + + + +

名称

+

默认值

+

描述

+

RINGER_MODE_SILENT

+

0

+

静音模式

+

RINGER_MODE_VIBRATE

+

1

+

震动模式

+

RINGER_MODE_NORMAL

+

2

+

响铃模式

+
-## AudioManager +## AudioManager -音频管理器。 +管理音频音量和音频设备。 -### setVolume\(AudioVolumeType, number, AsyncCallback\) +### setVolume\(volumeType: AudioVolumeType, volume: number, callback: AsyncCallback\): void -设置某个流的音量,使用callback方式作为异步方法。 +设置指定流的音量,使用callback方式返回异步结果。 **参数:** - -

参数名

+ + - - - - - - - - - - - - - - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

audioType

+

volumeType

AudioVolumeType

+

AudioVolumeType

+

流类型。

+

音量流类型。

volume

+

volume

number

+

number

+

音量。

+

音量等级,可设置范围通过getMinVolume和getMaxVolume获取。

callback

+

callback

AsyncCallback<void>

+

AsyncCallback<void>

+

回调表示成功还是失败。

+

回调表示成功还是失败。

+**返回值:** + +无 + **示例:** ``` -audioManager.setVolume(audio.AudioVolumeType.MEDIA, 30, (err)=>{ +audioManager.setVolume(audio.AudioVolumeType.MEDIA, 10, (err)=>{ if (err) { - console.error(`failed to set volume ${err.message}`); + console.error('Failed to set the volume. ${err.message}'); return; } - console.log(`Media setVolume successful callback`); + console.log('Callback invoked to indicate a successful volume setting.'); }) ``` -### setVolume\(AudioVolumeType, number\) +### setVolume\(volumeType: AudioVolumeType, volume: number\): Promise -设置某个流的音量,使用promise方式作为异步方法。 +设置指定流的音量,使用promise方式返回异步结果。 **参数:** - -

参数名

+ + - - - - - - - - - - - @@ -329,16 +383,16 @@ audioManager.setVolume(audio.AudioVolumeType.MEDIA, 30, (err)=>{ **返回值:** - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

audioType

+

volumeType

AudioVolumeType

+

AudioVolumeType

+

流类型。

+

音量流类型。

volume

+

volume

number

+

number

+

音量。

+

音量等级,可设置范围通过getMinVolume和getMaxVolume获取。

类型

+ + - - - @@ -347,85 +401,89 @@ audioManager.setVolume(audio.AudioVolumeType.MEDIA, 30, (err)=>{ **示例:** ``` -audioManager.setVolume(audio.AudioVolumeType.MEDIA, 30).then(()=> - console.log(`Media setVolume successful callback`); +audioManager.setVolume(audio.AudioVolumeType.MEDIA, 10).then(()=> + console.log('Promise returned to indicate a successful volume setting.'); ) ``` -### getVolume\(AudioVolumeType, AsyncCallback\) +### getVolume\(volumeType: AudioVolumeType, callback: AsyncCallback\): void -获取某个流的音量,使用callback方式作为异步方法。 +获取指定流的音量,使用callback方式返回异步结果。 **参数:** - -

类型

说明

+

说明

Promise<void>

+

Promise<void>

Promise回调表示成功还是失败。

+

Promise回调表示成功还是失败。

参数名

+ + - - - - - - - - - - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

audioType

+

volumeType

AudioVolumeType

+

AudioVolumeType

+

流类型。

+

音量流类型。

callback

+

callback

AsyncCallback<number>

+

AsyncCallback<number>

+

回调返回音量大小。

+

回调返回音量大小。

+**返回值:** + +无 + **示例:** ``` -audioManager.getVolume(audio.AudioVolumeType.MEDIA, (err, value)=>{ +audioManager.getVolume(audio.AudioVolumeType.MEDIA, (err, value) => { if (err) { - console.error(`failed to get volume ${err.message}`); + console.error('Failed to obtain the volume. ${err.message}'); return; } - console.log(`Media getVolume successful callback`); + console.log('Callback invoked to indicate that the volume is obtained.'); }) ``` -### getVolume\(AudioVolumeType\) +### getVolume\(volumeType: AudioVolumeType\): Promise -获取某个流的音量,使用promise方式作为异步方法。 +获取指定流的音量,使用promise方式返回异步结果。 **参数:** - -

参数名

+ + - - - - - - - @@ -433,16 +491,16 @@ audioManager.getVolume(audio.AudioVolumeType.MEDIA, (err, value)=>{ **返回值:** - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

audioType

+

volumeType

AudioVolumeType

+

AudioVolumeType

+

流类型。

+

音量流类型。

类型

+ + - - - @@ -451,85 +509,89 @@ audioManager.getVolume(audio.AudioVolumeType.MEDIA, (err, value)=>{ **示例:** ``` -audioManager.getVolume(audio.AudioVolumeType.MEDIA).then((data)=> - console.log(`Media getVolume successful callback`); +audioManager.getVolume(audio.AudioVolumeType.MEDIA).then((value) => + console.log('Promise returned to indicate that the volume is obtained.' + value); ) ``` -### getMinVolume\(AudioVolumeType, AsyncCallback\) +### getMinVolume\(volumeType: AudioVolumeType, callback: AsyncCallback\): void -获取某个流的最小音量,使用callback方式作为异步方法。 +获取指定流的最小音量,使用callback方式返回异步结果。 **参数:** - -

类型

说明

+

说明

Promise<number>

+

Promise<number>

Promise回调返回音量大小。

+

Promise回调返回音量大小。

参数名

+ + - - - - - - - - - - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

audioType

+

volumeType

AudioVolumeType

+

AudioVolumeType

+

流类型。

+

音量流类型。

callback

+

callback

AsyncCallback<number>

+

AsyncCallback<number>

+

回调返回最小音量。

+

回调返回最小音量。

+**返回值:** + +无 + **示例:** ``` -audioManager.getMinVolume(audio.AudioVolumeType.MEDIA, (err, value)=>{ - if (err) { - console.error(`failed to get minvolume ${err.message}`); - return; - } - console.log(`Media getMinVolume successful callback`); +audioManager.getVolume(audio.AudioVolumeType.MEDIA, (err, value) => { + if (err) { + console.error('Failed to obtain the minimum volume. ${err.message}'); + return; + } + console.log('Callback invoked to indicate that the minimum volume is obtained.' + value); }) ``` -### getMinVolume\(AudioVolumeType\) +### getMinVolume\(volumeType: AudioVolumeType\): Promise -获取某个流的最小音量,使用promise方式作为异步方法。 +获取指定流的最小音量,使用promise方式返回异步结果。 **参数:** - -

参数名

+ + - - - - - - - @@ -537,16 +599,16 @@ audioManager.getMinVolume(audio.AudioVolumeType.MEDIA, (err, value)=>{ **返回值:** - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

audioType

+

volumeType

AudioVolumeType

+

AudioVolumeType

+

流类型。

+

音量流类型。

类型

+ + - - - @@ -555,85 +617,89 @@ audioManager.getMinVolume(audio.AudioVolumeType.MEDIA, (err, value)=>{ **示例:** ``` -audioManager.getMinVolume(audio.AudioVolumeType.MEDIA).then((data)=> - console.log(`Media getMinVolume successful callback`); +audioManager.getMinVolume(audio.AudioVolumeType.MEDIA).then((value) => + console.log('Promised returned to indicate that the minimum volume is obtained.' + value); ) ``` -### getMaxVolume\(AudioVolumeType, AsyncCallback\) +### getMaxVolume\(volumeType: AudioVolumeType, callback: AsyncCallback\): void -获取某个流的最大音量,使用callback方式作为异步方法。 +获取指定流的最大音量,使用callback方式返回异步结果。 **参数:** - -

类型

说明

+

说明

Promise<number>

+

Promise<number>

Promise回调返回最小音量。

+

Promise回调返回最小音量。

参数名

+ + - - - - - - - - - - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

audioType

+

volumeType

AudioVolumeType

+

AudioVolumeType

+

流类型。

+

音量流类型。

callback

+

callback

AsyncCallback<number>

+

AsyncCallback<number>

+

回调返回最大音量大小。

+

回调返回最大音量大小。

+**返回值:** + +无 + **示例:** ``` -audioManager.getMaxVolume(audio.AudioVolumeType.MEDIA, (err, value)=>{ - if (err) { - console.error(`failed to get maxvolume ${err.message}`); - return; - } - console.log(`Media getMaxVolume successful callback`); +audioManager.getMaxVolume(audio.AudioVolumeType.MEDIA, (err, value) => { + if (err) { + console.error('Failed to obtain the maximum volume. ${err.message}'); + return; + } + console.log('Callback invoked to indicate that the maximum volume is obtained.' + value); }) ``` -### getMaxVolume\(AudioVolumeType\) +### getMaxVolume\(volumeType: AudioVolumeType\): Promise -获取某个流的最大音量,使用promise方式作为异步方法。 +获取指定流的最大音量,使用promise方式返回异步结果。 **参数:** - -

参数名

+ + - - - - - - - @@ -641,16 +707,16 @@ audioManager.getMaxVolume(audio.AudioVolumeType.MEDIA, (err, value)=>{ **返回值:** - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

audioType

+

volumeType

AudioVolumeType

+

AudioVolumeType

+

流类型。

+

音量流类型。

类型

+ + - - - @@ -660,84 +726,214 @@ audioManager.getMaxVolume(audio.AudioVolumeType.MEDIA, (err, value)=>{ ``` audioManager.getMaxVolume(audio.AudioVolumeType.MEDIA).then((data)=> - console.log(`Media getMaxVolume successful callback`); + console.log('Promised returned to indicate that the maximum volume is obtained.'); ) ``` -### getDevices\(DeviceFlag, AsyncCallback\) +### mute\(volumeType: AudioVolumeType, mute: boolean, callback: AsyncCallback\): void7+ -获取音频设备列表,使用callback方式作为异步方法。 +设置指定音量流静音,使用callback方式返回异步结果。 **参数:** - -

类型

说明

+

说明

Promise<number>

+

Promise<number>

Promise回调返回最大音量大小。

+

Promise回调返回最大音量大小。

参数名

+ + - - - - + + + - + + - - - - - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

deviceFlag

+

volumeType

+

AudioVolumeType

+

+

音量流类型。

DeviceFlag

+

mute

+

boolean

+

设备类型的flag。

+

静音状态,true为静音,false为非静音。

callback

+

callback

AsyncCallback<AudioDeviceDescriptors>

+

AsyncCallback<void>

+

回调,返回设备列表。

+

回调表示成功还是失败。

+**返回值:** + +无 + **示例:** ``` -audioManager.getDevices(audio.DeviceFlag.OUTPUT_DEVICES_FLAG, (err, value)=>{ +audioManager.mute(audio.AudioVolumeType.MEDIA, true, (err) => { + if (err) { + console.error('Failed to mute the stream. ${err.message}'); + return; + } + console.log('Callback invoked to indicate that the stream is muted.'); +}) +``` + +### mute\(volumeType: AudioVolumeType, mute: boolean\): Promise7+ + +设置指定音量流静音,使用promise方式返回异步结果。 + +**参数:** + + + + + + + + + + + + + + + + + + + +

参数名

+

类型

+

必填

+

说明

+

volumeType

+

AudioVolumeType

+

+

音量流类型。

+

mute

+

boolean

+

+

静音状态,true为静音,false为非静音。

+
+ +**返回值:** + + + + + + + + + + +

类型

+

说明

+

Promise<void>

+

Promise回调表示成功还是失败。

+
+ +**示例:** + +``` +audioManager.mute(audio.AudioVolumeType.MEDIA, true).then(() => + console.log('Promise returned to indicate that the stream is muted.'); +) +``` + +### isMute\(volumeType: AudioVolumeType, callback: AsyncCallback\): void7+ + +获取指定音量流是否被静音,使用callback方式返回异步结果。 + +**参数:** + + + + + + + + + + + + + + + + + + + +

参数名

+

类型

+

必填

+

说明

+

volumeType

+

AudioVolumeType

+

+

音量流类型。

+

callback

+

AsyncCallback<boolean>

+

+

回调返回流静音状态,true为静音,false为非静音。

+
+ +**返回值:** + +无 + +**示例:** + +``` +audioManager.isMute(audio.AudioVolumeType.MEDIA, (err, value) => { if (err) { - console.error(`failed to get getdevices ${err.message}`); + console.error('Failed to obtain the mute status. ${err.message}'); return; } - console.log(`Media getDevices successful callback`); + console.log('Callback invoked to indicate that the mute status of the stream is obtained.' + value); }) ``` -### getDevices\(DeviceFlag\) +### isMute\(volumeType: AudioVolumeType\): Promise7+ -获取音频设备列表,使用promise方式作为异步方法。 +获取指定音量流是否被静音,使用promise方式返回异步结果。 **参数:** - -

参数名

+ + - - - - - - - @@ -745,16 +941,16 @@ audioManager.getDevices(audio.DeviceFlag.OUTPUT_DEVICES_FLAG, (err, value)=>{ **返回值:** - -

参数名

类型

+

类型

必填

+

必填

说明

+

说明

deviceFlag

+

volumeType

DeviceFlag

+

AudioVolumeType

+

设备类型的flag。

+

音量流类型。

类型

+ + - - - @@ -763,59 +959,1119 @@ audioManager.getDevices(audio.DeviceFlag.OUTPUT_DEVICES_FLAG, (err, value)=>{ **示例:** ``` -audioManager.getDevices(audio.DeviceFlag.OUTPUT_DEVICES_FLAG).then((data)=> - console.log(`Media getDevices successful callback`); +audioManager.isMute(audio.AudioVolumeType.MEDIA).then((value) => + console.log('Promise returned to indicate that the mute status of the stream is obtained.' + value); ) ``` -## AudioDeviceDescriptor +### isActive\(volumeType: AudioVolumeType, callback: AsyncCallback\): void7+ -描述音频设备。 +获取指定音量流是否为活跃状态,使用callback方式返回异步结果。 + +**参数:** + + +

类型

说明

+

说明

Promise<AudioDeviceDescriptors>

+

Promise<boolean>

Promise回调返回设备列表。

+

Promise回调返回流静音状态,true为静音,false为非静音。

+ + + + + + + + + + + + + + + + +

参数名

+

类型

+

必填

+

说明

+

volumeType

+

AudioVolumeType

+

+

音量流类型。

+

callback

+

AsyncCallback<boolean>

+

+

回调返回流的活跃状态,true为活跃,false为不活跃。

+
+ +**返回值:** + +无 + +**示例:** + +``` +audioManager.isActive(audio.AudioVolumeType.MEDIA, (err, value) => { + if (err) { + console.error('Failed to obtain the active status of the stream. ${err.message}'); + return; + } + console.log('Callback invoked to indicate that the active status of the stream is obtained.' + value); +}) +``` + +### isActive\(volumeType: AudioVolumeType\): Promise7+ + +获取指定音量流是否为活跃状态,使用promise方式返回异步结果。 + +**参数:** + + + + + + + + + + + + + + +

参数名

+

类型

+

必填

+

说明

+

volumeType

+

AudioVolumeType

+

+

音量流类型。

+
+ +**返回值:** + + + + + + + + + + +

类型

+

说明

+

Promise<boolean>

+

Promise回调返回流的活跃状态,true为活跃,false为不活跃。

+
- -

名称

+**示例:** + +``` +audioManager.isActive(audio.AudioVolumeType.MEDIA).then((value) => + console.log('Promise returned to indicate that the active status of the stream is obtained.' + value); +) +``` + +### setRingerMode\(mode: AudioRingMode, callback: AsyncCallback\): void7+ + +设置铃声模式,使用callback方式返回异步结果。 + +**参数:** + + + + + + + + + + + + + + + + + + + +

参数名

+

类型

+

必填

+

说明

+

mode

+

AudioRingMode

+

+

音频铃声模式。

+

callback

+

AsyncCallback<void>

+

+

回调返回设置成功或失败。

+
+ +**返回值:** + +无 + +**示例:** + +``` +audioManager.setRingerMode(audio.AudioRingMode.RINGER_MODE_NORMAL, (err) => { + if (err) { + console.error('Failed to set the ringer mode.​ ${err.message}'); + return; + } + console.log('Callback invoked to indicate a successful setting of the ringer mode.'); +}) +``` + +### setRingerMode\(mode: AudioRingMode\): Promise7+ + +设置铃声模式,使用promise方式返回异步结果。 + +**参数:** + + + - - - - - - + + + +

参数名

类型

+

类型

必填

+

必填

描述

+

说明

deviceRole

+

mode

DeviceRole

+

AudioRingMode

+

+

音频铃声模式。

+
+ +**返回值:** + + + + + + + - - +

类型

+

说明

+

Promise<void>

设备角色。

+

Promise回调返回设置成功或失败。

deviceType

+
+ +**示例:** + +``` +audioManager.setRingerMode(audio.AudioRingMode.RINGER_MODE_NORMAL).then(() => + console.log('Promise returned to indicate a successful setting of the ringer mode.'); +) +``` + +### getRingerMode\(callback: AsyncCallback\): void7+ + +获取铃声模式,使用callback方式返回异步结果。 + +**参数:** + + + + + + + + + + + + + + +

参数名

+

类型

+

必填

+

说明

+

callback

+

AsyncCallback<AudioRingMode>

+

+

回调返回系统的铃声模式。

+
+ +**返回值:** + +无 + +**示例:** + +``` +audioManager.getRingerMode((err, value) => { + if (err) { + console.error('Failed to obtain the ringer mode.​ ${err.message}'); + return; + } + console.log('Callback invoked to indicate that the ringer mode is obtained.' + value); +}) +``` + +### getRingerMode\(\): Promise7+ + +获取铃声模式,使用promise方式返回异步结果。 + +**参数:** + +无 + +**返回值:** + + + + + + + + + + +

类型

+

说明

+

Promise<AudioRingerMode>

+

Promise回调返回系统的铃声模式。

+
+ +**示例:** + +``` +audioManager.getRingerMode().then((value) => + console.log('Promise returned to indicate that the ringer mode is obtained.' + value); +) +``` + +### setAudioParameter\(key: string, value: string, callback: AsyncCallback\): void7+ + +音频参数设置,使用callback方式返回异步结果。 + +**参数:** + + + + + + + + + + + + + + + + + + + + + + + + +

参数名

+

类型

+

必填

+

说明

+

key

+

string

+

+

被设置的音频参数的键。

+

value

+

string

+

+

被设置的音频参数的值。

+

callback

+

AsyncCallback<void>

+

+

回调返回设置成功或失败。

+
+ +**返回值:** + +无 + +**示例:** + +``` +audioManager.setAudioParameter('PBits per sample', '8 bit', (err) => { + if (err) { + console.error('Failed to set the audio parameter. ${err.message}'); + return; + } + console.log('Callback invoked to indicate a successful setting of the audio parameter.'); +}) +``` + +### setAudioParameter\(key: string, value: string\): Promise7+ + +音频参数设置,使用promise方式返回异步结果。 + +**参数:** + + + + + + + + + + + + + + + + + + + +

参数名

+

类型

+

必填

+

说明

+

key

+

string

+

+

被设置的音频参数的键。

+

value

+

string

+

+

被设置的音频参数的值。

+
+ +**返回值:** + + + + + + + + + + +

类型

+

说明

+

Promise<void>

+

Promise回调返回设置成功或失败。

+
+ +**示例:** + +``` +audioManager.setAudioParameter('PBits per sample', '8 bit').then(() => + console.log('Promise returned to indicate a successful setting of the audio parameter.'); +) +``` + +### getAudioParameter\(key: string, callback: AsyncCallback\): void7+ + +获取指定音频参数值,使用callback方式返回异步结果。 + +**参数:** + + + + + + + + + + + + + + + + + + + +

参数名

+

类型

+

必填

+

说明

+

key

+

string

+

+

待获取的音频参数的键。

+

callback

+

AsyncCallback<string>

+

+

回调返回获取的音频参数的值。

+
+ +**返回值:** + +无 + +**示例:** + +``` +audioManager.getAudioParameter('PBits per sample', (err, value) => { + if (err) { + console.error('Failed to obtain the value of the audio parameter. ${err.message}'); + return; + } + console.log('Callback invoked to indicate that the value of the audio parameter is obtained.' + value); +}) +``` + +### getAudioParameter\(key: string\): Promise7+ + +获取指定音频参数值,使用promise方式返回异步结果。 + +**参数:** + + + + + + + + + + + + + + +

参数名

+

类型

+

必填

+

说明

+

key

+

string

+

+

待获取的音频参数的键。

+
+ +**返回值:** + + + + + + + + + + +

类型

+

说明

+

Promise<string>

+

Promise回调返回获取的音频参数的值。

+
+ +**示例:** + +``` +audioManager.getAudioParameter('PBits per sample').then((value) => + console.log('Promise returned to indicate that the value of the audio parameter is obtained.' + value); +) +``` + +### getDevices\(deviceFlag: DeviceFlag, callback: AsyncCallback\): void + +获取音频设备列表,使用callback方式返回异步结果。 + +**参数:** + + + + + + + + + + + + + + + + + + + +

参数名

+

类型

+

必填

+

说明

+

deviceFlag

+

DeviceFlag

+

+

设备类型的flag。

+

callback

+

AsyncCallback<AudioDeviceDescriptors>

+

+

回调,返回设备列表。

+
+ +**示例:** + +``` +audioManager.getDevices(audio.DeviceFlag.OUTPUT_DEVICES_FLAG, (err, value)=>{ + if (err) { + console.error('Failed to obtain the device list. ${err.message}'); + return; + } + console.log('Callback invoked to indicate that the device list is obtained.'); +}) +``` + +### getDevices\(deviceFlag: DeviceFlag\): Promise + +获取音频设备列表,使用promise方式返回异步结果。 + +**参数:** + + + + + + + + + + + + + + +

参数名

+

类型

+

必填

+

说明

+

deviceFlag

+

DeviceFlag

+

+

设备类型的flag。

+
+ +**返回值:** + + + + + + + + + + +

类型

+

说明

+

Promise<AudioDeviceDescriptors>

+

Promise回调返回设备列表。

+
+ +**示例:** + +``` +audioManager.getDevices(audio.DeviceFlag.OUTPUT_DEVICES_FLAG).then((data)=> + console.log('Promise returned to indicate that the device list is obtained.'); +) +``` + +### setDeviceActive\(deviceType: DeviceType, active: boolean, callback: AsyncCallback\): void7+ + +设置设备激活状态,使用callback方式返回异步结果。 + +**参数:** + + + + + + + + + + + + + + + + + + + + + + + + +

参数名

+

类型

+

必填

+

说明

+

deviceType

+

DeviceType

+

+

音频设备类型。

+

active

+

boolean

+

+

设备激活状态。

+

callback

+

AsyncCallback<void>

+

+

回调返回设置成功或失败。

+
+ +**返回值:** + +无 + +**示例:** + +``` +audioManager.setDeviceActive(audio.DeviceType.SPEAKER, true, (err)=> { + if (err) { + console.error('Failed to set the active status of the device. ${err.message}'); + return; + } + console.log('Callback invoked to indicate that the device is set to the active status.'); +}) +``` + +### setDeviceActive\(deviceType: DeviceType, active: boolean\): Promise7+ + +设置设备激活状态,使用promise方式返回异步结果。 + +**参数:** + + + + + + + + + + + + + + + + + + + +

参数名

+

类型

+

必填

+

说明

+

deviceType

+

DeviceType

+

+

音频设备类型。

+

active

+

boolean

+

+

设备激活状态。

+
+ +**返回值:** + + + + + + + + + + +

类型

+

说明

+

Promise<void>

+

Promise回调返回设置成功或失败。

+
+ +**示例:** + +``` +audioManager.setDeviceActive(audio.DeviceType.SPEAKER, true).then(()=> + console.log('Promise returned to indicate that the device is set to the active status.'); +) +``` + +### isDeviceActive\(deviceType: DeviceType, callback: AsyncCallback\): void7+ + +获取指定设备激活状态,使用callback方式返回异步结果。 + +**参数:** + + + + + + + + + + + + + + + + + + + +

参数名

+

类型

+

必填

+

说明

+

deviceType

+

DeviceType

+

+

音频设备类型。

+

callback

+

AsyncCallback<boolean>

+

+

回调返回设备的激活状态。

+
+ +**返回值:** + +无 + +**示例:** + +``` +audioManager.isDeviceActive(audio.DeviceType.SPEAKER, (err, value) => { + if (err) { + console.error('Failed to obtain the active status of the device. ${err.message}'); + return; + } + console.log('Callback invoked to indicate that the active status of the device is obtained.'); +}) +``` + +### isDeviceActive\(deviceType: DeviceType\): Promise7+ + +获取指定设备激活状态,使用promise方式返回异步结果。 + +**参数:** + + + + + + + + + + + + + + +

参数名

+

类型

+

必填

+

说明

+

deviceType

+

DeviceType

+

+

音频设备类型。

+
+ +**返回值:** + + + + + + + + + + +

Type

+

Description

+

Promise<boolean>

+

Promise回调返回设备的激活状态。

+
+ +**示例:** + +``` +audioManager.isDeviceActive(audio.DeviceType.SPEAKER).then((value) => + console.log('Promise returned to indicate that the active status of the device is obtained.' + value); +) +``` + +### setMicrophoneMute\(mute: boolean, callback: AsyncCallback\): void7+ + +设置麦克风静音状态,使用callback方式返回异步结果。 + +**参数:** + + + + + + + + + + + + + + + + + + + +

参数名

+

类型

+

必填

+

说明

+

mute

+

boolean

+

+

待设置的静音状态,true为静音,false为非静音。

+

callback

+

AsyncCallback<void>

+

+

回调返回设置成功或失败。

+
+ +**返回值:** + +无 + +**示例:** + +``` +audioManager.setMicrophoneMute(true, (err) => { + if (err) { + console.error('Failed to mute the microphone. ${err.message}'); + return; + } + console.log('Callback invoked to indicate that the microphone is muted.'); +}) +``` + +### setMicrophoneMute\(mute: boolean\): Promise7+ + +设置麦克风静音状态,使用promise方式返回异步结果。 + +**参数:** + + + + + + + + + + + + + + +

参数名

+

类型

+

必填

+

说明

+

mute

+

boolean

+

+

待设置的静音状态,true为静音,false为非静音。

+
+ +**返回值:** + + + + + + + + + + +

类型

+

说明

+

Promise<void>

+

Promise回调返回设置成功或失败。

+
+ +**示例:** + +``` +audioManager.setMicrophoneMute(true).then(() => + console.log('Promise returned to indicate that the microphone is muted.'); +) +``` + +### isMicrophoneMute\(callback: AsyncCallback\): void7+ + +获取麦克风静音状态,使用callback方式返回异步结果。 + +**参数:** + + + + + + + + + + + + + + +

参数名

+

类型

+

必填

+

说明

+

callback

+

AsyncCallback<boolean>

+

+

回调返回系统麦克风静音状态,true为静音,false为非静音。

+
+ +**返回值:** + +无 + +**示例:** + +``` +audioManager.isMicrophoneMute((err, value) => { + if (err) { + console.error('Failed to obtain the mute status of the microphone. ${err.message}'); + return; + } + console.log('Callback invoked to indicate that the mute status of the microphone is obtained.' + value); +}) +``` + +### isMicrophoneMute\(\): Promise7+ + +获取麦克风静音状态,使用promise方式返回异步结果。 + +**参数:** + +无 + +**返回值:** + + + + + + + + + + +

类型

+

说明

+

Promise<boolean>

+

Promise回调返回系统麦克风静音状态,true为静音,false为非静音。

+
+ +**示例:** + +``` +audioManager.isMicrophoneMute().then((value) => + console.log('Promise returned to indicate that the mute status of the microphone is obtained.', + value); +) +``` + +## AudioDeviceDescriptor + +描述音频设备。 + +### 属性 + + + + + + + + + + + + + + + + + - - -

名称

+

参数型

+

可读

+

可写

+

说明

+

deviceRole

+

DeviceRole

+

+

+

设备角色。

+

deviceType

+

DeviceType

DeviceType

+

+

设备类型。

+

设备类型。

-## AudioDeviceDescriptors +## AudioDeviceDescriptors - -

名称

+ + - - - diff --git "a/zh-cn/application-dev/media/figures/\351\237\263\351\242\221\346\222\255\346\224\276\347\212\266\346\200\201\346\234\272.png" "b/zh-cn/application-dev/media/figures/\351\237\263\351\242\221\346\222\255\346\224\276\347\212\266\346\200\201\346\234\272.png" index 2bd16cf5945b3347a2bebdb8f78e2e5fcab992f8..e0777e28838f6d2455233f2068339f8548f50c67 100755 GIT binary patch literal 23062 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 + + + - - - - - @@ -103,11 +103,6 @@ - - - - + + + @@ -133,7 +133,7 @@ - @@ -143,7 +143,7 @@ - @@ -162,73 +162,70 @@ ``` player.on('play', (err, action) => { if (err) { - console.log(`err returned in play() callback`); + console.error('Error returned in the play() callback.'); return; } - console.info('Current Song duration: '+duration); - console.log(`In play callback current time: ${player.currentTime}`); - console.info('Current Player Status: '+player.state); - console.info('Pause Mp3'); + console.info('Current player duration: '+ player.duration); + console.info('Current player time: ' + player.currentTime); + console.info('Current player status: '+player.state); + console.info('Pause MP3'); player.pause(); }); player.on('pause', (err, action) => { if (err) { - console.log(`err returned in pause() callback`); + console.error('Error returned in the pause() callback.'); return; } - console.log(`pause callback, state: ${player.state}`); - console.info('Current Player Status: '+player.state); - var currentTime = player.currenTime; - console.info('Current Player Time: '+currentTime); - player.seek(30000); //seek for 30 seconds + console.info('Current player status: ' + player.state); + console.info('Current player time: ' + player.currentTime); + player.seek(30000); // Seek for 30 seconds. }); player.on('stop', (err, action) => { if (err) { - console.log(`err returned in stop() callback`); + console.error('Error returned in the stop() callback.'); return; } - console.log(`stop callback, state: ${player.state}`); + console.info('stop callback invoked. State:' + player.state); + player.reset(); }); player.on('dataLoad', (err, action) => { if (err) { - console.log(`err returned in dataLoad() callback`); + console.error('Error returned in the dataLoad() callback.'); return; } - console.log(`dataLoad callback is called, cuurent time: ${player.currentTime}`); - console.log(`Duration of the source: ${player.duration}`); + console.info('dataLoad callback invoked. Current time: ' + player.currentTime); + console.info('Duration of the source:' + player.duration); + player.play(); + }); + player.on('reset', (err, action) => { + if (err) { + console.error('Error returned in the reset() callback.'); + return; + } + console.info('reset callback invoked.'); + player.release(); }); player.on('finish', (err, action) => { if (err) { - console.log(`err returned in finish() callback`); + console.error('Error returned in the finish() callback.'); return; } - console.log(`Player finish callback is called`); + console.info('finish callback invoked.'); }); - player.on('timeUpdate', (err, action) => { - if (err) { - console.log(`err returned in timeUpdate() callback`); - return; - } - console.log(`In timeupdate callback current time: ${player.currentTime}`); - var newTime = player.currenTime; - if(newTime = 30000) { - console.info('Seek success, new time : '+newTime); + player.on('timeUpdate', (seekTime, action) => { + console.info('Seek time: ' + seekTime); + console.info('Current player time: ' + player.currentTime); + var newTime = player.currentTime; + if(newTime == 30000) { + console.info('Seek succeeded. New time: ' + newTime); } else { - console.info('Seek Failed'); + console.error('Seek failed: ', + newTime); } player.stop(); }); - player.on('durationchange', (err, action) => { - if (err) { - console.log(`err returned in durationchange callback`); - return; - } - console.log(`Durationchange callback is called`); - }); player.on('error', (err) => { - console.error(`player error: ${err.message}`); + console.error('Player error: ${err.message}'); }); - ``` 3. 启动播放。 @@ -237,7 +234,6 @@ var audioSourceMp3 = 'file://test.mp3'; player.src = audioSourceMp3; player.loop = true; - player.play(); ``` -- Gitee

名称

描述

+

描述

设备属性队列

+

设备属性数组

AudioDeviceDescriptor的队列,只读。

+

AudioDeviceDescriptor的数组,只读。

fZ1n9Olr3U|(abqJ@M(wiX9sqzr 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

停止播放。

reset()7+

+

重置播放音频源。

+

setVolume(vol: number)

改变音频播放音量

@@ -78,17 +83,12 @@

音频播放的媒体URI。

state:string

+

state:AudioState

播放的状态属性。

autoplay:boolean

-

音频的自动播放属性。

-

currenttime:number

+

currentTime:number

音频的当前播放位置。

音频的循环播放属性。

muted:boolean

-

音频的静音属性。

-

on('play', function callback)

监听音频播放开始事件。

@@ -123,7 +118,12 @@

监听音频播放停止事件。

on('ended',function callback)

+

on('reset', function callback)

+

监听音频播放重置事件。

+

on('finish',function callback)

监听音频播放结束事件。

监听音频播放错误事件。

on('loaderdata', function callback)

+

on('dataload', function callback)

监听音频播放加载数据事件。

监听音频播放音量变化事件。

on('timeupdate', function callback)

+

on('timeUpdate', function callback)

监听音频播放进度改变事件。