袅袅音源转UTAU音源的工具--nn2utau

Python写的,作用为,将袅袅音源的inf.d和voice.d两个文件拆解成UTAU音源,并且还原打包之前的wav文件和inf文件,可以用袅袅音源制作器分析。

拆解出来的的文件夹可以拖到UTAU目录作为音源使用,已经自带oto。需用UTAU的自动生成frq功能生成frq。

工具及使用说明 http://files.cnblogs.com/files/bdbmb/nn2utau.zip

为了方便不想安装Python的同学,用py2exe制作了一个exe版,只能用于64位系统,32位系统和XP请下载上面那个,按照说明装Python再运行~

exe版 http://files.cnblogs.com/files/bdbmb/nn2utau.rar

代码

# coding:utf-8

#袅袅音源拆解&袅袅音源转UTAU音源工具
#已知问题:红色区域覆盖范围固定,不按实际情况变化
#已知问题:绿线始终放在红线和开始之间二分之一处(这其实是袅袅处理采样之间过渡的方式)
#已知问题:扩张整音的音尾需要手动设定

import sys
import os
import base64
import binascii
INF_FILE = ‘inf.d‘      #inf打包文件
VOICE_FILE = ‘voice.d‘  #wav打包文件
NN_DIR = ‘nn‘           #解包文件放置的目录,是当前目录的子目录
OTO_TYPE = 0            #oto中右边蓝色区域的计算方式,0为整音,1为扩张整音,2为日语单独音
RED_AREA = 55           #红色区域离红线的距离,毫秒
EX_FWD = 20             #转成扩张整音时蓝色区域比尾帧向前移动的距离,毫秒

#将inf.d内容解码,按行返回。每行内容分割成一个列表。
def rparams():
    f = open(INF_FILE,‘r‘)
    params = f.readlines()
    del params[0:2]     #删掉那个v1和发音总数标记
    ctn = []
    for line in params:
        line = base64.decodestring(line)
        line = line.split()
        ctn.append(line)
    f.close()
    return ctn

#接受每一行转换成的列表,写入对应的inf文件
def infwriter(param):
    filename = param[0] + ‘.inf‘
    f = open(‘nn\\‘ + filename,‘wb‘)
    f.write(‘0 ‘)       #起始帧,因为音源制作器已经把空白切掉,所以都是0
    f.write(str(int(param[2])/2) + ‘ ‘)    #采样数
    for i in range(3,7):
        f.write(param[i] + ‘ ‘)
    f.write(param[7])                      #以上写入不需做处理的几个值和空格
    f.close()

#将字节数表示的长度转换成能写入wav文件头的表示方法。参见网上介绍wav文件头结构的文章。
def hexlength(length):
    a = hex(length)[2:].upper()            #去掉0x
    a = ‘0‘ * (8-len(a)) + a               #剩余位补0
    b = []
    for pn in [6,4,2,0]:                   #以两位为单位倒写
        b.append(a[pn:pn+2])
    return(binascii.a2b_hex(‘‘.join(b)))   #字符串按含义转化为十六进制值

#按给定的属性列表写wav文件
def wavewriter(param):
    filename = param[0] + ‘.wav‘
    f = open(‘nn\\‘ + filename,‘wb‘)
    #写入文件头,由于袅袅要求16位单声道44100Hz的wave文件,所以文件头几乎是固定的,除了长度的标识
    #感谢网上介绍wav文件结构的文章~
    f.write(‘RIFF‘)
    f.write(hexlength(int(param[2])+44))
    f.write(‘WAVEfmt \x10\x00\x00\x00\x01\x00\x01\x00\x44\xac\x00\x00\x88\x58\x01\x00\x02\x00\x10\x00data‘)
    f.write(hexlength(int(param[2])))
    #按照给定的偏移量写入数据
    s = open(VOICE_FILE,‘rb‘)
    s.seek(int(param[1]))
    temp = s.read(int(param[2]))
    f.write(temp)
    f.close()
    s.close()

#输入属性列表,返回oto文件的一行
def rotoline(param):
    def cvt(byte):                         #将字节表示的长度转换成毫秒
        return int(byte)*500/44100
    ctn = [‘‘,‘0‘]                         #没有辅助记号,左边蓝色区域为0
    lt = cvt(param[2])
    s = 2 * cvt(param[3])                  #辅音开始
    ctn.append(str(s+RED_AREA))            #红色区域
    #按照生成模式不同,计算右边的蓝色区域
    #本人在做中文整音oto设定时经常把蓝色区域覆盖音尾的一半,这样不至于切掉音尾也不会造成较长的低音量时间
    if OTO_TYPE == 0:
        ctn.append(str(lt - cvt((int(param[2])+2*int(param[4]))/2)))
    #扩张整音将音尾完全切掉,并且用额外的音尾设定做X-Fade。额外的音尾设定需手动做,大约十几个
    elif OTO_TYPE == 1:
        ctn.append(str(lt - cvt(2*int(param[4])) + EX_FWD))
    #日语单独音,蓝色放在三分之一处一个点,个人经验
    elif OTO_TYPE == 2:
        ctn.append(str(lt - cvt((int(param[2])+4*int(param[4]))/3)))
    ctn.append(str(s))                     #辅音开始
    ctn.append(str(s/2))                   #绿线,偷懒按袅袅的方式处理了,请手动调整
    return param[0] + ‘.wav=‘ + ‘,‘.join(ctn) + ‘\n‘

#主函数
def main():
    print u‘袅袅音源库拆解&袅袅音源转UTAU音源工具‘
    print u‘请输入oto生成方式,0为中文整音,1为扩张整音(请手动补充几个音尾设定),2为日语单独音,直接回车默认中文整音‘
    global OTO_TYPE
    OTO_TYPE = raw_input()
    if OTO_TYPE not in [‘0‘,‘1‘,‘2‘]:
        OTO_TYPE = 0
    OTO_TYPE = int(OTO_TYPE)
    print u‘正在处理,请稍等~‘
    os.mkdir(NN_DIR)
    params = rparams()
    ctn = []
    for param in params:
        infwriter(param)
        wavewriter(param)
        ctn.append(rotoline(param))
    oto = open(‘nn\\‘ + ‘oto.ini‘,‘w‘)
    oto.writelines(ctn)
    oto.close()
    print u‘成功!按回车键退出‘
    print u‘现在您可以将nn目录直接做UTAU音源使用,或者用袅袅音源制作工具打开了‘
    print u‘不要忘了双击UTAU音源库设定对话框左下角两个按钮之间的空白区域,生成frq文件‘
    raw_input()

if __name__ == ‘__main__‘:
    main()
时间: 2024-10-13 03:07:49

袅袅音源转UTAU音源的工具--nn2utau的相关文章

把袅袅音源库拆解的脚本

用Python写了个简单的脚本,能把袅袅虚拟歌手的音源库拆成打包之前的样子,包括wav文件和inf文件.... 网上搜不到只好自己鼓捣没想到挺容易的.. 小学生作品大家别笑啊233 下载 http://files.cnblogs.com/files/bdbmb/nnsep.rar 版权没有 欢迎传播和帮我写完善点..

cocos2dx 3.x simpleAudioEngine 长音效被众多短音效打断问题

假设先play长音效a,然后在a播放过程中反复执行:play短音效b,stop b,play b,... 则若a足够长,就会被b打断.而长音效被打断是最不可接受的. a之所以会被打断,推测原因是simpleAudioEngine对音源的管理不善,play b, stop b,再play b这个过程中不是重复使用同一个音源,而是不断新地使用下一个音源,当音源耗尽后又绕回,从而导致把a的音源占用,a被迫停止. 在不动simpleAudioEngine底层的情况下,目前还没有找到好的解决办法,当前项目

Windows基础-使用XAudio2播放音频(本质是WASAPI)

对于常见的音频播放,使用XAudio2足够了. 时间是把杀猪刀,滑稽的是我成了猪 早在Windows Vista中,M$推出了新的音频架构UAA,其中的CoreAudio接替了DSound.WaveXxx.MediaFundation,通过Core Audio APIs,Windows的音频性能可以与MacOS X相媲美(手动偷笑). Universal Audio Architecture (UAA) CoreAudio属于UAA,只在用户层进行一系列音频处理,而系统内核只负责递交缓冲数据给音

校园无线智能广播系统方案

校园无线智能广播系统方案北京恒星科通科技发展有限公司 http://www.bjhxkt.com 010-82566461校园无线智能广播系统简述 校园无线智能广播是一种以无线发射的方式来传输广播的设备.具有无需立杆架线,覆盖范围广,无限扩容,安装维护方便,投资省,音质优美清晰的特点.彻底解决了传统有线广播布线困难.安装复杂.扩容性差.损坏墙面及校园环境等问题.对于目前规模大.地域广的学校来说,调频广播具有传统的有线广播无法比拟的优越性. 校园无线智能广播系统原理 DVD.双卡座.播音话筒.数字

中文字符转拼音源码

中文字符转拼音源码 2011-11-21      0个评论       收藏    我要投稿 只对GB2312编码有效 /* 汉字读音分界点处的码值数组*/ static const unsigned short code_pin[] = { 0xb0a1,0xb0a3,0xb0b0,0xb0b9,0xb0bc,0xb0c5,0xb0d7,0xb0df,0xb0ee,0xb0fa,0xb1ad,0xb1bc,0xb1c0,0xb1c6, 0xb1de,0xb1ea,0xb1ee,0xb1f2,

unity3d 给游戏添加音源 Unity3d adds a sound source to the game

unity3d 给游戏添加音源 Unity3d adds a sound source to the game 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:[email protected] E-mail: 313134555 @qq.com 视频目录及链接: 16 创建游戏工程和游戏场景,添加游戏对象  9:00  17 创建游戏脚本,脚本与对象绑定  5:43  18 游戏发布与运行   | 6:15  19 常用的四种外部资源导入方法  4:10  20 采用包和

分享一个github项目,让anki的awesometts插件支持forvo音源

anki是背单词的利器,有丰富的插件,其中awesometts是最常用的插件之一,支持大量的音源网站和语言. ??可惜的是,awesometts本身不支持forvo的音源,主要原因是forvo的api要收费.于是我抱着试试看的态度,谷歌了一把,终于在github上找到这个项目,可以给awesometts添加forvo音源,api的费用估计作者自己掏了. ?? ??安装方法很简单,以2.0.52版本为例,将下图的文件和文件夹全部复制到anki的安装目录\addons\awesometts文件夹内,

[PC]两个蓝牙耳机同时输出相同音源

需求:和老婆一起玩双人同屏游戏(以撒的结合:抗生),但需要带上蓝牙耳机玩. 设备:2个蓝牙耳机.1个蓝牙接收器.1台Win10系统电脑. 通过关键字搜索出一个解决方案(Output audio to multiple devices in Windows 10) 在我电脑上测试无法实现. 但顺着思路,找到了虚拟音频软件(Virtual Audio Cable). 经测试,使用Virtual Audio Cable软件可以实现以上需求. 原文地址:https://www.cnblogs.com/y

发布 | 汉字转拼音工具

通过查找汉字拼音库实现实时汉字转拼音的功能. 实现 加载汉字拼音对照文件pinyin.txt(4万+汉字拼音对照)到QMap容器. 遍历QMap容器的汉字从而找到对应的拼音,如找不到该汉字将原样输出. 部分pinyin.txt内容:(https://github.com/mozillazg/pinyin-data提供汉字拼音源强力支持) líng,yuán,xīng 〇 qiū ? tiàn ? kuà ? wǔ ? yǐn ? yí ? xié ? chóu ? nuò ? dān,qiú ?