我试图附加数据到一个声音文件而不加载它的内容(因为它可能有千兆字节的数据),我目前正在使用pysoundfile库,我已经想出了一种方法来为wave64做这件事,但在wav中,由于某种原因,它抛出了一个错误。
根据pysoundfile文档,当使用文件描述符打开SoundFile时,它应该在不截断的情况下写入,所以这就是我目前正在做的
fd = open('foo.wav',mode='ab')
with sf.SoundFile(fd, mode = 'w', samplerate = self._samplerate,channels = self._channels, format = 'wav') as wfile:
wfile.seek(0,sf.SEEK_END)
wfile.write(self._samples)
wfile.close()
fd.close()当我使用wave文件类型时,出现以下错误:
RuntimeError: Error opening <_io.BufferedWriter name='../datasets/emddf_clean/qcoisa.wav'>: Unspecified internal error.但是对于w64格式的文件,它以某种方式工作...如果有人能向我说明情况,那就太好了,提前谢谢!
发布于 2019-05-10 21:18:28
我成功地做了我想做的事情,而没有显式地使用文件描述符:
with sf.SoundFile(path['full_path'], mode = 'r+') as wfile:
wfile.seek(0,sf.SEEK_END)
wfile.write(self._samples)如果文件处于r+模式(读/写),它支持查找,这意味着我们可以指向文件的末尾,允许追加。唯一的问题是,如果文件不存在,它将抛出一个错误,但您可以通过执行以下操作轻松地修复它:
if(self.mode == my_utils.APPEND and os.path.isfile(path['full_path'])):
with sf.SoundFile(path['full_path'], mode = 'r+', samplerate = samplerate) as wfile:
wfile.seek(0,sf.SEEK_END)
wfile.write(self.file.getSamples())
else:
sf.write(path['full_path'], self.file.getSamples(), samplerate,format=path['extension']) # writes to the new file
return希望我说的够清楚了,希望能帮助到一些人!
https://stackoverflow.com/questions/56058997
复制相似问题