import numpy as np
import wave
import struct
from scipy.fft import rfft, rfftfreq
# 打开WAV音频文件
with wave.open('your_audio_file.wav', 'r') as wav_file:
# 读取文件的参数
nchannels, sampwidth, framerate, nframes, comptype, compname = wav_file.getparams()
# 读取音频帧,假设音频文件为单通道(单声道)
frames = wav_file.readframes(nframes * nchannels)
# 将音频帧转换为浮点数,这里我们假定样本宽度为2(16位PCM)
# 如果样本宽度不同,则需要相应地调整struct.unpack的格式字符
samples = struct.unpack_from('%dh' % nframes * nchannels, frames)
if nchannels == 2: # 如果是立体声,则仅取一个通道
samples = samples[::2]
# 对音频信号执行快速傅里叶变换
fft_result = rfft(samples)
fft_magnitude = np.abs(fft_result) # 求得振幅(模)
# 计算每个频点的频率
freqs = rfftfreq(nframes, 1/framerate)
# 输出频率和对应的振幅
for i, amp in enumerate(fft_magnitude):
print(f"频率: {freqs[i]:
分离音频频率
于 2024-01-17 16:10:40 首次发布
文章介绍了使用Python库如numpy、wave、scipy.fft和librosa进行音频文件处理的方法,包括读取音频、执行快速傅里叶变换以分析频率和振幅,以及计算不同类型的响度,如RMS值、特定频率的响度和LoudnessUnitsFullScale(LUFS)。
摘要由CSDN通过智能技术生成