3 回复
async testFetchMetadataFromFdSrcByPromise(fileUri: string) {
// fileUri 音频文件地址
let avMetadataExtractor: media.AVMetadataExtractor = await media.createAVMetadataExtractor()
let resFile = fs.openSync(fileUri, fs.OpenMode.READ_ONLY)
let fileLength = fs.statSync(resFile.fd).size
avMetadataExtractor.fdSrc = { fd: resFile.fd, offset: 0, length: fileLength }
try {
// 获取元数据(promise模式)
let metadata = await avMetadataExtractor.fetchMetadata()
console.log("元数据", JSON.stringify(metadata))
let duration = Math.floor(Number(metadata.duration) / 1000)
console.log("音频总时长", duration)
} catch (error) {
console.error('get meta datafailed with err: ' + JSON.stringify(error));
}
// 释放资源(promise模式)
avMetadataExtractor.release()
console.info('TAG', `release success.`)
}
更多关于HarmonyOS 鸿蒙Next获取音文件的时长的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
可以通过使用avPlayer 的getDurationTime() 获取音频的总时长.
大致步骤,
-
用音频文件创建avplayer的实例(avplayer 用于播放音频)
-
avplayer 创建好好可以通过实例的getDurationTime() 获取音频的总时长
详细参考(不同的音频文件源, 创建avplayer实例的例子):
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/using-avplayer-for-playback-V5#示例代码