鸿蒙Next ArkTS5.0中如何实现音频功能

在鸿蒙Next的ArkTS5.0中,如何实现音频的播放、暂停、停止等基本功能?能否提供具体的代码示例或相关API文档?另外,是否支持后台播放和音频焦点管理?

2 回复

在鸿蒙Next ArkTS 5.0中,用@ohos.multimedia.audio模块轻松搞定音频!调用createAudioPlayer()创建播放器,play()开始嗨,pause()暂停摸鱼。记得申请权限,不然系统会像没给糖的万圣节小鬼一样闹脾气!

更多关于鸿蒙Next ArkTS5.0中如何实现音频功能的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next ArkTS 5.0中,音频功能主要通过@ohos.multimedia.audio系统能力实现。以下是关键步骤和代码示例:

1. 申请权限

module.json5中添加权限:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.MICROPHONE"
      }
    ]
  }
}

2. 音频播放

import audio from '@ohos.multimedia.audio';

// 创建音频播放器
let audioPlayer: audio.AudioPlayer;
async function initAudioPlayer() {
  let audioStreamInfo = {
    samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100,
    channels: audio.AudioChannel.CHANNEL_2,
    sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE,
    encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW
  };

  let audioPlayerOptions = {
    streamInfo: audioStreamInfo,
    playerInfo: {
      playerFlags: 0 // 默认标志
    }
  };

  audioPlayer = await audio.createAudioPlayer(audioPlayerOptions);
  
  // 设置播放源(支持文件路径、资源ID、URL)
  await audioPlayer.src = 'file:///data/storage/el2/base/haps/entry/files/music.mp3';
  
  // 播放音频
  await audioPlayer.play();
}

// 暂停播放
async function pauseAudio() {
  await audioPlayer.pause();
}

// 停止播放
async function stopAudio() {
  await audioPlayer.stop();
}

3. 音频录制

let audioRecorder: audio.AudioRecorder;
async function initAudioRecorder() {
  let audioStreamInfo = {
    samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100,
    channels: audio.AudioChannel.CHANNEL_2,
    sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE,
    encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW
  };

  let audioRecorderOptions = {
    streamInfo: audioStreamInfo,
    recorderInfo: {
      source: audio.AudioSourceType.AUDIO_SOURCE_TYPE_MIC,
      profile: audio.AudioRecorderProfile.RECORDER_PROFILE_QUALITY_MEDIUM
    }
  };

  audioRecorder = await audio.createAudioRecorder(audioRecorderOptions);
  
  // 开始录制
  await audioRecorder.start();
}

// 停止录制并保存文件
async function stopRecording() {
  await audioRecorder.stop();
  await audioRecorder.release();
}

4. 音频管理

// 获取音频管理器
let audioManager = audio.getAudioManager();

// 调整音量
audioManager.setVolume(audio.AudioVolumeType.MEDIA, 0.5); // 设置媒体音量为50%

// 监听音频中断事件
audioManager.on('audioInterrupt', (interruptAction) => {
  console.log('Audio interrupt: ' + JSON.stringify(interruptAction));
});

关键注意事项:

  1. 确保在AudioPlayer/AudioRecorder使用完成后调用release()释放资源
  2. 使用on('stateChange')监听状态变化
  3. 文件路径需使用沙箱路径或申请相应文件访问权限
  4. 录制音频需要动态申请麦克风权限

以上代码展示了音频播放、录制和管理的核心实现,实际使用时需要添加错误处理和状态管理逻辑。

回到顶部