近期在做視頻錄制方面的事情,看了下音頻的錄制和輸出。主要參考官方的FrameCapturer:
https://github.com/unity3d-jp/FrameCapturer
wav文件結構較為簡單,文件頭格式網上有很多,數據這塊可以直接采用未壓縮的數據。
這里需要注意一點,C#在用StreamWriter寫入時,並不會填充所有字節。
例如int型數據占4個字節,而寫入時只會填充相應數據大小的字節,所以這里使用BitConverter來做字節的寫入
mFileStream.Write(BitConverter.GetBytes(16), 0, 4);
獲取音頻這塊可以用Unity自己提供的事件:
void OnAudioFilterRead(float[] samples, int channels) { ... }
音頻寫入順序為左聲道-右聲道,左聲道-右聲道 ... 循環。由於Unity默認就是這樣的順序,所以第二個參數也用不到。
再對應wav文件的不同位數,寫入字節時進行相應的數值轉換操作即可。
工程文件地址:
https://gitee.com/Hont/WavAudioRecorder