搜索

iVocaloid论坛

查看: 3131|回复: 6
打印 上一主题 下一主题

居然没人试过用Praat代替UTAU音源工具链么…… [复制链接]

Sleepwalking

我不是技术宅!

Lv.5-章鱼须

Rank: 5Rank: 5Rank: 5

0
9
0


UID: 111156
权限: 40
属性: 宇宙人
发帖: 201 (1精)
积分: 540
章鱼: 3
大葱: 14
茄子: 2688
注册:2012/8/18
存在感:476
跳转到指定楼层
[1L]楼主
Zleepwalking 发表于 2013/12/8 12:19:24 |只看该作者 |正序浏览
本帖最后由 Zleepwalking 于 2013/12/8 12:30 编辑

昨天学了下Praat的一些高级功能,比如Praat Script Language。Praat真是相当牛逼啊……自带了一堆世界上最先进的算法,再加上PSL简直逆天。我都觉得CVDBToolChain里的WSplit和Wpp白写了……

今天花半个多小时用PSL写出一个可以把录音里无声部分设成静音的脚本,相当成功:
  1. analysis_timestep = 0.01
  2. analysis_threshold = 50
  3. analysis_hold = 0.15
  4. analysis_preserve = 0.1

  5. obj_wave = selected()
  6. do("To Intensity...", 100, 0, 1)
  7. obj_intensity = selected()

  8. intensityLength = do("Get end time") - 0.1
  9. writeInfoLine("Length: ", intensityLength)

  10. count = 0
  11. onset = 0
  12. onsetTime = 0
  13. duration = 0
  14. for i from 5 to intensityLength / analysis_timestep
  15.         time = i * analysis_timestep
  16.         instIntensity = do("Get value at time...", time, "Cubic")
  17.         if instIntensity < analysis_threshold
  18.                 if onset == 0
  19.                         onset = 1
  20.                         onsetTime = time
  21.                 endif
  22.                 duration += analysis_timestep
  23.         endif
  24.         if onset == 1 and instIntensity > analysis_threshold
  25.                 onset = 0
  26.                 if duration > analysis_hold
  27.                         selectObject(obj_wave)
  28.                         do("Set part to zero...", onsetTime, time - analysis_preserve, "at nearest zero crossing")
  29.                         selectObject(obj_intensity)
  30.                         appendInfoLine(onsetTime, " -> ", time)
  31.                         count += 1
  32.                 endif
  33.                 duration = 0
  34.         endif
  35. endfor
  36. appendInfoLine(count, " in all.")
复制代码

ctst.png
长达半个小时的包含640多个音节的wav,花了十秒就搞定了。虽说这个效率相比WSplit还差了几倍(毕竟是个解释器嘛),但是质量可以完爆WSplit……
虽然没碰过UTAU不过我可以感觉到Praat用来做UTAU音源会特别管用,假如当初11区有人用PSL撸个UTAU工具链,估计现在就不会有这么一坨杂七杂八的音源制作工具了,而且做音源会变成极为轻松的事情。

昨天还写了个对选中的采样批量校正基频并延长两遍的PSL脚本:
  1. n = numberOfSelected("Sound")

  2. for i from 1 to n
  3.         soundList[i] = selected("Sound", i)
  4. endfor

  5. for i from 1 to n
  6.         wave = soundList[i]
  7.         selectObject(wave)
  8.         do("To Manipulation...", 0.01, 75, 800)
  9.         waveMani = selected()

  10.         do("Extract pitch tier")
  11.         avgF0 = do("Get mean (curve)...", 0, 0)
  12.         length = do("Get end time")
  13.         writeInfoLine("F0:", avgF0, "   Len: ", length)
  14.         do("Remove points between...", 0, length)
  15.         do("Add point...", 0, avgF0)
  16.         wavePitch = selected()
  17.         selectObject(waveMani, wavePitch)
  18.         do("Replace pitch tier")
  19.         removeObject(wavePitch)

  20.         do("Create DurationTier...", "LongerTier", 0, length)
  21.         do("Add point...", 0, 2.0)
  22.         waveDur = selected()
  23.         selectObject(waveMani, waveDur)
  24.         do("Replace duration tier")
  25.         removeObject(waveDur)

  26.         selectObject(waveMani)
  27.         do("Get resynthesis (overlap-add)")
  28.         removeObject(waveMani)
  29. endfor
复制代码

最后我表示很喜欢Praat的实用主义风格:从表面上看它就是个灰灰的窗口上面一坨灰色的按钮和文本框,你甚至第一眼看到还以为是gtk的按钮编程示例……当你了解它后才发现它的功能如此强大,让那些花花绿绿甚至依赖DirectX的动辄数百MB的效果器黯然失色。

Think in Praat.

*Praat的默认编译选项是-O1 -g1,我拿-O3重新编译了一遍效率提高了好多,暂没发现bug。


知识共享许可协议 除非另有声明,本帖内容采用 署名-非商业-相同方式共享 3.0 许可协议 授权,且需注明出处,所有权利归发帖人。

使用道具 举报

Rank: 3

0
3
0


UID: 93325
权限: 20
属性: 難燃性
发帖: 74 (0精)
积分: 100
章鱼: 1
大葱: 2
茄子: 433
注册:2011/10/22
存在感:84
[7L]大姐姐
rgwan 发表于 2014/1/10 13:28:13 |只看该作者
uppslink压缩包还设密码……

使用道具 举报

Sleepwalking

我不是技术宅!

Lv.5-章鱼须

Rank: 5Rank: 5Rank: 5

0
9
0


UID: 111156
权限: 40
属性: 宇宙人
发帖: 201 (1精)
积分: 540
章鱼: 3
大葱: 14
茄子: 2688
注册:2012/8/18
存在感:476
Zleepwalking 发表于 2013/12/17 15:41:55 |只看该作者
http404 发表于 2013/12/17 14:29
它自带的变调其实还是很科学的啊(除了一点就是延长是简单重复周期,只要稍加一个线性混合都会好很多)…… ...

fon里面Manipulation_to_Sound.c之类的貌似,以前打进去看过……
其实可以在c程序里#include "praat.h",直接调用praat的各种功能;或者写成praat script用命令行调用。你可以在praat的manual里看到用法。

使用道具 举报

aka. farter = 渣语文

Lv.6-章鱼之目

Rank: 6Rank: 6

0
154
2


UID: 71728
权限: 50
属性: 不明
发帖: 331 (0精)
积分: 2324
章鱼: 45
大葱: 92
茄子: 4266
注册:2010/10/17
存在感:495
[5L]萝莉
http404 发表于 2013/12/17 14:29:52 |只看该作者
它自带的变调其实还是很科学的啊(除了一点就是延长是简单重复周期,只要稍加一个线性混合都会好很多)…………我感觉如果能把变调那一坨抠出来做成独立的就已经可以逆天了……【但是看代码半天没找到在哪儿【x

使用道具 举报

Sleepwalking

我不是技术宅!

Lv.5-章鱼须

Rank: 5Rank: 5Rank: 5

0
9
0


UID: 111156
权限: 40
属性: 宇宙人
发帖: 201 (1精)
积分: 540
章鱼: 3
大葱: 14
茄子: 2688
注册:2012/8/18
存在感:476
[4L]地板
Zleepwalking 发表于 2013/12/13 23:36:51 -手机频道 |只看该作者
lazydog 发表于 2013/12/13 18:53
有个坑叫做uppslink……

uppslink听说过。其实我倒不看好拿praat作合成引擎;做分析和某些预处理是极好的,因此适用于音源库构建。
【不过praat那个基頻检测有时过度灵敏了,to Manipulation会把非周期信号加桢。
其实这玩意多试试就学会了,我有写/翻译教程的打算,就是不知道有没有人会看。

使用道具 举报

Rank: 4Rank: 4

0
29
0


UID: 112484
权限: 30
属性: 不明
发帖: 142 (0精)
积分: 361
章鱼: 6
大葱: 6
茄子: 1451
注册:2012/11/3
存在感:117
[3L]板凳
lazydog 发表于 2013/12/13 19:16:10 -手机频道 |只看该作者
另求praat玩法……英文无力……

使用道具 举报

Rank: 4Rank: 4

0
29
0


UID: 112484
权限: 30
属性: 不明
发帖: 142 (0精)
积分: 361
章鱼: 6
大葱: 6
茄子: 1451
注册:2012/11/3
存在感:117
[2L]沙发
lazydog 发表于 2013/12/13 18:53:25 -手机频道 |只看该作者
有个坑叫做uppslink……

使用道具 举报

您需要登录后才可以回帖 登录 | 注册/sign up

申请友链|Archiver|iVocaloid - 自由,开放,合作,共享    | 版权持有者点击这里进行举报

GMT+8, 2025/6/8 00:11

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部