Windows 原生流式 MP3 播放器,边收边播。
由 sys.mediaFoundation.mp3Decoder 解码、sys.waveOut 输出;不依赖 BASS、浏览器、HTTP 或第三方 DLL。
一个实例接收一条固定格式的连续 MP3,输入块可以不按帧对齐。
所有方法在创建对象的消息循环线程调用。
使用指南
返回对象:sysMfStreamingMp3PlayerObject
创建播放器,失败返回 null,错误信息。
options 可省略,默认 sampleRate=24000,channels=1,匹配 Edge TTS。
输入格式不同时必须指定实际 sampleRate/channels,不是重采样参数。
可选 volume=1(0..1,软件音量,不改系统音量)、maxPcmBytes=67108864、onStart/onEnd/onError。
播放无声但 playedSeconds 前进时,先用 sys.audioVolume.session() 检查本进程是否在音量合成器中被静音。
用户事件函数抛出的错误;不向定时器外抛出。
异常清理失败信息;可再次调用 close,不提前释放设备仍引用的内存。
立即停止并统一释放,幂等;不会触发 onEnd,也不影响其他实例。
是否真正结束、失败或关闭。
播放失败信息。
正常结束输入,排空解码器后继续播放余音,不立即停止。可重复调用。
可选 err 表示来源失败(错误字符串或含 message 的错误表),立即中止并触发 onError。
真正播完触发 onEnd。
输出 PCM 格式:sampleRate,channels,bitsPerSample=16。
是否已正常结束输入。
累计 PCM 上限(字节)。
已提交声卡的 PCM 总字节数。
设备报告的播放位置(秒),定时更新;不是扬声器声学测量。
已送入解码器的 MP3 字节总数。
buffering,playing,draining,ended,failed,closed。
消息泵等待真正播放结束。成功 true,失败 null,err。
超时只结束等待,不取消播放。不要在本播放器事件中调用。
追加 MP3 string/buffer,成功 true,失败 null,err。
同步复制并解码,声卡异步播放;返回后可以复用输入 buffer。
空块不是结束。解码/声卡/容量错误会中止播放。
sysMfStreamingMp3PlayerObject.onEnd = function(){
/*正常输入已结束,所有待播缓冲已完成且资源已释放*/
}
sysMfStreamingMp3PlayerObject.onError = function(err){
/*失败,已停止播放*/
}
sysMfStreamingMp3PlayerObject.onStart = function(){
/*首次提交 PCM 到声卡,owner 为播放器*/
}