# Interface (AudioLoopback)
> **说明:**
>
> - 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
> - 本Interface首批接口从API version 20开始支持。
提供音频返听的相关接口。
在使用AudioLoopback的接口之前,需先通过[audio.createAudioLoopback](arkts-apis-audio-f.md#audiocreateaudioloopback20)获取AudioLoopback实例。
当启用音频返听时,系统会创建低时延渲染器与低时延采集器,实现低时延耳返功能。采集的音频直接通过内部路由返回到渲染器。对于渲染器,其音频焦点策略与[STREAM_USAGE_MUSIC](arkts-apis-audio-e.md#streamusage)相匹配。对于采集器,其音频焦点策略与[SOURCE_TYPE_MIC](arkts-apis-audio-e.md#sourcetype8)相匹配。
输入\输出设备由系统自动选择。如果当前输入\输出不支持低时延,则音频返听无法启用。在运行过程中,如果音频焦点被另一个音频流抢占,输入\输出设备切换到不支持低时延的设备,系统会自动禁用音频返听。
## 导入模块
```ts
import { audio } from '@kit.AudioKit';
```
## getStatus20+
getStatus(): Promise
获取音频返听状态。使用Promise异步回调。
**系统能力:** SystemCapability.Multimedia.Audio.Capturer
**返回值:**
| 类型 | 说明 |
| :------------------------------------------------ | :---------------------------------- |
| Promise<[AudioLoopbackStatus](arkts-apis-audio-e.md#audioloopbackstatus20)\> | Promise对象,返回音频返听状态。 |
**示例:**
```ts
import { BusinessError } from '@kit.BasicServicesKit';
audioLoopback.getStatus().then((status: audio.AudioLoopbackStatus) => {
console.info(`AudioLoopback: Status: ${status}`);
}).catch((err: BusinessError) => {
console.error(`AudioLoopback: Status :ERROR: ${err}`);
})
```
## setVolume20+
setVolume(volume: number): Promise<void>
设置音频返听的音量。使用Promise异步回调。
**系统能力:** SystemCapability.Multimedia.Audio.Capturer
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ---------- | ------- | ------ | ------------------- |
| volume | number | 是 | 音量值范围为[0.0, 1.0]。 |
**返回值:**
| 类型 | 说明 |
| ------------------- | ----------------------------- |
| Promise<void> | Promise对象,无返回结果。 |
**错误码:**
以下错误码的详细介绍请参见[Audio错误码](errorcode-audio.md)。
| 错误码ID | 错误信息 |
| ------- | --------------------------------------------|
| 6800101 | Parameter verification failed, form 0.0 to 1.0. |
**示例:**
```ts
import { BusinessError } from '@kit.BasicServicesKit';
audioLoopback.setVolume(0.5).then(() => {
console.info('setVolume Success!');
}).catch((err: BusinessError) => {
console.error(`setVolume Fail: ${err}`);
});
```
## on('statusChange')20+
on(type: 'statusChange', callback: Callback): void
监听返听状态变化事件(当AudioLoopback的状态发生变化时触发)。使用callback异步回调。
**系统能力:** SystemCapability.Multimedia.Audio.Capturer
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| :------- | :------------------------- | :--- | :------------------------------------------ |
| type | string | 是 | 事件回调类型,支持的事件为'statusChange',当AudioLoopback的状态发生变化时,触发该事件。 |
| callback | Callback\<[AudioLoopbackStatus](arkts-apis-audio-e.md#audioloopbackstatus20)> | 是 | 回调函数,返回当前音频返听的状态。 |
**错误码:**
以下错误码的详细介绍请参见[Audio错误码](errorcode-audio.md)。
| 错误码ID | 错误信息 |
| ------- | --------------------------------------------|
| 6800101 | Parameter verification failed. |
**示例:**
```ts
audioLoopback.on('statusChange', (status: audio.AudioLoopbackStatus) => {
if (status == audio.AudioLoopbackStatus.UNAVAILABLE_DEVICE) {
console.info('audio loopback status is: UNAVAILABLE_DEVICE');
} else if (status == audio.AudioLoopbackStatus.UNAVAILABLE_SCENE) {
console.info('audio loopback status is: UNAVAILABLE_SCENE');
} else if (status == audio.AudioLoopbackStatus.AVAILABLE_IDLE) {
console.info('audio loopback status is: AVAILABLE_IDLE');
} else if (status == audio.AudioLoopbackStatus.AVAILABLE_RUNNING) {
console.info('audio loopback status is: AVAILABLE_RUNNING');
}
});
```
## off('statusChange')20+
off(type: 'statusChange', callback?: Callback<AudioLoopbackStatus>): void
取消监听音频状态事件。使用callback异步回调。
**系统能力:** SystemCapability.Multimedia.Audio.Capturer
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| :----- | :----- | :--- | :-------------------------------------------------- |
| type | string | 是 | 事件回调类型,支持的事件为'statusChange',当取消监听音频状态事件时,触发该事件。 |
| callback | Callback\<[AudioLoopbackStatus](arkts-apis-audio-e.md#audioloopbackstatus20)> | 否 | 回调函数,返回当前音频返听的状态。 |
**错误码:**
以下错误码的详细介绍请参见[Audio错误码](errorcode-audio.md)。
| 错误码ID | 错误信息 |
| ------- | --------------------------------------------|
| 6800101 | Parameter verification failed. |
**示例:**
```ts
// 取消该事件的所有监听。
audioLoopback.off('statusChange');
// 同一监听事件中,on方法和off方法传入callback参数一致,off方法取消对应on方法订阅的监听。
let statusChangeCallback = (status: audio.AudioLoopbackStatus) => {
if (status == audio.AudioLoopbackStatus.UNAVAILABLE_DEVICE) {
console.info('audio loopback status is: UNAVAILABLE_DEVICE');
} else if (status == audio.AudioLoopbackStatus.UNAVAILABLE_SCENE) {
console.info('audio loopback status is: UNAVAILABLE_SCENE');
} else if (status == audio.AudioLoopbackStatus.AVAILABLE_IDLE) {
console.info('audio loopback status is: AVAILABLE_IDLE');
} else if (status == audio.AudioLoopbackStatus.AVAILABLE_RUNNING) {
console.info('audio loopback status is: AVAILABLE_RUNNING');
}
};
audioLoopback.on('statusChange', statusChangeCallback);
audioLoopback.off('statusChange', statusChangeCallback);
```
## enable20+
enable(enable: boolean): Promise
启用或禁用音频返听器。使用Promise异步回调。
**系统能力:** SystemCapability.Multimedia.Audio.Capturer
**需要权限:** ohos.permission.MICROPHONE
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| :----- | :----- | :--- | :-------------------------------------------------- |
| enable | boolean | 是 | 表示是否启用音频返听器。true表示启用,false表示不启用。 |
**返回值:**
| 类型 | 说明 |
| -------------- | ------------------------- |
| Promise\ | Promise对象。返回true表示功能执行成功;返回false表示功能执行失败。 |
**错误码:**
以下错误码的详细介绍请参见[通用错误码说明文档](../errorcode-universal.md)和[Audio错误码](errorcode-audio.md)。
| 错误码ID | 错误信息 |
| ------- | -------------------------------|
| 201 | Permission denied. |
| 6800101 | Parameter verification failed. |
**示例:**
```ts
import { BusinessError } from '@kit.BasicServicesKit';
audioLoopback.enable(true).then((isSuccess) => {
if (isSuccess) {
console.info('audio loopback enable success');
} else {
console.info('audio loopback enable fail');
}
}).catch((err: BusinessError) => {
console.error(`ERROR: ${err}`);
});
```