2011-05-13 3 views
1

문제가 있습니다. 예를 들어, a.wav, b.wav 및 c.wav와 같은 세 가지 사운드 파일이 있습니다. 나는 그것들을 하나의 파일에 쓰고 싶다. 예를 들어 all.xmv (확장자도 다를 수있다.)가 필요할 때 필요할 때 나는 그 중 하나를 추출하고 싶다. (예를 들어 a.wav를 연주하고 싶다. 그것은 all.xmv를 형성합니다).여러 개의 사운드 파일을 하나의 파일에 파이썬으로 작성

어떻게 파이썬으로 할 수 있습니까? Delphi에서 blockwrite이라는 함수가 있으며 원하는 기능을 수행한다고 들었습니다. 파이썬에서 델파이의 blockwrite과 같은 함수가 있습니까? 아니면이 파일들을 어떻게 쓸 수 있습니까?

답변

4
+0

내가 파일을 arcihve 사용할 그나마 더. – mehmet

+1

@mehmet, confused - 당신이 원하는 것은 아카이브 파일과 어떻게 다릅니 까? – linuts

+1

나는 각 항목에 직접 액세스하지 않고 앞의 것들을 건너 뛰지 않아도되므로 사운드 효과를 다룰 때 문제가되는 tar를 통해 zip을 사용합니다. –

0

하면 아카이브 아이디어 (BTW 질문에 대한 가장 좋은 대답이다) 예를 들어, 당신은 하나 개의 파일에 여러 파일의 데이터를 융합 할 수 있습니다, 당신이 적합하지 않습니다 이진 데이터의 연속 블록을 작성하여 (따라서 비 압축 아카이브를 생성하지 않습니다!)

하자 경로가 연결된해야하는 파일의 목록이 될 :

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

또는 아카이브의 기본 제공 디렉토리에 있습니다. –

+0

감사합니다. 사실 나는 사전 프로그램을 쓰고 싶고 나는 소리를 내고 싶다. 내가 단어를 클릭했을 때 나는 그것의 발음을 들어야 만한다. 그래서 많은 사운드 파일이있을 것이고 하나의 파일이나 여러 개의 파일에 쓰고 싶을 것입니다. 내가 파일을 추출하고 그것을 재생하고 또한 내가 생각하는 그들로부터 그것을 삭제할 시간이 걸릴 것이기 때문에 나는 zip/tar를 사용하고 싶지 않았다. 어느 것이 zip tar 파일을 사용하거나 io 모듈에서 fout을 사용하는 것이 더 빠릅니까? – mehmet

+0

tar는 원시 데이터의 컨테이너이기 때문에 'tar'를 읽는 것이 빠릅니다. 그러나 'pure python'접근 방식을 사용할 수 있습니다. 업데이트 된 코드를 참조하십시오. –

관련 문제