我看看有没有懂的!!!! HarmonyOS鸿蒙Next中AudioRender如何准确获取播放时间
我看看有没有懂的!!! HarmonyOS鸿蒙Next中AudioRender如何准确获取播放时间
AudioRender如何准确获取播放时间
逻辑是从本地读取test.wav文件之后,直接开始写入播放,每30ms左右获取一次当前播报进度。
问题出在,前面两次调用的时候,获取的时间是准确的,后面就乱了,求解。
简单代码:
init() {
// 1. 配置参数
const config = this.getAudioConfig();
// 2. 创建实例
audio.createAudioRenderer(config, (err, renderer) => {
if (err) {
return console.error('初始化失败:', err);
}
this.renderer = renderer;
this.renderer?.on('writeData', this.handleAudioData.bind(this));
try {
this.file = fs.openSync(this.filePath, fs.OpenMode.READ_ONLY);
} catch (e) {
console.error(e)
}
});
}
private handleAudioData(buffer: ArrayBuffer): audio.AudioDataCallbackResult {
// 读取文件数据到buffer
const view = new DataView(buffer);
const bytesRead = fs.readSync(this.file!.fd, buffer);
if (bytesRead === 0) {
// 末尾处理:填充静音
view.setUint8(0, 0); // 单字节静音
return audio.AudioDataCallbackResult.VALID;
}
return audio.AudioDataCallbackResult.VALID;
}
play(){
this.renderer?.start((err) => {
err ? console.error('启动失败:', err) : console.log('播放开始');
});
}
先调用init方法,后调用play,音频播报正常。
获取播放时间的打印如下:
this.renderer?.getAudioTime().then((timestamp: number) => {
console.info(`Current timestamp11111: ${timestamp}`);
}).catch((err: BusinessError) => {
console.error(`ERROR: ${err}`);
});
日志:可以发现奇怪的时间
03-24 11:54:19.134 11840-11840 demo I Current timestamp11111: 1743597783066432800
03-24 11:54:19.169 11840-11840 demo I Current timestamp11111: 1743597783101127700
03-24 11:54:19.205 11840-11840 demo I Current timestamp11111: 809324038580672
03-24 11:54:19.239 11840-11840 demo I Current timestamp11111: 809324078469672
03-24 11:54:19.279 11840-11840 demo I Current timestamp11111: 809324118751672
03-24 11:54:19.304 11840-11840 demo I Current timestamp11111: 809324138251672
03-24 11:54:19.339 11840-11840 demo I Current timestamp11111: 809324178539672
在HarmonyOS鸿蒙Next中,AudioRender
组件用于音频渲染。要准确获取播放时间,可以使用AudioRender
提供的getCurrentTime
方法。该方法返回当前音频播放的时间戳,单位为毫秒。通过调用getCurrentTime
,可以实时获取音频的播放进度。
具体步骤如下:
- 创建
AudioRender
实例并配置音频源。 - 调用
start
方法开始播放音频。 - 在需要获取播放时间时,调用
getCurrentTime
方法。
示例代码片段如下:
let audioRender = new AudioRender();
audioRender.setSource('path/to/audio/file');
audioRender.start();
let currentTime = audioRender.getCurrentTime();
console.log('Current playback time:', currentTime);
getCurrentTime
方法会返回从音频开始播放到当前时刻的累计时间,可以用于同步显示播放进度条或实现其他与时间相关的功能。
更多关于我看看有没有懂的!!!! HarmonyOS鸿蒙Next中AudioRender如何准确获取播放时间的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,准确获取AudioRender的播放时间可以通过调用getCurrentTime
方法实现。该方法返回当前音频播放的时间戳,单位为毫秒。确保在播放过程中调用此方法,以获取实时进度。示例代码如下:
AudioRenderer renderer = new AudioRenderer();
long currentTime = renderer.getCurrentTime();
此外,建议结合OnPlaybackPositionUpdateListener
监听器,实时更新播放时间,确保精确性。