文件浏览框选择指定wav文件并绘制1/3倍频程结果,并封装成函数,最后通过gui界面展示。python实现
时间: 2024-02-22 12:56:16 浏览: 82
好的,我来完整地给出Python实现的代码。
首先,需要安装必要的库`librosa`和`matplotlib`,可以使用以下命令进行安装:
```
pip install librosa matplotlib
```
接下来,可以按照以下步骤来实现选择指定wav文件并绘制1/3倍频程结果,封装成函数,并通过GUI界面展示:
```python
import tkinter as tk
from tkinter import filedialog
import librosa
import numpy as np
import matplotlib.pyplot as plt
import librosa.display
def plot_1_3_octave_spectrogram(file_path):
y, sr = librosa.load(file_path)
fmin = 20
fmax = sr // 2
n_fft = 2048
hop_length = 512
fmin_idx = librosa.core.fft_frequencies(sr=sr, n_fft=n_fft).searchsorted(fmin)
fmax_idx = librosa.core.fft_frequencies(sr=sr, n_fft=n_fft).searchsorted(fmax)
S = librosa.stft(y, n_fft=n_fft, hop_length=hop_length)
S = np.abs(S)
S_third = librosa.feature.melspectrogram(S=S, sr=sr, n_fft=n_fft, hop_length=hop_length, fmin=fmin, fmax=fmax, n_mels=128)
S_third_db = librosa.power_to_db(S_third, ref=np.max)
S_third_db = S_third_db[fmin_idx:fmax_idx, :]
plt.figure(figsize=(10, 4))
librosa.display.specshow(S_third_db, x_axis='time', y_axis='mel', sr=sr, fmin=fmin, fmax=fmax)
plt.colorbar(format='%+2.0f dB')
plt.title('1/3 Octave spectrogram')
plt.tight_layout()
plt.show()
def choose_file():
file_path = filedialog.askopenfilename()
plot_1_3_octave_spectrogram(file_path)
root = tk.Tk()
root.title('1/3 Octave spectrogram')
btn = tk.Button(root, text='Choose a file', command=choose_file)
btn.pack()
root.mainloop()
```
以上代码中,`plot_1_3_octave_spectrogram`函数实现了选择指定wav文件并绘制1/3倍频程结果的功能,将其封装成了一个函数。`choose_file`函数用于选择要处理的wav文件,并调用之前封装好的函数`plot_1_3_octave_spectrogram`来绘制1/3倍频程的能量谱图。`btn`按钮则用于触发选择文件的操作。最后,通过`root.mainloop()`启动GUI界面并保持运行。
希望这个完整的代码能够帮到你!
阅读全文