マッシュアップとは
マッシュアップ(英: Mashup)とは2つ以上の曲から片方はボーカルトラック、もう片方は伴奏トラックを取り出して、それらをもともとあった曲のようにミックスし重ねて一つにした音楽の手法である。バスタードポップ (bastard pop) とも言う。
マッシュアップ 出典: フリー百科事典『ウィキペディア(Wikipedia)』
マッシュアップする
librosaでHarmonic/Percussive Sound Separationっていう手法で打楽器とそれ以外を分けれるらしいからそれ使う
import librosa
import soundfile as sf
import pydub
from pydub import AudioSegment
motoneta_path = "motoneta.mp3"
drum_neta_path = "drum_neta.mp3"
drum_only_path_wav = "drum_only.wav"
drum_only_path = "drum_only.mp3"
# librosaでドラムパート抜き出し
y, sr = librosa.load(drum_neta_path)
y_h, y_p = librosa.effects.hpss(y)
# librosaかませるだけで2倍速になるから0.5倍速にして保存
# 原因はわからない、チュートリアルどおりやってんのに 訳わかんない
y_pp = librosa.effects.time_stretch(y_p, 0.5)
sf.write(path_wav, y_pp, 48000)
# ドラムパート音源をmp3化(wavサイズでかいから)
p = pydub.AudioSegment.from_wav(path_wav)
p.export(drum_only_path, format="mp3")
# ここからマッシュアップ
# 元ネタ音源とドラムぬきだし音源を読み込む
m3 = AudioSegment.from_file(motoneta_path, format="mp3")
p3 = AudioSegment.from_file(drum_only_path, format="mp3")
# 元ネタ音源とドラムぬきだし音源のBPMを取る
y_m3, sr_m3 = librosa.load(motoneta_path)
tempo_m3, beat_frames_m3 = librosa.beat.beat_track(y=y_m3, sr=sr_m3)
y_p3, sr_p3 = librosa.load(drum_only_path)
tempo_p3, beat_frames_p3 = librosa.beat.beat_track(y=y_p3, sr=sr_p3)
# 早い方にBPMを合わせる(遅い方に合わせるとバグるから)
if tempo_m3 < tempo_p3:
speed = tempo_p3/tempo_m3
m3 = m3.speedup(playback_speed=tempo_p3/tempo_m3, crossfade=0)
elif tempo_m3 > tempo_p3:
speed = tempo_m3/tempo_p3
p3 = p3.speedup(playback_speed=speed, crossfade=0)
# 重ねて出力
m3 = m3.overlay(p3, 0)
m3.export("mu.mp3", format="mp3")
おしまい
リファクタしてから動かしてないからバグるかも(結果が良くなかったからなんか綺麗にする気もない)
処理も全然簡略化もできると思うんだけどこれも結果が良くなかったからやる気でない
聞いてみた
ゴミもいいところ、13秒くらいからドラム音源重なってくる
元ネタは金曜ロードショー
ドラム音源はこれ
今後の展開
あんま希望持てない
やるならスネアやバスの音の位置からジャストに合わせるとかやれるかもしれないけどあんまやる気にならない
ネタとしてはpydubのsilence.detect_leading_silence使うと先頭の無音削れるらしいからこの辺使っていく
お気持ち
結構調査時間かかった割に全然良くない、librosaが思った通りに動かない