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

在鸿蒙Next开发中,如何通过代码获取音频文件的总时长?需要调用哪个API或方法?能否提供一个具体的示例代码?

2 回复

在鸿蒙Next里,获取音频时长就像问一首歌:“你多长?”用AVMetadataHelpergetDuration()方法,它就会乖乖告诉你时长(单位:毫秒)。记得先加载音频文件哦!

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


在鸿蒙Next开发中,获取音频时长可以通过AVPlayerAVMetadataExtractor实现。以下是两种方法的示例:

方法一:使用AVPlayer获取音频时长

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

// 创建AVPlayer实例
let avPlayer: media.AVPlayer = await media.createAVPlayer();

// 设置音频源(例如本地文件路径)
avPlayer.url = 'file:///data/storage/el2/base/haps/entry/files/audio.mp3';

// 监听准备完成事件
avPlayer.on('stateChange', async (state: string) => {
  if (state === 'prepared') {
    // 获取音频时长(单位:毫秒)
    let duration = avPlayer.duration;
    console.log(`音频时长:${duration} ms`);
    
    // 使用后释放资源
    avPlayer.release();
  }
});

// 开始准备
avPlayer.prepare();

方法二:使用AVMetadataExtractor获取元数据

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

let metadataExtractor: media.AVMetadataExtractor = await media.createAVMetadataExtractor();
metadataExtractor.url = 'file:///path/to/audio.mp3';

// 获取元数据
let metadata: media.AVMetadata = await metadataExtractor.fetchMetadata();
let duration = metadata.duration; // 单位:毫秒
console.log(`音频时长:${duration} ms`);

// 释放资源
metadataExtractor.release();

注意事项:

  1. 需要申请ohos.permission.READ_MEDIA权限
  2. 文件路径需使用正确的URI格式
  3. 使用完成后务必调用release()释放资源
  4. 时长单位为毫秒,可自行转换为秒或其他单位

推荐使用AVMetadataExtractor,因为它更轻量且专门用于获取元数据。

回到顶部