• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Interface (AudioLoopback)
2<!--Kit: Audio Kit-->
3<!--Subsystem: Multimedia-->
4<!--Owner: @songshenke-->
5<!--Designer: @caixuejiang; @hao-liangfei; @zhanganxiang-->
6<!--Tester: @Filger-->
7<!--Adviser: @zengyawen-->
8
9> **说明:**
10>
11> - 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
12> - 本Interface首批接口从API version 20开始支持。
13
14提供音频返听的相关接口。
15
16在使用AudioLoopback的接口之前,需先通过[audio.createAudioLoopback](arkts-apis-audio-f.md#audiocreateaudioloopback20)获取AudioLoopback实例。
17
18当启用音频返听时,系统会创建低时延渲染器与低时延采集器,实现低时延耳返功能。采集的音频直接通过内部路由返回到渲染器。对于渲染器,其音频焦点策略与[STREAM_USAGE_MUSIC](arkts-apis-audio-e.md#streamusage)相匹配。对于采集器,其音频焦点策略与[SOURCE_TYPE_MIC](arkts-apis-audio-e.md#sourcetype8)相匹配。
19
20输入\输出设备由系统自动选择。如果当前输入\输出不支持低时延,则音频返听无法启用。在运行过程中,如果音频焦点被另一个音频流抢占,输入\输出设备切换到不支持低时延的设备,系统会自动禁用音频返听。
21
22## 导入模块
23
24```ts
25import { audio } from '@kit.AudioKit';
26```
27
28## getStatus<sup>20+</sup>
29
30getStatus(): Promise<AudioLoopbackStatus\>
31
32获取音频返听状态。使用Promise异步回调。
33
34**系统能力:** SystemCapability.Multimedia.Audio.Capturer
35
36**返回值:**
37
38| 类型                                              | 说明                                |
39| :------------------------------------------------ | :---------------------------------- |
40| Promise<[AudioLoopbackStatus](arkts-apis-audio-e.md#audioloopbackstatus20)\> | Promise对象,返回音频返听状态。 |
41
42**示例:**
43
44```ts
45import { BusinessError } from '@kit.BasicServicesKit';
46
47audioLoopback.getStatus().then((status: audio.AudioLoopbackStatus) => {
48  console.info(`AudioLoopback: Status: ${status}`);
49}).catch((err: BusinessError) => {
50  console.error(`AudioLoopback: Status :ERROR: ${err}`);
51})
52```
53
54## setVolume<sup>20+</sup>
55
56setVolume(volume: number): Promise&lt;void&gt;
57
58设置音频返听的音量。使用Promise异步回调。
59
60**系统能力:** SystemCapability.Multimedia.Audio.Capturer
61
62**参数:**
63
64| 参数名     | 类型    | 必填   | 说明                 |
65| ---------- | ------- | ------ | ------------------- |
66| volume     | number  | 是     | 音量值范围为[0.0, 1.0]。 |
67
68**返回值:**
69
70| 类型                | 说明                          |
71| ------------------- | ----------------------------- |
72| Promise&lt;void&gt; | Promise对象,无返回结果。 |
73
74**错误码:**
75
76以下错误码的详细介绍请参见[Audio错误码](errorcode-audio.md)。
77
78| 错误码ID | 错误信息 |
79| ------- | --------------------------------------------|
80| 6800101 | Parameter verification failed, form 0.0 to 1.0. |
81
82**示例:**
83
84```ts
85import { BusinessError } from '@kit.BasicServicesKit';
86
87audioLoopback.setVolume(0.5).then(() => {
88  console.info('setVolume Success!');
89}).catch((err: BusinessError) => {
90  console.error(`setVolume Fail: ${err}`);
91});
92```
93
94## on('statusChange')<sup>20+</sup>
95
96on(type: 'statusChange', callback: Callback<AudioLoopbackStatus\>): void
97
98监听返听状态变化事件(当AudioLoopback的状态发生变化时触发)。使用callback异步回调。
99
100**系统能力:** SystemCapability.Multimedia.Audio.Capturer
101
102**参数:**
103
104| 参数名   | 类型                       | 必填 | 说明                                        |
105| :------- | :------------------------- | :--- | :------------------------------------------ |
106| type     | string                     | 是   | 事件回调类型,支持的事件为'statusChange',当AudioLoopback的状态发生变化时,触发该事件。 |
107| callback | Callback\<[AudioLoopbackStatus](arkts-apis-audio-e.md#audioloopbackstatus20)> | 是   | 回调函数,返回当前音频返听的状态。 |
108
109**错误码:**
110
111以下错误码的详细介绍请参见[Audio错误码](errorcode-audio.md)。
112
113| 错误码ID | 错误信息 |
114| ------- | --------------------------------------------|
115| 6800101 | Parameter verification failed. |
116
117**示例:**
118
119```ts
120audioLoopback.on('statusChange', (status: audio.AudioLoopbackStatus) => {
121  if (status == audio.AudioLoopbackStatus.UNAVAILABLE_DEVICE) {
122    console.info('audio loopback status is: UNAVAILABLE_DEVICE');
123  } else if (status == audio.AudioLoopbackStatus.UNAVAILABLE_SCENE) {
124    console.info('audio loopback status is: UNAVAILABLE_SCENE');
125  } else if (status == audio.AudioLoopbackStatus.AVAILABLE_IDLE) {
126    console.info('audio loopback status is: AVAILABLE_IDLE');
127  } else if (status == audio.AudioLoopbackStatus.AVAILABLE_RUNNING) {
128    console.info('audio loopback status is: AVAILABLE_RUNNING');
129  }
130});
131```
132
133## off('statusChange')<sup>20+</sup>
134
135off(type: 'statusChange', callback?: Callback&lt;AudioLoopbackStatus&gt;): void
136
137取消监听音频状态事件。使用callback异步回调。
138
139**系统能力:** SystemCapability.Multimedia.Audio.Capturer
140
141**参数:**
142
143| 参数名 | 类型   | 必填 | 说明                                                |
144| :----- | :----- | :--- | :-------------------------------------------------- |
145| type   | string | 是   | 事件回调类型,支持的事件为'statusChange',当取消监听音频状态事件时,触发该事件。 |
146| callback | Callback\<[AudioLoopbackStatus](arkts-apis-audio-e.md#audioloopbackstatus20)> | 否 | 回调函数,返回当前音频返听的状态。 |
147
148**错误码:**
149
150以下错误码的详细介绍请参见[Audio错误码](errorcode-audio.md)。
151
152| 错误码ID | 错误信息 |
153| ------- | --------------------------------------------|
154| 6800101 | Parameter verification failed. |
155
156**示例:**
157
158```ts
159// 取消该事件的所有监听。
160audioLoopback.off('statusChange');
161
162// 同一监听事件中,on方法和off方法传入callback参数一致,off方法取消对应on方法订阅的监听。
163let statusChangeCallback = (status: audio.AudioLoopbackStatus) => {
164  if (status == audio.AudioLoopbackStatus.UNAVAILABLE_DEVICE) {
165    console.info('audio loopback status is: UNAVAILABLE_DEVICE');
166  } else if (status == audio.AudioLoopbackStatus.UNAVAILABLE_SCENE) {
167    console.info('audio loopback status is: UNAVAILABLE_SCENE');
168  } else if (status == audio.AudioLoopbackStatus.AVAILABLE_IDLE) {
169    console.info('audio loopback status is: AVAILABLE_IDLE');
170  } else if (status == audio.AudioLoopbackStatus.AVAILABLE_RUNNING) {
171    console.info('audio loopback status is: AVAILABLE_RUNNING');
172  }
173};
174
175audioLoopback.on('statusChange', statusChangeCallback);
176
177audioLoopback.off('statusChange', statusChangeCallback);
178```
179
180## enable<sup>20+</sup>
181
182enable(enable: boolean): Promise<boolean\>
183
184启用或禁用音频返听器。使用Promise异步回调。
185
186**系统能力:** SystemCapability.Multimedia.Audio.Capturer
187
188**需要权限:** ohos.permission.MICROPHONE
189
190**参数:**
191
192| 参数名 | 类型   | 必填 | 说明                                                |
193| :----- | :----- | :--- | :-------------------------------------------------- |
194| enable   | boolean | 是   | 表示是否启用音频返听器。true表示启用,false表示不启用。 |
195
196**返回值:**
197
198| 类型           | 说明                      |
199| -------------- | ------------------------- |
200| Promise\<boolean> | Promise对象。返回true表示功能执行成功;返回false表示功能执行失败。 |
201
202**错误码:**
203
204以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)和[Audio错误码](errorcode-audio.md)。
205
206| 错误码ID | 错误信息 |
207| ------- | -------------------------------|
208|     201 | Permission denied.             |
209| 6800101 | Parameter verification failed. |
210
211**示例:**
212
213```ts
214import { BusinessError } from '@kit.BasicServicesKit';
215
216audioLoopback.enable(true).then((isSuccess) => {
217  if (isSuccess) {
218    console.info('audio loopback enable success');
219  } else {
220    console.info('audio loopback enable fail');
221  }
222}).catch((err: BusinessError) => {
223  console.error(`ERROR: ${err}`);
224});
225```