最近完成了一個Windows phone 7版本的聊天軟件,回顧了一下開發歷程,感慨良多。
今天先感嘆一的主題是,如何壓縮WAV 音頻文件。
目前Wp7中錄制的音頻格式是WAV,然而WAV的存儲空間很大,並且考慮到在聊天軟件中,直接發送WAV格式的音頻顯然也是一種損耗流量的做法。
目前用WP7手機錄制的WAV格式有如下特點:采樣率為16KHz,每次采用16-bit 數據。
目前並沒有找到好的方法將WAV 格式轉成壓縮率更高的其他音頻格式的方法(IPhone和Andiord都支持的AMR就是一個比較好的音頻格式),於是主要思路就是考慮如何減少采樣率:
將原生錄制的格式轉發為8KHz 8-bit的數據。
所以得到如下代碼:
byte[] NormalizeWaveData(byte[] sourceData) { int len = (sourceData.Length / 2 / 2); using (MemoryStream ms = new MemoryStream(len)) { for (int i = 0; i < len; i++) { sbyte data = (sbyte)sourceData[i * 4 + 1]; ms.WriteByte((byte)(data + 128)); } return ms.ToArray(); } }
通過測試,成功,文件大小為原來的1/4,基本滿足要求。
哪位大俠如果有更好的方法,請告之。
順便在這里推薦一個滿分的聊天軟件iUU,各個平台都有,下面是WP7平台的截圖,軟件的下載地址是:http://www.windowsphone.com/zh-CN/apps/95bda343-124c-4220-8861-0495815499d6。或者在手機商店直接搜索iUU,希望大家支持,我會在后續中逐步公開源代碼。