view extract_features.py @ 7:b7169083b9ea tip

fix typo in variable name
author Maria Panteli
date Tue, 01 Jan 2019 15:51:38 +0200
parents c4ef4a02fc19
children
line wrap: on
line source
# -*- coding: utf-8 -*-
"""
Created on Thu Feb 11 19:51:24 2016

@author: mariapanteli
"""
""" Extract scale transform and pitch bihistogram descriptors"""

import os
import numpy
import pandas
import sys
sys.path.append('util')
import pitch_bihist as pbh
import scale_transform as stf


def extract_pitch_bihist(filenames):
    """ compute pitch bihistogram feature for each audio file in filenames
    """
    melf = []
    for filename in filenames:
        print filename
        pb = pbh.PitchBihist()
        pbihist = pb.get_pitchbihist(filename=filename)
        average_frame = numpy.nanmean(pbihist.T, axis=0, keepdims=True)
        melf.append(average_frame)
    melf = numpy.concatenate(melf)
    return melf


def extract_scale_transform(filenames):
    """ compute scale transform feature for each audio file in filenames
    """
    rhyf = []
    for filename in filenames:
        print filename
        st = stf.ScaleTransform()
        stransf = st.get_scale_transform(filename=filename)
        average_frame = numpy.nanmean(stransf.T, axis=0, keepdims=True)
        rhyf.append(average_frame)
    rhyf = numpy.concatenate(rhyf)
    return rhyf


if __name__ == '__main__':
    # Load metadata to get audio filenames
    df = pandas.read_csv(os.path.join('data','Metadata.csv'))
    filenames = df["filename"].get_values()
    
    # Specify audio directory and append to audio filenames
    filenames_mel = [os.path.join('audio','melodies', ff) for ff in filenames]
    filenames_rhy = [os.path.join('audio','rhythms', ff) for ff in filenames]
    
    pitch_bihist = extract_pitch_bihist(filenames_mel)
    scale_transform = extract_scale_transform(filenames_rhy)
    
    # Save .csv where rows = n_files, columns = n_features
    write_file = False
    if write_file:
        numpy.savetxt(os.path.join('data', 'PB.csv'), pitch_bihist, delimiter=',', fmt='%10.12f')
        numpy.savetxt(os.path.join('data', 'ST.csv'), scale_transform, delimiter=',', fmt='%10.12f')