2011-05-13 76 views
1

我遇到問題。我有三個聲音文件,例如a.wav,b.wav和c.wav。我想將它們寫入單個文件中,例如all.xmv(擴展名可能不同),當我需要時,我想提取它們中的一個,然後我想播放它(例如,我想播放一個.wav並提取它形成all.xmv)。在python中將多個聲音文件寫入單個文件中

我怎麼在python中做到這一點。我聽說在Delphi中有一個名爲blockwrite的函數,它做我想要的東西。在Delphi中有沒有像blockwrite這樣的函數,或者我該如何編寫這些文件並播放它們?

回答

0

如果歸檔想法(這是順便說一句,最好的回答你的問題)不適合你,你可以融合在一個文件從多個文件中的數據,例如通過寫二進制數據的連續塊(​​從而創造一個未壓縮的檔案!)

令路徑是文件的列表應串連:

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

或存檔的內置目錄中。 – 2011-05-14 14:13:53

+0

好的謝謝。事實上,我想寫一本字典程序,我也想播放聲音。當我點擊一個單詞時,我必須聽到它的發音。所以會有這麼多的聲音文件,我想把它們寫入一個文件或幾個文件。我不想使用zip/tar,因爲它需要時間來提取文件,然後播放它,並從內存中刪除它,我認爲。但哪一個更快使用zip tar文件或在io模塊中使用fout? – mehmet 2011-05-14 15:09:05

+0

從'tar'讀取應該足夠快,因爲tar只是一個原始數據的容器。然而,你可以使用'純python'的方法,看到更新的代碼。 – 2011-05-14 16:25:22