pop2piano / preprocess /split_spleeter.py
sweetcocoa's picture
initial test
88490a8
raw
history blame
1.83 kB
import glob
import os
import random
import sys
from tqdm.auto import tqdm
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from midiaudiopair import MidiAudioPair
def split_spleeter(meta_files):
# Use audio loader explicitly for loading audio waveform :
from spleeter.audio.adapter import AudioAdapter
from spleeter.separator import Separator
import spleeter
sample_rate = 44100
audio_loader = AudioAdapter.default()
# Using embedded configuration.
separator = Separator("spleeter:2stems")
for meta_file in tqdm(meta_files):
sample = MidiAudioPair(meta_file)
if sample.error_code == MidiAudioPair.NO_SONG:
continue
if os.path.exists(sample.vocals):
continue
waveform, _ = audio_loader.load(sample.song, sample_rate=sample_rate)
# Perform the separation :
prediction = separator.separate(waveform)
audio_loader.save(
path=sample.vocals,
data=prediction["vocals"][:, 0:1],
codec=spleeter.audio.Codec.MP3,
sample_rate=sample_rate,
)
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description="bpm estimate using essentia")
parser.add_argument(
"data_dir",
type=str,
default=None,
help="""directory contains {id}/{pop_filename.wav}
""",
)
parser.add_argument(
"--random_order",
default=False,
action="store_true",
help="Random order process (to run multiple process)",
)
args = parser.parse_args()
meta_files = sorted(glob.glob(args.data_dir + "/*.yaml"))
if args.random_order:
random.shuffle(meta_files)
print("meta ", len(meta_files))
split_spleeter(meta_files)