2020年11月8日 星期日

寫一些關於數學練習的程式(1)

 

        最近突然想到,又寫了一些跟數學相關的教學及自學程式,當然這是我一直有興趣的事,前陣子剛好家中女王提到中年級小朋友關於分數的學習問題,一時動了來寫寫相關教學程式的念頭…

寫個可以教小朋友分數程式
       分數相關的程式,我以前沒有寫過,因為處理分數「顯示」方式的問題很讓人覺得麻煩…,不過這次就玩玩看吧!頂多寫不好,又沒什麼壓力~一開始很單純的,就是希望畫面上動態地出現某個分數,讓小朋友可以去辨識是真分數、假分數或是帶分數,因為中年級的範圍好像就中有這樣,再往後一點就是假分數與帶分數的互換…對於電腦程式來說,這其實沒有什麼難度就是Math.Radom就解決了,當然花了許多功夫在分數的呈現方式上,六分之五又不能寫成5/6,雖然有點麻煩,但設計一些涵數就也解決了

認識分數的種類

分數轉換

    為了增加撰寫樂趣,我就想著若能讓這程式講話,唸出題目唸出答案,好像是不錯的點子,找到了https://soundoftext.com/ 這個網站可以讓人家輸入文字,下載成mp3所以就把預想中程式可能會說的字眼都分別存成獨立的mp3,我的策略是:要說話時就在程式中讓多個mp3音檔湊出那句話,一開始我把那些音檔一一送進播放器,問題出現了:雖然會講,但音檔與音檔在播放器交替時會有延遲,導致講話會鈍…

這是九十九的音檔波形
        怎麼解決這個問題呢?我想必須先能在送進播放器之前,將各音檔先動態合併起來,方法當然是去爬文(英文不好但又得去爬外國人說的),別跟我說用Audacity、用格式工廠、用Audio Joiner呀!這些沒用的…,我的需求是在我的程式中可以動態將多個聲波檔合併成一個聲波檔的方法,原則上就是CommandLine工具或是指令或是dll涵式庫之類的,想不到外國工程師的文中提到用Windows內建指令就行了,語法如下:> copy /b 1st.mp3+2st.mp3+3st.mp3 output.mp3
在程式中呼叫了cmd.exe來執行這樣的語法,果然可以將多個音檔合併成一個,不過很快就發現了問題,怎麼產生的mp3明明檔案大小是多個檔加起來的,但卻只唸2秒就沒了,原來這種方法合併mp3,會將mp3帶著的ID3 Tag也一起加起來,當ID3 Tag混亂的時候就會出現這種狀況…怎麼解決?想了一下午,終於…我試著用Gold wave 將所有音檔轉成同一個屬性(取樣率及位元率),這問題被解決了!

這算是寫這支程式自己學到了一點!
※要不然前一陣子都是在研究後推式的動力紙飛機怎樣才會飛




沒有留言:

張貼留言