[英]Python wave module only working in v2.7 not in v3.4 linux
浪費大量時間試圖在python中編寫wave文件,以發現它在python 3.4.2上不起作用,但在python 2.7.9上卻起作用
我正在使用Debian jessie並安裝了兩個版本的python。 如果我只是在命令提示符下寫“ python”,它將啟動python 2.7.9
我正在測試的代碼是這樣的:
import wave
frame_rate = 44100
bit_depth = 16
bits_per_byte = 8
num_channels = 2
wOut = wave.open("out.wav","w")
wOut.setparams((num_channels, (bit_depth / bits_per_byte), frame_rate, (frame_rate * duration), 'NONE', 'not compressed'))
wOut.close()
如果我使用python 2.7.9運行該代碼,我將獲得僅帶有wave標頭的健康wav文件。 如果我使用python 3.4.2運行相同的代碼,則會出現此錯誤:
File "/usr/lib/python3.4/wave.py", line 433, in close
self._ensure_header_written(0)
File "/usr/lib/python3.4/wave.py", line 455, in _ensure_header_written
self._write_header(datasize)
File "/usr/lib/python3.4/wave.py", line 472, in _write_header
self._sampwidth * 8, b'data'))
struct.error: required argument is not an integer
Wave文件僅包含頭的前4個字節。
我還沒有找到任何在線文檔,說明這是python 3.4中的問題,所以我猜測可能是我的multiversion python安裝出現問題。
也許我擁有的wave模塊僅適用於python 2.7? 我相信這不是我第一次遇到這種問題,我正在考慮僅在2.7中工作,但我不想這樣做。
任何命中將不勝感激
您需要floordiv (bit_depth // bits_per_byte)
,默認情況下為python2 floor,默認情況下python3使用truediv,因此您要在python 3中傳遞一個float
,而在python 2中傳遞一個int
:
wOut.setparams((num_channels, (bit_depth // bits_per_byte), frame_rate, (frame_rate * 12), 'NONE', 'not compressed'))
您將sample_width設置為(bit_depth / bits_per_byte)
,在python 2上為整數,在python 3上為float。
要在python 2和3上都使用整數除法,請使用(bit_depth // bits_per_byte)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.