Logo
  • Features
  • Educators
  • What's New
  • Blog
  • Showcase
  • About us
  • Contact
Try it now!
媒体助手 Media Utils 文档

媒体助手 Media Utils 文档

为什么要使用媒体助手 Media Utils?

如果你遇到这些问题,那媒体助手可以帮到你:

  1. 【懒加载】作品中使用背景音乐,但加载太多背景音乐导致作品容量太大,加载缓慢,卡 99%
  2. 【懒加载】作品中大量 CV,希望根据玩家游戏进度加载音频内容
  3. 【视频播放】做 AVG 游戏, 背景希望是一个循环播放的视频,导入成帧动画后文件尺寸激增
  4. 【视频播放】游戏前 OP 想加视频
  5. 【视频播放】关卡完成后想播放效果炸裂的全屏特效
  6. 【音频特效】背景音乐循环播放,但当菜单出来的时候,希望音乐在不间断的情况下加特效
  7. 【音频特效】游戏中想让玩家在受伤后音效发生变化,有一种在浴室里听到隔壁邻居放歌的感觉

使用媒体助手的最佳实践案例

Lazyload 如何正确地加载音频视频

懒加载,更好的理解可以是延迟加载。 指的是程序不是在首次加载所有的内容,而是只有在用户需要的时候再加载内容。

getgandi.com

Lazyload 如何正确地加载音频视频

模块

Media Utils 主要分为 5 个模块:

模块
用途
资源相关
1. 所有从媒体库加载音频视频资源 2. 资源释放的管理 3. 资源被懒加载载入好了的事件
视频相关
1. 视频播放控制 2. 视频绘制控制 3. 视频播放过程中的事件监听 4. 视频的音量控制
音乐相关
1. 音频的播放控制 2. 音频的播放事件监听 3. 音频的音量控制
音效相关
1. 分别对 Scratch 中的音频、媒体库和主通道的音效控制 2. 低通滤波器控制 3. 混响控制 4. 延迟特效控制 5. 均衡控制
其他实验内容
1. 合成器播放声音(目前加了基本的 8 bit 音乐常用的 4 个合成器) 未来一些实验性的功能会在这里面先放出,测试稳定后再正式使用

资源相关

加载音频视频

image
image

载入媒体库中的资源到项目中,命名为 【key】。 其中【key】 是一个唯一的编号。 以下情况媒体库会这样处理:

情况
处理方式
一个视频资源和一个音频使用同样的 key
允许,并且没有任何影响
两个不同的视频资源,使用同样的 key
不允许,当视频不相同时,前一个 key 对应的视频会被替换
两个相同的视频资源,使用同样的 key
允许,第二次执行时,不会重载资源。但会触发一次视频资源载入的事件
两个相同的视频资源,使用不同的 key
允许,会被看成两个独立的资源,但不会有额外的网络加载

加载音视频事件

image
image

当资源被成功加载后,事件会被触发,其中参数 name 为在加载时对应的命名。

资源释放及状态查询

image

为了节约内存使用, 当资源不再使用时,请用上面的积木移出资源。

image

可以得到载入了的音频或视频。以 JSON Array 的形式返回,例如:

["bgm","video2","audio3"]

视频相关

判断是否载入的最好办法是使用事件驱动,也就是上面部分提到的事件。 如果特殊情况,不能使用事件驱动,可以下面语句判断资源是否载入:

image

当视频资源被载入后,就能用视频相关的代码来控制视频的渲染和播放了。

其中最核心的是视频播放相关的功能:

视频播放

image

在视频被载入后,播放前,需要告诉引擎如何绘制视频。 主要有三个部分的设置: 1. 绘制到哪个角色的上面还是下面; 2. 绘制到相对这个角色的 x, y 偏移量; 3. 绘制的视频大小。 注意以下情况的处理:

情况
处理方式
一个视频分别绘制到两个角色中
允许,会按设置分别绘制
绘制视频到一个角色,播放视频后调整角色坐标
视频的位置会跟着角色坐标做相对应的偏移。例如,原来的角色坐标为(0,50),移动到了(100,100); 视频绘制的xy偏移如果为(-50,-100),那么在角色移动前,视频的绘制坐标为(-50+0,-100+50), 移动后绘制的坐标为 (100-50,100-100) = (50,0)
绘制视频到一个角色,调整这个角色的大小
视频按等比例缩放
宽和高为空,或者小于等于 0 时
按视频的原始分辨率渲染
宽设置一个大于 0 的数值,高不设置
保持设定的宽,高度按视频的长宽比动态计算
高设置一个大于 0 的数值,宽不设置
保持设定的高,宽度按视频的长宽比动态计算
image

设置好绘制位置后,就能播放视频了。 这句代码可以设置视频从什么时间点播放,以及播放完毕后做什么。 播放完毕后可以选择是【停止】 或者【循环】。

image

以及【暂停】【继续】播放视频,或者【移出】。 移出会销毁这个视频资源,不再占用内存。

image

在视频的全周期可以收到视频的各种事件,包括:【时长改变】、【载入进度】变化、播放时【当前时间改变】、【结束】播放、开始【播放】、【暂停】播放以及播放【错误】。

image

当然,当视频载入后,你也可以获得视频的各种信息,包括当前的【音量(dB)】、【当前进度时间】、视频的总【时长】、视频原始的【宽】和【高】

image

当然,你也可以随时设置视频的音量。

☝
注意!《dB》 在媒体助手中,所有音量使用的单位不是 Scratch 中的百分比,而是专业音频领域使用的 dB。 简单地说: * 0 dB = 音量 100% * 3 dB = 音量 200% * -3 dB = 音量 50% * -6 dB = 音量 25% * -12 dB = 音量 12.5% 那为什么音频领域要使用 dB 作为单位的?请阅读 什么是 dB 单位,为什么音频里要用 dB

音乐相关

和视频一样,最佳实践是通过事件来判断某个音频是否已经载入成功。 当然,你也可以用下面的代码来做判断:

image

当音频载入后,就能对音频进入播放的操作了。 和视频不一样的是,音频不需要设置依附于哪个角色。

image

使用上面语句就能播放名为 loop 的音频,并且是从 0 秒开始播放。 播放完毕后可以选择是【循环】播放,还是【停止】播放。

image

当然,过程中,你也可以随时【暂停】播放、【继续】播放 或者【移出】资源(也就是销毁这个音频资源)

image

你可以像视频一样获得音频的【音量】、【当前时间】和【音频时长】

image

当然,你也可以改变音频的音量。

和一般的调整音量不一样的是,媒体助手为像 DJ 一样按你的指令在一定的时间内把音量做调整。

这个十分有用。 这会让你的游戏音量变化十分的自然,不会突然变大或变小。

当然,音乐播放中音量也是使用的 dB 为单位。 不知道为什么的话,请阅读

什么是 dB 单位,为什么音频里要用 dB

最后,和视频一样,我们推荐的编程模式也是事件驱动式的。 也就是使用下面的事件来驱动程序的功能:

image

其中事件包括音频【播放】时、【播放完毕】时、【暂停】时和重新【继续播放】时。

音频特效相关

当已经能播放音频和视频后,接下来,在 Gandi 中,你是可以把音频视频的轨道加上各种音乐特效的。 所有的音乐特效可以加在:

  1. 【Scratch】 原生通道上,也就是所有在 Scratch 原生【声音】里播放的声音都会到这个通道上
  2. 【媒体库】通道上, 也就是用媒体助手加载的音频和视频会到这个通道
  3. 【主通道】上,也就是上面的 【Scratch】通道和【媒体库】通道加了特效后,都会接入【主通道】

目前开放的特效为:

特效
说明
常见设定
低通滤波器
Low Pass Filter (LPF),指低于某个频率的波可以通过。 通常 LPF 的效果就像是隔着墙壁听到其他房间音乐的声音。因为高频的声音会被墙壁吸收,只有低频的声音可以听到。 这个常用于模拟疯狂的邻居在夜里放歌的感觉
在疯狂的邻居家: 44100 和音响有一些距离:10000 在疯狂的邻居家借用厕所: 1000 在疯狂邻居家的隔壁: 400 受够了疯狂的邻居,把头埋进枕头:100
混响
Reverb ,相当于模拟回声。 例如在空旷的地方,是没有混响的,也就是没有回声的。相当于房间大小为 0。数值越高,混响越高,相当于回声越多越混浊。
卧室: 房间大小 1 澡堂:房间大小 10 教堂: 房间大小 40
延迟
Delay,和混响类似,也是有回声的感觉。 但不一样的是每次回声的声音都会很清晰,而不是混浊的。 就像在一个墙壁很硬的房间一样。返回的回音也是清晰可辩识的。 其中【延迟】指的是多少毫秒后再听到一次声音,【反馈】指的是下一次的声音是原来的多少倍。 例如回声渐渐消失的感觉,如果 0.1 ms 反馈 0.4 指的是,在 音频播放 0.1 ms 后,会以 40% 的音量播放第二次,然后会在 0.1 + 0.1 ms 后,以 40% * 40% 的音量再播放第三次, 然后会在 0.1+ 0.1+0.1 ms 后,以 40% * 40% *40% 再播放第四次。 以此类推…
正常房间:延迟 0.1, 反馈 0.4 山谷间:延迟 0.4, 反馈 0.1
均衡
Pan,指的是左耳右耳的均衡。 -1 为全左耳, 1 为全右耳,0 为两边都有。
右边耳朵被耳屎堵住:-1 左边边耳朵被耳屎堵住:1 掏光了耳屎: 0
音量
Volume,指的是,和字面一样,音量。 以 dB 为单位(对数坐标系)
100% 音量: 0 dB 50% 音量: -3 dB 25% 音量: -6 dB 200% 音量: 3 dB

以上所有特效对应的积木如下:

image

其中,【混响】和【延迟】有多出 “打开效果到【xx】”这个部分。 这个部分在音频里指的就是 干湿度(Dry/Wet),0 为干, 1 为湿。 也就是对应效率器的效果占比。 0 为占比 0%,1 为占比 100%

关于什么是 dB,为什么要使用 dB,请见文章

什么是 dB 单位,为什么音频里要用 dB

其他实验功能

其他实验功能会在实验完成后成为正式的功能。

目前在实验的功能是合成器。 提供了 4 种 8 bit 音乐的常见合成器。【脉冲波】【方波】【三角波】和白【噪音】。 设置播放音符如果是单音用 [C/D/E/F/G/A/B][1/2/3/4/5/6/7/8] 进行组合。 例如 A 是la,4 是第四阶,中音, A4 在国际标准中频率 = 440 Hz。按照十二平均律,对应的 A5 为 880 Hz。 以此类推。如果要播放 440 Hz 的方波 1 秒,可以这样设置:

image

如果想播放 Amin 和弦,也就是 A C E 三个音,可以这样设置:

image

如果最后这部分看不懂,没关系,正常的。 学习了音乐和乐理知识后自然就懂了。

相关文章

暂无,后续社区中有好的音频相关的文章会在这里补充

历史更新 和 Roadmap

coming soon…

Logo

Designed by 2ndR with love

Discord