Skip to main content

Python3 module for UTAU and singing-voice-database

Project description

utaupy

UTAU周辺のデータ処理を行うPythonのパッケージです。READMEは書いてる途中です。

PythonでUTAUプラグインを作りたい場合は、C# 用の utauPlugin をPythonに移植した pyUtau のほうがいいかもしれません。ビブラートやピッチの扱いが便利そうです。

利用規約

LICENSE ファイルをご覧ください。

処理できるファイル

  • .ust (UTAU)
  • .txt (UTAU Plugin Script)
  • .txt (録音リスト)
  • .ini (setParam)
  • .lab (歌唱データベース用音素ラベル)
  • .table (ローマ字かな対応表)
  • .svp (Synthesizer V R2)
  • .csv (REAPER リージョン・マーカー用)

機能概要

  • INI, UST, LAB ファイルのデータをクラスオブジェクトとして扱います。
  • INI, UST, LAB ファイルを変換できます。ただし不可逆の処理が多いです。

Methods


utaupy.ust

load(path)

USTファイルを読み取り、Ust オブジェクトにする。

ust = load(ust)  # type(ust): <utaupy.ust.Ust class object>

notenum_as_abc

音階番号を C4 とかの音階表記に変換する。国際表記に準拠。

notenum = 61
s = notenum_as_abc(notenum)
print(s)  # C4

Ust

UST ファイルを取り扱うための class

__init__

パラメータを格納する list self._notes を作成する。

def __init__(self):
"""インスタンス作成"""
# ノート(クラスオブジェクト)からなるリスト
self._notes = []

__len__

len(self) したときに Version, Setting, PREV, NEXT, TRACKEND を含む、UST内の全エントリ数を返す。

n = len(ust)  # type(n): int

write

Ust オブジェクトをファイル出力にする。出力した文字列を返す

ust.write(path)  # type(path): str
# return strings written in ustfile

property: values

トラック情報を含む全ノートをリストで取得または登録する。

# Getter
l = ust.values  # l: [Note, Note, Note, ..., Note] <list of utaupy.ust.Note objects>
# Setter
ust.values = l  # l: [Note, Note, Note, ..., Note] <list of utaupy.ust.Note objects>

property: notes

音符と休符の情報をリストで取得または登録する。

# Getter
l = ust.notes  # l: [Note, Note, Note, ..., Note] <list of utaupy.ust.Note objects>
# Setter
ust.notes = l  # l: [Note, Note, Note, ..., Note] <list of utaupy.ust.Note objects>

property: tempo

トラックのグローバルテンポを取得する。

# Getter
x = ust.tempo  # x: float
# Setter
ust.tempo = x  # x: float

property: reload_tempo

self._notes 内の全 Note にローカルテンポ取得用のパラメータ _alternative_tempo を設定する。

self.values や self.values の setter を使うと自動的にで実行される。

ust.reload_tempo()
# no return

property: replace_lyrics(str old_lyric, str new_lyric)

全ノートの歌詞を置換する。

ust.replace_lyrics('か', 'か強')
# no return

vcv2cv

全ノートの連続音エイリアスを単独音にする。(空白で区切った後半をエイリアスにする)

make_finalnote_R

最後のノートが休符になるようにする。

ust.make_finalenote_R()
# no return

Note

__init__

パラメータを格納する dict self.__d 、エントリを識別するタグ self.tag 、歌詞を管理する self.lyricを作成する。

def __init__(self):
    self.__d = {}
    self.tag = '[#UNDEFINED]'
    self.lyric = None
    self._alternative_tempo = None

__str__

文字列出力するフォーマット

def __str__(self):
    return f'{self.tag} {self.lyric}\t<utaupy.ust.Note object>'
    # '[#0000] か    <utaupy.ust.Note object>'

property: values

ノートの各種パラメータを辞書で取得または上書きする。

# Getter
d = note.values  # type(d): dict
# Setter
note.values = d  # type(d): dict

property: tag

ノートのエントリを識別するタグを取得または上書きする。'[#SETTING]' とか '[#0000]' とか。

# Getter
s = note.tag  # type(s): str
# Setter
note.tag = s  # type(s): str

print(note.tag)  # '[#0000]' (for example)

property: length

# Getter
s = note.tag  # type(s): str
# Setter
note.tag = s  # type(s): str

print(note.tag)  # '[#0000]' (for example)

property: length_ms

# Getter
s = note.tag  # type(s): str
# Setter
note.tag = s  # type(s): str

print(note.tag)  # '[#0000]' (for example)

property: lyric

# Getter
s = note.tag  # type(s): str
# Setter
note.tag = s  # type(s): str

print(note.tag)  # '[#0000]' (for example)

property: notenum

# Getter
s = note.tag  # type(s): str
# Setter
note.tag = s  # type(s): str

print(note.tag)  # '[#0000]' (for example)

property: tempo

ノートのある位置でのテンポを取得または上書きする。 Setterとして使用した場合、直後に上位Ustオブジェクトの Ust.reload_tempo() の実行を推奨。

# Getter
n = note.tempo  # type(n): float
print(n)        # float 100.0 (for example)

# Setter
note.tempo = 120
print(note.tempo) # float 120.0
# After setting tempo, please do 'reload_tempo()' of Ust object which contains the Note object.
ust.reload_tempo()

get_by_key

任意のパラメータを取得する。存在しない場合 KeyError になる。

Get the parameter of note, by key you like. This may raise KeyError.

get_by_key('Modulation')  # '0'
get_by_key('Lyric')  # 'a か'
get_by_key('Tag')  # '[#0000]'

set_by_key

任意のパラメータを新規登録または上書きする。

print(get_by_key('Modulation'))  # KeyError
note.set_by_key('Modulation', 0)
print(get_by_key('Modulation'))  # '0'

delete

print(note.tag)  # '[#0000]'
note.refresh()
print(note.tag)  # '[#DELETE]'

insert

Not reccomended to use

print(note.tag)  # '[#0000]'
note.refresh()
print(note.tag)  # '[#INSERT]'

refresh

print(note.tag)  # '[#0000]'
note.refresh()
print(note.tag)  # '[#DELETE]\n[#INSERT]'

suppin

ノートの情報を最小限にする

note.suppin()

utaupy.otoini

UTAUの原音設定ファイルを扱うモジュール。setParamでの利用を想定。


OtoIni(list)

oto.ini ファイルを扱うためのクラス。list を継承。


Oto

oto.ini に含まれる各原音のパラメータを扱うクラス。


utaupy.table

かなローマ字変換表などを扱うモジュール。

utaupy.convert

Ust オブジェクト、OtoIni オブジェクト、Label オブジェクトなどを変換するモジュール。

utaupy.reaper

REAPER (DAW) のリージョン・マーカー用CSVファイルを扱うモジュール。

utaupy.utauplugin

UTAUプラグインをつくるためのモジュール。utaupy.utauplugin.UtauPlugin クラスは utaupy.ust.Ust を継承し、プラグイン用に最適化した子クラス。

使用例として半音上げプラグインを貼っておきます。

import utaupy

def notenum_plus1(utauplugin):
    """
    utauplugin: utaupy.utauplugin.UtauPlugin class object
    全てのノートを半音上げる
    """
    # UtauPluginオブジェクトのうちノート部分を取得
    notes = utauplugin.notes
    # 半音上げ
    for note in notes:
        note.notenum += 1

if __name__ == '__main__':
    # automatically 
        # read the utau plugin script
        # load as utaupy.utauplugin.UtauPlugin class object
        # overwrite the utau plugin script
    utaupy.utauplugin.run(notenum_plus1)

連絡先

  • Twitter: @oatsu_c

  • GitHub: oatsu-gh

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

utaupy-1.7.1.tar.gz (22.4 kB view hashes)

Uploaded Source

Built Distribution

utaupy-1.7.1-py3-none-any.whl (25.2 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page