2015-01-10 1 views
4

파이썬 스크립트에서 4GB 이상의 오디오 웨이브 파일을 만들려고하는데 오류가 발생합니다. 다음은 문제를 재현하는 짧은 스크립트입니다. 누군가가 왜 그런 오류가 있고 그것을 고치는 법을 알 수 있습니까? 아니면 버그 일 수 있습니까?파이썬 - 4GB 이상의 웨이브 파일 : struct.error : 'L'포맷은 0 <= number <= 4294967295가 필요합니다.

파이썬 2.7과 3.4에서 시도했지만 두 가지 모두 동일한 오류가 발생했습니다.

# script for python 2 
import wave 

# create a large (>4gb) file 
wf = wave.open("foo.wav", "w") 
wf.setnchannels(2) 
wf.setsampwidth(2) 
wf.setframerate(44100) 
text = 'a' * 1024**2 
for i in xrange(5 * 1024): 
    print i 
    wf.writeframes(text) 
wf.close() 

출력 : 웨이브 파일 형식 사양이 그것을 방지로

4088 
4089 
4090 
4091 
4092 
4093 
4094 
4095 
Traceback (most recent call last): 
    File "test.py", line 16, in <module> 
    wf.writeframes(text) 
    File "/usr/lib/python2.7/wave.py", line 444, in writeframes 
    self._patchheader() 
    File "/usr/lib/python2.7/wave.py", line 496, in _patchheader 
    self._file.write(struct.pack('<L', 36 + self._datawritten)) 
struct.error: 'L' format requires 0 <= number <= 4294967295 
Exception struct.error: "'L' format requires 0 <= number <= 4294967295" in <bound method Wave_write.__del__ of <wave.Wave_write instance at 0x7fed4ed58908>> ignored 

답변

5

.WAV 파일 4GB의보다 큰 수 없습니다. 위키 백과에 설명했듯이 : 4GB의 2기가바이트에서 한계를 증가 파이썬도 issue 16461

The WAV format is limited to files that are less than 4 GB, because of its use of a 32-bit unsigned integer to record the file size header.

참조 (그러나 그것 뿐이다).

관련 문제