首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不加载当前内容的情况下将数据附加到wave soundfile

在不加载当前内容的情况下将数据附加到wave soundfile
EN

Stack Overflow用户
提问于 2019-05-09 20:01:45
回答 1查看 396关注 0票数 5

我试图附加数据到一个声音文件而不加载它的内容(因为它可能有千兆字节的数据),我目前正在使用pysoundfile库,我已经想出了一种方法来为wave64做这件事,但在wav中,由于某种原因,它抛出了一个错误。

根据pysoundfile文档,当使用文件描述符打开SoundFile时,它应该在不截断的情况下写入,所以这就是我目前正在做的

代码语言:javascript
复制
    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文件类型时,出现以下错误:

代码语言:javascript
复制
RuntimeError: Error opening <_io.BufferedWriter name='../datasets/emddf_clean/qcoisa.wav'>: Unspecified internal error.

但是对于w64格式的文件,它以某种方式工作...如果有人能向我说明情况,那就太好了,提前谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-10 21:18:28

我成功地做了我想做的事情,而没有显式地使用文件描述符:

代码语言:javascript
复制
    with sf.SoundFile(path['full_path'], mode = 'r+') as wfile:
        wfile.seek(0,sf.SEEK_END)
        wfile.write(self._samples)

如果文件处于r+模式(读/写),它支持查找,这意味着我们可以指向文件的末尾,允许追加。唯一的问题是,如果文件不存在,它将抛出一个错误,但您可以通过执行以下操作轻松地修复它:

代码语言:javascript
复制
    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

希望我说的够清楚了,希望能帮助到一些人!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56058997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档