0. はじめに
棒読みちゃんには、「音程」、「速度」などのタグがあり、配信者向け機能をオンにすることによっていろいろ遊べます。今回は棒読みちゃんにカエルの歌を歌わせてみたいと思います。
1. 「音程」と音の高さの関係
皆さんご存じのとおり、通常の音楽には、1オクターブ(低い音から高い同じ音まで)に12個の音があります。ちなみにこれを12平均律といったりします。
そして、1オクターブ上の音は周波数が2倍になります。例えば、低い音の周波数が100Hzだとしたら、高い音は200Hzになります。この間を12音に(対数的に)等分すると、1音上がるごとに周波数は12乗根2(=21/12)倍になり、これによって音の高さが決まるというわけですね。
この関係は「音程」タグでも同じです。通常の音程(声の高さ)は100で、200なら1オクターブ上の音、50なら1オクターブ下の音です。これを細かく設定することによりドレミを奏でることができるというわけです。
※通常の音程の最小・最大値は50・200です。また、整数値しか受け付けません。
2. 計算
基準音を0として、他の音の高さ(マイナスもOK)と歌詞を指定します。
また、基準音の音程baseKey
を決めます。
const notes = [
[0, "ド"],
[2, "レ"],
[4, "ミ"],
[5, "ファ"],
[7, "ソ"],
[9, "ラ"],
[11, "シ"],
[12, "ド"]
];
const baseKey = 80;
let text = "";
notes.forEach(note => {
const key = Math.round(baseKey * 2 ** (note[0] / 12));
text += `音程(${key})${note[1] || "て"}`;
});
console.log(text);
console.log(text.length);
音程(80)ド
音程(90)レ
音程(101)ミ
音程(107)ファ
音程(120)ソ
音程(135)ラ
音程(151)シ
音程(160)ド
ドレミファソラシドと歌ってくれました。
では、カエルの歌を歌わせてみましょう。
const notes = [
[0, "ド"], [2, "レ"], [4, "ミ"], [5, "ファ"], [4, "ミ"], [2, "レ"], [0, "ド"],
[4, "ミ"], [5, "ファ"], [7, "ソ"], [9, "ラ"], [7, "ソ"], [5, "ファ"], [4, "ミ"],
[0, "ド"], [0, "ド"], [0, "ド"], [0, "ド"],
[0, "ド"], [2, "レ"], [4, "ミ"], [5, "ファ"], [4, "ミ"], [2, "レ"], [0, "ド"],
];
const baseKey = 100;
音程(100)ド音程(112)レ音程(126)ミ音程(133)ファ音程(126)ミ音程(112)レ音程(100)ド音程(126)ミ音程(133)ファ音程(150)ソ音程(168)ラ音程(150)ソ音程(133)ファ音程(126)ミ音程(100)ド音程(100)ド音程(100)ド音程(100)ド音程(100)ド音程(112)レ音程(126)ミ音程(133)ファ音程(126)ミ音程(112)レ音程(100)ド
さて歌ってもらいましょう!の前に、長くなりすぎると途中でやめちゃうので設定を変えておきましょう。じゃあ気を取り直して...
...
どうでしょうか?音程はあってますがタイミング調整を一切行っていないので連続して読み上げちゃってます。さらに、実は音程タグを使用すると声の高さだけではなく読み上げ速度も若干変わるので、そこら辺は手動で調整してください。
やりたいこと | 書き方 |
---|---|
読み上げ速度変更 | 速度(50 ~ 200) |
間をあける | ド音程(112) レ音程(126) ミ (歌詞の前に空白) |
音を伸ばす | 音程(152)ら/あ/あ/あ/あ/あ |
ド音程(112)レ音程(126)ミ音程(133)ファ音程(126)ミ音程(112)レ音程(100)ド音程(126) ミ音程(133)ファ音程(150)ソ音程(168)ラ音程(150)ソ音程(133)ファ音程(126)ミ音程(100) ド音程(100) ド音程(100) ド音程(100) ド音程(100) ド音程(112)レ音程(126)ミ音程(133)ファ音程(126)ミ音程(112)レ音程(100)ド/お/お/お/お/お/お
ぜひコピペして歌わせてみてください!
要望があれば簡単なツール作るかもしれません。
3. おまけ
声(7)音量(200)音程(112)あ音程(126)い音程(133)た音程(84)くて音程(84)速度(115)あ音程(168)い音程(150) た音程(133)くて音程(150)ふ る音程(200) え/え/え/え音程(168)る/う/う/う/う
音程(112)て音程(150)て音程(168)て音程(200)て音程(168)て音程(150)て音程(112)て音程(150)て音程(168)て音程(200)て音程(168)て音程(150)て音程(126)速度(140)て音程(133)て音程(126)て音程(100)て