将多个wav文件特征导入csv文件

为了计算多个wav文件的各项特征并将它们导入到一个csv文件中,我们可以使用Python中的音频处理库Librosa。以下是实现这个任务的代码示例:

import os
import librosa
import numpy as np
import pandas as pd

# 定义要计算的特征函数
feature_funcs = {
    'length': librosa.get_duration,
    'chroma': librosa.feature.chroma_stft,
    'rms': librosa.feature.rms,
    'spectral': librosa.feature.spectral_centroid,
    'rolloff': librosa.feature.spectral_rolloff,
    'zerocrossing': librosa.feature.zero_crossing_rate,
    'harmony': librosa.effects.harmonic,
    'perceptr': librosa.effects.percussive,
    'tempo': librosa.beat.tempo,
    'mfcc': librosa.feature.mfcc,
}

# 定义要处理的文件夹路径和要保存到的csv文件路径
input_dir = 'path/to/input/directory'
output_file = 'path/to/output/file.csv'

# 初始化一个空的DataFrame来保存特征数据
df = pd.DataFrame()

# 遍历文件夹中的所有wav文件
for filename in os.listdir(input_dir):
    if filename.endswith('.wav'):
        filepath = os.path.join(input_dir, filename)
        
        # 使用Librosa加载音频文件
        y, sr = librosa.load(filepath)
        
        # 计算每个特征函数的结果并将它们保存到一个字典中
        features = {}
        for name, func in feature_funcs.items():
            if name == 'chroma':
                result = func(y=y, sr=sr)
            elif name == 'mfcc':
                result = func(y=y, sr=sr, n_mfcc=13)
            elif name == 'harmony' or name == 'perceptr':
                y_harm, y_perc = func(y=y)
                result = np.mean(y_harm), np.mean(y_perc)
            else:
                result = np.mean(func(y=y, sr=sr))
            features[name] = result
        
        # 将文件名添加到特征字典中
        features['filename'] = filename
        
        # 将特征字典转换为DataFrame并将其添加到总体DataFrame中
        df = df.append(pd.DataFrame(features, index=[0]), ignore_index=True)

# 将DataFrame保存到csv文件中
df.to_csv(output_file, index=False)

在这个示例代码中,我们首先定义了一个包含各种要计算的特征函数的字典。然后我们定义了要处理的文件夹路径和要保存到的csv文件路径。接下来,我们使用os.listdir函数遍历文件夹中的所有wav文件,并对每个文件进行处理。对于每个文件,我们使用Librosa加载音频文件并计算每个特征函数的结果。最后,我们将每个文件的特征结果添加到一个总体的DataFrame中,并将它们保存到csv文件中。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~許諾~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值