変換成功!
- MusicXMLファイルをダウンロード (song.xml)
- Sinsyのページを開く
- タイミング・歌詞・リップシンク情報(スクラッチの「リスト」用)
song-timing.txt song-lyric.txt song-mouth.txt
-
スクラッチのプロジェクトファイル (.sb2) を MusicXML (song.xml) へ変換します。
-
MusicXML ファイルは Sinsy (Singing Voice Synthesis) などの歌声合成(ボーカル・シンセサイザー)の入力に使えます。
-
デモ(Flashが使えない場合は3.0betaで開いてください)
- 元のプロジェクト (.sb2) 2.0オンライン版で開く 3.0betaで開く
- 変換して出来た MusicXML (song.xml)
- Sinsyによる歌声合成結果のWAVファイル (song-furusato.wav) (実際に聴けます)
- 歌声に合わせてリップシンク (.sb2) 2.0オンラインで開く 3.0betaで開く
「大きな栗の木の下で」のボーカルを作ってみます。
ここでは下のような楽譜で歌ってもらいます。第二小節以降をスクラッチでプログラムしていきます。はじめの音符が休符でない場合は、全休符の小節がはじめに追加されます。
- まずスクラッチで歌詞とメロディをプログラムします。 このスクラッチプロジェクト をもとに作ってみてください。
- 「song」という名前のスプライトにプログラムを書いていきます。
- 「・・と言う」と「・・の音符を・・拍鳴らす」のブロックをセットにして使います。
- 「・・拍休む」が休符になります。
- 歌詞はひらがな、音符の長さはすでにある変数を使います。ひらがなは音に合わせます。(例:「今日は」は「きょうわ」)
- 音符が小節をまたがないようにしてください。
- 詳しくはリンク先プロジェクトの「使い方」を見てください。
- [ファイル] > [手元のコンピュータにダウンロード] からスクラッチのプロジェクトをsb2ファイルとしてダウンロードします。
- sb2ファイルをダウンロード後にスクラッチのオフラインエディタを使うこともできます。
- このページの上のほうにあるボタンを押して、作成したスクラッチのプロジェクトファイル(sb2という拡張子)をアップロードします。
- うまくいくとダウンロードリンクが表示されるので、そこから変換されて出来たMusicXMLファイル(song.xml)をダウンロードします。
- 歌の一番はじめが休符でない場合は、冒頭に全休符の小節を自動的に加えます。
- ダウンロードしたsong.xmlファイルを Sinsy (Singing Voice Synthesis) にアップロードします。「楽譜 (.xml)」にあるボタンを押すとアップロード画面が開きます。
- ボーカルを選べます。「f000001j_dnn_beta」がよい感じです。
- 歌声をWAVファイルなどで聞いたりダウンロードできます。
- ここからハッピバースデーの曲のスクリプトを見ることができるので、名前に合わせて歌詞やメロディ(リズム)を変えてみましょう!
このページのはじめの動画のように、リップシンクして歌っている感じを出してみます。 サンプルプロジェクトはこんな感じです。ちょっと下の説明は長いですが、タイマーとリストの組み合わせはいろいろ応用できるので、ぜひ試してみてください。
- Step 2 で、MusicXMLと一緒に生成された song-timing.txt, song-lyric.txt, song-mouth.txt をダウンロードしておきます。
- 新たにスクラッチでプロジェクトを作り、歌わせたいスプライトに「a」、「i」、「u」、「e」、「o」、「m」という名前のコスチュームを用意し、口の形を変えておきます。
- 歌詞に「ん」が良く出てくるなら「n」も用意してください。「e」と同じでもよいです。
- サンプルプロジェクトのコスチュームも参考にしてください。
- 音のタブで「ファイルから新しい音をアップロード」を選び、Step 3 でダウンロードした WAVファイルを読み込みます。
- スクリプトのタブを開き、「データ」>「リストを作る」を使って、リストを3つ用意します。
- 名前はなんでもよいですが、この例では timing-list, lyric-list, mouth-list にしておきます。それぞれのリストへ song-timing.txt, song-lyric.txt, song-mouth.txt を読み込みます。
- 画面に表示されたリストの上で右クリック(もしくは二つ指クリック)をするとファイルからの読み込みができます。
- timing-list には、何秒後に次の言葉に移るかが書かれています。
- 「データ」>「変数を作る」でリストを順にみるための変数を作っておきます。この例では idx_time にします。はじめは1にしておきます。
- スクリプトに「音」>「...の音を鳴らす」のブロックを置き、その直後に「調べる」>「タイマーをリセット」を置きます。以上で準備は完了です。
- あとは、「調べる」>「タイマー」のブロックを使って、タイマー(経過時間)と timing_list の idx_time番目とをループで比べながら、もし時間が来たら idx_time を1つ増やして次に進めます。下の図の左側のような流れになります。
- 今歌っている歌詞の言葉は lyric_list、口の形は mouth_list のそれぞれ idx_time番目から取り出せます。
- mouth_list から取り出した文字に合わせてコスチューム変えることで口を動かします。
- 口の動きは、一つの音に二つ以上の文字が入ることや、一つの文字が二つの口の形に対応したり(「ま」は m と a など)するので、mouth_list から取り出した文字の列を順に調べる必要があります。右側の move_mouth のように、「その他」>「ブロックを作る」で新たにブロックを作っておくと便利です。
- あとはサンプルプロジェクトをよく確認して、流れを追ってみてください。開始時のずれをなくすように一度音を読み込んでおいたり、歌詞のいらない記号を表示しないようにもしています。
- test/song-homesweethome.wav
- test/song-furusato.wav
- 「ハッピバースデー」を4人で歌ってみます(オンラインエディタ)
- スプライト「Conductor」は表示されていませんが、他のスプライトに歌詞の表示や口を動かすタイミングをメッセージで伝えています。
- 変数「motion_offset」でやや口の動きを早めのタイミングにしているので、早すぎる場合はこれを減らします(0.2や0.1など)。
- 歌声合成のためのスクリプトはこちらです。
- スクラッチ3のプロジェクトファイル (sb3) のサポート
ネットワークにつながっていないときに使うには、Download Zipから Zipをダウンロード・展開し、以下のファイルを同じフォルダに入れておきます.
- sb2musicxml.html
- sb2musicxml.js
- jszip.min.js
- MITライセンス
- jszip.min.js は https://stuk.github.io/jszip/ を利用しています。
- 「埴生の宿」を歌ってみます(スクラッチオンライン)
- 合成された歌声を合わせて同時に再生しています。一回目は再生が遅れることがありますが、その場合はいったん止めてもう一度再生してみてください。
- スプライト「song」は、歌声合成用のスクリプトが元になっています。
- 作成した曲が長い(音が多い)とスクラッチのスクリプトの方が遅れてくるため、同期させるのであればスクラッチスクリプト内でタイマーを使ったほうがよいでしょう。
- スプライト「Giga」の方はタイマーを使用した例です。詳しくは上の「発展編」を確認してください。
- 口の動き(リップシンク、口パク)も行っています。
- 合成された歌声を合わせて同時に再生しています。一回目は再生が遅れることがありますが、その場合はいったん止めてもう一度再生してみてください。
- 「ふるさと」を歌ってみます(スクラッチオンライン)
- スプライト「song」の beginning-silent-duration は、自動挿入された全休符の一小節分の時間が入っているので、これで再生タイミングを合わせます。
- スプライト「song」は特に音符が多いところでずれてきますが、「Giga」はずれがなく、リップシンクもうまくいっています。