Python + Google Colab + Spleeterで楽器と人の声を分離する音源分離を実装する
Python + Google Colab + Spleeterで楽器と人の声を分離する音源分離を実装します.
今回はGoogle ColabとGoogle Driveを連携させて,notebook形式で実行してます.
Google Colaboratory(以下Google Colab)は、Google社が無料で提供している機械学習の教育や研究用の開発環境です。開発環境はJupyter Notebookに似たインターフェースを持ち、Pythonの主要なライブラリがプリインストールされています。
引用元:Google Colabの使い方 (opens new window)
全国630店舗以上!もみほぐし・足つぼ・ハンドリフレ・クイックヘッドのリラクゼーション店【りらくる】
# 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を作成します.
# Google ColabとGoogle Driveを連携
from google.colab import drive
drive.mount('/content/drive')
# %%bash
# ディレクトリの移動
%cd /content/drive/My\ Drive/sound-separation
# 作業ディレクトリの作成
!mkdir spleeter
!ls
%cd /content/drive/My\ Drive/sound-separation/spleeter
!ls
# ffmpeg,ibsndfileのインストール
オーディオファイルを扱うために,ffmpegとibsndfileをインストールします.
!apt-get install ffmpeg
!apt-get install libsndfile-dev
# モジュールのインストール
下記のコードでモジュールをインストールします.
!pip install spleeter
# サンプル音声のダウンロード
下記のコマンドでサンプル音声をダウンロードします.
!wget https://github.com/deezer/spleeter/raw/master/audio_example.mp3
# Spleeterによる音響分離
下記のコードでSpleeterによる音響分離を実行します.
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で楽器と人の声を分離する音源分離を実装しました.
# 参考サイト
【Python/PyRoomAcoustics】ILRMAでブラインド音源分離 (opens new window)
Spleeterを使って音源分離に挑戦 (opens new window)