【问题标题】:Read *.wav files in buffers读取缓冲区中的 *.wav 文件
【发布时间】:2016-01-23 04:57:46
【问题描述】:

我需要从特定数量的缓冲区中的 *.wav 文件中读取数据。到目前为止,我可以使用 wave 库读取 10 秒的 wav 文件:

fp = wave.open('M1F1-int16-AFsp.wav')
nchan = fp.getnchannels()
N = fp.getnframes()
fr= fp.getframerate()
dstr = fp.readframes(N*nchan)
data = numpy.fromstring(dstr, numpy.int16)
data = numpy.reshape(data, (-1,nchan))

在我可以使用函数 open as writing mode with wave 写入文件之后。使用前面的源代码,我可以读取一个波形文件并编写一个波形文件的副本。但是,现在我想在2048的缓冲区中读写wav文件。你知道读写更大的wav文件的更好方法吗?需要分块处理?

感谢您的指导

【问题讨论】:

    标签: python audio wav


    【解决方案1】:

    Wave.readframes(n) 方法采用参数controlling the size of the frames returned。我们可以通过将缓冲区大小(2048 字节)除以样本宽度 + 通道数来计算帧大小。然后,我们可以遍历文件,抓取这些大小的帧并将它们写入我们的输出文件。

    如下:

    import wave
    
    BUFFER_SIZE = 2048
    
    fp = wave.open('M1F1-int16-AFsp.wav')
    
    output = wave.open('output.wav', 'wb')
    output.setparams(fp.getparams())
    
    frames_to_read = BUFFER_SIZE / (fp.getsampwidth() + fp.getnchannels())
    
    while True:
        frames = fp.readframes(frames_to_read)
        if not frames:
            break
    
        output.writeframes(frames)
    

    【讨论】:

      猜你喜欢
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多