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)

NMFとMFCCで音源分離してみよう (opens new window)

C言語に対応したjupyter Labを実装する

C言語に対応したjupyter Labを実装する

C言語に対応したjupyter Labを実装します.

今回はDockerで実装します.

Python + CycleGAN-VC2でオリジナルデータにおける音質変換を実装する

Python + CycleGAN-VC2でオリジナルデータにおける音質変換を実装する

Clubhouseの影響で音質系に興味を持ちました.本稿では,Python + CycleGAN-VC2でリジナルデータにおける音質変換を実施します.