前回の「厳密には繰り返しでない部分を似たサンプルで埋めて引き延ばす」方の話。
念のため先に書いておくと、実用的な価値は一切ありません。
楽曲構造として繰り返しではなくても、細かく分割すれば似ている部分はあるはずなので、それらを同じサンプルで済ませればよい。
あとはメモリに収まるまで「似ている」度合を妥協していけば終わり。
……で済めば簡単だったんですけどね。
きついのは、mucom88のADPCMでは音色(=分割された部品)が32個までってところですかね。普通の用途には十分なんですが。
普通の音色指定に使う場合、音符の長さはいろいろあるので、途中までで再生をやめることは当然できます。しかし、途中から再生することはできません。
例えば、「にゃにゃぁぁぁん」と鳴る音があったとして、「にゃ|にゃ|ぁぁ|ぁん」とバラして容量を減らすことを考えると、
部品 | 組立 | 容量 | 部品数 |
「にゃにゃぁぁぁん」 | 「にゃにゃぁぁぁん」 | △ 4 | ◎ 1 |
「にゃぁぁぁん」 | 「にゃ(停止)」「にゃぁぁぁん」 | ○ 3 | ◎ 1 |
「にゃ」「ぁぁ」 | 「にゃ」「にゃ」「ぁぁ」「ぁぁ」 | ◎ 2 | ○ 2 |
……みたいな候補があって、最初ので容量が足りないとすると2つ目か3つ目ですが、容量と部品数(と類似度)のトレードオフになるわけです。
というわけで、部品ごとの類似度を定量化できれば、部品数32・容量256KB(より少ないが)の制約の下で類似度を最大化(違いを最小化)する組合せ最適化問題(0-1整数計画問題)になります。
定式化はできたのですが、良い解法は思いつかないので混合整数計画問題とかが解ける市販のオプティマイザを使います。
限界チャレンジということで、3分もある某曲を押し込んでみましょう。16分音符の長さの部品にすると、手元最つよマシン(Core i9, RAM64GB)と市販(たぶん)最強のオプティマイザでも数日計算した挙句out of memoryで死ぬ感じです(定式化が下手という話はある)。今回は8分音符の長さでやりました。
……ズタボロです。サンプリングレートを下げます。
……ズタボロです。サンプリングレートを下げます。(以下略
4kHz(最大再生周波数2kHz)まで下げました。電話ですら8kHzなので、もはや音楽用にはならん感じです。
お聴きください。アクトレイザー・ルネサンスより「アルカレオネ」。
だめでした。まあ、そもそもマトモな解がないですよね。
#title Arcaleone from Actraiser Renaissance (BIT BROKEN)
#composer Yuzo Koshiro
#author wave2mucom88 (Est Suzumenomiya)
#pcm mypcm.bin
#date 2022/04/01
#comment April Fools' Day Special Edition (Confiscated)
K t47C32l8v240D-260o3L@1c1^1^1^1^2@3cc@2c1^1^2^@3ccccccccccc@4c4@1c4.@7c4@22c
K @26c@14c@10c4@14c@5cc@14c@5c1^1^2^4.@30c@31c@6c2@7c1c@8c@26c@23c@28c@22c@8c1^
K @9c2@21c@9c@10c4@9c2cc@10c4@9c@8c@10c4@14c@22c@10c1^2.@11c1^1^1^1^1^1^1^1c1.
K @12c1^1^1^1^1^1@9c4@22c@23c@13c1^4@14c@23c@9c@7c@11c@18c@13c4@28c@23c@6c@5c
K @14c@5c@14c@5c@14c4@28c@8c@29c@8cc@28c@27c@30cc@24c@15ccc2^@32c@16cc2.@32c
K @17ccc1^1^1^1^1^1^1^2^@18ccc1^1^1^1^1^1^1^1^2@14c@19c1c2^@20c4.@19c2
K @20cc1^1^1^1^1^4@26c@9c@21cc@22cc@21ccc@22c@8c@28c@24c@22c@24c@30c@24c@9c@21c
K @23c4.cc@8c@22c@8c@14c@24c1^1^1^1^1^1^1^2.@8c@25cc1^2.@14c4c@26cccc@28c@26c
K @27c@26c@27cc@6c@28c1^1^@9c@21ccc@8c@29c@21c@8c@28c@8c@29c@8cc@29c@8c@26c@28c
K @29cccccc@8c@26c@8c@29c@8c@10c@1c4@8c@22c@15c@24c@30c4.@8c@24c@22c@21c@14cc
K @28c@24c@10c@24c@6c@31cc@22cc@31c@32c@8c4@32ccccccccccccc
どんな定式化か――とかは気が向いたら書きます。(誰得^2)
音量変化・音程変化も入れると可能性が広がりますが、最適化問題的には更に難しくなりますです。
……、あー、こっちの方がエイプリルフールネタっぽかったかな。