#! /usr/env/python3 # # FMA conversion script, genre classification # Author: Scott Hawley # License: Do as you like # # For FMA dataset https://github.com/mdeff/fma # to be used with panotti https://github.com/drscotthawley/panotti # # This will create a directory called Samples/ # inside which will be directories for each genre, e.g. Rock/ Instrumental/ etc. # within these directories will be the audio files converted to .wav format # # Requires: fma # librosa # ffmpeg # ...hour(s) to run. it's slow, runs in serial import os import librosa import utils # note my fix to fma utils, https://github.com/mdeff/fma/issues/34 AUDIO_DIR = 'fma_small/' tracks = utils.load('tracks.csv') os.mkdir('Samples') small = tracks['set', 'subset'] <= 'small' y_small = tracks.loc[small, ('track', 'genre_top')] sr = 44100 for track_id, genre in y_small.iteritems(): if not os.path.exists('Samples/'+genre): os.mkdir('Samples/'+genre) mp3_filename = utils.get_audio_path(AUDIO_DIR, track_id) out_wav_filename = 'Samples/'+genre+'/'+str(track_id)+'.wav' in_wav_filename = out_wav_filename cmd = 'ffmpeg -hide_banner -loglevel panic -i ' + mp3_filename + ' ' + in_wav_filename print("excuting conversion: "+cmd) os.system(cmd) ## We could just have ffmpeg do the full conversion, but we'll let librosa ## apply its own defaults by reading & writing print("reading ",in_wav_filename) data, sr = librosa.load(in_wav_filename, sr=sr, mono=True) print("writing ",out_wav_filename) librosa.output.write_wav(out_wav_filename,data,sr=sr)