簡體   English   中英

如何從音頻中提取特征到數據集?

[英]How can I extract features from audio to dataset?

我的桌面上存儲了一個文件夾,其中包含 187 個 WAV 格式的音頻文件。 我想從音頻文件中提取特征,我執行了以下代碼來提取特征音頻並將特征保存在 CSV 文件中,但我獲得了沒有值的 excel 文件,它只包含每列的標題和 len(音頻文件)是 0..但它必須是 187。我該如何解決這個問題???

  from glob import glob
    data_dir = './audio featur-extraction\audio-setA/'
    audio_files = glob(data_dir + '*.wav')
    len(audio_files)
        
       
    from librosa import feature
    import numpy as np
    
    fn_list_i = [
        feature.chroma_stft,
        feature.spectral_centroid,
        feature.spectral_bandwidth,
        feature.spectral_rolloff,
      
    ]
      
    fn_list_ii = [
        
      
        
        feature.zero_crossing_rate
            
    ]
      
    
    def get_feature_vector(y,sr):  
      feat_vect_i = [ np.mean(funct(y,sr)) for funct in fn_list_i]
      feat_vect_ii = [ np.mean(funct(y)) for funct in fn_list_ii]
      
      feature_vector =   feat_vect_i + feat_vect_ii  
      return feature_vector
    
    #build the matrix with normal audios featurized
    audios_feat = []
    for file in audio_files:
      '''
      y is the time series array of the audio file, a 1D np.ndarray
      sr is the sampling rate, a number
      '''  
      y,sr = librosa.load(file,sr=None)   
      feature_vector = get_feature_vector(y, sr) 
      audios_feat.append(feature_vector)  
      print('.', end= " ")
      
      print(audios_feat)
      #.........................
    import csv
    
    norm_output = 'normals_00.csv'
    
    
    header =[
        'chroma_stft',
        'spectral_centroid',
        'spectral_bandwidth',
        'spectral_rolloff',
        'zero_crossing_rate',
        
    ]
    
    #WARNING : this overwrites the file each time. Be aware of this because feature extraction step takes time.
    with open(norm_output,'+w') as f:
      csv_writer = csv.writer(f, delimiter = ',')
      csv_writer.writerow(header)
      csv_writer.writerows(audios_feat)

錯誤在這一行:

data_dir = './audio featur-extraction\audio-setA/'

這是額外的斜線。 用反斜杠替換它(如路徑的其余部分),你會很高興。 將來:調試您的代碼。 逐行檢查代碼並找出錯誤。 如果要處理的路徑的數組長度為零,則不會計算任何內容。

它應該是

data_dir = r'audio featur-extraction\audio-setA\' # for Windows 

或者

data_dir = 'audio featur-extraction/audio-setA/' # for Mac / Linux. 

更一般地,在你的代碼中使用 os.path.join

 audio_files = glob(data_dir + '/*.wav')

它通過在星形符號前添加斜杠來解決

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM