【问题标题】:unable to read some .wav files using scipy.io.wavread.read()无法使用 scipy.io.wavread.read() 读取某些 .wav 文件
【发布时间】:2013-05-10 12:13:59
【问题描述】:

我正在尝试使用 scipy.io.wavread 读取 .wav 文件。它正确读取了一些文件。 对于某些文件,它会给出以下错误...

Warning (from warnings module):
  File "D:\project\cardiocare-1.0\src\scipy\io\wavfile.py", line 121
    warnings.warn("chunk not understood", WavFileWarning)
WavFileWarning: chunk not understood
Traceback (most recent call last):
  File "D:\project\cardiocare-1.0\src\ccare\plot.py", line 37, in plot
    input_data = read(p.bitfile)
  File "D:\project\cardiocare-1.0\src\scipy\io\wavfile.py", line 119, in read
    data = _read_data_chunk(fid, noc, bits)
  File "D:\project\cardiocare-1.0\src\scipy\io\wavfile.py", line 56, in _read_data_chunk
    data = data.reshape(-1,noc)
ValueError: total size of new array must be unchanged

谁能建议我任何解决方案?

【问题讨论】:

  • 你使用的是什么版本的 scipy?
  • 我使用 scipy 0.11.0 我认为这是与 python 2.7 兼容的版本
  • 问题仍未解决。我尝试使用最新版本的 sicpy。但仍然是同样的问题..

标签: python scipy


【解决方案1】:

我使用下面的代码来读取 wav 文件。我知道它不能解决你的问题,但也许你可以用这段代码阅读你的 wav 文件,也许找出问题所在?

我的经验是,wav 文件有时包含“奇怪”的东西,必须处理或删除。

希望对你有所帮助

Rgds

赛瑞克斯

import wave
import struct                     

def wavRead(fileN):
  waveFile = wave.open(fileN, 'r')   
  NbChanels = waveFile.getnchannels()
  data = []
  for x in range(NbChanels):
      data.append([])
  for i in range(0,waveFile.getnframes()):               
      waveData = waveFile.readframes(1)   
      data[i%(NbChanels)].append(int(struct.unpack("<h", waveData)[0]))

  RetAR = []
  BitDebth = waveFile.getsampwidth()*8
  for x in range(NbChanels):
       RetAR.append(np.array(data[x]))
       RetAR[-1] = RetAR[-1]/float(pow(2,(BitDebth-1)))
  fs = waveFile.getframerate()
  return RetAR,fs   

【讨论】:

    猜你喜欢
    • 2019-06-15
    • 1970-01-01
    • 2015-04-20
    • 2021-01-30
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    相关资源
    最近更新 更多