# fsys.media 库模块帮助文档

## fsys 成员列表 <a id="fsys" href="#fsys">&#x23;</a>

### fsys.media("媒体文件路径","其他选项",通知窗口) <a id="fsys.media" href="#fsys.media">&#x23;</a>
打开媒体文件,支持 MP3。  
参数@2,@3为可选参数  
如果指定了通知窗口，操作完成以后窗口会收到 _MM_MCINOTIFY 消息  

如果同一线程已打开同一文件，则返回已打开的 fsys.media 对象，并移动播放位置到开始处。  
fsys.media 创建的对象在超出变量作用域后会自动释放  
对象关闭后会自动关闭正在播放的媒体文件  
所以不要使用临时变量播放媒体文件

### fsys.media() <a id="fsys.media" href="#fsys.media">&#x23;</a>
[返回对象:fsysMediaObject](#fsysMediaObject)

## fsys.media 成员列表 <a id="fsys.media" href="#fsys.media">&#x23;</a>

MCI 媒体控制接口，可用于播放 wav,mp3 等音频文件。  
播放网络 MP3 请改用 com.wmPlayer。

### fsys.media.closeAll() <a id="fsys.media.closeAll" href="#fsys.media.closeAll">&#x23;</a>
全部关闭

### fsys.media.execute("MCI媒体控制命令",通知窗口句柄) <a id="fsys.media.execute" href="#fsys.media.execute">&#x23;</a>
发送 MCI 媒体控制命令  
如果指定通知窗口句柄则在命令尾部添加"notify",  
成功返回true,可选的返回消息,  
失败返回 false ,错误信息

### fsys.media.getErrorString(错误代码) <a id="fsys.media.getErrorString" href="#fsys.media.getErrorString">&#x23;</a>
返回错误信息

### fsys.media.playRepeat("音频文件路径",播放次数) <a id="fsys.media.playRepeat" href="#fsys.media.playRepeat">&#x23;</a>
创建线程并重复播放指定的 wav 或 mp3 文件,  
参数 @1 指定文件路径或资源文件路径  
参数@2指定播放次数

### fsys.media.playSound("wav文件路径",选项) <a id="fsys.media.playSound" href="#fsys.media.playSound">&#x23;</a>
播放 wav 文件,参数@2可选  
wav 文件可指定内嵌资源或内存文件,如果为 null 空值则停止播放  
选项不指定时默认为 _SND_ASYNC ,也即启用异步播放,  
选项指定为 0 时同步播放并等待播放完成,同步播放建议放到工作线程里

## fsysMediaObject 成员列表 <a id="fsysMediaObject" href="#fsysMediaObject">&#x23;</a>

### fsysMediaObject.close() <a id="fsysMediaObject.close" href="#fsysMediaObject.close">&#x23;</a>
关闭

### fsysMediaObject.deviceId <a id="fsysMediaObject.deviceId" href="#fsysMediaObject.deviceId">&#x23;</a>
打开的设备标识符，数值。  
_MM_MCINOTIFY 消息的 lParam 参数里存放的就是这里的 deviceId

### fsysMediaObject.hwndCallback <a id="fsysMediaObject.hwndCallback" href="#fsysMediaObject.hwndCallback">&#x23;</a>
指定用于接收_MM_MCINOTIFY通知消息的窗口句柄  
_MM_MCINOTIFY可用于获取指令执行状态

### fsysMediaObject.isPaused() <a id="fsysMediaObject.isPaused" href="#fsysMediaObject.isPaused">&#x23;</a>
是否已暂停

### fsysMediaObject.isPlaying() <a id="fsysMediaObject.isPlaying" href="#fsysMediaObject.isPlaying">&#x23;</a>
是否正在播放

### fsysMediaObject.isStopped() <a id="fsysMediaObject.isStopped" href="#fsysMediaObject.isStopped">&#x23;</a>
是否已停止播放

### fsysMediaObject.length() <a id="fsysMediaObject.length" href="#fsysMediaObject.length">&#x23;</a>
音频长度

### fsysMediaObject.mode() <a id="fsysMediaObject.mode" href="#fsysMediaObject.mode">&#x23;</a>
返回当前模式，  
所有设备都存在 "not ready", "paused", "playing",  "stopped" 等模式,  
一些设备可能返回 "open", "parked", "recording",  "seeking" 等值

### fsysMediaObject.path() <a id="fsysMediaObject.path" href="#fsysMediaObject.path">&#x23;</a>
打开的文件路径

### fsysMediaObject.pause() <a id="fsysMediaObject.pause" href="#fsysMediaObject.pause">&#x23;</a>
暂停

### fsysMediaObject.play("repeat") <a id="fsysMediaObject.play" href="#fsysMediaObject.play">&#x23;</a>
循环播放,  
仅适用于 mp3，wav 文件不支持

### fsysMediaObject.play("wait") <a id="fsysMediaObject.play" href="#fsysMediaObject.play">&#x23;</a>
播放并等待，  
重新播放声音应该调用要seek(1)回到开始位置  
此操作会阻塞代码向后执行,最好是在工作线程里执行

### fsysMediaObject.play() <a id="fsysMediaObject.play" href="#fsysMediaObject.play">&#x23;</a>
播放声音  
可选添加多个文本指令参数  
无参数时不会阻塞当前线程，  
fsys.media 对像在析构时，会自动关闭声音，所以在声音播放时，要保持变量在生命周期内，  
重新播放声音应该调用要seek(1)回到开始位置

### fsysMediaObject.position() <a id="fsysMediaObject.position" href="#fsysMediaObject.position">&#x23;</a>
返回当前播放位置

### fsysMediaObject.ready() <a id="fsysMediaObject.ready" href="#fsysMediaObject.ready">&#x23;</a>
是否准备就绪可继续处理命令

### fsysMediaObject.resume() <a id="fsysMediaObject.resume" href="#fsysMediaObject.resume">&#x23;</a>
继续

### fsysMediaObject.seek(位置) <a id="fsysMediaObject.seek" href="#fsysMediaObject.seek">&#x23;</a>
移动到指定位置  
参数为1表示移动到开始位置，  
在播放声音以后重新播放声音时可调用此函数重新回到声音文件的开始位置

### fsysMediaObject.send("MCI媒体控制命令") <a id="fsysMediaObject.send" href="#fsysMediaObject.send">&#x23;</a>
使用$PATH表示打开的媒体文件路径,不要加引号  
如果传入多个参数则使用string.format格式化  
[所有可用指令]( https://docs.microsoft.com/en-us/windows/desktop/Multimedia/multimedia-command-strings )

### fsysMediaObject.step(-1) <a id="fsysMediaObject.step" href="#fsysMediaObject.step">&#x23;</a>
负数向前,正数向后,省略跳到下一步

### fsysMediaObject.stop() <a id="fsysMediaObject.stop" href="#fsysMediaObject.stop">&#x23;</a>
停止播放

### fsysMediaObject.volume() <a id="fsysMediaObject.volume" href="#fsysMediaObject.volume">&#x23;</a>
无参数获取音量  
指定数值参数设置音量
