-
Pythonで音楽ファイルからボーカルを除去してみた話
- 2024年12月2日
- Python3
はじめに
どんな曲を作業用BGMにすると作業が捗りそうか?と考えてみて、好きな曲を聴くのが一番気分が高まると思ったものの、ボーカルが入っている曲だとついつい歌詞に意識が向いてしまって集中力が低下してしまうのが悩ましいと思いました。
好きな曲のボーカルが入っていないもの (Instrumental / インスト) があれば良いですが、インスト版が配信されていない (CDにしか収録されていない) 場合や、曲によってはそもそもインスト版が存在しない場合もあったりします。
そこで、既に持っている自分の好きな曲 (音楽ファイル) からボーカルを除去すれば良いのでは?と思い至りました。
ボーカル除去用のソフトも色々存在するようですが、プログラミングでどうにかできないかと思い色々と調べているうちにSpleeterというPythonのライブラリを見つけたので、試してみました。
Spleeterとは?
Spleeterとは、フランスの定額制音楽ストリーミングサービスであるDeezerが開発した音源分離ソフト(オープンソース)です。任意の楽曲をSpleeterに読み込ませると、ドラム、ベース、伴奏、ボーカル、などのパート毎に分離された音声ファイルを出力できます。 以下3パターンの音声分離が可能になります。
- 「ボーカル / インスト(伴奏)」に分離 (2ステム)
- 「ボーカル / ドラム / ベース / その他」に分離 (4ステム)
- 「ボーカル / ドラム / ベース / ピアノ / その他」に分離 (5ステム)
Spleeterは無料で使用できますが、プロ仕様の楽曲編集ソフトにも組み込まれており、品質の高さが伺えます。
参考:https://github.com/deezer/spleeter?tab=readme-ov-file#about
Spleeterを試してみる
開発環境
- M2 Mac
- Docker version 24.0.6, build ed223bc
準備
以下の3ファイルを用意する。
audio_example.mp3 については、以下のリンク先(公式リポジトリ)からダウンロード可能。
https://github.com/deezer/spleeter/blob/master/audio_example.mp3
$ tree
.
├── Dockerfile
├── audio_example.mp3
└── main.py
1 directory, 3 files
他の2ファイルについては、以下の手順で作成していく。
Dockerfile
以下の内容で Dockerfile を作成する。
FROM python:3.10.14
WORKDIR /app
RUN apt update &&
apt install -y ffmpeg
RUN pip install tensorflow==2.13.0rc0 spleeter
※ 注意点
(2024/10/23 時点) Pythonの最新バージョンは3.13だが、Spleeterの最新バージョン (2.4.0) がPython 3.10までしかサポートしていないらしく、Python 3.11以上だとSpleeterをインストールすることができない。
Spleeterは内部処理でffmpegを使用するようなので、インストールしておく必要がある。 (インストールしておかないとSpleeterの実行時にエラーが発生する)
自身の開発環境(M2 Mac)だと、 tensorflow==2.13.0rc0
のようにバージョンを指定してtensorflowをインストールしないと以下の2つの不具合が起きた。
- 不具合1:
tensorflow==2.13.0rc0
がないとpip install
でライブラリをインストールする際にエラーが発生し、Dockerイメージのビルドに失敗した。 - 不具合2:
--platform linux/x86_64
オプションを指定してDockerイメージをビルドしたらtensorflow==2.13.0rc0
がなくてもビルド自体は成功した。が、Spleeterを実行しようとした際に以下のようなtensorflowのエラーが発生してコンテナがフリーズした。The TensorFlow library was compiled to use AVX instructions, but these aren't available on your machine. qemu: uncaught target signal 6 (Aborted) - core dumped
main.py
以下の内容で main.py を作成する。
from spleeter.separator import Separator
if __name__ == '__main__':
# インプット音源ファイルを指定
input_file = 'audio_example.mp3'
# 出力ディレクトリを指定
output_dir = 'spleeter_output'
# 分離モードを指定
separator = Separator('spleeter:2stems')
separator.separate_to_file(input_file, output_dir)
音源分離のモードは以下から選択できる。
- spleeter:2stems → 「ボーカル / インスト(伴奏)」に分離
- spleeter:4stems → 「ボーカル / ドラム / ベース / その他」に分離
- spleeter:5stems → 「ボーカル / ドラム / ベース / ピアノ / その他」に分離
今回は spleeter:2stems(「ボーカル / インスト(伴奏)」に分離)を選択。
実行
以下のコマンドを実行し、Dockerイメージをビルドして main.py をDockerコンテナ上で実行。
$ docker build . -t spleeter:latest
$ docker run -v $(pwd):/app spleeter:latest python main.py
実行完了すると spleeter_output/audio_example ディレクトリ内に以下の2ファイルが出力される。
(出力先のディレクトリは {output_dir}/{input_fileで指定したファイル名(拡張子を除く)}
となるらしい)
- vocals.wav (ボーカルのみ)
- accompaniment.wav (伴奏のみ)
変数 input_file
の値を書き換え、対象のファイルをmain.pyと同じディレクトリにコピーしてmain.pyを実行すれば、 好きな音楽ファイルをボーカルと伴奏に分離することができる。
まとめ
SpleeterというPythonのライブラリを使うことで、とても簡単に音楽ファイルからボーカルを取り除くことができました。
ただ、生成された伴奏ファイルを実際に聴いてみたらボーカルが微かに聞こえる場合があったり、伴奏の音がボヤケた感じに聞こえる場合があったりして、音源分離の精度は完璧とは言い難い印象でした。今後の発展に期待したいです。
今後、DjangoやFlaskなどのWebフレームワークを使って「任意の音楽ファイルをアップロードしたら、Spleeterで音源分離して、伴奏のみの音楽ファイルをダウンロードさせる」といった簡単なWebアプリケーションを作ってみるのも面白そうだと思います。
さいごに
ソリューションウェアでは、さまざまな分野の案件を幅広く持ち合わせておりスキルアップには最適の環境です。
自身のスキル向上に悩んでいる方、エンジニアとしてもう一皮むけたいと考えている方、私たちと一緒に働きませんか?
「まずはカジュアルにお話だけ」というのも可能ですので気になる方は応募フォームよりお申込みください。
余談
「自分の好きな曲からボーカルを取り除いたものを作業用BGMにする」というのは理にかなっているようでした。
勉強に集中できる音楽の条件
勉強に集中したいなら、以下の条件を満たす音楽を選びましょう。
自分の好みに合う
カナダ・マギル大学の研究者らが2011年に発表した研究により、自分の好きな音楽を聞くとドーパミンが分泌されることがわかっています。ドーパミンとは、「脳内麻薬」とも呼ばれる神経伝達物質。意欲や快感をもたらし、記憶力や集中力に深く関わっています。
好きな音楽によってやる気や集中力が高まることは、脳科学的に説明できるのです。一方で、特に好きではない音楽を聞いても、ドーパミンの分泌は増えなかったそうですよ。
ボーカルがない
医学博士の藤本幸弘氏によれば、勉強中に歌を聞くと脳の「言語中枢」が反応し、気をとられてしまう場合があるそう。2009年の『人間工学』誌で発表された実験でも、「ボーカル入りの曲」「ボーカルなしの曲」「無音」の条件下だと、文章課題の正解率が最も低いのは「ボーカル入りの曲」だとわかりました。勉強中には、ボーカルの入っていない曲(インストゥルメンタル)を選びましょう。
聴き慣れている
同じく藤本氏によれば、初めて聞く曲を勉強中に流すと、聞き取ることに意識が向いてしまうそう。勉強BGMには、何度も聞いている曲やアルバムを選びましょう。
新しい曲で勉強用のプレイリストをつくるなら、プレイヤーで「ループ再生」を設定し、同じ曲が繰り返し流れるようにしてください。やがて音楽に慣れ、勉強への集中が妨げられにくくなります。
https://studyhacker.net/study-concentrate-music#勉強に集中できる音楽の条件
この記事を書いた人 : ブログチーム
AWS bluebird css CSV docker docker compose electron ES6 es2015 Git Heroku ITコンサルティング JavaScript justinmind less mongoDB Node.js php PostgreSQL Private Space Promise React react-router reactjs Salesforce scss Selenium Builder selenium IDE Selenium WebDriver stylus TypeScript VirtualBox VisualStudioCode vue vuejs webpack システム開発プロジェクト セキュリティ ワイヤーフレーム 上流工程 卒FIT 帳票 要件定義 設計 電力小売業界