« 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 用の実行形式をまとめたアーカイブを用意しました。
- rand.lzh [5.69 KB (5,835バイト)]
投稿者: tsupo 2007.10.31 午前 12:45
| 固定リンク
|
|
| ![]()
|
|
アマゾンわくわく探検隊
トラックバック
この記事のトラックバックURL:
この記事へのトラックバック一覧です: 乱数で歌詞を生成する:
コメント
乱数歌詞を使わせていただいきました。とりあえずお礼まで。http://shk.hmc6.net/cgi_bin/dcntr/dcnt.cgi?id=colibri_miku
投稿者: SaHKa (2007.11.06 午後 04:59)



