diff --git a/en/application-dev/reference/apis/js-apis-audio.md b/en/application-dev/reference/apis/js-apis-audio.md index 68d01ed3f45885cf6b53fb3de35fc9b3e6c45da5..473c530ac8c4a2af7fc1bd049bdac984d0740429 100644 --- a/en/application-dev/reference/apis/js-apis-audio.md +++ b/en/application-dev/reference/apis/js-apis-audio.md @@ -37,6 +37,24 @@ Obtains an **AudioManager** instance. var audioManager = audio.getAudioManager(); ``` +## audio.getStreamManager9+ + +getStreamManager(): AudioStreamManager + +Obtains an **AudioStreamManager** instance. + +**System capability**: SystemCapability.Multimedia.Audio.Core + +**Return value** +| Type | Description | +| -------------------------------------------------| ------------------------------- | +| [AudioStreamManager](#audiostreammanager9) | **AudioStreamManager** instance. | + +**Example** +``` +var audioStreamManager = audio.getStreamManager(); +``` + ## audio.createAudioRenderer8+ createAudioRenderer(options: AudioRendererOptions, callback: AsyncCallback\): void @@ -57,31 +75,30 @@ Obtains an **AudioRenderer** instance. This API uses an asynchronous callback to ``` import audio from '@ohos.multimedia.audio'; var audioStreamInfo = { - samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100, - channels: audio.AudioChannel.CHANNEL_1, - sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE, - encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW + samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100, + channels: audio.AudioChannel.CHANNEL_1, + sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE, + encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW } var audioRendererInfo = { - content: audio.ContentType.CONTENT_TYPE_SPEECH, - usage: audio.StreamUsage.STREAM_USAGE_VOICE_COMMUNICATION, - rendererFlags: 1 + content: audio.ContentType.CONTENT_TYPE_SPEECH, + usage: audio.StreamUsage.STREAM_USAGE_VOICE_COMMUNICATION, + rendererFlags: 0 } var audioRendererOptions = { - streamInfo: audioStreamInfo, - rendererInfo: audioRendererInfo + streamInfo: audioStreamInfo, + rendererInfo: audioRendererInfo } audio.createAudioRenderer(audioRendererOptions,(err, data) => { - if (err) { - console.error(`AudioRenderer Created : Error: ${err.message}`); - } - else { - console.info('AudioRenderer Created : Success : SUCCESS'); - let audioRenderer = data; - } + if (err) { + console.error(`AudioRenderer Created: Error: ${err.message}`); + } else { + console.info(`AudioRenderer Created: Success: SUCCESS`); + let audioRenderer = data; + } }); ``` @@ -111,29 +128,29 @@ Obtains an **AudioRenderer** instance. This API uses a promise to return the res import audio from '@ohos.multimedia.audio'; var audioStreamInfo = { - samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100, - channels: audio.AudioChannel.CHANNEL_1, - sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE, - encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW + samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100, + channels: audio.AudioChannel.CHANNEL_1, + sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE, + encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW } var audioRendererInfo = { - content: audio.ContentType.CONTENT_TYPE_SPEECH, - usage: audio.StreamUsage.STREAM_USAGE_VOICE_COMMUNICATION, - rendererFlags: 1 + content: audio.ContentType.CONTENT_TYPE_SPEECH, + usage: audio.StreamUsage.STREAM_USAGE_VOICE_COMMUNICATION, + rendererFlags: 0 } var audioRendererOptions = { - streamInfo: audioStreamInfo, - rendererInfo: audioRendererInfo + streamInfo: audioStreamInfo, + rendererInfo: audioRendererInfo } var audioRenderer; audio.createAudioRenderer(audioRendererOptions).then((data) => { - audioRenderer = data; - console.info('AudioFrameworkRenderLog: AudioRenderer Created : Success : Stream Type: SUCCESS'); + audioRenderer = data; + console.info(`AudioFrameworkRenderLog: AudioRenderer Created : Success : Stream Type: SUCCESS`); }).catch((err) => { - console.info('AudioFrameworkRenderLog: AudioRenderer Created : ERROR : '+err.message); + console.info(`AudioFrameworkRenderLog: AudioRenderer Created : ERROR :` + err.message); }); ``` @@ -157,30 +174,29 @@ Obtains an **AudioCapturer** instance. This API uses an asynchronous callback to ``` import audio from '@ohos.multimedia.audio'; var audioStreamInfo = { - samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100, - channels: audio.AudioChannel.CHANNEL_2, - sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE, - encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW + samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100, + channels: audio.AudioChannel.CHANNEL_2, + sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE, + encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW } var audioCapturerInfo = { - source: audio.SourceType.SOURCE_TYPE_MIC, - capturerFlags: 1 + source: audio.SourceType.SOURCE_TYPE_MIC, + capturerFlags: 0 } var audioCapturerOptions = { - streamInfo: audioStreamInfo, - capturerInfo: audioCapturerInfo + streamInfo: audioStreamInfo, + capturerInfo: audioCapturerInfo } -audio.createAudioCapturer(audioCapturerOptions,(err, data) => { - if (err) { - console.error(`AudioCapturer Created : Error: ${err.message}`); - } - else { - console.info('AudioCapturer Created : Success : SUCCESS'); - let audioCapturer = data; - } +audio.createAudioCapturer(audioCapturerOptions, (err, data) => { + if (err) { + console.error(`AudioCapturer Created : Error: ${err.message}`); + } else { + console.info(`AudioCapturer Created : Success : SUCCESS`); + let audioCapturer = data; + } }); ``` @@ -210,28 +226,28 @@ Obtains an **AudioCapturer** instance. This API uses a promise to return the res import audio from '@ohos.multimedia.audio'; var audioStreamInfo = { - samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100, - channels: audio.AudioChannel.CHANNEL_2, - sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE, - encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW + samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100, + channels: audio.AudioChannel.CHANNEL_2, + sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE, + encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW } var audioCapturerInfo = { - source: audio.SourceType.SOURCE_TYPE_MIC, - capturerFlags: 1 + source: audio.SourceType.SOURCE_TYPE_MIC, + capturerFlags: 0 } var audioCapturerOptions = { - streamInfo: audioStreamInfo, - capturerInfo: audioCapturerInfo + streamInfo: audioStreamInfo, + capturerInfo: audioCapturerInfo } var audioCapturer; audio.createAudioCapturer(audioCapturerOptions).then((data) => { - audioCapturer = data; - console.info('AudioCapturer Created : Success : Stream Type: SUCCESS'); + audioCapturer = data; + console.info(`AudioCapturer Created : Success : Stream Type: SUCCESS`); }).catch((err) => { - console.info('AudioCapturer Created : ERROR : '+err.message); + console.info(`AudioCapturer Created : ERROR : ` + err.message); }); ``` @@ -253,7 +269,7 @@ Enumerates the audio stream types. Enumerates the audio interruption modes. -**System capability**: SystemCapability.Multimedia.Audio.InterruptMode +**System capability**: SystemCapability.Multimedia.Audio.Core | Name | Default Value| Description | | ---------------------------- | ------ | ---------- | @@ -332,13 +348,14 @@ Enumerate the audio sample formats. **System capability**: SystemCapability.Multimedia.Audio.Core -| Name | Default Value| Description | -| --------------------- | ------ | -------------------------- | -| SAMPLE_FORMAT_INVALID | -1 | Invalid format. | -| SAMPLE_FORMAT_U8 | 0 | Unsigned 8-bit integer. | -| SAMPLE_FORMAT_S16LE | 1 | Signed 16-bit integer, little endian.| -| SAMPLE_FORMAT_S24LE | 2 | Signed 24-bit integer, little endian.| -| SAMPLE_FORMAT_S32LE | 3 | Signed 32-bit integer, little endian.| +| Name | Default Value| Description | +| ---------------------------------- | ------ | -------------------------- | +| SAMPLE_FORMAT_INVALID | -1 | Invalid format. | +| SAMPLE_FORMAT_U8 | 0 | Unsigned 8-bit integer. | +| SAMPLE_FORMAT_S16LE | 1 | Signed 16-bit integer, little endian.| +| SAMPLE_FORMAT_S24LE | 2 | Signed 24-bit integer, little endian.
Due to system restrictions, only some devices support this sampling format.| +| SAMPLE_FORMAT_S32LE | 3 | Signed 32-bit integer, little endian.
Due to system restrictions, only some devices support this sampling format.| +| SAMPLE_FORMAT_F32LE9+ | 4 | Signed 32-bit integer, little endian.
Due to system restrictions, only some devices support this sampling format.| ## AudioChannel8+ @@ -410,6 +427,17 @@ Enumerates the audio stream usage. | STREAM_USAGE_VOICE_COMMUNICATION | 2 | Used for voice communication.| | STREAM_USAGE_NOTIFICATION_RINGTONE | 6 | Used for notification.| +## FocusType9+ + +Enumerates the focus types. + +**System capability**: SystemCapability.Multimedia.Audio.Core + +| Name | Default Value | Description | +| ---------------------------------- | ------ | ------------------------------- | +| FOCUS_TYPE_RECORDING | 0 | Other audios will be interrupted in recording scenarios. | + + ## AudioState8+ Enumerates the audio states. @@ -511,6 +539,17 @@ Describes audio renderer information. | usage | [StreamUsage](#streamusage) | Yes | Audio stream usage.| | rendererFlags | number | Yes | Audio renderer flags.| +## AudioRendererFlag9+ + +Enumerates the audio renderer flags that determine the output policy. + +**System capability**: SystemCapability.Multimedia.Audio.Core + +| Name | Default Value | Description | +| ------------------| ------------ | ---------------------- | +| FLAG_NONE | 0 | There is no special policy. | +| FLAG_LOW_LATENCY | 1 | A low-latency process is used. | + ## AudioRendererOptions8+ Describes audio renderer configurations. @@ -617,6 +656,17 @@ Describes audio capturer information. | source | [SourceType](#sourcetype) | Yes | Audio source type. | | capturerFlags | number | Yes | Audio capturer flags.| +## AudioRendererDataInfo9+ + +Describes the information of the audio renderer. + +**System capability**: SystemCapability.Multimedia.Audio.Renderer + +| Name | Type | Mandatory | Description | +| ------- | ----------- | -------| ------------------------ | +| buffer | ArrayBuffer | Yes | Buffer to be filled in. | +| flags | number | Yes | Extension information of the buffer. | + ## SourceType8+ Enumerates the audio source types. @@ -652,7 +702,7 @@ setVolume(volumeType: AudioVolumeType, volume: number, callback: AsyncCallback&l Sets the volume for a stream. This API uses an asynchronous callback to return the result. -**Required permissions**: ohos.permission.ACCESS_NOTIFICATION_POLICY +**Required permissions**: ohos.permission.ACCESS_NOTIFICATION_POLICY (This permission is required only for muting or unmuting the ringer when **volumeType** is set to **AudioVolumeType.RINGTONE**.) **System capability**: SystemCapability.Multimedia.Audio.Volume @@ -668,11 +718,11 @@ Sets the volume for a stream. This API uses an asynchronous callback to return t ``` audioManager.setVolume(audio.AudioVolumeType.MEDIA, 10, (err) => { - if (err) { - console.error('Failed to set the volume. ${err.message}'); - return; - } - console.log('Callback invoked to indicate a successful volume setting.'); + if (err) { + console.error(`Failed to set the volume. ${err.message}`); + return; + } + console.log(`Callback invoked to indicate a successful volume setting.`); }); ``` @@ -682,7 +732,7 @@ setVolume(volumeType: AudioVolumeType, volume: number): Promise<void> Sets the volume for a stream. This API uses a promise to return the result. -**Required permissions**: ohos.permission.ACCESS_NOTIFICATION_POLICY +**Required permissions**: ohos.permission.ACCESS_NOTIFICATION_POLICY (This permission is required only for muting or unmuting the ringer when **volumeType** is set to **AudioVolumeType.RINGTONE**.) **System capability**: SystemCapability.Multimedia.Audio.Volume @@ -703,7 +753,7 @@ Sets the volume for a stream. This API uses a promise to return the result. ``` audioManager.setVolume(audio.AudioVolumeType.MEDIA, 10).then(() => { - console.log('Promise returned to indicate a successful volume setting.'); + console.log(`Promise returned to indicate a successful volume setting.`); }); ``` @@ -726,11 +776,11 @@ Obtains the volume of a stream. This API uses an asynchronous callback to return ``` audioManager.getVolume(audio.AudioVolumeType.MEDIA, (err, value) => { - if (err) { - console.error('Failed to obtain the volume. ${err.message}'); - return; - } - console.log('Callback invoked to indicate that the volume is obtained.'); + if (err) { + console.error(`Failed to obtain the volume. ${err.message}`); + return; + } + console.log(`Callback invoked to indicate that the volume is obtained.`); }); ``` @@ -758,7 +808,7 @@ Obtains the volume of a stream. This API uses a promise to return the result. ``` audioManager.getVolume(audio.AudioVolumeType.MEDIA).then((value) => { - console.log('Promise returned to indicate that the volume is obtained.' + value); + console.log(`Promise returned to indicate that the volume is obtained.` + value); }); ``` @@ -781,11 +831,11 @@ Obtains the minimum volume allowed for a stream. This API uses an asynchronous c ``` audioManager.getMinVolume(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); + 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); }); ``` @@ -813,7 +863,7 @@ Obtains the minimum volume allowed for a stream. This API uses a promise to retu ``` audioManager.getMinVolume(audio.AudioVolumeType.MEDIA).then((value) => { - console.log('Promised returned to indicate that the minimum volume is obtained.' + value); + console.log(`Promised returned to indicate that the minimum volume is obtained.` + value); }); ``` @@ -836,11 +886,11 @@ Obtains the maximum volume allowed for a stream. This API uses an asynchronous c ``` 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); + 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); }); ``` @@ -868,7 +918,7 @@ Obtains the maximum volume allowed for a stream. This API uses a promise to retu ``` audioManager.getMaxVolume(audio.AudioVolumeType.MEDIA).then((data) => { - console.log('Promised returned to indicate that the maximum volume is obtained.'); + console.log(`Promised returned to indicate that the maximum volume is obtained.`); }); ``` @@ -878,6 +928,8 @@ mute(volumeType: AudioVolumeType, mute: boolean, callback: AsyncCallback<void Mutes or unmutes a stream. This API uses an asynchronous callback to return the result. +**Required permissions**: ohos.permission.ACCESS_NOTIFICATION_POLICY (This permission is required only for muting or unmuting the ringer when **volumeType** is set to **AudioVolumeType.RINGTONE**.) + **System capability**: SystemCapability.Multimedia.Audio.Volume **Parameters** @@ -892,11 +944,11 @@ Mutes or unmutes a stream. This API uses an asynchronous callback to return the ``` 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.'); + if (err) { + console.error(`Failed to mute the stream. ${err.message}`); + return; + } + console.log(`Callback invoked to indicate that the stream is muted.`); }); ``` @@ -906,6 +958,8 @@ mute(volumeType: AudioVolumeType, mute: boolean): Promise<void> Mutes or unmutes a stream. This API uses a promise to return the result. +**Required permissions**: ohos.permission.ACCESS_NOTIFICATION_POLICY (This permission is required only for muting or unmuting the ringer when **volumeType** is set to **AudioVolumeType.RINGTONE**.) + **System capability**: SystemCapability.Multimedia.Audio.Volume **Parameters** @@ -926,7 +980,7 @@ Mutes or unmutes a stream. This API uses a promise to return the result. ``` audioManager.mute(audio.AudioVolumeType.MEDIA, true).then(() => { - console.log('Promise returned to indicate that the stream is muted.'); + console.log(`Promise returned to indicate that the stream is muted.`); }); ``` @@ -950,11 +1004,11 @@ Checks whether a stream is muted. This API uses an asynchronous callback to retu ``` audioManager.isMute(audio.AudioVolumeType.MEDIA, (err, value) => { - if (err) { - console.error('Failed to obtain the mute status. ${err.message}'); - return; - } - console.log('Callback invoked to indicate that the mute status of the stream is obtained.' + value); + if (err) { + console.error(`Failed to obtain the mute status. ${err.message}`); + return; + } + console.log(`Callback invoked to indicate that the mute status of the stream is obtained.` + value); }); ``` @@ -983,7 +1037,7 @@ Checks whether a stream is muted. This method uses a promise to return the resul ``` audioManager.isMute(audio.AudioVolumeType.MEDIA).then((value) => { - console.log('Promise returned to indicate that the mute status of the stream is obtained.' + value); + console.log(`Promise returned to indicate that the mute status of the stream is obtained.` + value); }); ``` @@ -1006,11 +1060,11 @@ Checks whether a stream is active. This API uses an asynchronous callback to ret ``` 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); + 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); }); ``` @@ -1038,7 +1092,7 @@ Checks whether a stream is active. This method uses a promise to return the resu ``` audioManager.isActive(audio.AudioVolumeType.MEDIA).then((value) => { - console.log('Promise returned to indicate that the active status of the stream is obtained.' + value); + console.log(`Promise returned to indicate that the active status of the stream is obtained.` + value); }); ``` @@ -1048,7 +1102,7 @@ setRingerMode(mode: AudioRingMode, callback: AsyncCallback<void>): void Sets the ringer mode. This API uses an asynchronous callback to return the result. -**Required permissions**: ohos.permission.ACCESS_NOTIFICATION_POLICY +**Required permissions**: ohos.permission.ACCESS_NOTIFICATION_POLICY (This permission is required only for muting or unmuting the ringer.) **System capability**: SystemCapability.Multimedia.Audio.Communication @@ -1063,11 +1117,11 @@ Sets the ringer mode. This API uses an asynchronous callback to return the resul ``` 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.'); + 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.`); }); ``` @@ -1077,7 +1131,7 @@ setRingerMode(mode: AudioRingMode): Promise<void> Sets the ringer mode. This API uses a promise to return the result. -**Required permissions**: ohos.permission.ACCESS_NOTIFICATION_POLICY +**Required permissions**: ohos.permission.ACCESS_NOTIFICATION_POLICY (This permission is required only for muting or unmuting the ringer.) **System capability**: SystemCapability.Multimedia.Audio.Communication @@ -1097,7 +1151,7 @@ Sets the ringer mode. This API uses a promise to return the result. ``` audioManager.setRingerMode(audio.AudioRingMode.RINGER_MODE_NORMAL).then(() => { - console.log('Promise returned to indicate a successful setting of the ringer mode.'); + console.log(`Promise returned to indicate a successful setting of the ringer mode.`); }); ``` @@ -1120,11 +1174,11 @@ Obtains the ringer mode. This API uses an asynchronous callback to return the re ``` 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); + 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); }); ``` @@ -1147,7 +1201,7 @@ Obtains the ringer mode. This API uses a promise to return the result. ``` audioManager.getRingerMode().then((value) => { - console.log('Promise returned to indicate that the ringer mode is obtained.' + value); + console.log(`Promise returned to indicate that the ringer mode is obtained.` + value); }); ``` @@ -1175,11 +1229,11 @@ This API is used to extend the audio configuration based on the hardware capabil ``` audioManager.setAudioParameter('key_example', 'value_example', (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.'); + 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.`); }); ``` @@ -1212,7 +1266,7 @@ This API is used to extend the audio configuration based on the hardware capabil ``` audioManager.setAudioParameter('key_example', 'value_example').then(() => { - console.log('Promise returned to indicate a successful setting of the audio parameter.'); + console.log(`Promise returned to indicate a successful setting of the audio parameter.`); }); ``` @@ -1237,11 +1291,11 @@ This API is used to extend the audio configuration based on the hardware capabil ``` audioManager.getAudioParameter('key_example', (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); + 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); }); ``` @@ -1271,7 +1325,7 @@ This API is used to extend the audio configuration based on the hardware capabil ``` audioManager.getAudioParameter('key_example').then((value) => { - console.log('Promise returned to indicate that the value of the audio parameter is obtained.' + value); + console.log(`Promise returned to indicate that the value of the audio parameter is obtained.` + value); }); ``` @@ -1293,11 +1347,11 @@ Obtains the audio devices with a specific flag. This API uses an asynchronous ca **Example** ``` 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.'); + 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.`); }); ``` @@ -1325,7 +1379,7 @@ Obtains the audio devices with a specific flag. This API uses a promise to retur ``` audioManager.getDevices(audio.DeviceFlag.OUTPUT_DEVICES_FLAG).then((data) => { - console.log('Promise returned to indicate that the device list is obtained.'); + console.log(`Promise returned to indicate that the device list is obtained.`); }); ``` @@ -1349,11 +1403,11 @@ Sets a device to the active state. This API uses an asynchronous callback to ret ``` audioManager.setDeviceActive(audio.ActiveDeviceType.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.'); + 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.`); }); ``` @@ -1383,7 +1437,7 @@ Sets a device to the active state. This API uses a promise to return the result. ``` audioManager.setDeviceActive(audio.ActiveDeviceType.SPEAKER, true).then(() => { - console.log('Promise returned to indicate that the device is set to the active status.'); + console.log(`Promise returned to indicate that the device is set to the active status.`); }); ``` @@ -1406,11 +1460,11 @@ Checks whether a device is active. This API uses an asynchronous callback to ret ``` audioManager.isDeviceActive(audio.ActiveDeviceType.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.'); + 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.`); }); ``` @@ -1439,7 +1493,7 @@ Checks whether a device is active. This API uses a promise to return the result. ``` audioManager.isDeviceActive(audio.ActiveDeviceType.SPEAKER).then((value) => { - console.log('Promise returned to indicate that the active status of the device is obtained.' + value); + console.log(`Promise returned to indicate that the active status of the device is obtained.` + value); }); ``` @@ -1464,11 +1518,11 @@ Mutes or unmutes the microphone. This API uses an asynchronous callback to retur ``` 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.'); + if (err) { + console.error(`Failed to mute the microphone. ${err.message}`); + return; + } + console.log(`Callback invoked to indicate that the microphone is muted.`); }); ``` @@ -1498,7 +1552,7 @@ Mutes or unmutes the microphone. This API uses a promise to return the result. ``` audioManager.setMicrophoneMute(true).then(() => { - console.log('Promise returned to indicate that the microphone is muted.'); + console.log(`Promise returned to indicate that the microphone is muted.`); }); ``` @@ -1522,11 +1576,11 @@ Checks whether the microphone is muted. This API uses an asynchronous callback t ``` 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); + 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); }); ``` @@ -1551,7 +1605,7 @@ Checks whether the microphone is muted. This API uses a promise to return the re ``` audioManager.isMicrophoneMute().then((value) => { - console.log('Promise returned to indicate that the mute status of the microphone is obtained.', + value); + console.log(`Promise returned to indicate that the mute status of the microphone is obtained.`, + value); }); ``` @@ -1563,6 +1617,8 @@ Subscribes to system volume change events. This is a system API and cannot be called by third-party applications. +Currently, when multiple **AudioManager** instances are used in a single process, only the subscription of the last instance takes effect, and the subscription of other instances is overwritten (even if the last instance does not initiate a subscription). Therefore, you are advised to use a single **AudioManager** instance. + **System capability**: SystemCapability.Multimedia.Audio.Volume **Parameters** @@ -1576,9 +1632,9 @@ This is a system API and cannot be called by third-party applications. ``` audioManager.on('volumeChange', (volumeEvent) => { - console.log('VolumeType of stream: ' + volumeEvent.volumeType); - console.log('Volume level: ' + volumeEvent.volume); - console.log('Whether to updateUI: ' + volumeEvent.updateUi); + console.log(`VolumeType of stream: ` + volumeEvent.volumeType); + console.log(`Volume level: ` + volumeEvent.volume); + console.log(`Whether to updateUI: ` + volumeEvent.updateUi); }); ``` @@ -1597,13 +1653,13 @@ This is a system API and cannot be called by third-party applications. | Name | Type | Mandatory| Description | | -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | | type | string | Yes | Event type. The value **ringerModeChange** means the ringer mode change event, which is triggered when a ringer mode change is detected.| -| callback | Callback<[AudioRingMode](#audioringmode)> | Yes | Callback used to return the updated ringer mode. | +| callback | Callback<[AudioRingMode](#audioringmode)> | Yes | Callback used to return the updated ringer mode. | **Example** ``` audioManager.on('ringerModeChange', (ringerMode) => { - console.log('Updated ringermode: ' + ringerMode); + console.log(`Updated ringermode: ` + ringerMode); }); ``` @@ -1620,16 +1676,16 @@ Subscribes to device change events. When a device is connected or disconnected, | Name | Type | Mandatory| Description | | :------- | :--------------------------------------------------- | :--- | :----------------------------------------- | | type | string | Yes | Event type. The value **deviceChange** means the device change event, which is triggered when a device connection status change is detected.| -| callback | Callback<[DeviceChangeAction](#DeviceChangeAction)\> | Yes | Callback used to return the device update details. | +| callback | Callback<[DeviceChangeAction](#devicechangeaction)\> | Yes | Callback used to return the device update details. | **Example** ``` audioManager.on('deviceChange', (deviceChanged) => { - console.info("device change type : " + deviceChanged.type); - console.info("device descriptor size : " + deviceChanged.deviceDescriptors.length); - console.info("device change descriptor : " + deviceChanged.deviceDescriptors[0].deviceRole); - console.info("device change descriptor : " + deviceChanged.deviceDescriptors[0].deviceType); + console.info(`device change type : ` + deviceChanged.type); + console.info(`device descriptor size : ` + deviceChanged.deviceDescriptors.length); + console.info(`device change descriptor : ` + deviceChanged.deviceDescriptors[0].deviceRole); + console.info(`device change descriptor : ` + deviceChanged.deviceDescriptors[0].deviceType); }); ``` @@ -1646,13 +1702,13 @@ Unsubscribes from device change events. | Name | Type | Mandatory| Description | | -------- | --------------------------------------------------- | ---- | ------------------------------------------ | | type | string | Yes | Event type. The value **deviceChange** means the device change event, which is triggered when a device connection status change is detected.| -| callback | Callback<[DeviceChangeAction](#DeviceChangeAction)> | No | Callback used to return the device update details. | +| callback | Callback<[DeviceChangeAction](#devicechangeaction)> | No | Callback used to return the device update details. | **Example** ``` audioManager.off('deviceChange', (deviceChanged) => { - console.log("Should be no callback."); + console.log(`Should be no callback.`); }); ``` @@ -1676,19 +1732,19 @@ Subscribes to audio interruption events. When the application's audio is interru ``` var interAudioInterrupt = { - streamUsage:2, - contentType:0, - pauseWhenDucked:true + streamUsage:2, + contentType:0, + pauseWhenDucked:true }; audioManager.on('interrupt', interAudioInterrupt, (InterruptAction) => { - if (InterruptAction.actionType === 0) { - console.log("An event to gain the audio focus starts."); - console.log("Focus gain event:" + JSON.stringify(InterruptAction)); - } - if (InterruptAction.actionType === 1) { - console.log("An audio interruption event starts."); - console.log("Audio interruption event:" + JSON.stringify(InterruptAction)); - } + if (InterruptAction.actionType === 0) { + console.log(`An event to gain the audio focus starts.`); + console.log(`Focus gain event:` + JSON.stringify(InterruptAction)); + } + if (InterruptAction.actionType === 1) { + console.log(`An audio interruption event starts.`); + console.log(`Audio interruption event:` + JSON.stringify(InterruptAction)); + } }); ``` @@ -1712,15 +1768,15 @@ Unsubscribes from audio interruption events. ``` var interAudioInterrupt = { - streamUsage:2, - contentType:0, - pauseWhenDucked:true + streamUsage:2, + contentType:0, + pauseWhenDucked:true }; audioManager.off('interrupt', interAudioInterrupt, (InterruptAction) => { - if (InterruptAction.actionType === 0) { - console.log("An event to release the audio focus starts."); - console.log("Focus release event:" + JSON.stringify(InterruptAction)); - } + if (InterruptAction.actionType === 0) { + console.log(`An event to release the audio focus starts.`); + console.log(`Focus release event:` + JSON.stringify(InterruptAction)); + } }); ``` @@ -1745,11 +1801,11 @@ This is a system API and cannot be called by third-party applications. ``` 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('Callback invoked to indicate a successful setting of the audio scene mode.'); + if (err) { + console.error(`Failed to set the audio scene mode.​ ${err.message}`); + return; + } + console.log(`Callback invoked to indicate a successful setting of the audio scene mode.`); }); ``` @@ -1779,9 +1835,9 @@ This is a system API and cannot be called by third-party applications. ``` audioManager.setAudioScene(audio.AudioScene.AUDIO_SCENE_PHONE_CALL).then(() => { - console.log('Promise returned to indicate a successful setting of the audio scene mode.'); + console.log(`Promise returned to indicate a successful setting of the audio scene mode.`); }).catch ((err) => { - console.log('Failed to set the audio scene mode'); + console.log(`Failed to set the audio scene mode`); }); ``` @@ -1803,11 +1859,11 @@ Obtains the audio scene. This API uses an asynchronous callback to return the re ``` audioManager.getAudioScene((err, value) => { - if (err) { - console.error('Failed to obtain the audio scene mode.​ ${err.message}'); - return; - } - console.log('Callback invoked to indicate that the audio scene mode is obtained.' + value); + if (err) { + console.error(`Failed to obtain the audio scene mode.​ ${err.message}`); + return; + } + console.log(`Callback invoked to indicate that the audio scene mode is obtained.` + value); }); ``` @@ -1830,9 +1886,513 @@ Obtains the audio scene. This API uses a promise to return the result. ``` audioManager.getAudioScene().then((value) => { - console.log('Promise returned to indicate that the audio scene mode is obtained.' + value); + console.log(`Promise returned to indicate that the audio scene mode is obtained.` + value); }).catch ((err) => { - console.log('Failed to obtain the audio scene mode'); + console.log(`Failed to obtain the audio scene mode`); +}); +``` + +## AudioStreamManager9+ + +Implements audio stream management. Before calling any API of **AudioStreamManager**, you must use **[getStreamManager](#audiogetstreammanager9)** to obtain an **AudioStreamManager** instance. + +### getCurrentAudioRendererInfoArray9+ + +getCurrentAudioRendererInfoArray(callback: AsyncCallback<AudioRendererChangeInfoArray>): void + +Obtains the information about the current audio renderers. This API uses an asynchronous callback to return the result. + +**System capability**: SystemCapability.Multimedia.Audio.Renderer + +**Parameters** + +| Name | Type | Mandatory | Description | +| -------- | ----------------------------------- | -------- | --------------------------- | +| callback | AsyncCallback<[AudioRendererChangeInfoArray](#audiorendererchangeinfoarray9)> | Yes | Callback used to return the audio renderer information.| + +**Example** +``` +audioStreamManager.getCurrentAudioRendererInfoArray(async (err, AudioRendererChangeInfoArray) => { + console.info(`getCurrentAudioRendererInfoArray **** Get Callback Called ****`); + if (err) { + console.log(`getCurrentAudioRendererInfoArray :ERROR: `+ err.message); + resultFlag = false; + } else { + if (AudioRendererChangeInfoArray != null) { + for (let i = 0; i < AudioRendererChangeInfoArray.length; i++) { + AudioRendererChangeInfo = AudioRendererChangeInfoArray[i]; + console.info(`StreamId for` + i + `is:` + AudioRendererChangeInfo.streamId); + console.info(`ClientUid for` + i + `is:` + AudioRendererChangeInfo.clientUid); + console.info(`Content` + i + `is:` + AudioRendererChangeInfo.rendererInfo.content); + console.info(`Stream`+ i + `is:` + AudioRendererChangeInfo.rendererInfo.usage); + console.info(`Flag`+ i + `is:` + AudioRendererChangeInfo.rendererInfo.rendererFlags); + console.info(`State for` + i + `is:` + AudioRendererChangeInfo.rendererState); + var devDescriptor = AudioRendererChangeInfo.deviceDescriptors; + for (let j = 0;j < AudioRendererChangeInfo.deviceDescriptors.length; j++) { + console.info(`Id:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].id); + console.info(`Type:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].deviceType); + console.info(`Role:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].deviceRole); + console.info(`Name:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].name); + console.info(`Address:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].address); + console.info(`SampleRates:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].sampleRates[0]); + console.info(`ChannelCount` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].channelCounts[0]); + console.info(`ChannelMask:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].channelMasks); + } + } + } + } +}); +``` + +### getCurrentAudioRendererInfoArray9+ + +getCurrentAudioRendererInfoArray(): Promise<AudioRendererChangeInfoArray> + +Obtains the information about the current audio renderers. This API uses a promise to return the result. + +**System capability**: SystemCapability.Multimedia.Audio.Renderer + +**Return value** + +| Type | Description | +| ---------------------------------------------------------------------------------| --------------------------------------- | +| Promise<[AudioRendererChangeInfoArray](#audiorendererchangeinfoarray9)> | Promise used to return the audio renderer information. | + +**Example** +``` +await audioStreamManager.getCurrentAudioRendererInfoArray().then( function (AudioRendererChangeInfoArray) { + console.info(`getCurrentAudioRendererInfoArray ######### Get Promise is called ##########`); + if (AudioRendererChangeInfoArray != null) { + for (let i = 0; i < AudioRendererChangeInfoArray.length; i++) { + AudioRendererChangeInfo = AudioRendererChangeInfoArray[i]; + console.info(`StreamId for` + i + ` is:` + AudioRendererChangeInfo.streamId); + console.info(`ClientUid for` + i + ` is:` + AudioRendererChangeInfo.clientUid); + console.info(`Content` + i + ` is:` + AudioRendererChangeInfo.rendererInfo.content); + console.info(`Stream` + i + ` is:` + AudioRendererChangeInfo.rendererInfo.usage); + console.info(`Flag` + i + ` is:` + AudioRendererChangeInfo.rendererInfo.rendererFlags); + console.info(`State for` + i + ` is:` + AudioRendererChangeInfo.rendererState); + var devDescriptor = AudioRendererChangeInfo.deviceDescriptors; + for (let j = 0; j < AudioRendererChangeInfo.deviceDescriptors.length; j++) { + console.info(`Id:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].id); + console.info(`Type:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].deviceType); + console.info(`Role:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].deviceRole); + console.info(`Name:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].name); + console.info(`Address:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].address); + console.info(`SampleRates:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].sampleRates[0]); + console.info(`ChannelCounts` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].channelCounts[0]); + console.info(`ChannnelMask:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].channelMasks); + } + } + } +}).catch((err) => { + console.log(`getCurrentAudioRendererInfoArray :ERROR: ` + err.message); +}); +``` + +### getCurrentAudioCapturerInfoArray9+ + +getCurrentAudioCapturerInfoArray(callback: AsyncCallback<AudioCapturerChangeInfoArray>): void + +Obtains the information about the current audio capturers. This API uses an asynchronous callback to return the result. + +**System capability**: SystemCapability.Multimedia.Audio.Renderer + +**Parameters** + +| Name | Type | Mandatory | Description | +| ---------- | ----------------------------------- | --------- | -------------------------------------------------------- | +| callback | AsyncCallback<[AudioCapturerChangeInfoArray](#audiocapturerchangeinfoarray9)> | Yes | Callback used to return the audio capturer information.| + +**Example** +``` +audioStreamManager.getCurrentAudioCapturerInfoArray(async (err, AudioCapturerChangeInfoArray) => { + console.info(`getCurrentAudioCapturerInfoArray **** Get Callback Called ****`); + if (err) { + console.log(`getCurrentAudioCapturerInfoArray :ERROR: ` + err.message); + } else { + if (AudioCapturerChangeInfoArray != null) { + for (let i = 0; i < AudioCapturerChangeInfoArray.length; i++) { + console.info(`StreamId for ` + i + `is:` + AudioCapturerChangeInfoArray[i].streamId); + console.info(`ClientUid for ` + i + `is:` + AudioCapturerChangeInfoArray[i].clientUid); + console.info(`Source for `+ i + `is:` + AudioCapturerChangeInfoArray[i].capturerInfo.source); + console.info(`Flag ` + i + `is:` + AudioCapturerChangeInfoArray[i].capturerInfo.capturerFlags); + console.info(`State for ` + i + `is:` + AudioCapturerChangeInfoArray[i].capturerState); + var devDescriptor = AudioCapturerChangeInfoArray[i].deviceDescriptors; + for (let j = 0; j < AudioCapturerChangeInfoArray[i].deviceDescriptors.length; j++) { + console.info(`Id:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].id); + console.info(`Type:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].deviceType); + console.info(`Role:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].deviceRole); + console.info(`Name:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].name); + console.info(`Address:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].address); + console.info(`SampleRates:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].sampleRates[0]); + console.info(`ChannelCounts` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].channelCounts[0]); + console.info(`ChannelMask:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].channelMasks); + } + } + } + } +}); +``` + +### getCurrentAudioCapturerInfoArray9+ + +getCurrentAudioCapturerInfoArray(): Promise<AudioCapturerChangeInfoArray> + +Obtains the information about the current audio capturers. This API uses a promise to return the result. + +**System capability**: SystemCapability.Multimedia.Audio.Renderer + +**Return value** + +| Type | Description | +| -----------------------------------------------------------------------------| ----------------------------------- | +| Promise<[AudioCapturerChangeInfoArray](#audiocapturerchangeinfoarray9)> | Promise used to return the audio capturer information. | + +**Example** +``` +await audioStreamManager.getCurrentAudioCapturerInfoArray().then( function (AudioCapturerChangeInfoArray) { + console.info(`getCurrentAudioCapturerInfoArray **** Get Promise Called ****`); + if (AudioCapturerChangeInfoArray != null) { + for (let i = 0; i < AudioCapturerChangeInfoArray.length; i++) { + console.info(`StreamId for ` + i + `is:` + AudioCapturerChangeInfoArray[i].streamId); + console.info(`ClientUid for ` + i + `is:` + AudioCapturerChangeInfoArray[i].clientUid); + console.info(`Source for ` + i + `is:` + AudioCapturerChangeInfoArray[i].capturerInfo.source); + console.info(`Flag ` + i + `is:` + AudioCapturerChangeInfoArray[i].capturerInfo.capturerFlags); + console.info(`State for ` + i + `is:` + AudioCapturerChangeInfoArray[i].capturerState); + var devDescriptor = AudioCapturerChangeInfoArray[i].deviceDescriptors; + for (let j = 0; j < AudioCapturerChangeInfoArray[i].deviceDescriptors.length; j++) { + console.info(`Id:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].id); + console.info(`Type:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].deviceType); + console.info(`Role:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].deviceRole); + console.info(`Name:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].name) + console.info(`Address:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].address); + console.info(`SampleRates:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].sampleRates[0]); + console.info(`ChannelCounts` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].channelCounts[0]); + console.info(`ChannelMask:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].channelMasks); + } + } + } +}).catch((err) => { + console.log(`getCurrentAudioCapturerInfoArray :ERROR: ` + err.message); +}); +``` + +### on('audioRendererChange')9+ + +on(type: "audioRendererChange", callback: Callback<AudioRendererChangeInfoArray>): void + +Subscribes to audio renderer change events. + +**System capability**: SystemCapability.Multimedia.Audio.Renderer + +**Parameters** + +| Name | Type | Mandatory | Description | +| -------- | ---------- | --------- | ------------------------------------------------------------------------ | +| type | string | Yes | Event type. The event `'audioRendererChange'` is triggered when the audio renderer changes. | +| callback | Callback<[AudioRendererChangeInfoArray](#audiorendererchangeinfoarray9)> | Yes | Callback used to return the result. | + +**Example** +``` +audioStreamManager.on('audioRendererChange', (AudioRendererChangeInfoArray) => { + for (let i = 0; i < AudioRendererChangeInfoArray.length; i++) { + AudioRendererChangeInfo = AudioRendererChangeInfoArray[i]; + console.info(`## RendererChange on is called for ` + i + ` ##`); + console.info(`StreamId for ` + i + ` is:` + AudioRendererChangeInfo.streamId); + console.info(`ClientUid for ` + i + ` is:` + AudioRendererChangeInfo.clientUid); + console.info(`Content for ` + i + ` is:` + AudioRendererChangeInfo.rendererInfo.content); + console.info(`Stream for ` + i + ` is:` + AudioRendererChangeInfo.rendererInfo.usage); + console.info(`Flag ` + i + ` is:` + AudioRendererChangeInfo.rendererInfo.rendererFlags); + console.info(`State for ` + i + ` is:` + AudioRendererChangeInfo.rendererState); + var devDescriptor = AudioRendererChangeInfo.deviceDescriptors; + for (let j = 0; j < AudioRendererChangeInfo.deviceDescriptors.length; j++) { + console.info(`Id:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].id); + console.info(`Type:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].deviceType); + console.info(`Role:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].deviceRole); + console.info(`Name:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].name); + console.info(`Address:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].address); + console.info(`SampleRates:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].sampleRates[0]); + console.info(`ChannelCounts` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].channelCounts[0]); + console.info(`ChannelMask:` + i + `:` + AudioRendererChangeInfo.deviceDescriptors[j].channelMasks); + } + } +}); +``` + +### off('audioRendererChange')9+ + +off(type: "audioRendererChange"); + +Unsubscribes from audio renderer change events. + +**System capability**: SystemCapability.Multimedia.Audio.Renderer + +**Parameters** + +| Name | Type | Mandatory| Description | +| -------- | ------- | ---- | ---------------- | +| type | string | Yes | Event type. The event `'audioRendererChange'` is triggered when the audio renderer changes.| + +**Example** +``` +audioStreamManager.off('audioRendererChange'); +console.info(`######### RendererChange Off is called #########`); +``` + +### on('audioCapturerChange')9+ + +on(type: "audioCapturerChange", callback: Callback<AudioCapturerChangeInfoArray>): void + +Subscribes to audio capturer change events. + +**System capability**: SystemCapability.Multimedia.Audio.Capturer + +**Parameters** + +| Name | Type | Mandatory | Description | +| -------- | ------- | --------- | ------------------------------------------------------------------- ---- | +| type | string | Yes | Event type. The event `'audioCapturerChange'` is triggered when the audio capturer changes. | +| callback | Callback<[AudioCapturerChangeInfoArray](#audiocapturerchangeinfoarray9)> | Yes | Callback used to return the result. | + +**Example** +``` +audioStreamManager.on('audioCapturerChange', (AudioCapturerChangeInfoArray) => { + for (let i = 0; i < AudioCapturerChangeInfoArray.length; i++) { + console.info(` ## CapChange on is called for element ' + i + ' ##'); + console.info(`StreamId for ` + i + `is:` + AudioCapturerChangeInfoArray[i].streamId); + console.info(`ClientUid for ` + i + `is:` + AudioCapturerChangeInfoArray[i].clientUid); + console.info(`Source for ` + i + `is:` + AudioCapturerChangeInfoArray[i].capturerInfo.source); + console.info(`Flag ` + i + `is:` + AudioCapturerChangeInfoArray[i].capturerInfo.capturerFlags); + console.info(`State for ` + i + `is:` + AudioCapturerChangeInfoArray[i].capturerState); + for (let j = 0; j < AudioCapturerChangeInfoArray[i].deviceDescriptors.length; j++) { + console.info(`Id:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].id); + console.info(`Type:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].deviceType); + console.info(`Role:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].deviceRole); + console.info(`Name:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].name); + console.info(`Address:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].address); + console.info(`SampleRates:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].sampleRates[0]); + console.info(`ChannelCounts` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].channelCounts[0]); + console.info(`ChannelMask:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].channelMasks); + } + } +}); +``` + +### off('audioCapturerChange')9+ + +off(type: "audioCapturerChange"); + +Unsubscribes from audio capturer change events. + +**System capability**: SystemCapability.Multimedia.Audio.Capturer + +**Parameters** + +| Name | Type | Mandatory| Description | +| -------- | -------- | --- | ------------------------------------------------------------- | +| type | string |Yes | Event type. The event `'audioCapturerChange'` is triggered when the audio capturer changes.| + +**Example** +``` +audioStreamManager.off('audioCapturerChange'); +console.info(`######### CapturerChange Off is called #########`); + +``` + +### isAudioRendererLowLatencySupported9+ + +isAudioRendererLowLatencySupported(streaminfo: AudioStreamInfo, callback: Callback<boolean>): void; + +Checks whether the system supports the low latency configuration in the audio renderer. This API uses an asynchronous callback to return the result. + +**System capability**: SystemCapability.Multimedia.Audio.Renderer + +**Parameters** + +| Name | Type | Mandatory | Description | +| ---------- | ----------------------- | -------- | --------------------------------------- | +| streaminfo | [AudioStreamInfo](#audiostreaminfo8) | Yes | Audio stream information. | +| callback | Callback<boolean> | Yes | Callback used to return the result. If the system supports the low latency configuration, **true** is returned. Otherwise, **false** is returned.| + +**Example** + +``` +var audioManager = audio.getAudioManager(); + +var AudioStreamInfo = { + samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100, + channels: audio.AudioChannel.CHANNEL_1, + sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE, + encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW +} + +var audioStreamManager = audioManager.getStreamManager(); +audioStreamManager.isAudioRendererLowLatencySupported(AudioStreamInfo, (result) => { + console.info(`isAudioRendererLowLatencySupported success var = ` + result); +}); +``` + +### isAudioRendererLowLatencySupported9+ + +isAudioRendererLowLatencySupported(streaminfo: AudioStreamInfo): Promise<boolean> + +Checks whether the system supports the low latency configuration in the audio renderer. + +**System capability**: SystemCapability.Multimedia.Audio.Renderer + +**Parameters** + +| Name | Type | Mandatory| Description | +| ---------- | ------------------------------------ | ---- | ------------| +| streaminfo | [AudioStreamInfo](#audiostreaminfo8) | Yes | Audio stream information. | + +**Return value** + +| Type | Description | +| ------------------- | ---------------------------------------------------- | +| Promise<void> | Promise used to return the result. If the system supports the low latency configuration, **true** is returned. Otherwise, **false** is returned.| + +**Example** + +``` +var audioManager = audio.getAudioManager(); + +var AudioStreamInfo = { + samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100, + channels: audio.AudioChannel.CHANNEL_1, + sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE, + encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW +} + +var audioStreamManager = await audioManager.getStreamManager(); +var result = audioStreamManager.isAudioRendererLowLatencySupported(AudioStreamInfo); +console.info(`isAudioRendererLowLatencySupported success var =` + result); +``` + +## AudioRendererChangeInfo9+ + +Describes the audio renderer change event. + +**System capability**: SystemCapability.Multimedia.Audio.Renderer + +| Name | Type | Readable| Writable| Description | +| -------------------| ----------------------------------------- | ---- | ---- | ---------------------------- | +| streamId | number | Yes | No | Unique ID of an audio stream. | +| clientUid | number | Yes | No | UID of the audio renderer client.
This is a system API and cannot be called by third-party applications.| +| rendererInfo | [AudioRendererInfo](#audiorendererinfo8) | Yes | No | Audio renderer information. | +| rendererState | [AudioState](#audiostate) | Yes | No | Audio state.
This is a system API and cannot be called by third-party applications.| + +## AudioRendererChangeInfoArray9+ + +Describes the **AudioRenderChangeInfo** array, which is read-only. + +**System capability**: SystemCapability.Multimedia.Audio.Renderer + +**Example** + +``` +import audio from '@ohos.multimedia.audio'; + +var audioStreamManager; +var audioStreamManagerCB; +var Tag = "AFCapLog : "; +var resultFlag = false; + +await audioManager.getStreamManager().then(async function (data) { + audioStreamManager = data; + console.info(Tag + `Get AudioStream Manager : Success `); +}).catch((err) => { + console.info(Tag + `Get AudioStream Manager : ERROR : ` + err.message); +}); + +audioManager.getStreamManager((err, data) => { + if (err) { + console.error(Tag + `Get AudioStream Manager : ERROR : ` + err.message); + } else { + audioStreamManagerCB = data; + console.info(Tag + `Get AudioStream Manager : Success `); + } +}); + +audioStreamManagerCB.on('audioRendererChange', (AudioRendererChangeInfoArray) => { + for (let i = 0; i < AudioRendererChangeInfoArray.length; i++) { + console.info(Tag + `## RendererChange on is called for ` + i + ` ##`); + console.info(Tag + `StreamId for ` + i + `is:` + AudioRendererChangeInfoArray[i].streamId); + console.info(Tag + `ClientUid for ` + i + `is:` + AudioRendererChangeInfoArray[i].clientUid); + console.info(Tag + `Content for ` + i + `is:` + AudioRendererChangeInfoArray[i].rendererInfo.content); + console.info(Tag + `Stream for ` + i + `is:` + AudioRendererChangeInfoArray[i].rendererInfo.usage); + console.info(Tag + `Flag ` + i + `is:` + AudioRendererChangeInfoArray[i].rendererInfo.rendererFlags); + console.info(Tag + `State for ` + i + `is:` + AudioRendererChangeInfoArray[i].rendererState); + var devDescriptor = AudioRendererChangeInfoArray[i].deviceDescriptors; + for (let j = 0; j < AudioRendererChangeInfoArray[i].deviceDescriptors.length; j++) { + console.info(Tag + `Id:` + i + `:` + AudioRendererChangeInfoArray[i].deviceDescriptors[j].id); + console.info(Tag + `Type:` + i + `:` + AudioRendererChangeInfoArray[i].deviceDescriptors[j].deviceType); + console.info(Tag + `Role:` + i + `:` + AudioRendererChangeInfoArray[i].deviceDescriptors[j].deviceRole); + console.info(Tag + `Name:` + i + `:` + AudioRendererChangeInfoArray[i].deviceDescriptors[j].name); + console.info(Tag + `Addr:` + i + `:` + AudioRendererChangeInfoArray[i].deviceDescriptors[j].address); + console.info(Tag + `SR:` + i + `:` + AudioRendererChangeInfoArray[i].deviceDescriptors[j].sampleRates[0]); + console.info(Tag + `C` + i + `:` + AudioRendererChangeInfoArray[i].deviceDescriptors[j].channelCounts[0]); + console.info(Tag + `CM:` + i + `:` + AudioRendererChangeInfoArray[i].deviceDescriptors[j].channelMasks); + } + if (AudioRendererChangeInfoArray[i].rendererState == 1 && devDescriptor != null) { + resultFlag = true; + console.info(Tag + `ResultFlag for ` + i + ` is:` + resultFlag); + } + } +}); +``` + +## AudioCapturerChangeInfo9+ + +Describes the audio capturer change event. + +**System capability**: SystemCapability.Multimedia.Audio.Capturer + +| Name | Type | Readable| Writable| Description | +| -------------------| ----------------------------------------- | ---- | ---- | ---------------------------- | +| streamId | number | Yes | No | Unique ID of an audio stream. | +| clientUid | number | Yes | No | UID of the audio capturer client.
This is a system API and cannot be called by third-party applications.| +| capturerInfo | [AudioCapturerInfo](#audiocapturerinfo8) | Yes | No | Audio capturer information. | +| capturerState | [AudioState](#audiostate) | Yes | No | Audio state.
This is a system API and cannot be called by third-party applications.| + +## AudioCapturerChangeInfoArray9+ + +Describes the **AudioCapturerChangeInfo** array, which is read-only. + +**System capability**: SystemCapability.Multimedia.Audio.Capturer + +**Example** + +``` +import audio from '@ohos.multimedia.audio'; + +const audioManager = audio.getAudioManager(); +var Tag = "AFCapLog : "; +var resultFlag = false; +audioStreamManager.on('audioCapturerChange', (AudioCapturerChangeInfoArray) => { + for (let i = 0; i < AudioCapturerChangeInfoArray.length; i++) { + console.info(Tag + ` ## CapChange on is called for element ' + i + ' ##'); + console.info(Tag + `StrId for ` + i + `is:` + AudioCapturerChangeInfoArray[i].streamId); + console.info(Tag + `CUid for ` + i + `is:` + AudioCapturerChangeInfoArray[i].clientUid); + console.info(Tag + `Src for ` + i + `is:` + AudioCapturerChangeInfoArray[i].capturerInfo.source); + console.info(Tag + `Flag ` + i + `is:` + AudioCapturerChangeInfoArray[i].capturerInfo.capturerFlags); + console.info(Tag + `State for ` + i + `is:` + AudioCapturerChangeInfoArray[i].capturerState); + var devDescriptor = AudioCapturerChangeInfoArray[i].deviceDescriptors; + for (let j = 0; j < AudioCapturerChangeInfoArray[i].deviceDescriptors.length; j++) { + console.info(Tag + `Id:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].id); + console.info(Tag + `Type:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].deviceType); + console.info(Tag + `Role:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].deviceRole); + console.info(Tag + `Name:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].name); + console.info(Tag + `Addr:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].address); + console.info(Tag + `SR:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].sampleRates[0]); + console.info(Tag + `C` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].channelCounts[0]); + console.info(Tag + `CM:` + i + `:` + AudioCapturerChangeInfoArray[i].deviceDescriptors[j].channelMasks); + } + if (AudioCapturerChangeInfoArray[i].capturerState == 1 && devDescriptor != null) { + resultFlag = true; + console.info(Tag + `ResultFlag for element ` + i + ` is: ` + resultFlag); + } + } }); ``` @@ -1842,10 +2402,16 @@ Describes an audio device. **System capability**: SystemCapability.Multimedia.Audio.Device -| Name | Type | Readable| Writable| Description | -| ---------- | ------------------------- | ---- | ---- | ---------- | -| deviceRole | [DeviceRole](#devicerole) | Yes | No | Device role.| -| deviceType | [DeviceType](#devicetype) | Yes | No | Device type.| +| Name | Type | Readable| Writable| Description | +| -------------------------- | -------------------------- | ---- | ---- | ---------- | +| deviceRole | [DeviceRole](#devicerole) | Yes | No | Device role.| +| deviceType | [DeviceType](#devicetype) | Yes | No | Device type.| +| id9+ | number | Yes | No | Device ID. | +| name9+ | string | Yes | No | Device name.| +| address9+ | string | Yes | No | Device address.| +| sampleRates9+ | Array<number> | Yes | No | Supported sampling rates.| +| channelCounts9+ | Array<number> | Yes | No | Number of channels supported.| +| channelMasks9+ | Array<number> | Yes | No | Supported channel masks.| ## AudioDeviceDescriptors @@ -1857,23 +2423,21 @@ Array of [AudioDeviceDescriptor](#audiodevicedescriptor), which is read-only. import audio from '@ohos.multimedia.audio'; function displayDeviceProp(value) { - deviceRoleValue = value.deviceRole; - deviceTypeValue = value.deviceType; - + deviceRoleValue = value.deviceRole; + deviceTypeValue = value.deviceType; } var deviceRoleValue = null; var deviceTypeValue = null; const promise = audio.getAudioManager().getDevices(1); promise.then(function (value) { - console.info('AudioFrameworkTest: Promise: getDevices OUTPUT_DEVICES_FLAG'); - value.forEach(displayDeviceProp); - if (deviceTypeValue != null && deviceRoleValue != null){ - console.info('AudioFrameworkTest: Promise: getDevices : OUTPUT_DEVICES_FLAG : PASS'); - } - else{ - console.info('AudioFrameworkTest: Promise: getDevices : OUTPUT_DEVICES_FLAG : FAIL'); - } + console.info(`AudioFrameworkTest: Promise: getDevices OUTPUT_DEVICES_FLAG`); + value.forEach(displayDeviceProp); + if (deviceTypeValue != null && deviceRoleValue != null){ + console.info(`AudioFrameworkTest: Promise: getDevices : OUTPUT_DEVICES_FLAG : PASS`); + } else { + console.info(`AudioFrameworkTest: Promise: getDevices : OUTPUT_DEVICES_FLAG : FAIL`); + } }); ``` @@ -1913,10 +2477,10 @@ Obtains the renderer information of this **AudioRenderer** instance. This API us ``` audioRenderer.getRendererInfo((err, rendererInfo) => { - console.log('Renderer GetRendererInfo:'); - console.log('Renderer content:' + rendererInfo.content); - console.log('Renderer usage:' + rendererInfo.usage); - console.log('Renderer flags:' + rendererInfo.rendererFlags); + console.log(`Renderer GetRendererInfo:`); + console.log(`Renderer content:` + rendererInfo.content); + console.log(`Renderer usage:` + rendererInfo.usage); + console.log(`Renderer flags:` + rendererInfo.rendererFlags); }); ``` @@ -1939,13 +2503,13 @@ Obtains the renderer information of this **AudioRenderer** instance. This API us ``` var resultFlag = true; audioRenderer.getRendererInfo().then((rendererInfo) => { - console.log('Renderer GetRendererInfo:'); - console.log('Renderer content:' + rendererInfo.content); - console.log('Renderer usage:' + rendererInfo.usage); - console.log('Renderer flags:' + rendererInfo.rendererFlags); + console.log(`Renderer GetRendererInfo:`); + console.log(`Renderer content:` + rendererInfo.content); + console.log(`Renderer usage:` + rendererInfo.usage); + console.log(`Renderer flags:` + rendererInfo.rendererFlags); }).catch((err) => { - console.log('AudioFrameworkRenderLog: RendererInfo :ERROR: '+err.message); - resultFlag = false; + console.log(`AudioFrameworkRenderLog: RendererInfo :ERROR: ` + err.message); + resultFlag = false; }); ``` @@ -1967,11 +2531,11 @@ Obtains the stream information of this **AudioRenderer** instance. This API uses ``` audioRenderer.getStreamInfo((err, streamInfo) => { - console.log('Renderer GetStreamInfo:'); - console.log('Renderer sampling rate:' + streamInfo.samplingRate); - console.log('Renderer channel:' + streamInfo.channels); - console.log('Renderer format:' + streamInfo.sampleFormat); - console.log('Renderer encoding type:' + streamInfo.encodingType); + console.log(`Renderer GetStreamInfo:`); + console.log(`Renderer sampling rate:` + streamInfo.samplingRate); + console.log(`Renderer channel:` + streamInfo.channels); + console.log(`Renderer format:` + streamInfo.sampleFormat); + console.log(`Renderer encoding type:` + streamInfo.encodingType); }); ``` @@ -1993,13 +2557,13 @@ Obtains the stream information of this **AudioRenderer** instance. This API uses ``` audioRenderer.getStreamInfo().then((streamInfo) => { - console.log('Renderer GetStreamInfo:'); - console.log('Renderer sampling rate:' + streamInfo.samplingRate); - console.log('Renderer channel:' + streamInfo.channels); - console.log('Renderer format:' + streamInfo.sampleFormat); - console.log('Renderer encoding type:' + streamInfo.encodingType); + console.log(`Renderer GetStreamInfo:`); + console.log(`Renderer sampling rate:` + streamInfo.samplingRate); + console.log(`Renderer channel:` + streamInfo.channels); + console.log(`Renderer format:` + streamInfo.sampleFormat); + console.log(`Renderer encoding type:` + streamInfo.encodingType); }).catch((err) => { - console.log('ERROR: '+err.message); + console.log(`ERROR: ` + err.message); }); ``` @@ -2021,11 +2585,11 @@ Starts the renderer. This API uses an asynchronous callback to return the result ``` audioRenderer.start((err) => { - if (err) { - console.error('Renderer start failed.'); - } else { - console.info('Renderer start success.'); - } + if (err) { + console.error(`Renderer start failed.`); + } else { + console.info(`Renderer start success.`); + } }); ``` @@ -2047,9 +2611,9 @@ Starts the renderer. This API uses a promise to return the result. ``` audioRenderer.start().then(() => { - console.log('Renderer started'); + console.log(`Renderer started`); }).catch((err) => { - console.log('ERROR: '+err.message); + console.log(`ERROR: ` + err.message); }); ``` @@ -2071,11 +2635,11 @@ Pauses rendering. This API uses an asynchronous callback to return the result. ``` audioRenderer.pause((err) => { - if (err) { - console.error('Renderer pause failed'); - } else { - console.log('Renderer paused.'); - } + if (err) { + console.error(`Renderer pause failed`); + } else { + console.log(`Renderer paused.`); + } }); ``` @@ -2097,9 +2661,9 @@ Pauses rendering. This API uses a promise to return the result. ``` audioRenderer.pause().then(() => { - console.log('Renderer paused'); + console.log(`Renderer paused`); }).catch((err) => { - console.log('ERROR: '+err.message); + console.log(`ERROR: ` + err.message); }); ``` @@ -2121,11 +2685,11 @@ Drains the playback buffer. This API uses an asynchronous callback to return the ``` audioRenderer.drain((err) => { - if (err) { - console.error('Renderer drain failed'); - } else { - console.log('Renderer drained.'); - } + if (err) { + console.error(`Renderer drain failed`); + } else { + console.log(`Renderer drained.`); + } }); ``` @@ -2147,9 +2711,9 @@ Drains the playback buffer. This API uses a promise to return the result. ``` audioRenderer.drain().then(() => { - console.log('Renderer drained successfully'); + console.log(`Renderer drained successfully`); }).catch((err) => { - console.log('ERROR: '+err.message); + console.log(`ERROR: ` + err.message); }); ``` @@ -2171,11 +2735,11 @@ Stops rendering. This API uses an asynchronous callback to return the result. ``` audioRenderer.stop((err) => { - if (err) { - console.error('Renderer stop failed'); - } else { - console.log('Renderer stopped.'); - } + if (err) { + console.error(`Renderer stop failed`); + } else { + console.log(`Renderer stopped.`); + } }); ``` @@ -2197,9 +2761,9 @@ Stops rendering. This API uses a promise to return the result. ``` audioRenderer.stop().then(() => { - console.log('Renderer stopped successfully'); + console.log(`Renderer stopped successfully`); }).catch((err) => { - console.log('ERROR: '+err.message); + console.log(`ERROR: ` + err.message); }); ``` @@ -2221,11 +2785,11 @@ Releases the renderer. This API uses an asynchronous callback to return the resu ``` audioRenderer.release((err) => { - if (err) { - console.error('Renderer release failed'); - } else { - console.log('Renderer released.'); - } + if (err) { + console.error(`Renderer release failed`); + } else { + console.log(`Renderer released.`); + } }); ``` @@ -2247,9 +2811,9 @@ Releases the renderer. This API uses a promise to return the result. ``` audioRenderer.release().then(() => { - console.log('Renderer released successfully'); + console.log(`Renderer released successfully`); }).catch((err) => { - console.log('ERROR: '+err.message); + console.log(`ERROR: ` + err.message); }); ``` @@ -2266,7 +2830,7 @@ Writes the buffer. This API uses an asynchronous callback to return the result. | Name | Type | Mandatory| Description | | -------- | ---------------------- | ---- | --------------------------------------------------- | | buffer | ArrayBuffer | Yes | Buffer to be written. | -| callback | AsyncCallback\ | Yes | Returns the number of bytes written if the operation is successful; returns an error code otherwise.| +| callback | AsyncCallback\ | Yes | Callback used to return the result. If the operation is successful, the number of bytes written is returned; otherwise, an error code is returned.| **Example** @@ -2276,49 +2840,49 @@ import fileio from '@ohos.fileio'; import featureAbility from '@ohos.ability.featureAbility' var audioStreamInfo = { - samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_48000, - channels: audio.AudioChannel.CHANNEL_2, - sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S32LE, - encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW + samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_48000, + channels: audio.AudioChannel.CHANNEL_2, + sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S32LE, + encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW } var audioRendererInfo = { - content: audio.ContentType.CONTENT_TYPE_SPEECH, - usage: audio.streamUsage.STREAM_USAGE_VOICE_COMMUNICATION - rendererFlags: 1 + content: audio.ContentType.CONTENT_TYPE_SPEECH, + usage: audio.StreamUsage.STREAM_USAGE_VOICE_COMMUNICATION + rendererFlags: 0 } var audioRendererOptions = { - streamInfo: audioStreamInfo, - rendererInfo: audioRendererInfo + streamInfo: audioStreamInfo, + rendererInfo: audioRendererInfo } var audioRenderer; audio.createAudioRenderer(audioRendererOptions).then((data)=> { - audioRenderer = data; - console.info('AudioFrameworkRenderLog: AudioRenderer Created: SUCCESS'); - }).catch((err) => { - console.info('AudioFrameworkRenderLog: AudioRenderer Created: ERROR: '+err.message); - }); + audioRenderer = data; + console.info(`AudioFrameworkRenderLog: AudioRenderer Created: SUCCESS`); + }).catch((err) => { + console.info(`AudioFrameworkRenderLog: AudioRenderer Created: ERROR: ` + err.message); + }); var bufferSize; audioRenderer.getBufferSize().then((data)=> { - console.info('AudioFrameworkRenderLog: getBufferSize: SUCCESS '+data); - bufferSize = data; - }).catch((err) => { - console.info.('AudioFrameworkRenderLog: getBufferSize: ERROR: '+err.message); - }); -console.info('Buffer size:'+bufferSize); + console.info(`AudioFrameworkRenderLog: getBufferSize: SUCCESS ` + data); + bufferSize = data; + }).catch((err) => { + console.info.(`AudioFrameworkRenderLog: getBufferSize: ERROR: ` + err.message); + }); +console.info(`Buffer size:` + bufferSize); var context = featureAbility.getContext(); var path = await context.getCacheDir(); -var filePath = path+"/StarWars10s-2C-48000-4SW.wav" +var filePath = path + "/StarWars10s-2C-48000-4SW.wav"; let ss = fileio.createStreamSync(filePath, 'r'); let buf = new ArrayBuffer(bufferSize); ss.readSync(buf); audioRenderer.write(buf, (err, writtenbytes) => { - if (writtenbytes < 0) { - console.error('write failed.'); - } else { - console.log('Actual written bytes: ' + writtenbytes); - } + if (writtenbytes < 0) { + console.error(`write failed.`); + } else { + console.log(`Actual written bytes: ` + writtenbytes); + } }); ``` @@ -2334,7 +2898,7 @@ Writes the buffer. This API uses a promise to return the result. | Type | Description | | ---------------- | ------------------------------------------------------------ | -| Promise\ | Returns the number of bytes written if the operation is successful; returns an error code otherwise.| +| Promise\ | Promise used to return the result. If the operation is successful, the number of bytes written is returned; otherwise, an error code is returned.| **Example** @@ -2344,37 +2908,37 @@ import fileio from '@ohos.fileio'; import featureAbility from '@ohos.ability.featureAbility' var audioStreamInfo = { - samplingRate:audio.AudioSamplingRate.SAMPLE_RATE_48000, - channels:audio.AudioChannel.CHANNEL_2, - sampleFormat.audio.AudioSampleFormat.SAMPLE_FORMAT_S32LE, - encodingType.audio.AudioEncodingType.ENCODING_TYPE_RAW + samplingRate:audio.AudioSamplingRate.SAMPLE_RATE_48000, + channels:audio.AudioChannel.CHANNEL_2, + sampleFormat:audio.AudioSampleFormat.SAMPLE_FORMAT_S32LE, + encodingType:audio.AudioEncodingType.ENCODING_TYPE_RAW } var audioRendererInfo = { - content: audio.ContentType.CONTENT_TYPE_SPEECH, - usage: audio.streamUsage.STREAM_USAGE_VOICE_COMMUNICATION, - rendererFlags: 1 + content: audio.ContentType.CONTENT_TYPE_SPEECH, + usage: audio.StreamUsage.STREAM_USAGE_VOICE_COMMUNICATION, + rendererFlags: 0 } var audioRendererOptions = { - streamInfo: audioStreamInfo, - rendererInfo: audioRendererInfo + streamInfo: audioStreamInfo, + rendererInfo: audioRendererInfo } var audioRenderer; audio.createAudioRenderer(audioRendererOptions).then((data) => { - audioRenderer = data; - console.info('AudioFrameworkRenderLog: AudioRenderer Created: SUCCESS'); - }).catch((err) => { - console.info('AudioFrameworkRenderLog: AudioRenderer Created: ERROR: '+err.message); - }); + audioRenderer = data; + console.info(`AudioFrameworkRenderLog: AudioRenderer Created: SUCCESS`); + }).catch((err) => { + console.info(`AudioFrameworkRenderLog: AudioRenderer Created: ERROR: ` + err.message); + }); var bufferSize; audioRenderer.getBufferSize().then((data) => { - console.info('AudioFrameworkRenderLog: getBufferSize: SUCCESS '+data); - bufferSize = data; - }).catch((err) => { - console.info('AudioFrameworkRenderLog: getBufferSize: ERROR: '+err.message); - }); -console.info('BufferSize: ' + bufferSize); + console.info(`AudioFrameworkRenderLog: getBufferSize: SUCCESS ` + data); + bufferSize = data; + }).catch((err) => { + console.info(`AudioFrameworkRenderLog: getBufferSize: ERROR: ` + err.message); + }); +console.info(`BufferSize: ` + bufferSize); var context = featureAbility.getContext(); var path = await context.getCacheDir(); var filePath = 'data/StarWars10s-2C-48000-4SW.wav'; @@ -2382,13 +2946,13 @@ let ss = fileio.createStreamSync(filePath, 'r'); let buf = new ArrayBuffer(bufferSize); ss.readSync(buf); audioRenderer.write(buf).then((writtenbytes) => { - if (writtenbytes < 0) { - console.error('write failed.'); - } else { - console.log('Actual written bytes: ' + writtenbytes); - } + if (writtenbytes < 0) { + console.error(`write failed.`); + } else { + console.log(`Actual written bytes: ` + writtenbytes); + } }).catch((err) => { - console.log('ERROR: '+err.message); + console.log(`ERROR: ` + err.message); }); ``` @@ -2410,7 +2974,7 @@ Obtains the number of nanoseconds elapsed from the Unix epoch (January 1, 1970). ``` audioRenderer.getAudioTime((err, timestamp) => { - console.log('Current timestamp: ' + timestamp); + console.log(`Current timestamp: ` + timestamp); }); ``` @@ -2432,9 +2996,9 @@ Obtains the number of nanoseconds elapsed from the Unix epoch (January 1, 1970). ``` audioRenderer.getAudioTime().then((timestamp) => { - console.log('Current timestamp: ' + timestamp); + console.log(`Current timestamp: ` + timestamp); }).catch((err) => { - console.log('ERROR: '+err.message); + console.log(`ERROR: ` + err.message); }); ``` @@ -2456,9 +3020,9 @@ Obtains a reasonable minimum buffer size in bytes for rendering. This API uses a ``` var bufferSize = audioRenderer.getBufferSize(async(err, bufferSize) => { - if (err) { - console.error('getBufferSize error'); - } + if (err) { + console.error(`getBufferSize error`); + } }); ``` @@ -2483,35 +3047,35 @@ import audio from '@ohos.multimedia.audio'; import fileio from '@ohos.fileio'; var audioStreamInfo = { - samplingRate:audio.AudioSamplingRate.SAMPLE_RATE_48000, - channels:audio.AudioChannel.CHANNEL_2, - sampleFormat.audio.AudioSampleFormat.SAMPLE_FORMAT_S32LE, - encodingType.audio.AudioEncodingType.ENCODING_TYPE_RAW + samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_48000, + channels: audio.AudioChannel.CHANNEL_2, + sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S32LE, + encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW } var audioRendererInfo = { - content: audio.ContentType.CONTENT_TYPE_SPEECH, - usage: audio.streamUsage.STREAM_USAGE_VOICE_COMMUNICATION, - rendererFlags: 1 + content: audio.ContentType.CONTENT_TYPE_SPEECH, + usage: audio.StreamUsage.STREAM_USAGE_VOICE_COMMUNICATION, + rendererFlags: 0 } var audioRendererOptions = { - streamInfo: audioStreamInfo, - rendererInfo: audioRendererInfo + streamInfo: audioStreamInfo, + rendererInfo: audioRendererInfo } var audioRenderer; audio.createAudioRenderer(audioRendererOptions).then((data) => { - audioRenderer = data; - console.info('AudioFrameworkRenderLog: AudioRenderer Created: SUCCESS'); - }).catch((err) => { - console.info('AudioFrameworkRenderLog: AudioRenderer Created: ERROR: '+err.message); - }); + audioRenderer = data; + console.info('AudioFrameworkRenderLog: AudioRenderer Created: SUCCESS'); + }).catch((err) => { + console.info('AudioFrameworkRenderLog: AudioRenderer Created: ERROR: ' + err.message); + }); var bufferSize; audioRenderer.getBufferSize().then((data) => { - console.info('AudioFrameworkRenderLog: getBufferSize: SUCCESS '+data); - bufferSize=data; + console.info(`AudioFrameworkRenderLog: getBufferSize: SUCCESS ` + data); + bufferSize = data; }).catch((err) => { - console.info('AudioFrameworkRenderLog: getBufferSize: ERROR: '+err.message); + console.info(`AudioFrameworkRenderLog: getBufferSize: ERROR: ` + err.message); }); ``` @@ -2534,11 +3098,11 @@ Sets the render rate. This API uses an asynchronous callback to return the resul ``` audioRenderer.setRenderRate(audio.AudioRendererRate.RENDER_RATE_NORMAL, (err) => { - if (err) { - console.error('Failed to set params'); - } else { - console.log('Callback invoked to indicate a successful render rate setting.'); - } + if (err) { + console.error(`Failed to set params`); + } else { + console.log(`Callback invoked to indicate a successful render rate setting.`); + } }); ``` @@ -2566,9 +3130,9 @@ Sets the render rate. This API uses a promise to return the result. ``` audioRenderer.setRenderRate(audio.AudioRendererRate.RENDER_RATE_NORMAL).then(() => { - console.log('setRenderRate SUCCESS'); + console.log(`setRenderRate SUCCESS`); }).catch((err) => { - console.log('ERROR: '+err.message); + console.log(`ERROR: ` + err.message); }); ``` @@ -2590,7 +3154,7 @@ Obtains the current render rate. This API uses an asynchronous callback to retur ``` audioRenderer.getRenderRate((err, renderrate) => { - console.log('getRenderRate: ' + renderrate); + console.log(`getRenderRate: ` + renderrate); }); ``` @@ -2612,14 +3176,14 @@ Obtains the current render rate. This API uses a promise to return the result. ``` audioRenderer.getRenderRate().then((renderRate) => { - console.log('getRenderRate: ' + renderRate); + console.log(`getRenderRate: ` + renderRate); }).catch((err) => { - console.log('ERROR: '+err.message); + console.log(`ERROR: ` + err.message); }); ``` ### setInterruptMode9+ -setInterruptMode(interruptMode: InterruptMode): Promise<void> +setInterruptMode(mode: InterruptMode): Promise<void> Sets the audio interruption mode for the application. This API uses a promise to return the result. @@ -2627,9 +3191,9 @@ Sets the audio interruption mode for the application. This API uses a promise to **Parameters** -| Name | Type | Mandatory| Description | -| ---------- | ----------------------------------- | ---- | -------------------------------------------------------- | -| interruptMode | [InterruptMode](#InterruptMode) | Yes | Audio interruption mode. | +| Name | Type | Mandatory | Description | +| ---------- | ---------------------------------- | ------ | ---------- | +| mode | [InterruptMode](#interruptmode9) | Yes | Audio interruption mode. | **Return value** @@ -2640,14 +3204,32 @@ Sets the audio interruption mode for the application. This API uses a promise to **Example** ``` -const audioManager = audio.getAudioManager(); -audioManager.setInterruptMode(audio.InterruptMode.SHARE_MODE).then(() => { - console.log('Promise returned to indicate a successful volume setting.'); +var audioStreamInfo = { + samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_48000, + channels: audio.AudioChannel.CHANNEL_1, + sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE, + encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW +} +var audioRendererInfo = { + content: audio.ContentType.CONTENT_TYPE_MUSIC, + usage: audio.StreamUsage.STREAM_USAGE_MEDIA, + rendererFlags: 0 +} +var audioRendererOptions = { + streamInfo: audioStreamInfo, + rendererInfo: audioRendererInfo +} +let audioRenderer = await audio.createAudioRenderer(audioRendererOptions); +let mode = 0; +audioRenderer.setInterruptMode(mode).then(data=>{ + console.log(`setInterruptMode Success!`); +}).catch(err=>{ + console.log(`setInterruptMode Fail:` + err.message); }); ``` ### setInterruptMode9+ -setInterruptMode(interruptMode: InterruptMode, callback: Callback\): void +setInterruptMode(mode: InterruptMode, callback: Callback\): void Sets the audio interruption mode for the application. This API uses a callback to return the result. @@ -2655,17 +3237,36 @@ Sets the audio interruption mode for the application. This API uses a callback t **Parameters** -| Name| Type| Mandatory| Description | -| ---------- | ----------------------------------- | ---- | -------------------------------------------------------- | -|interruptMode | [InterruptMode](#InterruptMode) | Yes | Audio interruption mode.| -|callback | Callback\ | Yes |Callback used to return the result.| +| Name | Type | Mandatory | Description | +| ------- | ----------------------------------- | ------ | -------------- | +|mode | [InterruptMode](#interruptmode9) | Yes | Audio interruption mode.| +|callback | Callback\ | Yes |Callback used to return the result.| **Example** ``` -const audioManager = audio.getAudioManager(); -audioManager.setInterruptMode(audio.InterruptMode.SHARE_MODE,()=>{ - console.log('Callback returned to indicate a successful volume setting.'); +var audioStreamInfo = { + samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_48000, + channels: audio.AudioChannel.CHANNEL_1, + sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE, + encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW +} +var audioRendererInfo = { + content: audio.ContentType.CONTENT_TYPE_MUSIC, + usage: audio.StreamUsage.STREAM_USAGE_MEDIA, + rendererFlags: 0 +} +var audioRendererOptions = { + streamInfo: audioStreamInfo, + rendererInfo: audioRendererInfo +} +let audioRenderer = await audio.createAudioRenderer(audioRendererOptions); +let mode = 1; +audioRenderer.setInterruptMode(mode, (err, data)=>{ + if(err){ + console.log(`setInterruptMode Fail:` + err.message); + } + console.log(`setInterruptMode Success!`); }); ``` ### on('interrupt')9+ @@ -2689,48 +3290,47 @@ Subscribes to audio interruption events. This API uses a callback to get interru var isPlay; var started; audioRenderer.on('interrupt', async(interruptEvent) => { - if (interruptEvent.forceType == audio.InterruptForceType.INTERRUPT_FORCE) { - switch (interruptEvent.hintType) { - case audio.InterruptHint.INTERRUPT_HINT_PAUSE: - console.log('Force paused. Stop writing'); - isPlay = false; - break; - case audio.InterruptHint.INTERRUPT_HINT_STOP: - console.log('Force stopped. Stop writing'); - isPlay = false; - break; + if (interruptEvent.forceType == audio.InterruptForceType.INTERRUPT_FORCE) { + switch (interruptEvent.hintType) { + case audio.InterruptHint.INTERRUPT_HINT_PAUSE: + console.log(`Force paused. Stop writing`); + isPlay = false; + break; + case audio.InterruptHint.INTERRUPT_HINT_STOP: + console.log(`Force stopped. Stop writing`); + isPlay = false; + break; + } + } else if (interruptEvent.forceType == audio.InterruptForceType.INTERRUPT_SHARE) { + switch (interruptEvent.hintType) { + case audio.InterruptHint.INTERRUPT_HINT_RESUME: + console.log(`Resume force paused renderer or ignore`); + await audioRenderer.start().then(async function () { + console.info(`AudioInterruptMusic: renderInstant started :SUCCESS `); + started = true; + }).catch((err) => { + console.info(`AudioInterruptMusic: renderInstant start :ERROR : ` + err.message); + started = false; + }); + if (started) { + isPlay = true; + console.info(`AudioInterruptMusic Renderer started : isPlay : ` + isPlay); + } else { + console.error(`AudioInterruptMusic Renderer start failed`); } - } else if (interruptEvent.forceType == audio.InterruptForceType.INTERRUPT_SHARE) { - switch (interruptEvent.hintType) { - case audio.InterruptHint.INTERRUPT_HINT_RESUME: - console.log('Resume force paused renderer or ignore'); - await audioRenderer.start().then(async function () { - console.info('AudioInterruptMusic: renderInstant started :SUCCESS '); - started = true; - }).catch((err) => { - console.info('AudioInterruptMusic: renderInstant start :ERROR : '+err.message); - started = false; - }); - if (started) { - isPlay = true; - console.info('AudioInterruptMusic Renderer started : isPlay : '+isPlay); - } else { - console.error('AudioInterruptMusic Renderer start failed'); - } - break; - case audio.InterruptHint.INTERRUPT_HINT_PAUSE: - console.log('Choose to pause or ignore'); - if (isPlay == true) { - isPlay == false; - console.info('AudioInterruptMusic: Media PAUSE : TRUE'); - } - else { - isPlay = true; - console.info('AudioInterruptMusic: Media PLAY : TRUE'); - } - break; + break; + case audio.InterruptHint.INTERRUPT_HINT_PAUSE: + console.log('Choose to pause or ignore'); + if (isPlay == true) { + isPlay == false; + console.info(`AudioInterruptMusic: Media PAUSE : TRUE`); + } else { + isPlay = true; + console.info(`AudioInterruptMusic: Media PLAY : TRUE`); } + break; } + } }); ``` @@ -2754,9 +3354,9 @@ Subscribes to mark reached events. When the number of frames rendered reaches th ``` audioRenderer.on('markReach', 1000, (position) => { - if (position == 1000) { - console.log('ON Triggered successfully'); - } + if (position == 1000) { + console.log(`ON Triggered successfully`); + } }); ``` @@ -2794,16 +3394,16 @@ Subscribes to period reached events. When the period of frame rendering reaches | Name | Type | Mandatory| Description | | :------- | :----------------------- | :--- | :------------------------------------------ | | type | string | Yes | Event type. The value **periodReach** means the period reached event, which is triggered when the period of frame rendering reaches the value of the **frame** parameter.| -| frame | number | Yes | Period during which frame rendering is listened. The value must be greater than **0**. | +| frame | number | Yes | Period during which frame rendering is listened. The value must be greater than **0**. | | callback | (position: number) => {} | Yes | Callback invoked when the event is triggered. | **Example** ``` audioRenderer.on('periodReach', 1000, (position) => { - if (position == 1000) { - console.log('ON Triggered successfully'); - } + if (position == 1000) { + console.log(`ON Triggered successfully`); + } }); ``` @@ -2827,7 +3427,7 @@ Unsubscribes from period reached events. audioRenderer.off('periodReach') ``` -### on('stateChange') 8+ +### on('stateChange')8+ on(type: 'stateChange', callback: Callback): void @@ -2846,15 +3446,44 @@ Subscribes to state change events. ``` audioRenderer.on('stateChange', (state) => { - if (state == 1) { - console.log("audio renderer state is: STATE_PREPARED"); - } - if (state == 2) { - console.log("audio renderer state is: STATE_RUNNING"); - } + if (state == 1) { + console.log(`audio renderer state is: STATE_PREPARED`); + } + if (state == 2) { + console.log(`audio renderer state is: STATE_RUNNING`); + } }); ``` +### on('dataRequest') 9+ + +on(type: "dataRequest", callback: Callback\): void; + +Subscribes to request events of audio data. + +**System capability**: SystemCapability.Multimedia.Audio.Renderer + +**Parameters** + +| Name | Type | Mandatory| Description | +| -------- | ------- | --------- | ------------------------------------------------------------------- | +| type | string | Yes | Event type. The value **dataRequest** indicates a data request event.| +| callback | [AudioRendererDataInfo](#audiorendererdatainfo9) | Yes | Callback used to return the audio renderer information.| + +**Example** +``` +const path = '/data/storage/el2/ba se/haps/entry/cache/PinkPanther60-44100-1c.wav'; + let ss = fileio.createStreamSync(path, 'r'); + let discardHeader = new ArrayBuffer(44); + ss.readSync(discardHeader); + let rlen = 0; + audioRenderer.on('dataRequest', (audioRendererDataInfo) => { + var viewObject = new DataView(audioRendererDataInfo.buffer); + rlen += ss.readSync(viewObject.buffer); + console.info(`AudioRenderLog: bytes read from file: ` + rlen); + }) +``` + ## AudioCapturer8+ Provides APIs for audio capture. Before calling any API in **AudioCapturer**, you must use [createAudioCapturer](#audiocreateaudiocapturer8) to create an **AudioCapturer** instance. @@ -2891,13 +3520,13 @@ Obtains the capturer information of this **AudioCapturer** instance. This API us ``` audioCapturer.getCapturerInfo((err, capturerInfo) => { - if (err) { - console.error('Failed to get capture info'); - } else { - console.log('Capturer getCapturerInfo:'); - console.log('Capturer source:' + capturerInfo.source); - console.log('Capturer flags:' + capturerInfo.capturerFlags); - } + if (err) { + console.error(`Failed to get capture info`); + } else { + console.log(`Capturer getCapturerInfo:`); + console.log(`Capturer source:` + capturerInfo.source); + console.log(`Capturer flags:` + capturerInfo.capturerFlags); + } }); ``` @@ -2920,16 +3549,16 @@ Obtains the capturer information of this **AudioCapturer** instance. This API us ``` audioCapturer.getCapturerInfo().then((audioParamsGet) => { - if (audioParamsGet != undefined) { - console.info('AudioFrameworkRecLog: Capturer CapturerInfo:'); - console.info('AudioFrameworkRecLog: Capturer SourceType:' + audioParamsGet.source); - console.info('AudioFrameworkRecLog: Capturer capturerFlags:' + audioParamsGet.capturerFlags); - }else { - console.info('AudioFrameworkRecLog: audioParamsGet is : '+audioParamsGet); - console.info('AudioFrameworkRecLog: audioParams getCapturerInfo are incorrect: '); - } + if (audioParamsGet != undefined) { + console.info(`AudioFrameworkRecLog: Capturer CapturerInfo:`); + console.info(`AudioFrameworkRecLog: Capturer SourceType:` + audioParamsGet.source); + console.info(`AudioFrameworkRecLog: Capturer capturerFlags:` + audioParamsGet.capturerFlags); + } else { + console.info(`AudioFrameworkRecLog: audioParamsGet is : ` + audioParamsGet); + console.info(`AudioFrameworkRecLog: audioParams getCapturerInfo are incorrect: `); + } }).catch((err) => { - console.log('AudioFrameworkRecLog: CapturerInfo :ERROR: '+err.message); + console.log(`AudioFrameworkRecLog: CapturerInfo :ERROR: ` + err.message); }); ``` @@ -2951,15 +3580,15 @@ Obtains the stream information of this **AudioCapturer** instance. This API uses ``` audioCapturer.getStreamInfo((err, streamInfo) => { - if (err) { - console.error('Failed to get stream info'); - } else { - console.log('Capturer GetStreamInfo:'); - console.log('Capturer sampling rate:' + streamInfo.samplingRate); - console.log('Capturer channel:' + streamInfo.channels); - console.log('Capturer format:' + streamInfo.sampleFormat); - console.log('Capturer encoding type:' + streamInfo.encodingType); - } + if (err) { + console.error(`Failed to get stream info'); + } else { + console.log(`Capturer GetStreamInfo:`); + console.log(`Capturer sampling rate:` + streamInfo.samplingRate); + console.log(`Capturer channel:` + streamInfo.channels); + console.log(`Capturer format:` + streamInfo.sampleFormat); + console.log(`Capturer encoding type:` + streamInfo.encodingType); + } }); ``` @@ -2981,13 +3610,13 @@ Obtains the stream information of this **AudioCapturer** instance. This API uses ``` audioCapturer.getStreamInfo().then((audioParamsGet) => { - console.info('getStreamInfo:'); - console.info('sampleFormat:' + audioParamsGet.sampleFormat); - console.info('samplingRate:' + audioParamsGet.samplingRate); - console.info('channels:' + audioParamsGet.channels); - console.info('encodingType:' + audioParamsGet.encodingType); + console.info(`getStreamInfo:`); + console.info(`sampleFormat:` + audioParamsGet.sampleFormat); + console.info(`samplingRate:` + audioParamsGet.samplingRate); + console.info(`channels:` + audioParamsGet.channels); + console.info(`encodingType:` + audioParamsGet.encodingType); }).catch((err) => { - console.log('getStreamInfo :ERROR: ' + err.message); + console.log(`getStreamInfo :ERROR: ` + err.message); }); ``` @@ -3009,11 +3638,11 @@ Starts capturing. This API uses an asynchronous callback to return the result. ``` audioCapturer.start((err) => { - if (err) { - console.error('Capturer start failed.'); - } else { - console.info('Capturer start success.'); - } + if (err) { + console.error(`Capturer start failed.`); + } else { + console.info(`Capturer start success.`); + } }); ``` @@ -3039,35 +3668,36 @@ import audio from '@ohos.multimedia.audio'; import fileio from '@ohos.fileio'; var audioStreamInfo = { - samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100, - channels: audio.AudioChannel.CHANNEL_2, - sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE, - encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW + samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100, + channels: audio.AudioChannel.CHANNEL_2, + sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE, + encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW } var audioCapturerInfo = { - source: audio.SourceType.SOURCE_TYPE_MIC, - capturerFlags = 1 + source: audio.SourceType.SOURCE_TYPE_MIC, + capturerFlags: 0 } var audioCapturer; +var stateFlag; audio.createAudioCapturer(audioCapturerOptions).then((data) => { - audioCapturer = data; - console.info('AudioFrameworkRecLog: AudioCapturer Created: SUCCESS'); - }).catch((err) => { - console.info('AudioFrameworkRecLog: AudioCapturer Created: ERROR: '+err.message); - }); + audioCapturer = data; + console.info(`AudioFrameworkRecLog: AudioCapturer Created: SUCCESS`); + }).catch((err) => { + console.info(`AudioFrameworkRecLog: AudioCapturer Created: ERROR: ` + err.message); + }); audioCapturer.start().then(() => { - console.info('AudioFrameworkRecLog: ---------START---------'); - console.info('AudioFrameworkRecLog: Capturer started: SUCCESS'); - console.info('AudioFrameworkRecLog: AudioCapturer: STATE: '+audioCapturer.state); - console.info('AudioFrameworkRecLog: Capturer started: SUCCESS '); - if ((audioCapturer.state == audio.AudioState.STATE_RUNNING)) { - console.info('AudioFrameworkRecLog: AudioCapturer is in Running State'); - } + console.info(`AudioFrameworkRecLog: ---------START---------`); + console.info(`AudioFrameworkRecLog: Capturer started: SUCCESS`); + console.info(`AudioFrameworkRecLog: AudioCapturer: STATE: ` + audioCapturer.state); + console.info(`AudioFrameworkRecLog: Capturer started: SUCCESS `); + if ((audioCapturer.state == audio.AudioState.STATE_RUNNING)) { + console.info(`AudioFrameworkRecLog: AudioCapturer is in Running State`); + } }).catch((err) => { - console.info('AudioFrameworkRecLog: Capturer start :ERROR : '+err.message); - stateFlag=false; + console.info(`AudioFrameworkRecLog: Capturer start :ERROR : ` + err.message); + stateFlag = false; }); ``` @@ -3089,11 +3719,11 @@ Stops capturing. This API uses an asynchronous callback to return the result. ``` audioCapturer.stop((err) => { - if (err) { - console.error('Capturer stop failed'); - } else { - console.log('Capturer stopped.'); - } + if (err) { + console.error(`Capturer stop failed`); + } else { + console.log(`Capturer stopped.`); + } }); ``` @@ -3116,13 +3746,13 @@ Stops capturing. This API uses a promise to return the result. ``` audioCapturer.stop().then(() => { - console.info('AudioFrameworkRecLog: ---------STOP RECORD---------'); - console.info('AudioFrameworkRecLog: Capturer stopped: SUCCESS'); - if ((audioCapturer.state == audio.AudioState.STATE_STOPPED)){ - console.info('AudioFrameworkRecLog: State is Stopped': '); - } + console.info(`AudioFrameworkRecLog: ---------STOP RECORD---------`); + console.info(`AudioFrameworkRecLog: Capturer stopped: SUCCESS`); + if ((audioCapturer.state == audio.AudioState.STATE_STOPPED)){ + console.info(`AudioFrameworkRecLog: State is Stopped: `); + } }).catch((err) => { - console.info('AudioFrameworkRecLog: Capturer stop: ERROR: '+err.message); + console.info(`AudioFrameworkRecLog: Capturer stop: ERROR: ` + err.message); }); ``` @@ -3144,11 +3774,11 @@ Releases this **AudioCapturer** instance. This API uses an asynchronous callback ``` audioCapturer.release((err) => { - if (err) { - console.error('capturer release failed'); - } else { - console.log('capturer released.'); - } + if (err) { + console.error(`capturer release failed`); + } else { + console.log(`capturer released.`); + } }); ``` @@ -3170,13 +3800,14 @@ Releases this **AudioCapturer** instance. This API uses a promise to return the **Example** ``` +var stateFlag; audioCapturer.release().then(() => { - console.info('AudioFrameworkRecLog: ---------RELEASE RECORD---------'); - console.info('AudioFrameworkRecLog: Capturer release : SUCCESS'); - console.info('AudioFrameworkRecLog: AudioCapturer : STATE : '+audioCapturer.state); - console.info('AudioFrameworkRecLog: stateFlag : '+stateFlag); + console.info(`AudioFrameworkRecLog: ---------RELEASE RECORD---------`); + console.info(`AudioFrameworkRecLog: Capturer release : SUCCESS`); + console.info(`AudioFrameworkRecLog: AudioCapturer : STATE : ` + audioCapturer.state); + console.info(`AudioFrameworkRecLog: stateFlag : ` + stateFlag); }).catch((err) => { - console.info('AudioFrameworkRecLog: Capturer stop: ERROR: '+err.message); + console.info(`AudioFrameworkRecLog: Capturer stop: ERROR: ` + err.message); }); ``` @@ -3202,15 +3833,15 @@ Reads the buffer. This API uses an asynchronous callback to return the result. ``` var bufferSize; audioCapturer.getBufferSize().then((data) => { - console.info('AudioFrameworkRecLog: getBufferSize: SUCCESS '+data); - bufferSize = data; - }).catch((err) => { - console.info('AudioFrameworkRecLog: getBufferSize: EROOR: '+err.message); - }); + console.info(`AudioFrameworkRecLog: getBufferSize: SUCCESS ` + data); + bufferSize = data; + }).catch((err) => { + console.info(`AudioFrameworkRecLog: getBufferSize: EROOR: ` + err.message); + }); audioCapturer.read(bufferSize, true, async(err, buffer) => { - if (!err) { - console.log("Success in reading the buffer data"); - } + if (!err) { + console.log(`Success in reading the buffer data`); + } }); ``` @@ -3234,23 +3865,23 @@ Reads the buffer. This API uses a promise to return the result. | Type | Description | | :-------------------- | :----------------------------------------------------- | -| Promise | Returns the buffer data read if the operation is successful; returns an error code otherwise.| +| Promise | Promise used to return the result. If the operation is successful, the buffer data read is returned; otherwise, an error code is returned.| **Example** ``` var bufferSize; audioCapturer.getBufferSize().then((data) => { - console.info('AudioFrameworkRecLog: getBufferSize: SUCCESS '+data); - bufferSize = data; - }).catch((err) => { - console.info('AudioFrameworkRecLog: getBufferSize: ERROR '+err.message); - }); -console.info('Buffer size: ' + bufferSize); + console.info(`AudioFrameworkRecLog: getBufferSize: SUCCESS ` + data); + bufferSize = data; + }).catch((err) => { + console.info(`AudioFrameworkRecLog: getBufferSize: ERROR ` + err.message); + }); +console.info(`Buffer size: ` + bufferSize); audioCapturer.read(bufferSize, true).then((buffer) => { - console.info('buffer read successfully'); + console.info(`buffer read successfully`); }).catch((err) => { - console.info('ERROR : '+err.message); + console.info(`ERROR : ` + err.message); }); ``` @@ -3267,13 +3898,13 @@ Obtains the number of nanoseconds elapsed from the Unix epoch (January 1, 1970). | Name | Type | Mandatory| Description | | :------- | :--------------------- | :--- | :----------------------------- | -| callback | AsyncCallback | Yes | Callback used to return the timestamp.| +| callback | AsyncCallback | Yes | Callback used to return the timestamp. | **Example** ``` audioCapturer.getAudioTime((err, timestamp) => { - console.log('Current timestamp: ' + timestamp); + console.log(`Current timestamp: ` + timestamp); }); ``` @@ -3296,9 +3927,9 @@ Obtains the number of nanoseconds elapsed from the Unix epoch (January 1, 1970). ``` audioCapturer.getAudioTime().then((audioTime) => { - console.info('AudioFrameworkRecLog: AudioCapturer getAudioTime : Success' + audioTime ); + console.info(`AudioFrameworkRecLog: AudioCapturer getAudioTime : Success` + audioTime ); }).catch((err) => { - console.info('AudioFrameworkRecLog: AudioCapturer Created : ERROR : '+err.message); + console.info(`AudioFrameworkRecLog: AudioCapturer Created : ERROR : ` + err.message); }); ``` @@ -3321,14 +3952,14 @@ Obtains a reasonable minimum buffer size in bytes for capturing. This API uses a ``` audioCapturer.getBufferSize((err, bufferSize) => { - if (!err) { - console.log('BufferSize : ' + bufferSize); - audioCapturer.read(bufferSize, true).then((buffer) => { - console.info('Buffer read is ' + buffer ); - }).catch((err) => { - console.info('AudioFrameworkRecLog: AudioCapturer Created : ERROR : '+err.message); - }); - } + if (!err) { + console.log(`BufferSize : ` + bufferSize); + audioCapturer.read(bufferSize, true).then((buffer) => { + console.info(`Buffer read is ` + buffer ); + }).catch((err) => { + console.info(`AudioFrameworkRecLog: AudioCapturer Created : ERROR : ` + err.message); + }); + } }); ``` @@ -3352,10 +3983,10 @@ Obtains a reasonable minimum buffer size in bytes for capturing. This API uses a ``` var bufferSize; audioCapturer.getBufferSize().then((data) => { - console.info('AudioFrameworkRecLog: getBufferSize :SUCCESS '+ data); - bufferSize = data; + console.info(`AudioFrameworkRecLog: getBufferSize :SUCCESS ` + data); + bufferSize = data; }).catch((err) => { - console.info('AudioFrameworkRecLog: getBufferSize :ERROR : '+ err.message); + console.info(`AudioFrameworkRecLog: getBufferSize :ERROR : ` + err.message); }); ``` @@ -3380,9 +4011,9 @@ Subscribes to mark reached events. When the number of frames captured reaches th ``` audioCapturer.on('markReach', 1000, (position) => { - if (position == 1000) { - console.log('ON Triggered successfully'); - } + if (position == 1000) { + console.log(`ON Triggered successfully`); + } }); ``` @@ -3418,17 +4049,17 @@ Subscribes to mark reached events. When the period of frame capturing reaches th | Name | Type | Mandatory| Description | | :------- | :----------------------- | :--- | :------------------------------------------ | -| type | string | Yes | Event type. The value **periodReach** means the period reached event, which is triggered when the period of frame capturing reaches the value of the **frame** parameter.| -| frame | number | Yes | Period during which frame capturing is listened. The value must be greater than **0**. | +| type | string | Yes | Event type. The value **periodReach** means the period reached event, which is triggered when the period of frame capturing reaches the value of the **frame** parameter. | +| frame | number | Yes | Period during which frame capturing is listened. The value must be greater than **0**. | | callback | (position: number) => {} | Yes | Callback invoked when the event is triggered. | **Example** ``` audioCapturer.on('periodReach', 1000, (position) => { - if (position == 1000) { - console.log('ON Triggered successfully'); - } + if (position == 1000) { + console.log(`ON Triggered successfully`); + } }); ``` @@ -3452,7 +4083,7 @@ Unsubscribes from period reached events. audioCapturer.off('periodReach') ``` -### on('stateChange') 8+ +### on('stateChange')8+ on(type: 'stateChange', callback: Callback): void @@ -3471,11 +4102,11 @@ Subscribes to state change events. ``` audioCapturer.on('stateChange', (state) => { - if (state == 1) { - console.log("audio capturer state is: STATE_PREPARED"); - } - if (state == 2) { - console.log("audio capturer state is: STATE_RUNNING"); - } + if (state == 1) { + console.log(`audio capturer state is: STATE_PREPARED`); + } + if (state == 2) { + console.log(`audio capturer state is: STATE_RUNNING`); + } }); ``` diff --git a/en/application-dev/reference/apis/js-apis-camera.md b/en/application-dev/reference/apis/js-apis-camera.md index 1298f29856048924fd2a7e8397724aa9fc0df8ee..8819011c106586b3099116d0c43b7644e09da8a2 100644 --- a/en/application-dev/reference/apis/js-apis-camera.md +++ b/en/application-dev/reference/apis/js-apis-camera.md @@ -2103,7 +2103,7 @@ Creates a **PhotoOutput** instance. This API uses an asynchronous callback to re | Name | Type | Mandatory| Description | | --------- | ------------------------------------------- | ---- | ----------------------------------- | -| surfaceId | string | Yes | Surface ID received from **ImageReceiver**. | +| surfaceId | string | Yes | Surface ID received from **[ImageReceiver](js-apis-image.md#imagereceiver9)**. | | callback | AsyncCallback<[PhotoOutput](#photooutput)\> | Yes | Callback used to return the **PhotoOutput** instance.| **Example** @@ -2130,7 +2130,7 @@ Creates a **PhotoOutput** instance. This API uses a promise to return the instan | Name | Type | Mandatory| Description | | --------- | ------ | ---- | --------------------------------- | -| surfaceId | string | Yes | Surface ID received from **ImageReceiver**.| +| surfaceId | string | Yes | Surface ID received from **[ImageReceiver](js-apis-image.md#imagereceiver9)**. | **Return value** diff --git a/en/application-dev/reference/apis/js-apis-medialibrary.md b/en/application-dev/reference/apis/js-apis-medialibrary.md index 91059df152841c2317196bcd8496be2412f2fd30..5589051694d6aa726df14d2c87b5425f314873da 100644 --- a/en/application-dev/reference/apis/js-apis-medialibrary.md +++ b/en/application-dev/reference/apis/js-apis-medialibrary.md @@ -15,6 +15,8 @@ getMediaLibrary(context: Context): MediaLibrary Obtains a **MediaLibrary** instance, which is used to access and modify personal media data such as audios, videos, images, and documents. +This API can be used only in the stage model. + **System capability**: SystemCapability.Multimedia.MediaLibrary.Core **Parameters** @@ -49,6 +51,8 @@ getMediaLibrary(): MediaLibrary Obtains a **MediaLibrary** instance, which is used to access and modify personal media data such as audios, videos, images, and documents. +This API can be used only in the FA model. + > **NOTE** > > This API is no longer maintained since API version 8. You are advised to use [mediaLibrary.getMediaLibrary8+](#medialibrarygetmedialibrary8) instead. @@ -256,17 +260,12 @@ Creates a media asset. This API uses a promise to return the result. **Example** ``` -async function example() { - // Create an image file in promise mode. - let mediaType = mediaLibrary.MediaType.IMAGE; - let DIR_IMAGE = mediaLibrary.DirectoryType.DIR_IMAGE; - const path = await media.getPublicDirectory(DIR_IMAGE); - media.createAsset(mediaType, "image01.jpg", path + 'myPicture/').then (function (asset) { - console.info("createAsset successfully:"+ JSON.stringify(asset)); - }).catch(function(err){ - console.info("createAsset failed with error:"+ err); - }); -} +let DIR_CAMERA = mediaLibrary.DirectoryType.DIR_CAMERA; +media.getPublicDirectory(DIR_CAMERA).then(function(dicResult){ + console.info("getPublicDirectory successfully:"+ JSON.stringify(dicResult)); +}).catch(function(err){ + console.info("getPublicDirectory failed with error:"+ err); +}); ``` ### getPublicDirectory8+ @@ -578,7 +577,7 @@ Starts image preview. This API can be used to preview local images whose URIs st > **NOTE** > -> This API is deprecated since API version 9. You are advised to use the **\<[Image](../arkui-ts/ts-basic-components-image.md)>** component instead. The **** component can be used to render and display local images and network images. +> This API is deprecated since API version 9. You are advised to use the **\<[Image](../arkui-ts/ts-basic-components-image.md)>** component instead. The **\** component can be used to render and display local and online images. **System capability**: SystemCapability.Multimedia.MediaLibrary.Core @@ -620,7 +619,7 @@ Starts image preview, with the first image to preview specified. This API can be > **NOTE** > -> This API is deprecated since API version 9. You are advised to use the **\<[Image](../arkui-ts/ts-basic-components-image.md)>** component instead. The **** component can be used to render and display local images and network images. +> This API is deprecated since API version 9. You are advised to use the **\<[Image](../arkui-ts/ts-basic-components-image.md)>** component instead. The **\** component can be used to render and display local and online images. **System capability**: SystemCapability.Multimedia.MediaLibrary.Core @@ -960,8 +959,8 @@ open(mode: string): Promise<number> Opens this file asset. This API uses a promise to return the result. -> **NOTE** -> +> **NOTE** +> > Currently, the write operations are mutually exclusive. After the write operation is complete, you must call **close** to release the resource. **Required permissions**: ohos.permission.READ_MEDIA or ohos.permission.WRITE_MEDIA @@ -1934,13 +1933,11 @@ async function example() { extendArgs: "", }; let fetchFileResult = await media.getFileAssets(getImageOp); - fetchFileResult.getPositionObject(1, (err, fileAsset) => { - if (err) { - console.error('Failed '); - return; - } - console.log('fileAsset.displayName : ' + fileAsset.displayName); - }) + fetchFileResult.getPositionObject(1) .then(function (fileAsset){ + console.log('[Demo] fileAsset.displayName : ' + fileAsset.displayName); + }).catch(function (err) { + console.info("[Demo] getFileAssets failed with error:" + err); + }); } ```