Python + Google Colab + Spleeterで楽器と人の声を分離する音源分離を実装します.
今回はGoogle ColabとGoogle Driveを連携させて,notebook形式で実行してます.
Google Colaboratory(以下Google Colab)は、Google社が無料で提供している機械学習の教育や研究用の開発環境です。開発環境はJupyter Notebookに似たインターフェースを持ち、Pythonの主要なライブラリがプリインストールされています。
引用元:Google Colabの使い方
Google Colabのファイル構成
プロジェクトディレクトリはsound-separationとしています.度々,省略しています.
sound-separation
├── /spleeter
│ ├── /pretrained_models <- 学習済みモデル
│ ├── /output <- 分離後の音声
│ └── audio_example.mp3 <- サンプル音声
└── sound-separation.ipynb <- 実行用ノートブック
Google Driveと連携
Google ColabとGoogle Driveを連携させて,作業ディレクトリのsound-separation/spleeterを作成します.
python
# Google ColabとGoogle Driveを連携
from google.colab import drive
drive.mount('/content/drive')
python
# %%bash
# ディレクトリの移動
%cd /content/drive/My\ Drive/sound-separation
# 作業ディレクトリの作成
!mkdir spleeter
!ls
python
%cd /content/drive/My\ Drive/sound-separation/spleeter
!ls
ffmpeg,ibsndfileのインストール
オーディオファイルを扱うために,ffmpegとibsndfileをインストールします.
python
!apt-get install ffmpeg
!apt-get install libsndfile-dev
モジュールのインストール
下記のコードでモジュールをインストールします.
python
!pip install spleeter
サンプル音声のダウンロード
下記のコマンドでサンプル音声をダウンロードします.
python
!wget https://github.com/deezer/spleeter/raw/master/audio_example.mp3
Spleeterによる音響分離
下記のコードでSpleeterによる音響分離を実行します.
python
from spleeter.separator import Separator
import os
# 出力結果の保存場所をあらかじめ作っておく
for i in (2, 4, 5): # 2音源、4音源、5音源
outdir_path = './output/' + str(i) + 'stems'
os.makedirs(outdir_path, exist_ok=True)
# 分離対象となる音楽wav
# offlibertyでダウンロード
# https://soundcloud.com/ballforest/sample
input_audio = "audio_example.mp3"
# 初回実行時はモデルをダウンロードするため、「待ち」の時間がかかる
# 事前にダウンロードすることも可能 (pretrained_model/2stems などに保存)
# ボーカルとそれ以外に分離する(2音源)
separator_2stem = Separator('spleeter:2stems')
separator_2stem.separate_to_file(input_audio, "./output/2stems")
# ボーカル、ベース、ドラムとそれ以外に分離する(4音源)
separator_4stem = Separator('spleeter:4stems')
separator_4stem.separate_to_file(input_audio, "./output/4stems")
# ボーカル、ピアノ、ベース、ドラムとそれ以外に分離する(5音源)
separator_5stem = Separator('spleeter:5stems')
separator_5stem.separate_to_file(input_audio, "./output/5stems")
5音源での音響分離
音源
5音源での音響分離
ヴォーカル
ドラム
ピアノ
ベース
その他
まとめ
Pythonで楽器と人の声を分離する音源分離を実装しました.