鸿蒙Next开发中音频录制后如何获取录制时长

在鸿蒙Next开发中,使用音频录制功能后,如何准确获取录音的时长?是否有特定的API或方法可以实现这个功能?求具体示例代码或实现思路。

2 回复

在鸿蒙Next中,用AudioRecordergetDuration()方法就能轻松获取音频时长。记得先start()录制,再调用它,不然会返回0哦!代码示例:

long duration = audioRecorder.getDuration(); // 单位:毫秒

简单吧?快去试试!

更多关于鸿蒙Next开发中音频录制后如何获取录制时长的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next(HarmonyOS NEXT)中,获取音频录制时长可以通过以下步骤实现:

  1. 使用 AudioRecorder 进行录制:首先配置并启动音频录制。
  2. 通过回调或查询方式获取时长:录制过程中可通过时间戳计算时长。

示例代码(ArkTS):

import audio from '@ohos.multimedia.audio';
import { BusinessError } from '@ohos.base';

// 创建 AudioRecorder 实例
let audioRecorder: audio.AudioRecorder | null = null;
let startTime: number = 0; // 记录开始时间

// 配置录制参数
let audioConfig: audio.AudioRecorderOptions = {
  source: audio.SourceType.SOURCE_TYPE_MIC,
  profile: {
    audioSampleRate: audio.AudioSampleRate.SAMPLE_RATE_44100,
    audioChannels: audio.AudioChannels.CHANNEL_2,
    audioCodec: audio.AudioCodec.CODEC_TYPE_AAC,
    audioBitrate: 32000,
    audioFormat: audio.AudioFormat.FORMAT_AAC_ADTS
  },
  uri: '文件保存路径' // 替换为实际路径
};

// 初始化并开始录制
async function startRecording() {
  try {
    audioRecorder = await audio.createAudioRecorder();
    await audioRecorder.prepare(audioConfig);
    startTime = Date.now(); // 记录开始时间戳
    await audioRecorder.start();
    console.log('录制开始');
  } catch (err) {
    console.error(`录制启动失败: ${(err as BusinessError).message}`);
  }
}

// 停止录制并计算时长
async function stopRecording(): Promise<number> {
  if (!audioRecorder) {
    console.error('录制器未初始化');
    return 0;
  }
  
  try {
    await audioRecorder.stop();
    await audioRecorder.release();
    audioRecorder = null;

    const endTime = Date.now();
    const duration = (endTime - startTime) / 1000; // 转换为秒
    console.log(`录制时长: ${duration.toFixed(2)} 秒`);
    return duration;
  } catch (err) {
    console.error(`录制停止失败: ${(err as BusinessError).message}`);
    return 0;
  }
}

// 调用示例
startRecording();
// 在需要停止时调用 stopRecording()

关键点说明:

  • 开始时间记录:在调用 start() 时通过 Date.now() 记录时间戳。
  • 结束时间计算:在 stop() 后获取当前时间戳,与开始时间求差得到毫秒数,转换为秒。
  • 释放资源:录制完成后调用 release() 避免资源泄漏。

注意事项:

  • 确保应用已申请 ohos.permission.MICROPHONE 权限。
  • 实际文件路径需使用沙箱路径(如 getContext().filesDir + '/record.aac')。

通过以上方法即可准确获取音频录制的时长。

回到顶部