如何用Python检测批量.wav文件中的10kHz以上特定频率
提取WAV文件最高频率并筛选的Python实现
必要依赖安装
先安装音频处理库librosa,它能简化音频加载和频率分析:
pip install librosa
如果后续要写入Excel,还需要安装pandas和openpyxl:
pip install pandas openpyxl
核心代码实现
以下代码会遍历目标文件夹下的所有.wav文件,提取每个文件的最高有效频率,并筛选出10kHz以上的文件:
import os import librosa import numpy as np # 配置参数 target_folder = "替换为你的蝙蝠录音文件夹路径" frequency_threshold = 10000 # 10kHz # 遍历文件夹 for root, _, files in os.walk(target_folder): for filename in files: if filename.lower().endswith(".wav"): file_path = os.path.join(root, filename) try: # 加载音频,保留原始采样率 audio_data, sample_rate = librosa.load(file_path, sr=None) # 计算短时傅里叶变换幅度谱 stft_spectrum = np.abs(librosa.stft(audio_data)) # 获取频率轴 frequencies = librosa.fft_frequencies(sr=sample_rate) # 过滤低能量噪声,只保留有有效音频的频率点 valid_frequencies = frequencies[np.any(stft_spectrum > 1e-6, axis=1)] if not valid_frequencies.size: print(f"{filename}: 无有效音频信号") continue max_frequency = valid_frequencies.max() # 判断是否符合筛选条件 if max_frequency >= frequency_threshold: print(f"✅ {filename}: 最高频率 {max_frequency/1000:.2f} kHz") # 可在此处将符合条件的文件信息存入列表,后续写入Excel else: print(f"❌ {filename}: 最高频率 {max_frequency/1000:.2f} kHz") except Exception as e: print(f"⚠️ {filename}: 处理失败 - {str(e)}")
关键说明
- 频率过滤:代码中用
stft_spectrum > 1e-6过滤低能量噪声,避免把背景噪声的低频误判为有效信号,可根据实际录音环境调整这个阈值。 - Excel写入:如果要把结果整理到Excel,可在筛选时将符合条件的文件名、最高频率存入列表,再用
pandas写入:import pandas as pd # 假设已收集到符合条件的文件信息列表 results = [{"文件名": "file1.wav", "最高频率(kHz)": 12.5}, ...] df = pd.DataFrame(results) df.to_excel("蝙蝠录音筛选结果.xlsx", index=False, engine="openpyxl")
内容的提问来源于stack exchange,提问作者CyberKar
相关产品推荐
相关产品推荐

