1
0

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 3 years have passed since last update.

闇のプログラミングAdvent Calendar 2021

Day 21

マッシュアップする

Last updated at Posted at 2021-12-14

マッシュアップとは

 マッシュアップ(英: 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が思った通りに動かない

1
0
1

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?