MineVocal
在原版 Minecraft 中实现的简易声码器模型,可以合成单音调、单音素人声(歌声)。
效果
演示:https://www.bilibili.com/video/BV1kW4y1v7vP/
使用
1. 安装数据包和资源包后,请在存档内初始化:
function minevocal:init
2. 将歌声渲染使用到的参数传入储存:minevocal:main
可传入的参数:
NBT 地址 | 数据类型 | 允许值(默认值) | 意义 |
---|
Singer | 字符串 | 见下文(无) | 选择歌手 |
Phone | 字符串 | 歌手数据库中定义的音素(无) | 选择要发声的音素 |
Note | 字符串/整数 | "C3".."C6" 或 48..84(60) | 基频音高 |
Volume | 整数
| 1..100(100) | 音量 |
Gender | 整数 | -72..72(0) | 性别因素 |
Roughness | 整数 | -100..100(0) | 清浊音比例 |
数据包中内置的歌手是 "lty" 和 "miku",她们都包含五个音素 "a","e","i","o","u"。
Note 允许音名或 MIDI 格式输入。音名格式示例:"A4","F#5","Cb6"。
Roughness 控制正弦波与噪音的比例。越低正弦波比例越大(声音会越机械),越高噪音比例越大(会导致越多气声)。经过尝试,将此值设置为 20..30 时合成效果最真实。
Gender 控制性别因素。越低越偏向女声,越高越偏向男声。不建议将此值设定得过低或过高。
3. 渲染并播放:
function minevocal:render
如果想要自定义声源和收听到声音的玩家,请给声源实体 mv.spe 标签, 给听者 mv.lis 标签。
没有上述标签时,默认给执行者 mv.spe 标签,给全体玩家 mv.lis 标签。
声音将播放到 声音/语音 通道,请确保选项中开启此项音量。
4. 手动停止声音:
function minevocal:stop
卸载:
function minevocal:uninstall
示例
# 初始化 默认关闭缓存模式
function minevocal:init
# 设置歌手为 lty
data modify storage minevocal:main Singer set value 'lty'
# 设置音素为 a
data modify storage minevocal:main Phone set value 'a'
data modify storage minevocal:main Note set value 'G4'
data modify storage minevocal:main Roughness set value 25
data modify storage minevocal:main Volume set value 100
data modify storage minevocal:main Gender set value 0
function minevocal:render
# 启用缓存模式
function minevocal:cache/on
data modify storage minevocal:main Singer set value 'miku'
data modify storage minevocal:main Phone set value 'u'
# 其它参数默认,渲染音列到缓存
function minevocal:render
# 播放
function minevocal:play
原理
『WORLD的输入是每一帧的基频(F0)、频谱包络(spectral envelope)和非周期比值(aperiodicity)。』
鉴于原版 Minecraft 声音播放的限制,本数据包使用 72 平均律内音阶拟合泛音列,通过各音高处对应的平均功率和平均非周期比值(使用 World 的 Python 包装器 PyWorld 分析记录),播放相应音量的正弦波和噪音,得到粗略还原的频率响应。
| |
原始音频(合成自 VOCALOID)的波形和频谱 | MineVocal 合成的波形和频谱 (部分高次谐波由 Minecraft 采样精度导致) |
自定义歌手、音素
暂不完善,请参照本数据包的 Github仓库。
历史
v1.0
v0.4
v0.3
36 平均律 => 72 平均律
32 次谐波 => 64 次谐波
剔除不会被播放的音,优化文件大小
修复噪音不播放的 bug
v0.2
v0.1