Project1

标题: RM 音频扩展模块(1.0.0904 初版) [打印本页]

作者: 铃仙·优昙华院·因幡    时间: 2011-9-4 17:35
标题: RM 音频扩展模块(1.0.0904 初版)
本帖最后由 铃仙·优昙华院·因幡 于 2011-9-4 18:34 编辑

依旧是无聊的产物. 具体的看最后的范例. 这里注意点:

1. 初版先支持 wav 格式文件, 下一版本或者下下版本或者 下下下版本 更新 ogg 和 MP3 等常用的格式.
2. 请确认安装有 VC运行库 和 Direct9.0c
3. 有什么疑问或者 BUG 或者建议请回帖询问.

使用方法:
1. 在脚本的最开始的地方, 可以是 Main 等脚本里, 插入初始化方法:
  1. SoundMusic.Init
复制代码
2. 再需要的地方加载文件(目前必须是 WAV 格式的)
  1. SoundMusic.LoadWav(文件名)
复制代码
3. 加载完成后可以使用 play pause stop 等方法来控制播放.

以下是范例:
SoundAndMusic.rar (314.91 KB, 下载次数: 98)

在以下是具体的方法说明:
1. Init 方法
初始化整个模块, 必须需要在一开始的时候调用这方法进行初始化工作. 无参数.

2. LoadWav
加载 WAV 文件.  参数为 文件名, 可以带路径, 但是不能出现中文字符.

3. play(type)
播放方法,  type 取值有两个:
  true: 一直喜欢播放, 直到 调用 pause 或者 stop 为止.
  false : 只播放一次

4. stop
停止. 如果再次播放的话, 音乐会从头开始.

5. pause
暂停. 再次播放的时候, 会从暂停的那个点开始播放.

6. dispose
释放, 再最后不需要使用的时候调用. 一般再退出游戏的时候使用.

7. setPlayPosition(startPosition, stopPosition)
设定播放的音乐段. 开始位置从 startPosition 秒 开始到 stopPosition秒. 如果 stopPosition 的值大于音乐的长度, 那么会缩小到这个音乐的播放时间. 如果 startPosition 为 0 , 表示从头开始. 这个音乐段的设定再下次调用这个方法的时候都一直有效. 如果 play 方法 是循环的话, 那么就循环播放设定的这部分.

8. volume
音量设定. 两个方法, setVolume 和 getVolume. 用来设定播放音量. setVolume 的值是 改变的量. 比如减少 10分贝, 就是 setVolume(-10) . 最大值是 0, 最小值是 -10000, 表示无声.

9. Frequency
播放速率. 两个方法, setFrequency 和 getFrequency. 用来设定播放速率. setFrequency 的值是 改变的量. 这个值表示对于平常速度的加速倍率. 比如 setFrequency(1.0) 的话, 就是在现有的速度上加速1背. 这个值不能为负数. 0 和 1 都是正常速度.

10. Pan
声道音量. 两个方法, setPan 和 getPan. 用来设定声道音量. 这个值越接近 -10000 的话, 那么左声道的声音就越大. 反之亦然. 0 为平衡状态. 就是两边声音一样大.

11. GetSoundFileTime
获取音乐的播放时长. 单位是 秒.




作者: fux2    时间: 2011-9-4 18:55
本帖最后由 fux2 于 2011-9-4 18:56 编辑

这就是应求OGG循环的东西吗{:nm_6:}
然后发现还不支持OGG囧.{:nm_9:}
作者: yangff    时间: 2011-9-4 19:07
话说你那个RM的视屏播放我后来去翻了下FFMpge的API,然后我就蛋疼了,果断可以嵌入RM的bitmap啊!!!!
作者: zh99998    时间: 2011-9-4 19:08
最亮的功能是暂停呢o.o
还是期待部分循环,特别是本身没有部分循环功能的mp3等文件啥的,直接在脚本里定义循环时间
作者: yangff    时间: 2011-9-4 19:11
泪目,FFmpge的API超复杂……才怪
不过缓冲sama的难道开线程??
作者: 铃仙·优昙华院·因幡    时间: 2011-9-4 19:14
yangff 发表于 2011-9-4 19:11
泪目,FFmpge的API超复杂……才怪
不过缓冲sama的难道开线程??

不知道再说啥.  缓冲啥的是 DitectX 自动管理的. 如果要嵌入的话,  大概要自己写 Filter 啥的吧.
作者: yangff    时间: 2011-9-4 19:23
铃仙·优昙华院·因幡 发表于 2011-9-4 19:14
不知道再说啥.  缓冲啥的是 DitectX 自动管理的. 如果要嵌入的话,  大概要自己写 Filter 啥的吧. ...

不是你去看看就知道,FFMpge的API各种奇葩
prepre_for_video
point=av_xxxxxx
......
while (true)
  get_frame
  matrix_fream
  show
  free_matrix
end
free_video
简单的流程是这样的……你懂的
作者: 八云紫    时间: 2011-9-4 19:29
yangff 发表于 2011-9-4 19:23
不是你去看看就知道,FFMpge的API各种奇葩
prepre_for_video
point=av_xxxxxx

有一便士也是好的.

之前的想法是读取 DirectX 的缓冲区域, 把解码后的图片拿出来, 用 柳之一 的脚本内存 copy 过去然后显示.

不过发现, 效率应该是极其低下. 每秒至少 24 张图片的切换, 就 RM 的速度.........  头疼~~~
作者: yangff    时间: 2011-9-4 19:58
八云紫 发表于 2011-9-4 19:29
有一便士也是好的.

之前的想法是读取 DirectX 的缓冲区域, 把解码后的图片拿出来, 用 柳之一 的脚本内存 ...

吧Bitmap的指针传给C++,然后C++开线程刷新……我的想法是这样的,然后就可以弄一些比较复杂的战斗背景了=v=
作者: 各种压力的猫君    时间: 2011-9-4 22:25
能不能想办法用WASAPI = = |||
win7用RM都要悲剧死了
作者: 八云紫    时间: 2011-9-4 22:29
各种压力的猫君 发表于 2011-9-4 22:25
能不能想办法用WASAPI = = |||
win7用RM都要悲剧死了

独立使用是没有问题的.

但是问题在于, 默认的 RM 启动的时候, 卡的时间都在一个初始化音频上. 这个函数咱汇编过. 很奇怪.

就算是用独立的, 那么旧的还是会运行的.

咱的Win7更悲剧呢, 打开 VX 需要 25s .
作者: kinguanghua    时间: 2011-9-5 16:06
本帖最后由 kinguanghua 于 2011-9-5 16:07 编辑

于是万年潜水党慕名而来,还不知道有这么好的东西来着,辛苦了
作者: yangff    时间: 2011-9-5 20:50
我表示win7启动RM从来不卡
作者: summer92    时间: 2011-9-5 22:44
支持,wav的话怕有时候有点大,再支持OGG如何




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1