プラグイン

おすすめプログラミング言語を考える(UTAU プログラマー向け)

「UTAU プラグインを作ろうと思うんだけど、プログラミング言語は何が良いんだろう?」

このようなお悩みをたまに見かけますので、今回はそれを考えてみます。

ちなみに、UTAU 以外で既に十分なプログラミング経験のある方は、普段お使いの言語で作れば問題ありません。プラグインの仕様や、各言語での実装例(半音上げプラグイン大会のエントリーなど)を見れば、あっという間に作れるでしょう。

ここでは、あまりプログラミング経験のない方のために考えることにします。

言語選びのポイントは以下です。
  • 世間で人気の言語であること
  • GUI が作りやすいこと
  • プラグイン利用者側の追加ソフトインストールが不要であること
各項目について、次節以降で詳しく見ていきます。

世間で人気の言語であること

夢も希望もない話かもしれませんが、初心者であるほど、長いものに巻かれるほうが無難です。

世間で人気の言語(利用者が多い言語)であれば、入門書や入門サイトも数多く存在しますし、ハウツーやトラブル対策の情報も豊富です。あなたがトラブルに見舞われたとして、人気の言語ならば、他にも多くの人が似たような経験をしているはずなので、すぐに対応策を探せるでしょう。

逆に、マイナー言語の場合、そもそも開発環境自体のバグが残っていたりすることもあり、余計なトラブルに巻き込まれかねません。

TOIBE_201601人気の言語は、TOIBE が定期的に測定しています。クローズドソースも含め、世界で使われている言語を推定しているランキングです。古めの言語の順位が上がってしまう傾向にありますが、十分参考になります。2016 年 1 月のランキングでは、以下の順位です。
  1. Java
  2. C
  3. C++
  4. C#
  5. Python
  6. PHP
  7. Visual Basic .NET
  8. JavaScript
  9. アセンブラ
  10. Ruby
Java は最近ずっと 1 位をキープしています。パソコンの世界だけ見ると Java で作られたアプリはそこまで多く感じられませんが、スマホ(Android)アプリは Java がメインであり、スマホ開発が盛んになっていることの現れでしょう。

C と C++ は順当に高ランキングを獲得していますね。歴史の長い言語なので、直近の勢いという意味ではそれほどではありませんが、しっかりしたライブラリなどの多くは C/C++ ですし、普段使っているようなパソコンソフトだけではなく、裏方(ドライバ、ライブラリ、ファームウェア等)としても様々な場面で使われています。

4 位の C# はメジャー言語の中では後発組です。短期間でランキング上位にのしあがったのは、マイクロソフトの影響力が大きいです。とはいえマイクロソフトの影響力 があるのはパソコンの世界の話で、スマホではあまり影響力はありません。スマホ全盛の時代に高ランキングを獲得しているのは、C# そのものの良さがあるからでしょう。

5 位の Python は、日本ではそこまでメジャーではありません。プロの求人ランキング(横軸)を見ても、マイナー言語と同等の求人件数しかありません。しかし、世界に目を向ければ、Google 先生が Python 押しであることが大きな追い風となり、ホットな言語と言えます。

6~10 位は、アセンブラを除いてお手軽系の言語が並んでいます。

これら 10 言語をおすすめ言語候補として、以降でさらに絞り込んでいきましょう。

GUI が作りやすいこと

ほとんどの UTAU プラグインには GUI(ウィンドウやボタンなどの画面)が必要になってきます。GUI を簡単に作れるかどうかは、生産性に大きく影響します。

言語ランキング 1 位の Java は初期の頃から GUI に力を入れてきており、GUI は作りやすいと言えるでしょう。私自身は Java での GUI 開発経験はありませんが、例えば Java の統合開発環境として使える Eclipse であれば、RAD ツール(GUI をドラッグアンドドロップで簡単に設計できるツール)の Swing Designer が標準搭載されているようです。

言語ランキング 2 位の C での GUI 開発は地獄です。仕事でやむを得ずというのならともかく、UTAU プラグインの GUI を作るために C を用いるのは正気の沙汰ではありません。

言語ランキング 3 位の C++ での GUI 開発は微妙です。

C++ 開発環境の鉄板である Visual Studio において、GUI 開発は以前よりはマシになりました。RAD ツール付きの Visual Studio が無償で利用できるようになったためです。しかし、付属の C++ ライブラリの使い勝手は悪く、慣れるまでにかなりの時間を要するでしょう。

別の C++ 開発環境として C++Builder が挙げられます。優秀な RAD ツールで、効率的に GUI 開発が行えます。しかし、価格が高いこと、バグが多くサポート力も弱いこと(昔のセキュリティーホールが放置されたままになってたります)、(言語としてではなく)ツールとしてのユーザー数が少ないことから、おすすめはできません。

言語ランキング 4 位の C# および 7 位の Visual Basic .NET(以降 VB.NET)は GUI の開発がやりやすくなっています。開発環境は C++ の時と同じく Visual Studio ですが、使い勝手は大きく異なります。C#・VB.NET の場合は GUI が作りやすいように整備されており、また、付属のライブラリ(.NET)も扱いやすいです。

言語ランキング 5 位の Python は、標準では GUI の開発は大変です。RAD ツールとしては Monkey Studio が利用できるようですが、日本語の情報がほとんどありません。しかし、IronPython という、.NET と組み合わせたバージョンの Python は、GUI を開発しやすくなっています。ただし、日本語の情報はあまり多くないようですので、プログラミングに不慣れな人が挑戦しようとすると困難が待ち受けるでしょう。

言語ランキング 6 位の PHP と 8 位の JavaScript はウェブ専用のプログラミング言語なので、今回は除外します。

言語ランキング 9 位のアセンブラでの GUI の開発は……理論上は可能ですね。しかし現実は無理でしょう。

言語ランキング 10 位の Ruby での GUI 開発は、Python と似たような状況です。標準では GUI は作りづらいものの、.NET と組み合わせた IronRuby があります。ただし、IronRuby の開発は止まっており、Python よりも状況は悪いです。

以上により、人気の言語でかつ、標準で GUI 開発を行いやすいのは、Java、C#、VB.NET であることがわかりました。

プラグイン利用者側の追加ソフトインストールが不要であること

UTAU プラグインを使うために、プラグイン以外にも別途あれもこれもソフトをインストールしてください、だと、プラグイン利用者としては不便ですし、インストール作業を面倒くさがってプラグインの利用を諦めてしまうことも多いでしょう。

まず Java ですが、実行ファイルを生成することはできず、別途、JRE(Java Runtime Environment)と呼ばれる追加ソフトが必要となります。残念。

とはいえ、ウェブブラウザのプラグインをインストールする際に一緒に JRE を入れている利用者もいますので、減点要素はそこまで大きくありません。

C#、VB.NET は実行ファイルを生成できます。別途 .NET Framework という追加ソフトが必要となるのですが、Windows に初めからインストールされていたり、あるいはすでに別のソフトを使う際に利用者が自分でインストールしていたりと、たいていの場合はインストールされていることでしょう。とはいえ、.NET Framework のバージョン違いによってインストールが必要になることもあり、減点要素はゼロではありません。

以上により、これまで絞り込んだ言語の中で、この項目を完璧に満たせる言語はありません。

(2024/06/08 追記)
最近の C# は「自己完結型」といって完全に追加インストール不要で配付可能になりました。

総合評価

ここまでで、有力候補は Java、C#、VB.NET の 3 つに絞られました。この 3 つに順位を付ける場合、私は以下のようにします。
  1. C#
  2. VB.NET
  3. Java
Java は実行ファイルを生成できないので 3 位。実際に UTAU プラグインを配布する際に、一手間必要になってきます。それとは別に、Java は起動が遅いので(一度起動してしまえば早いのですが)、プラグイン利用者がちょっとイライラするかもしれません。

C# と VB.NET を比較すると、機能としては同等なのですが、C# の方が簡潔にプログラムを記述できます。また、よく言われることとして、VB プログラマーの質が低いというのがあります。VB で開発していると、ネットの「知恵」が実は微妙な情報で、それを信じてドツボにハマる、というリスクがあります。

以上により、UTAU プラグインをこれから開発するなら、最もオススメのプログラミング言語は「C#」という判断にいたします。

懸念事項としては、「プログラミング経験の少ない人が C# にチャレンジするのはハードルが高くないか」という問題です。順当に C やあるいは軽量系スクリプト言語の方が習得しやすいかもしれません。とはいえ、UTAU プラグインを作るのが目的であれば、それらの言語では目的を達成するのが困難というのがこれまでの流れです。

これから C# を勉強しはじめる場合、きちんとした書籍を購入して、体系的に C# を理解するのが結局は一番近道だと思います。C# に限りませんが、プログラミングの概念をきちんと理解するのはなかなか大変で、ウェブの Tips をつまみ食いした程度ではその場しのぎの知識しか手に入りません。

とはいえ、まず少し作ってみたいんだ、という場合は、
はいかがでしょうか。GUI アプリを C# で実際に作ってみることができます。また、
の C# の実例(エントリー 3、15、22、27(GUI))も参考になるかと思います。C# 言語の詳細については、プログラミングの基礎的な知識を前提としていますが、

がオンラインの情報としてはまとまっていると思います。


余談

今回は C# 押しということになりました。確かに C# は素晴らしい言語です。
  • 他の言語の良いところを取り入れていて使いやすい
  • GUI・ネットワーク・同期プログラミングなど周辺のライブラリも充実かつ整理されている
  • Visual Studio の支援機能がずば抜けて強力(他の環境を使う気になれないくらい)
しかし、つまるところプログラミング言語なんて何でも良いというのもまた一理あるところです。

最初にメジャー言語で絞り込みましたが、情報収集にもっと労力を注ぎ、不足するところは自分で考えることにすれば、マイナー言語でもいいわけです。例えば Lazarus は無料で GUI を簡単に構築できます。Lazarus に限定するとユーザー数は多くありませんが、Lazarus は言語としては Object Pascal でありそこそこの順位にいますから、悪くない選択肢かもしれません。

今回 1 位と 2 位の C# と VB.NET を比較した場合、VB.NET の良いところは一つも無いと言っても過言ではありませんが、C# と 3 位の Java を比較した場合、UTAU プラグイン以外にも目を向ければ、Java のいいところもたくさんあります。将来 Android アプリも作りたい、ということであれば、その準備を兼ねて Java を選択する、ということも考えられます(逆に Android アプリを C# で作る方法もありますが)。

世界の潮流で言えば、Python は「来てる」言語です。Google のクラウドサービスで何かしようとしたら Python は有力でしょう。その意味では、IronPython も挑戦しがいがあるかもしれません。

C# ももちろんですが、他の言語にも是非目を向けてみてください。

大盛況だった半音上げプラグイン大会の振り返り

半音上げプラグイン大会UTAU プラグインの作り方は開発者ごとに異なり、その違いを見てみると楽しく勉強になるのではないか、ということで始まった「半音上げプラグイン大会」。UTAU プログラマーの祭典です。2015/12/11~12/31 の 3 週間開催。

ニッチなイベントなので、そもそも参加してくださる方がいるのか不安でしたが、蓋を開けてみれば大盛況で、なんと 24 件ものエントリーがありました。単に「半音上げる」だけのシンプルなプラグインが、いろいろなプログラミング言語やアルゴリズムで、24 パターンも登場したということです。

本記事では、そんな大会の様子を振り返ってみたいと思います。大会レギュレーションは、以前の記事を参照して下さい。

蛇足ですが、UTAU のメニューに半音上げる処理はありますので、実用上は、半音上げるプラグインは必要ありません。

目次


エントリー一覧

#エントリー(敬称略)言語ソースコード
1HaruqaUWSC表示 DL
2
なでしこ
表示 DL
3SHINTA
C#
表示 DL
4
bizz
Lazarus
表示 DL
5
masao
C++
表示
6
bizz
Lazarus
表示 DL
7
masao
C
表示
8
Haruqa
UWSC
表示 DL
9
Haruqa
UWSC
表示 DL
10
大兄P
Java
表示
11
bizz
HSP
表示 DL
12
山岸
Java
表示
13
masao
C++
表示
14
大兄P(#10 の修正)
Java
表示
15
ばわめ rwxr--r--
C#
表示(メイン クラス
16
あさくら・ふにょし
Electron
表示(HTML JavaScriptDL
17
あさくら・ふにょし
バッチファイル
表示
18
Haruqa
JScript
表示
19
とりフラ.ust.vvv
ExcelVBA
表示
20
masao
C++
表示
21
あらいふ
Python
表示 DL(ソース バイナリ
22
Haruqa
C#
表示 DL
23
飯香
条件設定プラグイン
表示
24
飯香
BF プラグイン
表示

典型的な半音上げプラグインの動作

まず、UTAU プラグインそのものの概要をおさらいしておきましょう。

一般的なアプリケーションにおいて「プラグイン」というと DLL 形式のものが多いですが、UTAU の場合はそうではなく、UTAU プラグインは実行ファイル(.exe)などの形式となります。

UTAU プラグインの仕様は公式サイトなどに書かれていますが、UTAU 画面上でユーザーが選択した音符の情報を、UTAU が一時ファイルに書き出します。UTAU プラグインはその一時ファイルを読み込み、音符の情報を変更して、一時ファイルに書き戻します。プラグイン実行後、UTAU が再度一時ファイルを読み込んで変更内容を確認し、UTAU 画面に反映する、という流れです。

一時ファイルは INI ファイルの形式となっており、1 つの音符の情報が 1 つのセクション(UTAU ではセッションと呼んでいます)にまとめられています。例えば、音程が「ド」(C4)で歌詞が「い」の四分音符だと、以下のように出力されます。

[#0001]
Length=480
Lyric=い
NoteNum=60
Intensity=100
Moduration=0

NoteNum が音程を表していて、数字が大きいほど高音になります。60 なら C4、61 なら C#4 というように、1 増える毎に半音上がっていきます。

つまり、「半音上げプラグイン」であれば、NoteNum を読み、NoteNum の値を 1 増やしてから、一時ファイルを上書きすれば、目的を達することができるわけです。

次節以降で、今回エントリーされた内容について、私の分かる範囲で解説していきます。

解説:C#

まずは、エントリー No.3、私が作成した C# 版の半音上げプラグインについて。

処理方法は単純で、一時ファイルを全行読み込んでから、NoteNum を探し、値を 1 増やしています。

注意すべきは、[#PREV][#NEXT] という特別なセクションです。UTAU は、ユーザーが選択した音符の「前後の音符」の情報も一時ファイルに出力し、その内容が [#PREV][#NEXT] セクションに記載されます。[#PREV][#NEXT] セクションの内容を書き換えてしまうと、ユーザーが選択してない音符の情報が変わってしまうことになるので、避ける必要があります。

セクション行を解析する際に、選択範囲の音符セクション([#0001][#0002]……)かどうかを判定し、結果をフラグとして保持しておきます。NoteNum が出てきた時にフラグを確認し、フラグが立っている場合のみ、処理を行うことで、[#PREV][#NEXT] セクションを避けています。

メモリ上で NoteNum の変更を終えた後、全行を一気に一時ファイルに書き戻しています。

別の C# エントリーとして、ばわめ rwxr--r-- さんの No.15 があります。

この実装では、一時ファイルへのアクセスを INI ファイル解析クラス(をカスタマイズしたもの)を用いて行っています。これにより、メイン側では処理をセクション単位で遷移させることができるようになり、また、NoteNum の値も簡単に取り出せるようになっています。

音符セクションかどうかの判定には正規表現を用いており、確実な判定が行えます。

C# はもう 1 つ、Haruqa さんの No.22 もあります。

この実装も No.15 と同様、一時ファイルへのアクセスを担当するクラスを用いていますが、こちらはイチから作成したクラスとなっており、音符のプロパティーをそれぞれ専用のメンバー変数で保持する仕様となっています。

解説:C++

C++ は masao さんが 3 エントリーされています。

ますは No.5

本人コメントでは、先ほどの No.3 C# 版を移植しただけとありますが、処理方法はかなり進化しています。

一時ファイルを一行一行読みながら作業するのですが、まず、音符セクションが出てきた場合に、その行を「出力バッファ」に溜めます。また、NoteNum が出てきた場合にも、音程を半音上げてから「出力バッファ」に溜めます。それ以外の場合は、出力バッファに溜めません。

結果として、最小限の変更箇所のみが「出力バッファ」に溜まり、それを一時ファイルに書き戻しています。これにより、書き戻す一時ファイルがコンパクトになります。

[#PREV][#NEXT] を除外するフラグの考え方は No.3 と同様ですが、判定方法が賢くなっています(No.3 はかなり手抜きでした)。

次に No.13

こちらは、一時ファイルの取り扱いを楽にする Lib UTAU を用いて実装しています。

一時ファイルの解析を Lib UTAU が行ってくれるので、[#PREV][#NEXT] を除外するのも簡単で、プログラムが非常にシンプルになっています。Lib UTAU の SectionNotesNormalBegin()~SectionNotesNormalEnd() の間だけ処理を繰り返すことで、自動的に [#PREV][#NEXT] が除外されます。

最後に No.20

Lib UTAU と同様の自作ライブラリを用いて実装しているとのことで、No.13 同様、プログラムが非常にシンプルになっています。

自作ライブラリは非公開のため内容は不明ですが、セクションとキーバリューペアの関連性も保持しているようで、使いやすそうです。

解説:C

masao さんは No.7 で C 言語版も作成されています

基本的な考え方は No.5 C++ 版と同様ですが、「出力バッファ」を使わずに、代わりに、逐次「テンポラリファイル」(UTAU の一時ファイルとはまた別のファイル)に書き出しています。C 言語は文字列(に関わるメモリ)の扱いが面倒なので、出力バッファを使わないほうが楽だと判断したのでしょう(違ってたらすみません)。

最後に、UTAU の一時ファイルを削除して、代わりに、プラグインが出力したテンポラリファイルを一時ファイルにリネームして完了です。

C 言語はファイルや文字列の扱いが煩雑なのに、非常にスマートにプログラミングされており、masao さんの技術力の高さがうかがえます(私はこんなにスマートに実装できません)。

解説:Java

Java はお二方がエントリー。

No.12 の山岸さんは、処理の流れとしては No.7 の C と近しい感じになっています。

C とは異なり、Java は文字列を手軽に扱えるので、全体的にコードがすっきりしています。また、音符セクションかどうかの判定や、音高行の判定に正規表現を用いており、スマートに判定ができています。

エラー処理が入っている点も見逃せません。本大会はプラグインの実運用が目的ではないので、エラー処理が入っていないエントリーも多いですが、実際にプラグインを開発する際にはエラー処理は必須になってきます。きちんとエラー処理を行う山岸さんの堅実さがうかがえます。

No.14 の大兄 P さんは、一風変わった処理の流れになっています。

最初に一時ファイルを 7 行読み飛ばしているのは、[#VERSION][#SETTING] といったセクションを読み飛ばす意図だと思われます(違っていたらすみません)。

その後、[#PREV][#NEXT] を避けつつ、NoteNum を 1 上げています。

No.14 は修正バージョンで、当初は No.10 でのエントリーでした。自分のソースコードを見直したり、他人のコードを参考にしたりしながら、ブラッシュアップしていくのも、プログラミングの醍醐味ですよね。

解説:Python

No.21 のあらいふさんは Python で作成されています

行毎に処理を進めていくのですが、「セクション開始待ち」なのか「NoteNum エントリー待ち」なのかという「状態」を保持しておき、状態に応じて、解析を実行する関数を切り替えています(関数ポインタ方式)。

「セクション開始待ち」では、セクション名を見て、音符セクションであれば、「NoteNum エントリー待ち」に状態遷移します。

「NoteNum エントリー待ち」では、NoteNum の行が来たら音程を 1 上げて、「セクション開始待ち」に遷移します。

ファイルの存在確認や、音程の上限確認など、エラー対応関連も充実しています。

解説:UWSC

これまでは、プログラミング言語人気トップ 10 に入るような超メジャーな言語の実装を見てきましたが、ここからは、もう少しいろいろな言語を見ていきましょう。

UWSC では Haruqa さんが 3 件エントリーしています。

今回の大会である意味一番驚いたのが No.1 の UWSC です。このプラグインは、一時ファイルを一切使いません。UTAU を操作し、UTAU のメニューから「選択部分を上へ移動」を実行することにより、半音上げを実現しています。UTAU 本体を操るプラグインというわけです。

No.8 は一時ファイルを使いますが、一時ファイルの書き換えは、メモ帳を操って行っています。

No.9 は普通に一時ファイルを更新しています。

解説:なでしこ

巽さんが使ったなでしこは、日本語でプログラミングが行える言語です。

処理方法としては、いったんすべての NoteNum を 1 上げたあとで(UTAU とは別の)テンポラリファイルに保存し、その後、テンポラリファイルから UTAU の一時ファイルに書き戻す際に、[#PREV][#NEXT] を除外しているようです。

個人的には、「B はそれ」という禅問答みたいは表現が、日本語プログラミングっぽくて好きです。

解説:Lazarus

オープンソース版の Delphi ともいえる Lazarus(言語としては Object Pascal)は、bizz さんが 2 件エントリーされています。

No.4 はオーソドックスなバージョンで、処理の流れは No.5 の C++ とほぼ同じです。

変わり種は No.6

半音上げるという処理を、音程を上げるのではなく、ピッチベンドカーブをいじることによって実現しています。ピッチベンドは PBW や PBY といったパラメータをかなり処理する必要があり、ソースコードの量からもその大変さがうかがえます。

「やり方は 1 つではない」ということがよくわかる実例です。

解説:HSP

bizz さんはもう 1 つ、HSP でもエントリー。

HSP は構文が簡単な手続き型スクリプト言語ですが、コンパイルが可能なため、利用者側は HSP のインストールが不要です。小規模なゲーム開発に人気なイメージがあります。

HSP は目的語を省略できるタイプの言語のようで、内容がいまいち読み取りにくいのですが、処理の流れとしては、No.3 C# 版の全行書きだし型に近いのではないかと見受けられます(違っていたらすみません)。

解説:Electron

あさくら・ふにょしさんは Electron でエントリー。私は今回の大会で初めて Electron の存在を知りましたが、HTML + JavaScript で(ローカルで動く普通の)アプリを作れる環境のようです。Web でバリバリコーディングしている人が、ちょっとしたツールを作る場合などに重宝しそうです。

実装は、最近の JavaScript らしくラムダ式を用いています(幹となる部分)。

処理内容としては、最初に「セクション名」と「キーバーリューペア」のペアをすべて解析して連想配列に格納します(連想配列の入れ子のようなイメージ)。本記事冒頭の一時ファイルで言えば、{#0001={Length=480, Lyric=い, NoteNum=60}} みたいな感じです。JavaScript の柔軟な型の利用が活きています。

その後、音符セクションについて、NoteNum を 1 上げてから、テンポラリファイルに書き戻します。

解説:バッチファイル

あさくら・ふにょしさんはバッチファイルでもエントリー。

いにしえの MS-DOS 時代から省力化ツールとして親しまれているバッチファイルですが、UTAU プラグインとしても使えるのだと思うと、隔世の感があります。

さすがに高度な関数は使えないので、読み飛ばすセクション([#PREV][#NEXT] など)は列挙して対応していますが、バッチファイルだけでも文字列の扱いや音程計算がきちんと行えており、驚きの内容になっています。私は、バッチファイルでこんなにうまく実装できるものとは知りませんでした。

UTAU プラグインとしてだけではなく、日々の作業の省力化のためにバッチファイルを書く際にも非常に参考になる内容になっています。

解説:JScript

UWSC の Haruqa さんは JScript でもエントリー。JScript は JavaScript 互換ですが、JavaScript 単体では通常行えないファイル出力などが可能です。

処理の内容としては、一時ファイルを一行ずつ読み込みながら、NoteNum であれば半音上げつつ、バッファに溜めていきます。最後に、一時ファイルに書き出します。

解説:ExcelVBA

とりフラ.ust.vvv さんは ExcelVBA でエントリー。いわゆるエクセルマクロです。

処理の流れは、No.12 の Java と近しい感じになっています。VBA は Visual Basic for Applications という名前の通り、BASIC 言語の流れを汲んでいますが、ファイルオープンの構文などはまさに BASIC 感に溢れています。

さすがにエクセルファイル直接は UTAU プラグインとして使えないようで、実際に使う際には、バッチファイルと組み合わせているようです。

解説:既存プラグインのパラメーター設定方式

さまざまなことが行える既存の UTAU プラグインに対して指令を与えることで、半音上げるという作戦もあります。「プラグインを開発する」のではなく、「既存のプラグインでまかなう」というイメージですね。

飯香さんの No.23 は、条件設定プラグイン(亜麻)を、すべての音符に対して半音上げるという条件を設定して起動しています。

また、No.24 は、特定の効果を持つ音符の配置を予め BF プラグインに読ませてから、再度 BF プラグインを起動することで、半音上げを実現しています。BF は恐らく Brainfuck のことだと思いますが、難解なパズルです。

まとめ

「半音上げる」。ただそれだけのことなのに、まさに十人十色の実装になりました。

行ごとに文字列的な処理をしていく方法が主流でしたが、人や言語によって実装方法はさまざまでした。また、セクションとその値を有機的に捉えたうえで半音上げるプラグインもいくつかありました。

さらには、音程ではなくピッチをいじるプラグインや、UTAU プラグインの概念を根底から覆すプラグインまで登場しました。

他人のプログラムを見ると言うことは非常に勉強になりますが、今回はシンプルで身近な UTAU プラグインを題材としたことで、より一層そのことが実感できたかなと思います。

ご参加くださった皆様、本当にありがとうございました。

遅刻組

締切は過ぎましたが、投稿いただいたものをこちらに掲載させていただきます。

関連リンク


更新履歴

  • 2020/03/28 [28]~[30] 捕捉

鼻歌採譜プラグイン Ver 2.23 β を公開

23Beta歌声から音符を取得する UTAU 用のプラグイン「鼻歌採譜プラグイン(Humming to Score Plugin)」をバージョンアップ。Ver 2.23 β をテスト公開しました。

最新の Lib UTAU を使用することにより、解析能力が向上しました。

その他、細かな使い勝手を向上させています。

今後当面の間、鼻歌採譜プラグインはバージョンアップできないと思います。どなたさまも、こちらのバージョンをお使い下さい。

ダウンロード


うたりす Ver 4.33 を公開

うたりす_Ver433UTAU 用の WAVE トレース方式自動調声プラグイン「うたりす」をバージョンアップしました。

最新の Lib UTAU を使用することにより、解析能力が向上しました。

その他、細かな使い勝手を向上させています。

今後当面の間、うたりすはバージョンアップできないと思います。どなたさまも、こちらのバージョンをお使い下さい。

うたりす Ver 4.19 を公開

うたりす_Ver419UTAU 用の WAVE トレース方式自動調声プラグイン「うたりす」をバージョンアップ。

エラー処理を強化しました。

解析が進まずに途中で止まってしまっていた方は、今回のバージョンをお使い頂くことにより、原因が判明するのではないかと思います。

うたりすのダウンロードは以下からどうぞ。

唄詠 Ver 3.03 β を公開

唄詠_Ver303BetaUTAU 音源で文章を読み上げるためのソフト、唄詠(うたよみ)の更新版をリリース。

前回と比べると、以下が改善されています。
  • 原音設定を解析して音声合成するようになったため、発音が滑らかになりました。前回は音が(全くまたはほとんど)出なかった音源でも、今回は出るのではと思います。
  • スペースを含むフォルダを扱えるようになりました。
  • その他、細々とした改良を行っています。


以下の点は、前回から変わっていません。

  • 単独音のみの対応です。
  • 読み上げできる文章は、ひらがなおよびカタカナのみです。
  • XML 形式での発音記号読み上げに対応しています。

下記動画およびヘルプファイルをよく読んでからご利用下さい。


対応 OS や動作確認済み UTAU 音源などもヘルプに記載してあります。


唄詠のダウンロードは以下からどうぞ。

動作した環境、動作しなかった環境を教えていただけると助かります。

唄詠 Ver 1.80 Developer Release を公開

唄詠_メインウィンドウ※新版を公開しました→こちら

UTAU 音源で文章を読み上げるためのソフト、唄詠(うたよみ)をリリース。

Ver 1.80 Developer Release。開発途上のバージョンです。読み上げがたどたどしい他、いろいろと制限があります。

必ず、下記動画およびヘルプファイルをよく読んでからご利用下さい。



対応 OS や動作確認済み UTAU 音源などもヘルプに記載してあります。

唄詠のダウンロードは以下からどうぞ。


鼻歌採譜プラグイン Ver 2.13 β を公開

歌声から音符を取得する SS_SaiLis_Main_Ver205BetaUTAU 用のプラグイン「鼻歌採譜プラグイン(Humming to Score Plugin)」をバージョンアップ。Ver 2.13 β をテスト公開。

ドラッグ&ドロップインストールに対応しているので、ダウンロードしたアーカイブを UTAU のウィンドウにドラッグ&ドロップすればインストール可能。

今回はマイナーバージョンアップで、配布サイトの URL の修正を実施。また、ミチコラさんに送って頂いた簡体字中国語の言語ファイルを収録した。謝謝!

引き続き、他の言語の辞書ファイルもお待ちしております。

鼻歌採譜プラグインの使い方などについては、新しく公開した動画をご覧ください

鼻歌を録音する際は、ノイズの少ない高音質の機材で行う方が良い結果が得られる。自分は、オリンパスのリニア PCM ボイスレコーダー、DS-800 で行っている。



鼻歌採譜プラグイン Ver 2.12 β を公開

歌声から音符を取得する SS_SaiLis_Main_Ver205BetaUTAU 用のプラグイン「鼻歌採譜プラグイン」をバージョンアップ。Ver 2.12 β をテスト公開

ドラッグ&ドロップインストールに対応しているので、ダウンロードしたアーカイブを UTAU のウィンドウにドラッグ&ドロップすればインストール可能。

今回のバージョンアップ内容は、
  • 音長解析のさらなる改善。
  • 多言語対応のさらなる改善。
  • 細かなバグ修正。
また、Maplestyle さんに送って頂いた繁体字中国語(台湾)の言語ファイルを収録した。謝謝 Maplestyle!

引き続き、他の言語の辞書ファイルもお待ちしております。

以下の組み合わせで動作を確認。

鼻歌採譜プラグインOSUTAU音源
鼻歌採譜プラグイン
Ver 2.12 β
Windows 8 Pro
64 ビット版
UTAU
Ver 0.4.14
淡水ウパ淡水ウパ
鼻歌採譜プラグイン
Ver 2.12 β
Windows 7 Professional
64 ビット版
UTAU
Ver 0.4.16
槌音ずも
槌音ずも
鼻歌採譜プラグイン
Ver 2.12 β
Windows XP Professional
SP1 32 ビット版
UTAU
Ver 0.2.75
実音とわの(100404)実音とわの100404

なお、Windows 2000 では動作しない。

鼻歌採譜プラグインの使い方などについては、新しく公開した動画をご覧ください

鼻歌を録音する際は、ノイズの少ない高音質の機材で行う方が良い結果が得られる。自分は、オリンパスのリニア PCM ボイスレコーダー、DS-800 で行っている。



鼻歌採譜プラグイン Ver 2.05 β を公開

SS_SaiLis_Main_Ver205BetaUTAU 用の歌声→音符取得プラグイン「鼻歌採譜プラグイン」をバージョンアップ。Ver 2.05 β をテスト公開

ドラッグ&ドロップインストールに対応しているので、ダウンロードしたアーカイブを UTAU のウィンドウにドラッグ&ドロップすればインストール可能。

今回は、細かなバグ修正の他に、多言語対応を行っている。

英語環境で鼻歌採譜プラグインを起動すると自動的に英語表示になるほか、ユーザーが表示言語を指定することも可能。

翻訳データベース(辞書ファイル)は単なるテキストファイルなので、誰でも作成可能だ。

現在は日本語と英語の 2 カ国語しか対応していないが、他の言語の辞書ファイルを作成したら送ってください。次期バージョンに収録させて頂きます。

以下の組み合わせで動作を確認。

鼻歌採譜プラグインOSUTAU音源
鼻歌採譜プラグイン
Ver 2.05 β
Windows 8 Pro
64 ビット版
UTAU
Ver 0.4.14
淡水ウパ淡水ウパ
鼻歌採譜プラグイン
Ver 2.05 β
Windows 7 Professional
64 ビット版
UTAU
Ver 0.4.14
春歌ナナ春歌ナナ
鼻歌採譜プラグイン
Ver 2.05 β
Windows XP Professional
SP1 32 ビット版
UTAU
Ver 0.2.75
実音とわの(100404)実音とわの100404

なお、Windows 2000 では動作しない。

鼻歌採譜プラグインの使い方などについては、旧バージョンなので現在とは少し異なるところもあるが、動画で紹介している

鼻歌を録音する際は、ノイズの少ない高音質の機材で行う方が良い結果が得られる。自分は、オリンパスのリニア PCM ボイスレコーダー、DS-800 で行っている。



鼻歌採譜プラグイン Ver 1.77 β を公開

◆更新情報◆
Ver 2.05 β を公開

SaiLis177Beta_MainUTAU 用の歌声→音符取得プラグイン「鼻歌採譜プラグイン」をバージョンアップ。Ver 1.77 β をテスト公開

ドラッグ&ドロップインストールに対応しているので、ダウンロードしたアーカイブを UTAU のウィンドウにドラッグ&ドロップすればインストール可能。

今回の大きな変更点は、音長解析(リズム)の精度を向上させたこと。

これまでは、欲しい音長の半分の音長を指定する必要があった(例えば、全部 4 分音符の曲を採譜するなら指定は 8 分音符)が、今回のバージョンアップにより、欲しい音長そのものを指定すれば良いようになった。

ブレス(息継ぎ)への対応が行われ、別の音符として採譜してしまう確率も低くなった。

その他、全体的に音長解析の仕組みを見直しており、音長だけで見れば、そこそこの結果を得られることが多くなった。

これに伴い、Developer Release からベータ版に格上げ。

その他の主な変更点は、
  • 挿入する歌詞の種類(単独音/連続音)を選べるようにした。
  • 参考情報としてピッチ情報を付加できるようにした。
  • 歌唱 WAVE を履歴から選べるようにした。

以下の組み合わせで動作を確認。

鼻歌採譜プラグインOSUTAU音源
鼻歌採譜プラグイン
Ver 1.77 β
Windows 8 Pro
64 ビット版
UTAU
Ver 0.4.14
淡水ウパ淡水ウパ
鼻歌採譜プラグイン
Ver 1.77 β
Windows 7 Professional
64 ビット版
UTAU
Ver 0.4.12
櫻歌ミコ キレ音源櫻歌ミコキレ音源
鼻歌採譜プラグイン
Ver 1.77 β
Windows XP Professional
SP1 32 ビット版
UTAU
Ver 0.2.75
実音とわの(100404)実音とわの100404

なお、Windows 2000 では動作しない。

鼻歌採譜プラグインの使い方などについては、旧バージョンなので現在とは少し異なるところもあるが、動画で紹介している

鼻歌を録音する際は、ノイズの少ない高音質の機材で行う方が良い結果が得られる。自分は、オリンパスのリニア PCM ボイスレコーダー、DS-800 で行っている。



鼻歌採譜プラグイン Ver 1.31 Developer Release を公開

SS_SaiLis_Analyze◆更新情報◆
Ver 1.77 β を公開

UTAU 用の歌声→音符取得プラグイン「鼻歌採譜プラグイン」をバージョンアップ。Ver 1.31 Developer Release をテスト公開。併せて、スクリーンショット集も公開

ドラッグ&ドロップインストールに対応しているので、ダウンロードしたアーカイブを UTAU のウィンドウにドラッグ&ドロップすればインストール可能。

主な変更点は、
  • マルチスレッド解析による高速化。
  • プログレスバー表示の改善。

以下の組み合わせで動作を確認。Windows 2000 では動作しない。

鼻歌採譜プラグインOSUTAU音源
鼻歌採譜プラグイン
Ver 1.31 DR
Windows 7 Professional
64 ビット版
UTAU
Ver 0.4.12
鳴都 Sweet
(採譜後歌詞を連続音に変更)
鳴都Sweet
鼻歌採譜プラグイン
Ver 1.31 DR
Windows XP Professional
SP1 32 ビット版
UTAU
Ver 0.2.75
実音とわの(100404)実音とわの100404

解析速度について、これまでの公開バージョンである Ver 1.17 DR と比較してみた。比較条件は、
  • 解析対象 WAVE:312.1 秒(44.1kHz、2ch)
  • CPU:Intel Core i5-750s(2.4 GHz、4 コア 4 スレッド)
  • 詳細環境:こちら

結果は下記のようになり、実時間の 24 倍速で解析できるようになり、Ver 1.17 DR と比較して 2.4 倍高速に解析できるようになった。

鼻歌採譜プラグイン所要時間倍速
鼻歌採譜プラグイン Ver 1.31 DR13.0 秒23.9 倍速
鼻歌採譜プラグイン Ver 1.17 DR31.2 秒10.0 倍速

なお、内部的にうたりすとのコンポーネント共有化をさらに推進しており、その影響で、過去のバージョンと解析結果が多少異なることがあるかもしれない。

鼻歌採譜プラグイン Ver 1.17 Developer Release を公開

◆更新情報◆
Ver 1.31 Developer Release を公開



鼻歌採譜プラグイン Ver 1.17 DR バージョン情報UTAU 用の歌声→音符取得プラグイン「鼻歌採譜プラグイン」をバージョンアップ。Ver 1.17 Developer Release をテスト公開

ドラッグ&ドロップインストールに対応しているので、ダウンロードしたアーカイブを UTAU のウィンドウにドラッグ&ドロップすればインストール可能。

鼻歌採譜プラグイン Ver 1.17 DR メインウィンドウ外から見える主な変更点は、
  • UTAU Ver 0.4 系統で動作するようになった。
  • Windows 7 のルック&フィールに対応。
  • ログを UNICODE(UTF-16)で出力するようにした。

内部的にはかなり大きく変更されている。
  • コンパイラが C++Builder のかなり古いバージョン(6 だったかな?)から C++Builder XE に変更。
  • ルック&フィールは再構築。
  • 内部の文字コードも UNICODE(UTF-16)に変更。
  • Lib UTAU を採用。
  • うたりすとのコンポーネント共有化を促進。

以下の組み合わせで動作を確認。

鼻歌採譜プラグインOSUTAU音源
鼻歌採譜プラグイン Ver 1.17 DRWindows 7 64 ビット版UTAU Ver 0.4.12紫苑ヨワ(ささやき)
鼻歌採譜プラグイン Ver 1.17 DRWindows XP 32 ビット版UTAU Ver 0.2.75実音とわの(100404)

たまに話の出る解析速度についてだが、うちの環境だと、歌唱 WAVE の時間と比べて 10 倍速前後。30 秒の歌唱 WAVE であれば、3 秒程度で解析が完了する。

うちの環境は、
  • CPU……Intel Core i5-750s(2.4GHz)
  • メモリ……8GB

詳しくはこちら




うたりす Ver 4.05 を公開

UTAU 用の WAVE トレース方式自動調声プラグイン「うたりす」をバージョンアップ。Ver 4.05 を公開

ドラッグ&ドロップインストールに対応しているので、ダウンロードしたアーカイブを UTAU のウィンドウにドラッグ&ドロップすればインストール可能。

UTAU プロジェクトの先頭や最後の音符を選択した状態でうたりすを起動すると、解析が完了しないバグを修正。

以下の組み合わせでバグ修正の動作を確認。

うたりすOSUTAU音源
うたりす Ver 4.05Windows 7 64 ビット版UTAU Ver 0.2.90実音とわの(100404)
うたりす Ver 4.05Windows 7 64 ビット版UTAU Ver 0.2.76ぱみゅ
うたりす Ver 4.05Windows 7 64 ビット版UTAU Ver 0.2.75淡水ウパ
うたりす Ver 4.05Windows XP 32 ビット版UTAU Ver 0.2.75実音とわの(100404)


うたりす進捗状況

うたりすをバージョンアップして、UTAU Mode 2 用のピッチエディット機能(ピッチエディタ)を搭載する件の進捗。

ひとまず、音符とピッチを描画するところまで。

うたりす進捗_2011_06_14


うたりすをいじっている中で、Lib UTAU の修正が必要な箇所を発見。後ほど Lib UTAU をバージョンアップする予定。
月別アーカイブ
記事検索
最新コメント
  • ライブドアブログ