开发者

Writing multiple sound files into a single file in python

开发者 https://www.devze.com 2023-03-06 01:13 出处:网络
I have three sound files for exam开发者_StackOverflowple a.wav, b.wav and c.wav . I want to write them into a single file for example all.xmv (extension could be different too) and when I need I want

I have three sound files for exam开发者_StackOverflowple a.wav, b.wav and c.wav . I want to write them into a single file for example all.xmv (extension could be different too) and when I need I want to extract one of them and I want to play it (for example I want to play a.wav and extract it form all.xmv).

How can I do it in python. I have heard that there is a function named blockwrite in Delphi and it does the thing that I want. Is there a function in python that is like blockwrite in Delphi or how can I write these files and play them?


Would standard tar/zip files work for you?

http://docs.python.org/library/zipfile.html

http://docs.python.org/library/tarfile.html


If the archive idea (which is btw, the best answer to your question) doesn't suit you, you can fuse the data from several files in one file, e.g. by writing consecutive blocks of binary data (thus creating an uncompressed archive!)

Let paths be a list of files that should be concatenated:

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()
0

精彩评论

暂无评论...
验证码 换一张
取 消