HarmonyOS 鸿蒙Next中想做一款同声传译的软件

HarmonyOS 鸿蒙Next中想做一款同声传译的软件 我们在做一款同声传译的软件,安卓和IOS已经上线了
手机连接蓝牙音箱,需要控制音频录制和播放设备,进行以下两种方式翻译

  1. 手机麦克风录音 - 翻译 - 蓝牙扬声器播放
  2. 蓝牙麦克风录音 - 翻译 - 手机麦克风播放
    现在卡在这里,音频设备不知道怎么设置

录音解决不了

4 回复

您好,请问您是不知道录音的api是什么吗,录音可参考AudioCapturer

更多关于HarmonyOS 鸿蒙Next中想做一款同声传译的软件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


【背景知识】

AVRecorder:音视频录制管理类,用于音视频媒体录制。

AVPlayer:播放管理类,用于管理和播放媒体资源。

【参考方案】

可参考口语跟读训练示例,通过AVRecorderAVPlayer实现录制与播放音频效果。

  1. 初始化AVRecorderAVPlayer,并读取训练内容模拟数据。
aboutToAppear(): void {
  this.avRecorderManager = new AVRecorderManager();
  this.avPlayerManager = new AVPlayerManager();
  let resourceManager = this.getUIContext().getHostContext()?.resourceManager;
  if (resourceManager) {
    this.oralContent = RawfileUtil.readDataFromRawfile(resourceManager);
  }
}
  1. 录制音频时,通过getAudioCapturerMaxAmplitude接口获取当前麦克风最大振幅。
async startRecordingProcess(fileIndex: number, amplitudeCallback: Callback<number>) {
  // AVRecorder录音准备工作
  this.intervalId = setInterval(() => { // 定时获取当前麦克风最大振幅
    this.avRecorder?.getAudioCapturerMaxAmplitude().then((amplitude) => {
      amplitudeCallback(amplitude);
    });
  }, AMPLITUDE_INTERVAL);
}

// 开始录音
this.avRecorderManager?.startRecordingProcess(index, (amplitude) => { 
  this.getUIContext().animateTo({
    curve: Curve.EaseInOut,
    duration: AMPLITUDE_INTERVAL
  }, () => {
    this.amplitude = amplitude / AMPLITUDE_MAX * AMPLITUDE_MAX_HEIGHT;
  });
});
  1. 在波纹组件内根据振幅计算波纹高度,实现随麦克风音量变化而波动的效果。
private random: cryptoFramework.Random = cryptoFramework.createRandom(); // 生成随机数实例

getWaveHeight(amplitude: number): number {
  let randData = this.random.generateRandomSync(1);
  let height = Math.min(AMPLITUDE_MAX_HEIGHT,
    Math.max(AMPLITUDE_MIN_HEIGHT, amplitude * (1 + randData.data[0] / MAX_BYTE_VALUE + AMPLITUDE_HEIGHT_OFFSET)));
  return height;
}

在HarmonyOS Next中开发同声传译软件,需利用其分布式能力和AI子系统。使用ArkTS语言编写UI和业务逻辑,调用鸿蒙AI引擎的语音识别与机器翻译能力。通过分布式软总线实现设备间音频流同步传输,利用多设备协同管理确保低延迟。音频采集使用@ohos.multimedia.audio模块,语音识别依赖@ohos.ai.nlu,翻译服务可集成系统级AI能力。需申请ohos.permission.MICROPHONE权限,并遵循鸿蒙原子化服务规范进行应用封装。

在HarmonyOS Next中实现同声传译的音频设备控制,可以使用AudioManager和AudioRoutingManager进行音频路由管理。

对于第一种模式(手机麦克风→蓝牙扬声器):

  1. 初始化AudioManager获取音频服务
  2. 使用AudioRoutingManager.setCommunicationDevice()将输出设备设置为蓝牙扬声器
  3. 录音时使用AudioCapturer默认配置,系统会自动使用手机麦克风

对于第二种模式(蓝牙麦克风→手机扬声器):

  1. 通过AudioRoutingManager.getAvailableDevices()获取可用输入设备
  2. 选择蓝牙麦克风作为输入设备
  3. 设置输出设备为手机内置扬声器

关键代码示例:

// 获取音频路由管理器
AudioRoutingManager routingManager = audioManager.getAudioRoutingManager();

// 设置蓝牙设备为输出
AudioDeviceInfo bluetoothDevice = getBluetoothAudioDevice();
routingManager.setCommunicationDevice(bluetoothDevice);

// 录音配置
AudioCapturerConfig capturerConfig = new AudioCapturerConfig.Builder()
    .setAudioSource(AudioSource.MIC)
    .build();

需要注意在配置文件中声明音频录制权限,并处理设备连接状态监听。蓝牙设备连接状态变化需要通过AudioDeviceCallback进行监听,及时更新音频路由配置。

回到顶部