鸿蒙Next开发中音频录制后如何获取录制时长
在鸿蒙Next开发中,使用音频录制功能后,如何准确获取录音的时长?是否有特定的API或方法可以实现这个功能?求具体示例代码或实现思路。
        
          2 回复
        
      
      
        在鸿蒙Next中,用AudioRecorder的getDuration()方法就能轻松获取音频时长。记得先start()录制,再调用它,不然会返回0哦!代码示例:
long duration = audioRecorder.getDuration(); // 单位:毫秒
简单吧?快去试试!
更多关于鸿蒙Next开发中音频录制后如何获取录制时长的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在鸿蒙Next(HarmonyOS NEXT)中,获取音频录制时长可以通过以下步骤实现:
- 使用 
AudioRecorder进行录制:首先配置并启动音频录制。 - 通过回调或查询方式获取时长:录制过程中可通过时间戳计算时长。
 
示例代码(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')。 
通过以上方法即可准确获取音频录制的时长。
        
      
                  
                  
                  
