// Native JSB

declare class TMGAudioCtrlBindings {
  constructor(contextBindings: TMGContextBindings);
  enableMic(enable: boolean): number;
  getMicState(): number;
  enableSpeaker(enable: boolean): number;
  getSpeakerState(): number;
  enableAudioCaptureDevice(enable: boolean): number;
  isAudioCaptureDeviceEnabled(): boolean;
  enableAudioPlayDevice(enable: boolean): number;
  isAudioPlayDeviceEnabled(): boolean;
  enableAudioSend(enable: boolean): number;
  isAudioSendEnabled(): boolean;
  enableAudioRecv(enable: boolean): number;
  isAudioRecvEnabled(): boolean;
  setMicVolume(volume: number): number;
  getMicVolume(): number;
  setSpeakerVolume(volume: number): number;
  getSpeakerVolume(): number;
  setSpeakerVolumeByUserID(userID: string, volume: number): number;
  getSpeakerVolumeByUserID(userID: string): number;
  enableLoopBack(enable: boolean): number;
  addAudioBlackList(userID: string): number;
  removeAudioBlackList(userID: string): number;
  isUserIDInAudioBlackList(userID: string): boolean;
  initSpatializer(modelPath: string): number;
  enableSpatializer(enable: boolean): number;
  isEnableSpatializer(): boolean;
  getMicListCount(): number;
  getMicList(nCount: number): Object[];
  selectMic(micId: string): number;
  getCurrentMic(): Object;
  getSpeakerListCount(): number;
  getSpeakerList(nCount: number): Object[];
  selectSpeaker(speakerID: string): number;
  getCurrentSpeaker(): Object;
  setAudioRoute(route: number): number;
  trackingVolume(interval: number): number;
  stopTrackingVolume(): number;
  getMicLevel(): number;
  getSpeakerLevel(): number;
  getSendStreamLevel(): number;
  getRecvStreamLevel(userID: string): number;
  startMicDeviceTest(interval: number): number;
  stopMicDeviceTest(): number;
  startSpeakerDeviceTest(filePath: string): number;
  stopSpeakerDeviceTest(): number;
}
