音楽・音声生成を1から — トークン化された音
3分の曲は1500万個以上の数値でできています。音楽生成の技術史は、この途方もない数列をどう畳むかの歴史でした。コーデックトークン、自己回帰と拡散の分かれ道、テキスト条件づけ、そしてSuno系サービスの構造を公開された部品から組み立て直すところまで、前提知識ゼロで解説します。
Simple and Controllable Music Generation
一次資料 — この記事の根拠
この解説の公開 2026-08-27
Simple and Controllable Music GenerationarXiv:2306.05284論文ページ·PDFMusicLM: Generating Music From TextarXiv:2301.11325論文ページ·PDF
AudioLM: a Language Modeling Approach to Audio GenerationarXiv:2209.03143論文ページ·PDF
Fast Timing-Conditioned Latent Audio DiffusionarXiv:2402.04825論文ページ·PDF
AudioLDM: Text-to-Audio Generation with Latent Diffusion ModelsarXiv:2301.12503論文ページ·PDF
Jukebox: A Generative Model for MusicarXiv:2005.00341論文ページ·PDF
Fréchet Audio Distance: A Metric for Evaluating Music Enhancement AlgorithmsarXiv:1812.08466論文ページ·PDF
3分の曲は、1500万個の数字でできている
CDと同じ品質(44.1 kHz・ステレオ)で3分の曲を作るということは、1秒あたり44,100回の測定値を2チャンネル分、合計およそ1,588万個の数値を、それらしい順番に並べるということです。
文章と比べてみます。日本語で3,000字の記事は、トークンにすればせいぜい数千個。音は桁が4つほど違います。しかも隣り合う数値は強く相関していて、1個おかしな値が混じるだけで「プチッ」というノイズになって耳に届く。
だから音楽・音声生成の歴史は、その大半がこの1,588万個をどう畳むかの歴史です。モデルの構造よりも先に、この数の勘定を押さえるのが近道です。
比喩: 音符で書くか、見本帳の番号で書くか
畳み方には、長いあいだ2つの流儀がありました。
1つは楽譜方式です。「ドを0.5秒、ピアノで」と書けば、3分の曲は数千個の記号で済みます。MIDIを生成するモデルはこの路線で、実際とても軽い。ただし記号から音に戻すところで、歌声も、歪んだギターの質感も、部屋の残響も落ちます。楽譜には「何を鳴らすか」しか書かれておらず、「どう鳴ったか」は書かれていないからです。
もう1つは波形方式です。空気の震えそのものを作るので原理的には何でも表現できますが、上に書いたとおり列が長すぎる。OpenAIのJukeboxが2020年にこの路線で歌つきの曲を作って見せましたが、1曲に何時間もかかりました。
いま主流なのは、その中間にある見本帳方式です。音を短い区間に切り、各区間を「見本帳(コードブック)の何番に一番似ているか」という整数に置き換える。楽譜のように短く、波形のように何でも表現できる。この整数の列をコーデックトークンと呼びます。「トークン化された音」とは、この置き換えのことです。
秒あたりの勘定 — なぜトークンなら扱えるのか
畳んだ効果は、数を出せば一目で分かります。トークンの総数は単なる掛け算です。
要するに、秒数 × 1秒あたりのコマ数 × 1コマに積む番号の枚数。 は秒数、 はフレームレート(1秒を何コマに切るか)、 は1コマに何段の番号を重ねるか(残差量子化の段数)です。
MusicGenは32 kHz用のEnCodecを使い、、 です。3分なら トークン。1,588万個が36,000個になりました。これならもう、長めの文書と同じ土俵です。
同じ材料からビットレートも出ます。
つまり1秒あたりのコマ数 × 段数 × 番号1個を書くのに要るビット数。見本帳のサイズ が2048なら1個あたり11ビットなので、 bps、およそ2.2 kbpsです。
なぜ番号を1段でなく何段も重ねるのか、その仕組み(残差量子化)はニューラル音声コーデックで扱っています。ここで要る前提は一行だけです。音は有限個の整数の列にでき、そこから元の音へ戻せる。
分かれ道①: 自己回帰 — 次の1個を当て続ける
整数の列になってしまえば、あとは文章と同じです。左から順に「次の1個」を予測し、出た番号をまた入力に足す。GPTと同じ仕掛けで曲が出てきます。
ただし音には、文章にない厄介があります。1コマに番号が縦に4つ積まれていることです。文章のトークンは1コマ1個なので迷いませんが、音は同じ時刻について4段ぶんを出さねばなりません。
素直な解は2つあり、どちらも困ります。4段を1列に引き伸ばす(フラット化)と列の長さが4倍になって遅くなる。4段を同時に独立に出すと、段どうしの辻褄が合わなくなる。1段目が「ピアノ」を選んだのに2段目が「歪んだギター」の残差を足す、という事故が起きるわけです。
コメント
コメントにはログインが必要です