用毫秒读python中的wav

2024-10-03 13:17:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从wav文件中删去一些小片段(音素),大约是0.1秒(例如0.3698125-0.466125)

我用的是wave模块,但它无法处理:-/有人知道如何处理它吗?在

此脚本应打开文件,剪切片段并将其添加到新脚本中

data = fonemy[fonem][0] = start, end, path ([0.3698125, 0.466125, u'hds/data/speech_16kHz/utt001.wav'])

frames = ""
text   = "hello"     
for fonem in text:
    data = fonemy[fonem][0]
    win = wave.open(data[2], 'rb')
    wout = wave.open('segment.wav', 'wb')
    wout.setparams(win.getparams())
    t0 = data[0]
    t1= data[1]
    s0, s1= int(t0*win.getframerate()), int(t1*win.getframerate())
    win.readframes(s0) # discard
    frames = frames + win.readframes(s1-s0)

wout.writeframes(frames)

Tags: 文件text脚本dataframesopenwavewin
1条回答
网友
1楼 · 发布于 2024-10-03 13:17:03

不清楚您所说的“它不能处理它”是什么意思,但这里的一个问题是,您试图使用float读取帧,但只能读取整数帧:

>>> w = wave.open("/Users/bgporter/Documents/Juce Demo Audio Recording.wav", "rb")
>>> rate = w.getframerate()
>>> frames = 0.3698125 * rate
>>> w.readframes(frames)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/wave.py", line 253, in readframes
    data = self._data_chunk.read(nframes * self._framesize)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/chunk.py", line 134, in read
    data = self.file.read(size)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/chunk.py", line 134, in read
    data = self.file.read(size)
TypeError: integer argument expected, got float

读一部分音频样本是没有意义的。弄清楚您是否需要多一个或少一个帧值的数据,并根据需要舍入到下一个更高或更低的帧数:

^{pr2}$

相关问题 更多 >