音楽とかソフトとか

<追記ここから>
下記スクリプトには、後でoto.iniを自動的にコピーする部分を追加します。
UTAUバージョンアップでファイル上限が上げられたみたいなので、開発終了です。あえて古いバージョンを使いたい!と思うなら別ですが。。

でも、今試した感じだと、やっぱり原音設定をしないと厳しいようです。左右ブランクの設定がないので短い音が出るっぽいです。

前に、自動化プログラムを実装する時間が取れなさそうと書きましたが、とりあえず左右ブランクの自動設定だけなら試してみようと思います。わぶでばの自動ラベリングのコードを流用すれば前後の無音位置を検出できるので、そこに左ブランク、右ブランクのデータを付けるような仕組みは作れそうな気がします。

とりあえずoto.iniのコピーまで実装→左右ブランク自動化プログラム実装の順で行こうと思います。
<追記ここまで>

前に書いた記事のスクリプト(未完成)です。ベストな解ではないだろう、ということは前記事でも書きましたが、一応コーディングしてみています。

現状版では、Momo2というフォルダにモモの全データを置いておくと、ustファイルを読んで必要なwavファイルのみをMomo2フォルダからMomo2-Workというフォルダにコピーします。

oto.ini周りのコピーは未実装です。あと、cygwinとかperlとかの知識がないと動かせません。また、私自身まだ大してテストしてないのでバグがあるかもしれません。取り急ぎ、コードのバックアップの意味も含めてあげておきます(最近、れいんどろっぷ・しょーとかっとを皮切りに3回もデータ消失してしまっています(全部の自分の人為的なミス))。

あと、そもそもこのスクリプトは全データを使いたい!という欲望で作っていますが、中の方のブログを読む限りだと、使えそうな音を選んで使ってもらうことを想定されているようです。これだけ大量の収録なので、中には発音不明瞭やピッチ不安定な音もあるのかもしれません。その辺りの取捨選択にどう対応できるか、ということは検討した方が良さそうです。OKな音が大半だろうから、本スクリプトを使って、合成音を聞いて気になる音を手修正するというのが簡単な対応策と思いますが。。
--------


#!/usr/bin/perl -w
#
# ・やっつけスクリプトです。なんというか大域変数万歳的な(^^;
# ・今の所cygwinで開発しています。
# なので実行するならcygwinの知識が必要です。
# もしくはActivePerlをコマンドプロンプトで動かす知識が必要です。
# でもそれだと使える人が限定されてしまうので、
# もし色んな人に使ってもらうとしたらexe化しないと。。
# (PARだったっけ?)
#
# <実行手順>
# 1) Momo2 というフォルダにモモの全データを置く。
# 階層分けには現状では未対応。
#
# 2) utau で、デフォ子などでustファイルa.ustを作成し、保存。
#
# 3) 本スクリプトを Momo2 フォルダの一つ上で実行。
#
# % ./momoSub.pl a.ust
#
# これで、Momo2Work というフォルダが作られ、
# 必要最低限のwavファイルがコピーされる。
# また Momo2Work.ustというustファイルが作られる。
#
# memo: exe化するなら、入力ustファイル名を
# 固定にしてダブルクリックで動かせるようにした方が
# 多分便利
#
# 4) utau で Momo2Workを原音登録する。
# 5) Momo2Work.ustを開き、プロジェクトのプロパティで
# 原音をMomo2Workにする。
#
# <注意点とか ToDo とか>
# ・なにぶん大量のファイルなので、中には発音不明瞭や
# ピッチ不安定などで意図的に外したいwavファイル
# があるのかもしれませんが、それについては考慮していません。
#
# ・oto.ini のコピーなどは未実装。 ←重要

use strict;
use warnings;
use File::Copy; # wavファイルをコピーするためのモジュール

my $orgdir = "Momo2"; # モモ全データをいれたフォルダ
my $resultdir = "$orgdir-Work"; # 新規作成するwavフォルダ
my $resultfile = "$resultdir.ust"; # 出力ustファイル

my $title = ''; # ブロック名[#0001]とかを入れる
my %data = (); # ブロック内の各データを入れる

#-------------------------------------

# 保存フォルダを作り結果ファイルを開く
mkdir $resultdir;
open OUTUST, "> $resultfile";

# 最初の [#SETTING] ブロックの処理
while (my $str = <>){
$str =~ s/\r\n//; # 改行コード削除
if ($str =~ /^\[#\d+/) {
$title = $str;
last;
}
print OUTUST "$str\r\n";
}

# [#0000]以降の処理
while (my $str = <>){
$str =~ s/\r\n//; # 改行コード削除
if ($str =~ /^\[#/) {
&out;
$title = $str;
%data = ();
} else {
my @d = split '=', $str;
$data{$d[0]} = join '=', @d[1 .. scalar @d - 1];
}
}

# ファイル最後の [#TRACKEND]を出力
print OUTUST "$title\r\n";

# ファイルを閉じる
close OUTUST;

#-------------------------------------

# ブロックのデータを出力
sub out {
return if $title eq '';
&transData;
print OUTUST "$title\r\n";
foreach (keys %data) {
print OUTUST "$_=$data{$_}\r\n";
}
}

# 音高に応じてファイル名を変更
sub transData {
return if $data{'Lyric'} eq 'R'; #休符ならreturn

my @key = ('C', 'C#', 'D', 'D#', 'E', 'F',
'F#', 'G', 'G#', 'A', 'A#', 'B');
my @oto = qw(ド ド レ レ ミ ファ ファ ソ ソ ラ ラ シ);

# memo:
# NoteNum=24 == C1 UTAUで使える最低音
# NoteNum=57 == A3 モモwav最低音
# NoteNum=74 == D5 モモwav最高音
my ($key, $oto, $octave);
if ($data{'NoteNum'} > 74){
$key = 'D';
$oto = 'レ';
$octave = 5;
} elsif ($data{'NoteNum'} > 56) {
$key = $key[ ($data{'NoteNum'} - 24) % @key ];
$oto = $oto[ ($data{'NoteNum'} - 24) % @oto ];
$octave = 1 + int (($data{'NoteNum'} - 24) / @key);
} else {
$key = 'A';
$oto = 'ラ';
$octave = 3;
}

# ファイル名指定を書き換え
$data{'Lyric'} = "$data{'Lyric'}$key$octave$oto";

# wavファイルをコピー
copy ("$orgdir/$data{'Lyric'}.wav",
"$resultdir/$data{'Lyric'}.wav")
unless -r "$resultdir/$data{'Lyric'}.wav";
}

------
洗濯物を干せという声が聞こえたのでとりあえずここまで。。
スポンサーサイト

PageTop

コメント


管理者にだけ表示を許可する