這個程式的功能是讀取錄音表,然後一個一個的來錄音,程式會自動地顯示錄要錄的發音,錄完自動存檔,而且配特定的檔名,那要錄多少個wav檔呢。4500多個(所以才要寫專用的,用audacity錄一個存一個,再打檔名,你會發瘋的@@)
得到許多寶貴的經驗,為了不要忘記,就順便紀錄一下心得:
1.Python語言本體部份:就算Python號稱很容易,但是一些小細節的習慣動作仍然要適應,例如
- 縮排的控制也是語法之一,很多小錯誤都卡在這地方XD
- 同為物件導向語言,看起來很像java,但是存取資料成員時,Python沒有this super可以用,甚至要存取本類別資料成員,都不能省略 自己.變數 這樣的作法
- 很多有關WxPython的視窗元件的方法成員呼叫,傳的參數如查api會發現往往含上self本身,然後真正在傳參數的時候,卻不用傳self,例如說API上面寫XXX.SetVisible(self,file)或者你自己寫的方法成員宣告時是這樣,但實際呼叫時,只要XXX.SetVisible(myfile)就好了,有一點點人格分裂之感XD
- Java的GUI程式設計沒有mainloop(),或者說隱藏起來,但是Python的有
- 承上,同樣的東西在Java很多可能是一個呼叫背後直接跑一個Thread,但Python的不是,所以自己記得包Thread,不然會掛住整個視窗
- 基本語法不一樣,例如for、操作資料結構部份、沒有";",很直接簡潔,要習慣習慣才行XD
- 雖然很多人推崇SPE ,但是SPE存檔存ASCII的,所以程式碼裡面不能出現中文訊息、中文註解,所以我只用它的wxGlade來拉出視窗介面
- 我主力用emacs,太方便了,只是剛開始寫python,不知道有沒有python的自動補完函式的模組?
- 一開始我用alsaaudio模組,但是後來發現這是一個錯誤的選擇。我們的目標是必須能錄24bit,而Ubuntu以及其他現代的GNU/Linux Distribution是讓alsa上架pulseaudiio,而pulseaudiio被鎖在16bit,你的錄音介面再好也沒有用,用alsa的模組都會直接轉到pulseaudio,然後24bit錄到的都會變成破音
- 而我是alsa直上jack 音訊系統,pulseaudio也是轉進jack,一直執著alsaaudio沒有用,終究24bit都會變成破音
- python不適合realtime,所以很少有python用的jack模組,我只有找到pyjack,但build不起來orz。
- 最後發現有console的jack錄音程式-jack_capture,當然可以正確的錄出24bit的wav,只要我寫的GUI來呼叫他就可以啦,請教paul,得知要用subprocess,一開始有點難度,反覆查API,最後終於搞定,覺得很有趣,原來python被稱為命令稿語言是因為擅長於呼叫其他程式,組合起來快速完成工作。
花了兩個星期寫起來了,利用餘暇時間一點一點寫,昨天終於搞定。搞完,就轉換到音樂人狀態好好地發洩一下....爽啦 XD
2 則留言:
可以考慮kdevelop+kdev-python。
謝謝你的建議
張貼留言