在python中将多个声音文件写入单个文件

在python中将多个声音文件写入单个文件,python,file,audio,writing,Python,File,Audio,Writing,我有个问题。我有三个声音文件,例如a.wav、b.wav和c.wav。我想将它们写入一个文件,例如all.xmv扩展名也可能不同,当我需要时,我想提取其中一个,我想播放它,例如,我想播放a.wav并从all.xmv中提取它 我如何用python实现它。我听说Delphi中有一个名为的函数,它完成了我想要的事情。python中是否有类似于Delphi的函数,或者如何编写并播放这些文件?标准的tar/zip文件适合您吗 标准tar/zip文件是否适合您 如果存档想法(顺便说一句,您的问题的最佳答案)

我有个问题。我有三个声音文件,例如a.wav、b.wav和c.wav。我想将它们写入一个文件,例如all.xmv扩展名也可能不同,当我需要时,我想提取其中一个,我想播放它,例如,我想播放a.wav并从all.xmv中提取它


我如何用python实现它。我听说Delphi中有一个名为的函数,它完成了我想要的事情。python中是否有类似于Delphi的函数,或者如何编写并播放这些文件?

标准的tar/zip文件适合您吗


标准tar/zip文件是否适合您


如果存档想法(顺便说一句,您的问题的最佳答案)不适合您,您可以将多个文件中的数据融合到一个文件中,例如,通过写入连续的二进制数据块,从而创建未压缩的存档

让路径为应连接的文件列表:

import io
import os

offsets = [] # the offsets that should be kept for later file navigation
last_offset = 0

fout = io.FileIO(out_path, 'w')
for path in paths:
    f = io.FileIO(path) # stream IO
    fout.write(f.read())
    f.close()
    last_offset += os.path.getsize(path)
    offsets.append(last_offset)       
fout.close()

# Pseudo: write the offsets to separate file e.g. by pickling
# ...

# reading the data, given that offsets[] list is available
file_ID = 10                   # e.g. you need to read 10th file
f = io.FileIO(path)    
f.seek(offsets[file_ID - 1])   # seek to required position 
read_size = offsets[filed_ID] - offsets[file_ID - 1]  # get the file size
data = f.read(read_size)       # here we are! 
f.close()

如果存档想法(顺便说一句,您的问题的最佳答案)不适合您,您可以将多个文件中的数据融合到一个文件中,例如,通过写入连续的二进制数据块,从而创建未压缩的存档

让路径为应连接的文件列表:

import io
import os

offsets = [] # the offsets that should be kept for later file navigation
last_offset = 0

fout = io.FileIO(out_path, 'w')
for path in paths:
    f = io.FileIO(path) # stream IO
    fout.write(f.read())
    f.close()
    last_offset += os.path.getsize(path)
    offsets.append(last_offset)       
fout.close()

# Pseudo: write the offsets to separate file e.g. by pickling
# ...

# reading the data, given that offsets[] list is available
file_ID = 10                   # e.g. you need to read 10th file
f = io.FileIO(path)    
f.seek(offsets[file_ID - 1])   # seek to required position 
read_size = offsets[filed_ID] - offsets[file_ID - 1]  # get the file size
data = f.read(read_size)       # here we are! 
f.close()

@mehmet,困惑-您想要的与存档文件有何不同?我会使用压缩tar,因为它可以让您直接访问每个条目,而不必跳过前面的条目,这在处理音效时可能很重要。@mehmet,困惑-您想要的与存档文件有什么不同?我会使用压缩tar,因为它可以让您直接访问每个条目,而不必跳过前面的条目,这在处理音效时可能很重要。或者在存档的内置目录中。好的,谢谢。事实上,我想写一个字典程序,我也想播放声音。当我点击一个单词时,我必须听到它的发音。所以会有很多声音文件,我想把它们写进一个或几个文件中。我不想使用zip/tar,因为提取文件、播放文件以及从内存中删除文件都需要时间。但在io模块中使用zip tar文件或使用fout哪个更快?读取“tar”应该足够快,因为tar只是一个原始数据的容器。但是,您可以使用“纯python”方法,请参阅更新的代码,或者在存档的内置目录中。好的,谢谢。事实上,我想写一个字典程序,我也想播放声音。当我点击一个单词时,我必须听到它的发音。所以会有很多声音文件,我想把它们写进一个或几个文件中。我不想使用zip/tar,因为提取文件、播放文件以及从内存中删除文件都需要时间。但在io模块中使用zip tar文件或使用fout哪个更快?读取“tar”应该足够快,因为tar只是一个原始数据的容器。但是,您可以使用“纯python”方法,请参阅更新的代码。