乱数で歌詞を生成する

観測気球

収集物の記録書庫 a data archive of collection -- collectible toys

[要旨] いつか初音ミクに「乱数歌」を歌ってもらうべく、とりあえず、「乱数で歌詞を生成する」プログラムを書いてみました。
[キーワード] 初音ミク,Vocaloid

« DTMマガジン12月号 | トップページ | infoseek ラッキーサーチ 5ポイント 当選 »

2007.10.31

乱数で歌詞を生成する

ニコニコ動画(RC2)‐【初音ミクオリジナル】歌詞を乱数で生成した歌」が面白いので、試しに、乱数で歌詞を生成するプログラムを書いてみました。

以下のような、わりといい感じの意味不明な歌詞が生成できました。

ろたぽぬにゅにょしゅぜけをしゃちわはきづそぺぽなむがしのぬすきへらだひょよにょりゅほぽひゃし
どとぎくゆちゃえあすせらあずゆぴぴゅもむせてみゅしめぎがつがんひゅちべひょふふにょはびょへの
きみぶるうろそたりやめちすやちゅぬごさぷむぎゃまみくもぢゃにゅわほねのろびゅぴょぴょめせぬざ
ぺづおつとれげへぴょねばむさがこぷけひりちゃろみぎすぷえなたそゆぞぷもたとぢみゅりんくびぬ
ぜほぺずえすれとららせかぺちゃゆみじゅへなたんあへせくそひじゃめのがびゃるひるしゃこどびや
ねりぷぎゃつひきゆろろまよたねとあねふくぬたやめぽつにぎすゆふぢうやちゅいつもぴゃやふよで
せみぎるてかろぢゃぢへにぐるねとどてのあるでつぴゃうめやぐひゅむゆをぷちかおらあはしびでひゅ
ほなぎぢゅるぼせつぬこまよじゃどなぺびゅぱびゃつほのぐふもなれすづいうずじょかいいへけりい
ちにゅわけとじょけらひきやにょぼぺろぽぺあぬみふぺをみゃいほいやんらまれきがえそわほびゅ
ちゅがんひけまいれきぢゃちづひゅぴららざにゃきなすしまだまうぢょおまがづにうぢろこもばうなみょ
ぶとんちふへりねけぱろけこうへなちゃぎゃれどそらばぼせそぴぴゆくんそとゆよぷをぱほきょよせ
みりょぬなをほうはぴよぎよあにょぢゅやこたぴなゆわやきけせりゃびょきゅいむただぜりりじょぎ
みんみちゅもにゅぴゅすへすみるずぺどむさくぴゆさぞちづきょわぎぶかなりをじぶぞへぬこのつりょ
ぢゃらぬぞあゆづべたぴつみえぢげわあげふろゆあふなきみつうだねしなみょとたはぴききゅすえ
くゆはてぎんづねもとせぞわしゃなわぎふわずてぱちくくめすやいほをゆとんかぎむれきざげつぴょ
しひやぢゅさりょくざくらぎめげきゃけづににゃれえきゃみもづへぷけぢつほそらひょずちくぼちゅぜ

(以下、略)

曲の方は完全に乱数で生成すると聞くに堪えないものができてしまいそうなので、何かいい方法を考えるとして、最終的には、作詞も作曲も完全に自動で生成できるようにしてみたいと思っています。曲の方は MIDI ファイルで出力すれば、Vocaloid エディタに読み込ませることができるし、歌詞の方は流し込み機能を使えばいいので、ファイルさえ生成できれば何とかなりそう。

ということで、自動作曲プログラムを作るか、適当に自力で作曲しまくるか、それっぽいものができたら、乱数な歌詞で歌わせてみたい。実現するのは、いつになることやら。乞うご期待。

ソースコード

以下、「乱数で歌詞を生成するプログラム」のソースです。C で書いてあります。

すべての「音」の発生確率を完全に同じにせずに、微妙に偏らせているのがポイントです。発生確率を完全に同じにしたら、やたら、拗音が目立つ歌詞が生成されるので、こういう風にしてみたわけです。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

static char	str[][16] = {
    "あ", "い", "う", "え", "お", "か", "き", "く", "け", "こ",
    "さ", "し", "す", "せ", "そ", "た", "ち", "つ", "て", "と",
    "な", "に", "ぬ", "ね", "の", "は", "ひ", "ふ", "へ", "ほ",
    "ま", "み", "む", "め", "も", "や", "ゆ", "よ", "ら", "り",
    "る", "れ", "ろ", "わ", "を", "ん",
    "が", "ぎ", "ぐ", "げ", "ご", "ざ", "じ", "ず", "ぜ", "ぞ",
    "だ", "ぢ", "づ", "で", "ど", "ば", "び", "ぶ", "べ", "ぼ",
    "ぱ", "ぴ", "ぷ", "ぺ", "ぽ",
    "きゃ", "きゅ", "きょ", "しゃ", "しゅ", "しゅ", "ちゃ", "ちゅ",
    "ちゅ", "にゃ", "にゅ", "にょ", "ひゃ", "ひゅ", "ひょ", "みゃ",
    "みゅ", "みょ", "りゃ", "りゅ", "りょ", "ぎゃ", "ぎゅ", "ぎょ",
    "じゃ", "じゅ", "じょ", "ぢゃ", "ぢゅ", "ぢょ", "びゃ", "びゅ",
    "びょ", "ぴゃ", "ぴゅ", "ぴょ",
    "あ", "い", "う", "え", "お", "か", "き", "く", "け", "こ",
    "さ", "し", "す", "せ", "そ", "た", "ち", "つ", "て", "と",
    "な", "に", "ぬ", "ね", "の", "は", "ひ", "ふ", "へ", "ほ",
    "ま", "み", "む", "め", "も", "や", "ゆ", "よ", "ら", "り",
    "る", "れ", "ろ", "わ", "を", "ん",
    "あ", "い", "う", "え", "お", "か", "き", "く", "け", "こ",
    "さ", "し", "す", "せ", "そ", "た", "ち", "つ", "て", "と",
    "な", "に", "ぬ", "ね", "の", "は", "ひ", "ふ", "へ", "ほ",
    "ま", "み", "む", "め", "も", "や", "ゆ", "よ", "ら", "り",
    "る", "れ", "ろ", "わ", "を", "ん",
    "が", "ぎ", "ぐ", "げ", "ご", "ざ", "じ", "ず", "ぜ", "ぞ",
    "だ", "ぢ", "づ", "で", "ど", "ば", "び", "ぶ", "べ", "ぼ",
    "ぱ", "ぴ", "ぷ", "ぺ", "ぽ",
    "あ", "い", "う", "え", "お", "か", "き", "く", "け", "こ",
    "さ", "し", "す", "せ", "そ", "た", "ち", "つ", "て", "と",
    "な", "に", "ぬ", "ね", "の", "は", "ひ", "ふ", "へ", "ほ",
    "ま", "み", "む", "め", "も", "や", "ゆ", "よ", "ら", "り",
    "る", "れ", "ろ", "わ", "を", "ん",
    "ぱ", "ぴ", "ぷ", "ぺ", "ぽ",
    "み", "く", "み", "く", "み", "く", "み", "く", 
    "",
};

int
main( int argc, char *argv[] )
{
        int i, j;
        int m, n;

        for ( m = 0; str[m][0]; m++ )
	    ;

        srand( time( NULL ) );

        do {
            i = (rand() * 999999) % 10000;
        } while ( i <= 200 );

        for ( j = 0; j < i; j++ ) {
            n = rand() % m;
            fputs( str[n], stdout );
        }
        puts( "\n" );

	return 0;
}

おまけ

上記のソースと、Windows 用の実行形式をまとめたアーカイブを用意しました。

投稿者: tsupo 2007.10.31 午前 12:45 | 固定リンク | このエントリーをはてなブックマークに追加 | このエントリを del.icio.us に登録 このエントリの del.icio.us での登録状況 | このエントリを Buzzurl に追加このエントリの Buzzurl での登録状況 | このエントリをlivedoorクリップに登録 このエントリのlivedoorクリップでの登録状況 このエントリをlivedoorクリップに登録している人の数 | 酢鶏巡回中

楽天市場


プログラミング」カテゴリ内の最近の記事

品揃え豊富で安い!NTT-X Store


アマゾンわくわく探検隊

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/6737/16927272

この記事へのトラックバック一覧です: 乱数で歌詞を生成する:

コメント


乱数歌詞を使わせていただいきました。とりあえずお礼まで。http://shk.hmc6.net/cgi_bin/dcntr/dcnt.cgi?id=colibri_miku

投稿者: SaHKa (2007.11.06 午後 04:59)

コメントを書く




※イタズラ防止のため、メールアドレスを入力しないと投稿できません。

次からのコメント入力の手間を省くために、名前やメールアドレスをcookieに記憶しますか?


URL を入力すると、その URL にリンクがはられます。
なお、メールアドレスは公開されません。ご安心ください。


ワード

ニッセン

fujisan.co.jp

楽天市場