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