2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【バンドマン向け】pythonを使って音源をサンプリングする方法

Posted at

はじめに

こんにちは。大学院生ITストラテジストの岩附陽太です。
今回は、バンドマン向けにpythonを使って音源をサンプリングする方法をお伝えします。

自分は大学の軽音楽サークルでシンセサイザーを弾いています。その際、原曲と同じ音を出したいけど、同じ音色がシンセサイザーの音色リストの中にない場合があります。その際、原曲から楽器の音を切り出して使うことがよくあります。今回はその手法の共有になります。今回はプログラミングをしたことがない人向けに少し丁寧に解説します。

おおまかなステップ

0:pythonの使用環境を作成する
1:Youtubeからpythonを使いmp4動画として動画をダウンロードする。
2:mp4動画をwavファイルに変換する。
3:wavを音源分離して、各パートの音にわける。
4:分けたパートの音を、時間的に切り出す。

使用するライブラリ・ツール

・YoutubeDL
・numpy
・ffmpeg
・pydub
・DemucsGUI

注意点

この記事は、身内間の営利目的でないライブ演奏を想定したhow-toの紹介になります。この記事の技術を悪用したトラブル等に関しては一切責任を持ちません。特に、動画の悪用や他者との権利関係の侵害などは、使用者個人が注意してください。

またこの記事は後輩からどのようにサンプリングしているか聞かれたため書いているので、プログラミング超初心者向けに書いてます。

0:pythonの使用環境を作成する

他にわかりやすい資料があるので、基本的にそれらを参考にしてください。
要は
①:pythonそのものをインストール。
②:Visual Studio Codeをインストール
③:Visual Studio Codeのpython用拡張機能をインストール
してくれたら大丈夫です。パスの探し方も入力の仕方も参考資料に載ってます。

1:Youtubeからpythonを使いmp4動画として動画をダウンロードする。

参考資料

まず、必要なライブラリをインストールします。

image.png

こんな感じで左上のTerminalってところで新しいターミナルを開いてください。開いたらそこにこういうコードを打ち込みます。

yt-dlp
python -m pip install -U yt-dlp

image.png

これがpythonのpipというパッケージ管理ツールで、ライブラリ(他の人が作ったツールの塊)をインストールするということです。

そこで以下のコードを実行してください。

Use yt-dlp
from yt_dlp import YoutubeDL
# ダウンロード条件を設定する。今回は画質・音質ともに最高の動画をダウンロードする
ydl_opts = {'format': 'best'}

# 動画のURLを指定
with YoutubeDL(ydl_opts) as ydl:
    #ファイル名は手動で変えること
    ydl.download(['https://www.youtube.com/watch?v=L3ViNGDyymA&ab_channel=%E3%82%89%E3%81%B5%E3%81%A9%E3%82%93'])

コードを実行するというのは以下のようにやります。まずpythonのファイルを作ります。左上のNewFileです。適当な名前で保存します。
image.png

ここにコードをコピペします。
image.png

右上の実行ボタン▷を押します
image.png

ファイルの中にmp4動画が保存されます。

2:mp4動画をwavファイルに変換する。

必要なライブラリをインストールします。Numpyをインストールします。

numpy
pip install numpy

次が今回の最難関です。ffmpegをインストールします。パスを通すだけなのですが、初心者はそれが難しいのでそこもフォローします。

参考資料

①まずffmpegのダウンロードページでwindowsを選びます。

image.png

②Windows builds by BtBNを選びます。

image.png

③ffmpeg-master-latest-win64-gpl.zipを選びます。

image.png

④zipファイルを展開します。

image.png

⑤展開したファイルを適当なフォルダに移動します。ここではDocumentの配下に置きます。

image.png

⑥移動したファイルをクリックして、中のbinに対して右クリックしてPATHのコピーを選択します。

image.png

⑦検索窓で環境変数と検索し、システム環境変数の編集を選択します。

image.png

⑧右下の環境変数を選びます

image.png

⑨システム環境変数の新規追加を選択します

image.png

⑩環境変数名をffmpeg、先ほどコピーしたPATHを変数値に追加し、OKを押します。

image.png

⑪VScodeのターミナルで、ffmpegと入力し、Enterを押します。以下のように出たらOKです。

image.png

⑫ターミナルでpipを使ってffmpeg-pythonをインストールします。

ffmpeg-python
pip install ffmpeg-python

image.png

⑬これでffmpeg-pythonのインストールは完了です。

⑭次に、先ほどのmp4動画の名前は大概長いので、名前を変更します。さっきのURLだと、太陽系ディスコのオフボーカル版が入るのでTaiyouOff.mp4と名前を変えておきます。

image.png

⑮以下のコードを実行します。コードはこの記事を参考にしました。これでwavファイルが入ります。入力の部分は目的の動画の名前を入れてください。参考文献

ffmpeg
import numpy
import ffmpeg
import os 
# 入力 
path="TaiyouOff"
print(os.path.isfile(path+'.mp4'))
stream = ffmpeg.input(path+'.mp4') 
# 出力 
stream = ffmpeg.output(stream, path+".wav") 
# 実行
ffmpeg.run(stream)

3:wavを音源分離して、各パートの音にわける。

音源分離とは、機械学習の技術を使って、複数の楽器からなる曲を、それぞれの楽器の音に分離する技術です。分離する必要がない場合は基本的にやらなくてもいいです。

この分野自体ではSpleeterやdemcusなんかが有名です。
Demcusは以下の記事やこの記事が参考になります。すでにffmpegのパスも通しているので、CUIで行ける人はこっちでいいと思います。

難しいと感じる人はGUI版があります。この記事がかなり詳しいです。この通りにやれば大丈夫だと思いますが、7zという、でかいファイルを展開するためのアプリをインストールする必要があります。

音源は、ベース、ボーカル、ドラム、その他(シンセとギターなど)に分かれます。
分離の際にオプションのオーバーラップに関しては、曲によるかもですが0に近づけた方が上手く分離できている感じがしました。

4:分けたパートの音を、時間的に切り出す。

①必要なライブラリをインストール。Ffmpegはすでに持っているので、pydubをインストールします。ターミナルにpip install pydubと打ちます。

pydub
pip install pydub

image.png

②以下のコードを実行します。file_pathを変更して目的のファイルのpathにしましょう。また、sound1の中を変更すると何秒から何秒までを取り出すかを決められます。単位はミリ秒です。

pydub
from pydub import AudioSegment
import os

#参考(https://shamimatsu.com/python-wav-cut/)
# wavファイルのパス 例(D:\music\melody.wav)
file_path = 'TaiyouOff.wav'

# 元ファイル名に_cutをつけてリネーム
root, ext = os.path.splitext(file_path)
out_path = os.path.join(root + 'Test1' + '.wav')

# wavファイルの読み込み
sound = AudioSegment.from_wav(file_path)

# 0~10秒を抽出[0:10000]で
#ここでは33秒から33.5秒を抽出
sound1 = sound[33000:33500]
# リネームされて出力
sound1.export(out_path, format="wav")

こうして目的のサンプリング音源であるTaiyouOff.wavを得ることができました。あとはここの切り出す秒数を変化させて、調整しましょう。

終わりに

いかがだったでしょうか。Pythonには様々な人が作ってくださった便利なライブラリがあるので、ライブ演奏などでもぜひ活用していきたいですね。

今後も役に立つ技術などをご紹介できればと思います。よろしければぜひLinkdinやFacebookでお見知りおきを!今後ともよろしくお願いいたします。

2
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?