读取wav文件对应的label python


import numpy as np
from python_speech_features import mfcc  # 需要pip install
import scipy.io.wavfile as wav
import os
def get_wavs_lables(wav_path, label_file):
    # 获得训练用的wav文件路径列表
    wav_files = []
    for (dirpath, dirnames, filenames) in os.walk(wav_path):
        for filename in filenames:
            if filename.endswith('.wav') or filename.endswith('.WAV'):
                filename_path = os.sep.join([dirpath, filename])
                if os.stat(filename_path).st_size < 240000:  # 剔除掉一些小文件
                    continue
                wav_files.append(filename_path)

    labels_dict = {}
    with open(label_file, 'rb') as f:
        for label in f:
            label = label.strip(b'\n')
            label_id = label.split(b' ', 1)[0]
            label_text = label.split(b' ', 1)[1]
            labels_dict[label_id.decode('ascii')] = label_text.decode('utf-8')

    labels = []
    new_wav_files = []
    for wav_file in wav_files:
        wav_id = os.path.basename(wav_file).split('.')[0]

        if wav_id in labels_dict:
            labels.append(labels_dict[wav_id])
            new_wav_files.append(wav_file)

    return new_wav_files, labels
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个可以生成显示wav文件波形、裁剪波形和保存波形文件的PYQT程序的示例代码: ```python import sys import wave import numpy as np import matplotlib.pyplot as plt from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog from PyQt5.QtGui import QIcon, QPixmap from PyQt5.QtCore import Qt class MainWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): # 设置窗口标题、大小、图标 self.setWindowTitle('Waveform Viewer') self.setGeometry(100, 100, 800, 500) self.setWindowIcon(QIcon('icon.png')) # 添加控件 self.label = QLabel(self) self.label.setGeometry(10, 10, 780, 400) self.btn_open = QPushButton('Open', self) self.btn_open.setGeometry(10, 420, 80, 30) self.btn_open.clicked.connect(self.open_file) self.btn_save = QPushButton('Save', self) self.btn_save.setGeometry(100, 420, 80, 30) self.btn_save.clicked.connect(self.save_file) self.slider_start = QSlider(Qt.Horizontal, self) self.slider_start.setGeometry(190, 420, 400, 30) self.slider_start.setMinimum(0) self.slider_start.setMaximum(100) self.slider_start.setSingleStep(1) self.slider_start.setValue(0) self.slider_start.sliderReleased.connect(self.update_waveform) self.slider_end = QSlider(Qt.Horizontal, self) self.slider_end.setGeometry(190, 450, 400, 30) self.slider_end.setMinimum(0) self.slider_end.setMaximum(100) self.slider_end.setSingleStep(1) self.slider_end.setValue(100) self.slider_end.sliderReleased.connect(self.update_waveform) def open_file(self): # 打开wav文件 filename, _ = QFileDialog.getOpenFileName(self, 'Open file', '.', 'Waveform files (*.wav)') if filename: self.filename = filename self.update_waveform() def update_waveform(self): # 生成波形 with wave.open(self.filename, 'rb') as wf: framerate = wf.getframerate() nframes = wf.getnframes() data = wf.readframes(nframes) frames = np.frombuffer(data, dtype=np.int16) times = np.arange(len(frames)) / framerate start = int(self.slider_start.value() / 100 * len(frames)) end = int(self.slider_end.value() / 100 * len(frames)) frames = frames[start:end] times = times[start:end] # 显示波形 fig, ax = plt.subplots(figsize=(7.8, 3.8)) ax.plot(times, frames) ax.set_xlabel('Time (s)') ax.set_ylabel('Amplitude') ax.set_xlim([times[0], times[-1]]) ax.set_ylim([-32768, 32767]) plt.tight_layout() plt.savefig('waveform.png') pixmap = QPixmap('waveform.png') self.label.setPixmap(pixmap) def save_file(self): # 保存裁剪后的wav文件 filename, _ = QFileDialog.getSaveFileName(self, 'Save file', '.', 'Waveform files (*.wav)') if filename: with wave.open(filename, 'wb') as wf: wf.setnchannels(1) wf.setsampwidth(2) wf.setframerate(44100) with wave.open(self.filename, 'rb') as wf_src: nframes = wf_src.getnframes() start = int(self.slider_start.value() / 100 * nframes) end = int(self.slider_end.value() / 100 * nframes) wf.setnframes(end - start) wf.writeframes(wf_src.readframes(end - start)) if __name__ == '__main__': app = QApplication(sys.argv) mainWindow = MainWindow() mainWindow.show() sys.exit(app.exec_()) ``` 在上述代码中,我们首先导入了必要的模块,包括`sys`、`wave`、`numpy`、`matplotlib.pyplot`、`PyQt5.QtWidgets`、`PyQt5.QtGui`和`PyQt5.QtCore`,然后定义了一个名为`MainWindow`的类,继承自`QMainWindow`。在`MainWindow`类中,我们定义了一些控件,包括一个用于显示波形的`QLabel`、两个用于裁剪波形的`QSlider`、一个用于打开wav文件的`QPushButton`、一个用于保存裁剪后的wav文件的`QPushButton`。在`initUI`方法中,我们进行了控件的初始化和布局。在`open_file`方法中,我们使用`QFileDialog`打开一个wav文件,并保存文件名。在`update_waveform`方法中,我们读取wav文件的采样率、采样点数和采样数据,然后根据用户在`QSlider`上的选择裁剪波形。接着,我们使用matplotlib绘制波形图,并将图像保存为文件,最后使用`QPixmap`将波形图显示在`QLabel`上。在`save_file`方法中,我们使用`QFileDialog`打开一个用于保存裁剪后的wav文件的对话框,并使用`wave`模块保存裁剪后的wav文件。在主程序中,我们创建了一个`QApplication`对象和一个`MainWindow`对象,并将`MainWindow`显示出来。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值