From 42105670fb10923416f1c502014ce902388562b2 Mon Sep 17 00:00:00 2001 From: wusongqing Date: Tue, 14 Jun 2022 15:08:55 +0800 Subject: [PATCH] added state machine Signed-off-by: wusongqing --- en/application-dev/media/audio-capturer.md | 260 ++++++------- en/application-dev/media/audio-renderer.md | 349 ++++++++---------- .../media/figures/audio-capturer-state.png | Bin 0 -> 29079 bytes .../media/figures/audio-renderer-state.png | Bin 0 -> 37947 bytes 4 files changed, 287 insertions(+), 322 deletions(-) create mode 100644 en/application-dev/media/figures/audio-capturer-state.png create mode 100644 en/application-dev/media/figures/audio-renderer-state.png diff --git a/en/application-dev/media/audio-capturer.md b/en/application-dev/media/audio-capturer.md index 00ff76707d..ab1664eb71 100644 --- a/en/application-dev/media/audio-capturer.md +++ b/en/application-dev/media/audio-capturer.md @@ -1,152 +1,152 @@ # Audio Capture Development ---- -## ***Note***: - 1. This document applies to JavaScript. ---- -## **Summary** -This guide will show how a JS application can use AudioCapturer to record the audio. -Applications can use the APIs provided in this document to record raw audio files. - -## **AudioCapturer Framework** -The AudioCapturer interface is one of the most important components of the audio framework. -### **Audio Capturing:** -The AudioCapturer framework provides APIs for capturing raw audio files. - -## **Usage** -Here's an example of how to use AudioCapturer to capture a raw audio file. -1. Use **createAudioCapturer()** to create an AudioCapturer instance. Capturer parameters can be set in **audioCapturerOptions**.\ - This instance can be used to record, control, and obtain the recording status, as well as to register a callback for notifications. - ``` - 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 audioCapturerInfo = { - source: audio.SourceType.SOURCE_TYPE_MIC, - capturerFlags: 1 - } - - var audioCapturerOptions = { - streamInfo: audioStreamInfo, - capturerInfo: audioCapturerInfo - } - - let audioCapturer = await audio.createAudioCapturer(audioCapturerOptions); - var state = audioRenderer.state; - ``` +## When to Use + +You can use the APIs provided by **AudioCapturer** to record raw audio files. + +### State Check + +During application development, you are advised to use **on('stateChange')** to subscribe to state changes of the **AudioCapturer** instance. This is because some operations can be performed only when the audio capturer is in a given state. If the application performs an operation when the audio capturer is not in the given state, the system may throw an exception or generate other undefined behavior. + +For details about the APIs, see [AudioCapturer in Audio Management](../reference/apis/js-apis-audio.md). + +**Figure 1** Audio capturer state + +![](figures/audio-capturer-state.png) + +## How to Develop + +1. Use **createAudioCapturer()** to create an **AudioCapturer** instance. + + Set parameters of the **AudioCapturer** instance in **audioCapturerOptions**. This instance is used to capture audio, control and obtain the recording status, and register a callback for notification. -2. (Optional) Subscribe to audio capturer state change events using the **on('stateChange')** API. - If an application wants to take some action based on the state updates in capturer, the application can subscribe to the state change event. - There are more events that applications can subscribe to, such as 'markReach' and 'periodReach'. Refer to [Audio](../reference/apis/js-apis-audio.md) for more details. + ```js + 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 audioCapturerInfo = { + source: audio.SourceType.SOURCE_TYPE_MIC, + capturerFlags: 1 + } + + var audioCapturerOptions = { + streamInfo: audioStreamInfo, + capturerInfo: audioCapturerInfo + } + + let audioCapturer = await audio.createAudioCapturer(audioCapturerOptions); + var state = audioRenderer.state; ``` + +2. (Optional) Use **on('stateChange')** to subscribe to audio renderer state changes. +If an application needs to perform some operations when the audio renderer state is updated, the application can subscribe to the state changes. For more events that can be subscribed to, see [Audio Management](../reference/apis/js-apis-audio.md). + + ```js audioCapturer.on('stateChange',(state) => { console.info('AudioCapturerLog: Changed State to : ' + state) switch (state) { - case audio.AudioState.STATE_PREPARED: - console.info('--------CHANGE IN AUDIO STATE----------PREPARED--------------'); - console.info('Audio State is : Prepared'); - break; - case audio.AudioState.STATE_RUNNING: - console.info('--------CHANGE IN AUDIO STATE----------RUNNING--------------'); - console.info('Audio State is : Running'); - break; - case audio.AudioState.STATE_STOPPED: - console.info('--------CHANGE IN AUDIO STATE----------STOPPED--------------'); - console.info('Audio State is : stopped'); - break; - case audio.AudioState.STATE_RELEASED: - console.info('--------CHANGE IN AUDIO STATE----------RELEASED--------------'); - console.info('Audio State is : released'); - break; - default: - console.info('--------CHANGE IN AUDIO STATE----------INVALID--------------'); - console.info('Audio State is : invalid'); - break; - } + case audio.AudioState.STATE_PREPARED: + console.info('--------CHANGE IN AUDIO STATE----------PREPARED--------------'); + console.info('Audio State is : Prepared'); + break; + case audio.AudioState.STATE_RUNNING: + console.info('--------CHANGE IN AUDIO STATE----------RUNNING--------------'); + console.info('Audio State is : Running'); + break; + case audio.AudioState.STATE_STOPPED: + console.info('--------CHANGE IN AUDIO STATE----------STOPPED--------------'); + console.info('Audio State is : stopped'); + break; + case audio.AudioState.STATE_RELEASED: + console.info('--------CHANGE IN AUDIO STATE----------RELEASED--------------'); + console.info('Audio State is : released'); + break; + default: + console.info('--------CHANGE IN AUDIO STATE----------INVALID--------------'); + console.info('Audio State is : invalid'); + break; + } }); - ``` -3. Call the **start()** function on the AudioCapturer instance to start/resume the recording task.\ - The capturer state will be STATE_RUNNING once the start is complete. The application can then begin reading buffers. - ``` - await audioCapturer.start(); - if (audioCapturer.state == audio.AudioState.STATE_RUNNING) { - console.info('AudioRecLog: Capturer started'); - } else { - console.info('AudioRecLog: Capturer start failed'); - } +3. Use **start()** to start audio recording. - ``` + The capturer state will be **STATE_RUNNING** once the audio capturer is started. The application can then begin reading buffers. -4. Obtain the minimum buffer size to read using the **getBufferSize()** API. + ```js + await audioCapturer.start(); + if (audioCapturer.state == audio.AudioState.STATE_RUNNING) { + console.info('AudioRecLog: Capturer started'); + } else { + console.info('AudioRecLog: Capturer start failed'); + } ``` - var bufferSize = await audioCapturer.getBufferSize(); - console.info('AudioRecLog: buffer size: ' + bufferSize); - ``` +4. Use **getBufferSize()** to obtain the minimum buffer size to read. -5. Read the captured audio data and convert it to a byte stream. Call the **read()** API repeatedly to read the data - until the application wants to stop the recording. The following example shows how to write recorded data into a file. + ```js + var bufferSize = await audioCapturer.getBufferSize(); + console.info('AudioRecLog: buffer size: ' + bufferSize); ``` - import fileio from '@ohos.fileio'; - - const path = '/data/data/.pulse_dir/capture_js.wav'; - let fd = fileio.openSync(path, 0o102, 0o777); - if (fd !== null) { - console.info('AudioRecLog: file fd created'); - } - else{ - console.info('AudioRecLog: file fd create : FAILED'); - return; - } - - fd = fileio.openSync(path, 0o2002, 0o666); - if (fd !== null) { - console.info('AudioRecLog: file fd opened in append mode'); - } - - var numBuffersToCapture = 150; - while (numBuffersToCapture) { - var buffer = await audioCapturer.read(bufferSize, true); - if (typeof(buffer) == undefined) { - console.info('read buffer failed'); - } else { - var number = fileio.writeSync(fd, buffer); - console.info('AudioRecLog: data written: ' + number); - } - - numBuffersToCapture--; - } - ``` -6. Once the recording is complete, call the **stop()** API on the AudioCapturer instance to stop the recording. - ``` - await audioCapturer.stop(); - if (audioCapturer.state == audio.AudioState.STATE_STOPPED) { - console.info('AudioRecLog: Capturer stopped'); - } else { - console.info('AudioRecLog: Capturer stop failed'); - } + +5. Read the captured audio data and convert it to a byte stream. Call **read()** repeatedly to read the data until the application wants to stop the recording. + + The following example shows how to write recorded data into a file. + + ```js + import fileio from '@ohos.fileio'; + + const path = '/data/data/.pulse_dir/capture_js.wav'; + let fd = fileio.openSync(path, 0o102, 0o777); + if (fd !== null) { + console.info('AudioRecLog: file fd created'); + } + else{ + console.info('AudioRecLog: file fd create : FAILED'); + return; + } + + fd = fileio.openSync(path, 0o2002, 0o666); + if (fd !== null) { + console.info('AudioRecLog: file fd opened in append mode'); + } + + var numBuffersToCapture = 150; + while (numBuffersToCapture) { + var buffer = await audioCapturer.read(bufferSize, true); + if (typeof(buffer) == undefined) { + console.info('read buffer failed'); + } else { + var number = fileio.writeSync(fd, buffer); + console.info('AudioRecLog: data written: ' + number); + } + + numBuffersToCapture--; + } ``` -7. After the recording task is complete, call the **release()** API on the AudioCapturer instance to release the stream resources. +6. Once the recording is complete, call **stop()** to stop the recording. + ``` - await audioCapturer.release(); - if (audioCapturer.state == audio.AudioState.STATE_RELEASED) { - console.info('AudioRecLog: Capturer released'); - } else { - console.info('AudioRecLog: Capturer release failed'); - } + await audioCapturer.stop(); + if (audioCapturer.state == audio.AudioState.STATE_STOPPED) { + console.info('AudioRecLog: Capturer stopped'); + } else { + console.info('AudioRecLog: Capturer stop failed'); + } ``` -## **Importance of State Check** -Application developers should keep in mind that an AudioCapturer is state-based. -That is, the AudioCapturer has an internal state that the application must always check when calling recorder control APIs, because some operations are only acceptable while the capturer is in a given state.\ -The system may throw an error/exception or generate other undefined behaviour if the application performs an operation while capturer is in an improper state. +7. After the task is complete, call **release()** to release related resources. -## **Other APIs** -See [AudioCapturer in the Audio API](../reference/apis/js-apis-audio.md) for more useful APIs like **getAudioTime**, **getCapturerInfo** and **getStreamInfo**. + ```js + await audioCapturer.release(); + if (audioCapturer.state == audio.AudioState.STATE_RELEASED) { + console.info('AudioRecLog: Capturer released'); + } else { + console.info('AudioRecLog: Capturer release failed'); + } + ``` diff --git a/en/application-dev/media/audio-renderer.md b/en/application-dev/media/audio-renderer.md index f9dfb75c2a..8e2be84939 100644 --- a/en/application-dev/media/audio-renderer.md +++ b/en/application-dev/media/audio-renderer.md @@ -1,152 +1,124 @@ # Audio Rendering Development ---- -## ***Note***: - 1. This document applies to JavaScript. ---- -## **Summary** -This guide will show you how to use AudioRenderer to create an audio player app. -You can use the APIs provided in this document to play audio files in output devices and manage playback tasks. +## When to Use -## **AudioRenderer Framework** -The AudioRenderer interface is one of the most important components of the audio framework. -### **Audio Rendering:** -The AudioRenderer framework provides APIs for playing audio files and controlling the playback. -### **Audio Interruption:** -When a higher priority stream wants to play, the AudioRenderer framework interrupts the lower priority stream.\ -For example, if a call is arrived when you listen to music, the music playback, which is the lower priority stream, is paused.\ -With the sample code below, we'll look at how AudioInterrupt works in detail.\ -
-Please see [AudioRenderer in the Audio API](../reference/apis/js-apis-audio.md#audiorenderer8) for a list of supported audio stream types and formats, such as AudioSampleFormat, AudioChannel, AudioSampleFormat, and AudioEncodingType. +**AudioRenderer** provides APIs for rendering audio files and controlling playback. It also supports audio interruption. You can use the APIs provided by **AudioRenderer** to play audio files in output devices and manage playback tasks. +### Audio Interruption -## **Usage** -Here's an example of how to use AudioRenderer to play a raw audio file. -1. Use **createAudioRenderer** to create an AudioRenderer instance. Renderer parameters can be set in **audioRendererOptions**.\ - This object can be used to play, control, and obtain the status of the playback, as well as receive callback notifications. - ``` +When an audio stream with a higher priority needs to be played, the audio renderer interrupts the stream with a lower priority. For example, if a call comes in when the user is listening to music, the music playback, which is the lower priority stream, is paused. For details, see [How to Develop](#how-to-develop). + +### State Check + +During application development, you are advised to use **on('stateChange')** to subscribe to state changes of the **AudioRenderer** instance. This is because some operations can be performed only when the audio renderer is in a given state. If the application performs an operation when the audio renderer is not in the given state, the system may throw an exception or generate other undefined behavior. + +**Figure 1** Audio renderer state + +![](figures/audio-renderer-state.png) + +### Asynchronous Operations + +To ensure that the UI thread is not blocked, most **AudioRenderer** calls are asynchronous. Each API provides the callback and promise functions. The following examples use the promise functions. For more information, see [AudioRenderer in Audio Management](../reference/apis/js-apis-audio.md#audiorenderer8). + + + +## How to Develop + +1. Use **createAudioRenderer()** to create an **AudioRenderer** instance. + Set parameters of the audio renderer in **audioCapturerOptions**. This instance is used to render audio, control and obtain the rendering status, and register a callback for notification. + + ```js var audioStreamInfo = { samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100, channels: audio.AudioChannel.CHANNEL_1, - sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE, + 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 } - + var audioRendererOptions = { streamInfo: audioStreamInfo, rendererInfo: audioRendererInfo } - + let audioRenderer = await audio.createAudioRenderer(audioRendererOptions); ``` -2. Subscribe to audio interruption events using the **on** API.\ - Stream-A is interrupted when Stream-B with a higher or equal priority requests to become active and use the output device.\ - In some cases, the framework takes forced actions like pausing and ducking, and notifies the app using **InterruptEvent**. In other cases, the app can take action. In this situation, the app can choose to act on the **InterruptEvent** or ignore it. When the app is interrupted by forced action, it should handle the state, update the user interface, and so on. - - In case of audio interrupts, the app may encounter write failures. Interrupt unaware apps can check the renderer state using the **audioRenderer.state** API before writing audio data, whereas interrupt aware apps will have more details accessible via this listener.\ -
- The following information will be provided by the Interrupt Event Notification: - - 1) **eventType:** Whether the interruption has begun or ended. - - | Value | Description | - | :------------------- | :-------------------------------------------- | - | INTERRUPT_TYPE_BEGIN | Indicates that the interruption has started. | - | INTERRUPT_TYPE_END | Indicates that the interruption has finished. | - - 2) **forceType:** Whether the framework has already taken action or if the app is being suggested to take action. - - | Value | Description | - | :-------------- | :------------------------------------------------------------------ | - | INTERRUPT_FORCE | The audio state has been changed by the framework. | - | INTERRUPT_SHARE | The app can decide whether or not to respond to the InterruptEvent. | - - 3) **hintType:** The kind of action taken or to be taken. - - | Value | Description | - | :-------------------- | :--------------------------- | - | INTERRUPT_HINT_PAUSE | Pausing the playback. | - | INTERRUPT_HINT_RESUME | Resuming the playback. | - | INTERRUPT_HINT_STOP | Stopping the playback. | - | INTERRUPT_HINT_DUCK | Ducking the stream volume. | - | INTERRUPT_HINT_UNDUCK | Unducking the stream volume. | - - 4) **Some actions are exclusively forced or shared**, which means that they are performed by either the framework or the app.\ - For instance, when a call is received while a music stream is ongoing, the framework forces the music stream to pause. When the call is finished, the framework will not forcibly resume the music stream. Instead, it will alert the app to resume the playback. - - | Action | Description | - | :-------------------- | :-------------------------------------------------------------------------------- | - | INTERRUPT_HINT_RESUME | INTERRUPT_SHARE is always the forceType. It can only be done by the app. | - | INTERRUPT_HINT_DUCK | INTERRUPT_FORCE is always the forceType. It will always be done by the framework. | - | INTERRUPT_HINT_UNDUCK | INTERRUPT_FORCE is always the forceType. It will always be done by the framework. | - +2. Use **on('interrupt')** to subscribe to audio interruption events. + + Stream-A is interrupted when Stream-B with a higher or equal priority requests to become active and use the output device. + + In some cases, the audio renderer performs forcible operations such as pausing and ducking, and notifies the application through **InterruptEvent**. In other cases, the application can choose to act on the **InterruptEvent** or ignore it. + + In the case of audio interruption, the application may encounter write failures. To avoid such failures, interruption unaware applications can use **audioRenderer.state** to check the renderer state before writing audio data. The applications can obtain more details by subscribing to the audio interruption events. For details, see [InterruptEvent](../reference/apis/js-apis-audio.md#interruptevent9). + + ```js + audioRenderer.on('interrupt', (interruptEvent) => { + console.info('InterruptEvent Received'); + console.info('InterruptType: ' + interruptEvent.eventType); + console.info('InterruptForceType: ' + interruptEvent.forceType); + console.info('AInterruptHint: ' + interruptEvent.hintType); + + if (interruptEvent.forceType == audio.InterruptForceType.INTERRUPT_FORCE) { + switch (interruptEvent.hintType) { + // Force Pause: Action was taken by framework. + // Halt the write calls to avoid data loss. + case audio.InterruptHint.INTERRUPT_HINT_PAUSE: + isPlay = false; + break; + // Force Stop: Action was taken by framework. + // Halt the write calls to avoid data loss. + case audio.InterruptHint.INTERRUPT_HINT_STOP: + isPlay = false; + break; + // Force Duck: Action was taken by framework, + // just notifying the app that volume has been reduced. + case audio.InterruptHint.INTERRUPT_HINT_DUCK: + break; + // Force Unduck: Action was taken by framework, + // just notifying the app that volume has been restored. + case audio.InterruptHint.INTERRUPT_HINT_UNDUCK: + break; + } + } else if (interruptEvent.forceType == audio.InterruptForceType.INTERRUPT_SHARE) { + switch (interruptEvent.hintType) { + // Share Resume: Action is to be taken by App. + // Resume the force paused stream if required. + case audio.InterruptHint.INTERRUPT_HINT_RESUME: + startRenderer(); + break; + // Share Pause: Stream has been interrupted, + // It can choose to pause or play concurrently. + case audio.InterruptHint.INTERRUPT_HINT_PAUSE: + isPlay = false; + pauseRenderer(); + break; + } + } + }); ``` - audioRenderer.on('interrupt', (interruptEvent) => { - console.info('InterruptEvent Received'); - console.info('InterruptType: ' + interruptEvent.eventType); - console.info('InterruptForceType: ' + interruptEvent.forceType); - console.info('AInterruptHint: ' + interruptEvent.hintType); - if (interruptEvent.forceType == audio.InterruptForceType.INTERRUPT_FORCE) { - switch (interruptEvent.hintType) { - // Force Pause: Action was taken by framework. - // Halt the write calls to avoid data loss. - case audio.InterruptHint.INTERRUPT_HINT_PAUSE: - isPlay = false; - break; - // Force Stop: Action was taken by framework. - // Halt the write calls to avoid data loss. - case audio.InterruptHint.INTERRUPT_HINT_STOP: - isPlay = false; - break; - // Force Duck: Action was taken by framework, - // just notifying the app that volume has been reduced. - case audio.InterruptHint.INTERRUPT_HINT_DUCK: - break; - // Force Unduck: Action was taken by framework, - // just notifying the app that volume has been restored. - case audio.InterruptHint.INTERRUPT_HINT_UNDUCK: - break; - } - } else if (interruptEvent.forceType == audio.InterruptForceType.INTERRUPT_SHARE) { - switch (interruptEvent.hintType) { - // Share Resume: Action is to be taken by App. - // Resume the force paused stream if required. - case audio.InterruptHint.INTERRUPT_HINT_RESUME: - startRenderer(); - break; - // Share Pause: Stream has been interrupted, - // It can choose to pause or play concurrently. - case audio.InterruptHint.INTERRUPT_HINT_PAUSE: - isPlay = false; - pauseRenderer(); - break; - } - } - }); - ``` +3. Use **start()** to start audio rendering. + + The renderer state will be **STATE_RUNNING** once the audio renderer is started. The application can then begin reading buffers. -4. Call the **start()** function on the AudioRenderer instance to start/resume the playback task.\ - The renderer state will be STATE_RUNNING once the start is complete. You can then begin writing buffers. - ``` + ```js async function startRenderer() { var state = audioRenderer.state; - // state should be prepared, paused or stopped. + // The state should be prepared, paused, or stopped. if (state != audio.AudioState.STATE_PREPARED || state != audio.AudioState.STATE_PAUSED || state != audio.AudioState.STATE_STOPPED) { console.info('Renderer is not in a correct state to start'); return; } - + await audioRenderer.start(); - + state = audioRenderer.state; if (state == audio.AudioState.STATE_RUNNING) { console.info('Renderer started'); @@ -154,11 +126,13 @@ Here's an example of how to use AudioRenderer to play a raw audio file. console.error('Renderer start failed'); } } - - ``` -5. Make **write** calls to start rendering the buffers. - Read the audio data to be played into a buffer. Call the write function repeatedly to write data. ``` + +4. Call **write()** to write data to the buffer. + + Read the audio data to be played to the buffer. Call **write()** repeatedly to write the data to the buffer. + + ```js async function writeBuffer(buf) { var state = audioRenderer.state; if (state != audio.AudioState.STATE_RUNNING) { @@ -167,13 +141,13 @@ Here's an example of how to use AudioRenderer to play a raw audio file. return; } let writtenbytes = await audioRenderer.write(buf); - + console.info('Actual written bytes: ' + writtenbytes); if (writtenbytes < 0) { console.error('Write buffer failed. check the state of renderer'); } } - + // Reasonable minimum buffer size for renderer. However, the renderer can accept other read sizes as well. const bufferSize = await audioRenderer.getBufferSize(); const path = '/data/file_example_WAV_2MG.wav'; @@ -183,7 +157,7 @@ Here's an example of how to use AudioRenderer to play a raw audio file. let discardHeader = new ArrayBuffer(44); ss.readSync(discardHeader); rlen += 44; - + var id = setInterval(() => { if (isPlay || isRelease) { if (rlen >= totalSize || isRelease) { @@ -201,74 +175,65 @@ Here's an example of how to use AudioRenderer to play a raw audio file. } , 30); // interval to be set based on audio file format ``` -6. (Optional) Call the **pause()** or **stop()** function on the AudioRenderer instance. -``` - async function pauseRenderer() { - var state = audioRenderer.state; - if (state != audio.AudioState.STATE_RUNNING) { - console.info('Renderer is not running'); - return; - } - - await audioRenderer.pause(); - - state = audioRenderer.state; - if (state == audio.AudioState.STATE_PAUSED) { - console.info('Renderer paused'); - } else { - console.error('Renderer pause failed'); - } - } - - async function stopRenderer() { - var state = audioRenderer.state; - if (state != audio.AudioState.STATE_RUNNING || state != audio.AudioState.STATE_PAUSED) { - console.info('Renderer is not running or paused'); - return; - } - - await audioRenderer.stop(); - - state = audioRenderer.state; - if (state == audio.AudioState.STATE_STOPPED) { - console.info('Renderer stopped'); - } else { - console.error('Renderer stop failed'); - } -} -``` - -7. After the playback task is complete, call the **release()** function on the AudioRenderer instance to release resources.\ - AudioRenderer can use a lot of system resources. As a result, whenever the resources are no longer required, they must be released. To ensure that any system resources allocated to it are appropriately released, you should always call **release()**. -``` - async function releaseRenderer() { - if (state_ == RELEASED || state_ == NEW) { - console.info('Resourced already released'); - return; - } - - await audioRenderer.release(); - - state = audioRenderer.state; - if (state == STATE_RELEASED) { - console.info('Renderer released'); - } else { - console.info('Renderer release failed'); - } - - } -``` - -## **Importance of State Check:** -You should also keep in mind that an AudioRenderer is state-based. -That is, the AudioRenderer has an internal state that you must always check when calling playback control APIs, because some operations are only acceptable while the renderer is in a given state.\ -The system may throw an error/exception or generate other undefined behaviour if you perform an operation while in the improper state.\ +5. (Optional) Call **pause()** or **stop()** to pause or stop rendering. + + ```js + async function pauseRenderer() { + var state = audioRenderer.state; + if (state != audio.AudioState.STATE_RUNNING) { + console.info('Renderer is not running'); + return; + } + + await audioRenderer.pause(); + + state = audioRenderer.state; + if (state == audio.AudioState.STATE_PAUSED) { + console.info('Renderer paused'); + } else { + console.error('Renderer pause failed'); + } + } + + async function stopRenderer() { + var state = audioRenderer.state; + if (state != audio.AudioState.STATE_RUNNING || state != audio.AudioState.STATE_PAUSED) { + console.info('Renderer is not running or paused'); + return; + } + + await audioRenderer.stop(); + + state = audioRenderer.state; + if (state == audio.AudioState.STATE_STOPPED) { + console.info('Renderer stopped'); + } else { + console.error('Renderer stop failed'); + } + } + ``` -## **Asynchronous Operations:** -Most of the AudioRenderer calls are asynchronous. As a result, the UI thread will not be blocked.\ -For each API, the framework provides both callback and promises functions.\ -In the example, promise functions are used for simplicity. [AudioRender in the Audio API](../reference/apis/js-apis-audio.md#audiorenderer8) -provides reference for both callback and promise. +6. After the task is complete, call **release()** to release related resources. + + **AudioRenderer** uses a large number of system resources. Therefore, ensure that the resources are released after the task is complete. + + ```js + async function releaseRenderer() { + if (state_ == RELEASED || state_ == NEW) { + console.info('Resourced already released'); + return; + } + + await audioRenderer.release(); + + state = audioRenderer.state; + if (state == STATE_RELEASED) { + console.info('Renderer released'); + } else { + console.info('Renderer release failed'); + } + + } + ``` -## **Other APIs:** -See [Audio](../reference/apis/js-apis-audio.md) for more useful APIs like getAudioTime, drain, and getBufferSize. + diff --git a/en/application-dev/media/figures/audio-capturer-state.png b/en/application-dev/media/figures/audio-capturer-state.png new file mode 100644 index 0000000000000000000000000000000000000000..52b5556260dbf78c5e816b37013248a07e8dbbc6 GIT binary patch literal 29079 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