File size: 2,002 Bytes
90f7c1e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# import amfm_decompy.basic_tools as basic
# import amfm_decompy.pYAAPT as pYAAPT
from multiprocessing import Process
import os
import numpy as np
import pandas as pd
import librosa
from librosa.core import load
from tqdm import tqdm
def get_f0(wav_path):
wav, _ = load(wav_path, sr=24000)
wav = wav[:(wav.shape[0] // 256) * 256]
wav = np.pad(wav, 384, mode='reflect')
f0, _, _ = librosa.pyin(wav, frame_length=1024, hop_length=256, center=False,
fmin=librosa.note_to_hz('C2'),
fmax=librosa.note_to_hz('C6'))
return np.nan_to_num(f0)
def chunks(arr, m):
result = [[] for i in range(m)]
for i in range(len(arr)):
result[i%m].append(arr[i])
return result
def extract_f0(subset):
meta = pd.read_csv('../raw_data/meta_fix.csv')
meta = meta[meta['subset'] == 'train']
# meta = meta[meta['folder'] == 'VCTK-Corpus/vocal/']
for i in tqdm(subset):
line = meta.iloc[i]
audio_dir = '../raw_data/' + line['folder'] + line['subfolder']
f = line['file_name']
f0_dir = audio_dir.replace('vocal', 'f0').replace('raw_data/', '24k_data_f0/')
try:
np.load(os.path.join(f0_dir, f+'.npy'))
except:
print(line)
f0 = get_f0(os.path.join(audio_dir, f))
if os.path.exists(f0_dir) is False:
os.makedirs(f0_dir, exist_ok=True)
np.save(os.path.join(f0_dir, f + '.npy'), f0)
# if os.path.exists(os.path.join(f0_dir, f+'.npy')) is False:
# f0 = get_yaapt_f0(os.path.join(audio_dir, f))
if __name__ == '__main__':
cores = 8
meta = pd.read_csv('../raw_data/meta_fix.csv')
meta = meta[meta['subset']=='train']
# meta = meta[meta['folder'] == 'VCTK-Corpus/vocal/']
idx_list = [i for i in range(len(meta))]
subsets = chunks(idx_list, cores)
for subset in subsets:
t = Process(target=extract_f0, args=(subset,))
t.start()
|