今回提案した手法で実験を行った際に用いた楽曲のうち、dev2__ultimate_nz_tourの信号を以下に記載する
混合音の信号
音声プレーヤードラムの信号
音声プレーヤーボーカルの信号
音声プレーヤー提案手法 ドラム
音声プレーヤー提案手法 ボーカル
音声プレーヤー
なお、提案手法の音源は、周波数2分割、時間2分割を行い、提案手法を適用した場合の信号である。この2つは、ドラムの信号なのに若干ボーカルの信号が混ざっていたり、その逆もあったりと、今後の研究で改善していく必要がある。
2024年度のデモ大会で発表した内容です。
tab譜がない楽曲でも簡単にtab譜が作成出来たら効率よく練習ができると思い今回の実験に至った。
開発言語:Python
環境 :Visual Studio Code
[分離前音源]
使用音源 swim/04 Limited Sazabys youtubeより
(元音源)
音声プレーヤー
[分離後]
(bass)
音声プレーヤー(drum)
音声プレーヤー(その他(ギターや打ち込み音源など))
音声プレーヤー(vocal)
音声プレーヤー分離後分離した音源(今回はギターの音源)にコード分析を行うと約0.1秒ごとにコードを表示される。
その後指定のサイトにアクセスされこのコードをもとにtab譜を作成する事が可能になる。
コード推定を行うことによりtab譜の作成スピードがギターを触って音を探りながらするよりも向上した。
コード推定の精度が上がればさらに効率アップにつながると感じた。
・Qiita AI音声解析・分離ソフトDemucsの検証レポート
mitzi2funk 2024/10/21
https://qiita.com/mitzi2funk/items/2a9c3492ac13d0a9f399
・AI研究所 PyTorchとは?できることや使い方、インストール方法を分かりやすく解説 坂本将磨 2025/1/3
2024年1月に行われたデモ大会の内容です。
PyTorchで作成された音源分離モデルをTorchScriptモデルに変換し、スマートフォン上で動作させることを目的にアプリケーションを作成しました。
TorchScriptは、PyTorchコードの表現を変換し、Pythonに依存しない環境でも動作することができるようになる仕組みです。これにより、基本的にPythonを実行することのできないスマートフォン上でも、音源に対する推論を可能にすることができると考え、作成に取り掛かることにしました。
使用言語 : Kotlin
統合開発環境(IDE) : Android Studio(Ladybug 2024.2.1 Patch 2)
使用した分離モデル : open-unmix
Python(PyTorchモデル保存) : Python 3.11.9
アプリ実行環境 : Pixel 9 Pro(Android 15 AP4A.241205.013)
Mike’s Sulking / Spike Mullings より部分抜粋(25秒)
引用元 : https://www.cambridge-mt.com/ms/mtk/
open-unmixで使用されているモデルのうち、umxlモデルを変換し、利用しました。
実際の分離(分離スタートボタンを押してから分離が終了するまで)には、およそ21秒かかりました。
実際に端末上で分離した後の各音源は以下の通りです
1. ボーカル
音声プレーヤー2. ベース
音声プレーヤー3. ドラム
音声プレーヤー4. その他
音声プレーヤーTorchScriptを用いて、スマートフォン上でも音源分離を行うことができるアプリを作成できました。
プログラムの作成を通して、音データを扱うために、サンプリング周波数やチャンネル数、動作環境で利用できるライブラリの制約など、考慮するべき点が多数あることを学びました。
今回のプログラムでは、主にCPUを利用した音源分離を行う仕組みになっているため、モバイル上のリソースを有効活用したアプリケーションの作成にもつなげられると考えています。
TorchScript – PyTorch 2.5 documentation
https://pytorch.org/docs/stable/jit.html
PyTorchのモデルをTorchScriptへ変換する
https://ohke.hateblo.jp/entry/2019/12/21/230000
open-unmix-pytorch
https://github.com/sigsep/open-unmix-pytorch
2024年度に行われたデモ大会で発表した内容です。
2258223 木村将太
音メディアを処理する上で、「フーリエ変換」というものがよく用いられます。
フーリエ変換とは、難しく言うと、時間領域の信号を「周波数領域」という別の視点から観測するために行う変換です。
時間領域と周波数領域の関係を把握することは非常に重要ですが、フーリエ変換を直感的に理解できない人も多く見られます。私もそのひとりです。
ここで、フーリエ変換とフーリエ逆変換についてです。
フーリエ変換は、簡単に言うと音を正弦波に分解する作業とも言えます。
対してフーリエ逆変換はその逆、正弦波を合成する作業と言えます。
つまりフーリエ変換した結果をフーリエ逆変換すれば元に戻ります。
音声の合成を直感的に行える機材として「オーディオミキサー」が存在します。
ミキサーでフーリエ逆変換を再現、つまり正弦波を合成し、フーリエ変換についての直感的な理解を深めることがこのデモの目標です。
まず声の周波数スペクトルを記録します。ここでフーリエ変換が行われ、声を構成する正弦波がわかります。
次にそれらをミキサーに入力し、先ほど記録した周波数スペクトルを参考にミキシングします。
そして、元の声と同じ音色が聴こえることを確認します。上手くいけば、原理上は同じ音色になるはずです。
正弦波を足し合わせただけなのに声が聴こえる、という状態になれば成功です。
実際に使うものはこちらです。
ハードウェア選定理由は、実験室にあったからという理由が大半を占めています。例えばマイクロホンは、本来ならば手に持ちやすく声の収音に適したもの(Shure SM58など)を採用するべきでした。
ソフトウェアは周波数スペクトルを表示するものと正弦波を出力するものを開発しました。
ソフトウェア開発環境はこちらです。
PythonライブラリのSounddeviceという音声入出力の基本的なライブラリを使用したのですが、そのベースとして用いられているPortAudioが、Windows PCとミキサーの間で多チャンネル通信を行うために必要な規格ASIOにデフォルトでは対応していませんでした。
今回は正弦波32chを同時にリアルタイムにミキサーに入力する必要があったためASIOは必須です。これを解決するためにかなり悪戦苦闘しました。
その他にも、スペクトル表示や音声出力をリアルタイムに途切れなく動作させるための実装が大変でした。
では、実際にデモを行います。
マイクに向けて「あー」と声を出し、スペクトルを記録します。
スペクトルは時間変化が激しいため、平均値を記録します。
この図では簡単のため100Hzと記載していますが、任意の値を基音として設定可能です。
ただ、倍音成分は基音の整数倍に固定されます。今回は開発が間に合いませんでしたが、実際のピーク値を生成すればさらに声の再現の質が上がるのではないかと考えられます。
スペクトルとフェーダー(音量調整つまみ)の対応イメージです。スペクトルの概形を参考に自分でフェーダーを動かし声の音色を再現します。
ミキサーには特定のチャンネルのみ聴く機能や、逆に特定のチャンネルを消音する機能が搭載されています。これらを使用し本当に正弦波のみで音が合成されていることを確かめます。正弦波を合成しただけで元の声と同じような音が生成できれば、その参考にした周波数スペクトルは正しい、つまりフーリエ変換が正しく行われたことになります。
このようにフーリエ変換の直感的な理解を手助けすることができればデモは成功です。