You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复通过file input加载音频后无法正常播放的问题

问题修复方案

你遇到的播放失败问题由两处核心代码错误导致,对应修复方式如下:

1. 修复Blob实例化传参错误

Blob构造函数要求第一个参数为包含二进制数据的数组,你当前直接传入Uint8Array类型的返回值,导致生成的Blob内容格式错误,音频无法被解析。
将对应代码修改为:

// 给binary外层包裹数组即可
const blob = new Blob([binary], {type: input.files[0].type });

2. 调整音频播放时机,增加异常捕获

给audio标签设置src后,需要等待音频资源加载完成才能触发播放,同时现代浏览器限制非用户交互触发的自动播放,需要对play返回的Promise做异常捕获:

const recordedAudioComponent = document.getElementById(`recordedAudio-instruct-${component}`);
// 监听音频可播放事件后再调用播放,once保证只触发一次
recordedAudioComponent.addEventListener('canplay', () => {
  recordedAudioComponent.play().catch(err => {
    console.error('播放失败,请点击页面后重试:', err);
  });
}, { once: true });

冗余逻辑优化建议

你当前转DataURI再转二进制的流程完全可以省略,input选中的文件本身就是File类实例,继承自Blob,可以直接生成对象URL,简化后代码如下:

fileInput.on('change', readFile);

function readFile(e) {
    const input = e.target;
    if(input.files && input.files[0]) {
        const audioFile = input.files[0];
        recordedAudioComponent.src = URL.createObjectURL(audioFile);             
        data.instructAudios[component] = audioFile;
    }
}

该方案省去了编解码的性能损耗,也避免了转码过程中可能出现的格式错误。


内容的提问来源于stack exchange,提问作者Sara Ree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:45:03