Error while Pre-processing Audio Data using Librosa (audio analysis library in python) for DL model

I am beginner in Audio classification field in DL. I followed a YouTube Music Genre Classification Series, which is working fine and been very helpful but I have a problem/error in pre-processing part. I get this error repeatedly. The picture of the error and the code is attached. I don't seem to understand what the error is because I've never worked with Librosa (Audio Analysis Library in Python). Kindly help me with that. Thank you.

import json
import os
import math
import librosa

DATASET_PATH = Genres
JSON_PATH = Music Genre Classification Pre-Processed Data.json
SAMPLE_RATE = 22050
TRACK_DURATION = 30 # measured in seconds
SAMPLES_PER_TRACK = SAMPLE_RATE * TRACK_DURATION


def save_mfcc(dataset_path, json_path, num_mfcc=13, n_fft=2048, hop_length=512, num_segments=5):
    Extracts MFCCs from music dataset and saves them into a json file along witgh genre labels.
        :param dataset_path (str): Path to dataset
        :param json_path (str): Path to json file used to save MFCCs
        :param num_mfcc (int): Number of coefficients to extract
        :param n_fft (int): Interval we consider to apply FFT. Measured in # of samples
        :param hop_length (int): Sliding window for FFT. Measured in # of samples
        :param: num_segments (int): Number of segments we want to divide sample tracks into
        :return:
        

    # dictionary to store mapping, labels, and MFCCs
    data = {
        mapping: [],
        labels: [],
        mfcc: []
    }

    samples_per_segment = int(SAMPLES_PER_TRACK / num_segments)
    num_mfcc_vectors_per_segment = math.ceil(samples_per_segment / hop_length)

    # loop through all genre sub-folder
    for i, (dirpath, dirnames, filenames) in enumerate(os.walk(dataset_path)):

        # ensure we're processing a genre sub-folder level
        if dirpath is not dataset_path:

            # save genre label (i.e., sub-folder name) in the mapping
            semantic_label = dirpath.split(\\)[-1]
            data[mapping].append(semantic_label)
            print(\nProcessing: {}.format(semantic_label))

            # process all audio files in genre sub-dir
            for f in filenames:

        # load audio file
                file_path = os.path.join(dirpath, f)
                signal, sample_rate = librosa.load(file_path, sr=SAMPLE_RATE)

                # process all segments of audio file
                for d in range(num_segments):

                    # calculate start and finish sample for current segment
                    start = samples_per_segment * d
                    finish = start + samples_per_segment

                    # extract mfcc
                    mfcc = librosa.feature.mfcc(signal[start:finish], sample_rate, n_mfcc=num_mfcc, n_fft=n_fft, hop_length=hop_length)
                    mfcc = mfcc.T

                    # store only mfcc feature with expected number of vectors
                    if len(mfcc) == num_mfcc_vectors_per_segment:
                        data[mfcc].append(mfcc.tolist())
                        data[labels].append(i-1)
                        print({}, segment:{}.format(file_path, d+1))

    # save MFCCs to json file
    with open(json_path, w) as fp:
        json.dump(data, fp, indent=4)
        print('Pre-Processing Completed')
        
        
if __name__ == __main__:
    save_mfcc(DATASET_PATH, JSON_PATH, num_segments=10)

Topic audio-recognition rnn deep-learning

Category Data Science

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.