はじめに
ニコニコ動画やYoutubeで「歌ってみた」とか「演奏してみた」ってすごく人気がありますが、自分もあんな風にかっこよく演奏出来たらいいなって思ったことありませんか?
私は叩いてみた動画が好きで、よく作業BGMにしています。最近は、ドラムの音を変えて叩いてみた系の動画にハマっています。有名どころでいうと以下の動画です。
これを作ってみたい!けどドラムは叩けない…
そこで、AIの力を借りれば何とかならないかなって思ってこのチャレンジを思いつきました。
・・・これを実現すれば、楽器を触ったことがない方でも演奏してみたが出来る…!?
AIや機械学習は初心者なのですが、どうにかして実現できないか奮闘してみようと思います。見切り発車でプロジェクトをはじめるので、最後どの程度のクオリティのものができるかは分からないですが、あたたかく見守っていただけたら嬉しいです。
システムの構成案(概要)
ここからは少し技術的な話になりますが、どのようにしたら実現出来そうか計画を立ててみました。とりあえず音声処理についての概要は以下の図の通りです。
図1.ドラム自動演奏アプリ構成図
実現するために必要な技術としては、大きく3つあります。
- 楽曲からドラム音のみを抽出
- 音が鳴るタイミング(Onset:オンセット)検出
- 鳴っている音を解析し、どの楽器を叩いているかを特定
これらの技術を組み合わせれば、何とか実現出来そうな気がしています(ほんとに?笑)。
具体的な技術の解説
1.楽曲からドラム音のみを抽出
有名なAIがすでにあるので、お借りしようと思ってます。音響関係に詳しい人だったらご存じかもしれませんが、iZotopeのRX8など音楽制作に使われるソフトのプラグインとして採用されている「Spleeter」というソフトを使います。楽曲からボーカルやギターなど、さまざまな楽器の音を分離することが出来る素晴らしいツールです。感動的な精度で、試してみてびっくりしました。下記にデモ動画があるので体験してみてください。
2.音が鳴るタイミング(Onset:オンセット)検出
Pythonの音声ライブラリである「librosa」に良い機能があったので、それを用いようと思います。オンセット検出は大きく分けて「波形を処理」する方法と「機械学習で分類」させる方法の2種類があるんですけど、このライブラリでは前者を使っているようです。こちらの方法のほうが解析が早いので採用予定です。
3.鳴っている音を解析し、どの楽器を叩いているかを特定
こちらは先行研究としてはGoogleの「Magenta」があります。このプロジェクトの成果物として、「OaF Drums」があり、この論文とソースコードを参考にしながら機械学習モデルのトレーニングをしようと思います。本当はそのまま使いたかったのですが、「Magenta」プロジェクト全体のソースコード量が膨大で複雑だったのと、おそらくTensorFlowがバージョン1.xをベースに作られているというのもありソースコードの解析が結構大変でした。というわけで、モデルの組み方や学習方法など重要なところを取り入れながら自作することにしようかなと思います。最終的には前述の「Spleeter」などのライブラリも含めて全部の機能を組み込んだ1つのソフトをリリースすることを考えているので、ややこしくならないようソースコードはシンプルにしたいと思っています。
次回以降進捗報告をしてまいります。また動画もどんどん作成していきたいので、ご覧いただけたらと思います。応援よろしくお願いします!