首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从音频提取特征到数据集?

如何从音频提取特征到数据集?
EN

Stack Overflow用户
提问于 2021-07-11 14:10:17
回答 2查看 695关注 0票数 1

我有一个文件夹存储在我的桌面上,它包含187个音频文件的WAV格式。我想从音频文件中提取特性,我执行了以下提取功能音频的代码,并将这些特性保存在CSV文件中,但是我获得了没有值的excel文件,它只包括每个列的标题和len(音频文件)的输出是0..but,its必须是187。我怎样才能解决这个问题??

代码语言:javascript
复制
  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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-13 18:49:58

代码语言:javascript
复制
 audio_files = glob(data_dir + '/*.wav')

它通过在星号前加斜杠来解决。

票数 0
EN

Stack Overflow用户

发布于 2021-07-11 14:52:14

错误在这一行中:

代码语言:javascript
复制
data_dir = './audio featur-extraction\audio-setA/'

是额外的斜杠。用反斜杠代替它(就像在路径的其余部分一样),你就可以继续了。将来:调试您的代码。逐行遍历代码并查找错误。如果具有进程路径的数组的长度为零,则不会计算任何数据。

它应该是

代码语言:javascript
复制
data_dir = r'audio featur-extraction\audio-setA\' # for Windows 

代码语言:javascript
复制
data_dir = 'audio featur-extraction/audio-setA/' # for Mac / Linux. 

更一般地,使用os.path.joinin您的代码

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68336978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档