大家好,目前我碰到一個困難,先分別描述一下需求和目前解決的辦法:
當前需求是在 React 專案內,使用套件去製作錄音功能並且產生 wav 檔,這些功能我已經完成了,目前使用 audio-react-recorder 套件 去做
但發現到產生的 wav 檔的格式不對,期望可以將原本 channel 從 2 改變成 1(Stereo 改成 Mono),samepleRate 從 48000 Hz 改成 16000 Hz
只是目前查詢過一些資料,發現到這樣的調整是有些困難的,像是直接從 audio-react-recorder 套件去改它的原始碼,錄音結果變很奇怪
另外查詢了 JS 套件 Recorder.js,在 issue: Changing the bitrate and recording the mono wav files 也提到這樣的調整比較困難!?
而在 issue: how can i change the sampleRate? 有人提供了改變 sample rate 的函式,不過即使如此 JS 套件也不能輕易加入 React 專案?
以上都還沒能解決,所以又找了 MediaStreamRecorder.js 這個套件,在文件的 sample rate 的屬性也提到了
Default "sampleRate" value is "44100". Currently you can't modify sample-rate in windows that's why this property isn't yet exposed to public API.
故暫時判斷這個屬性是不能被更改的
所以想請教版上有針對 wav 檔處理有經驗的大大,有沒有什麼辦法可以在前端的部分就將 wav 檔的 channel 和 samepleRate 做改變,或是有推薦的套件也可以~感謝大家囉
雖然你已經有做法,不過還是幫你找些答案...
傳給navigator.mediaDevices.getUserMedia()
的參數{audio:true}
,除了true
還可以是MediaTrackConstraints
物件,規格可以參考:
https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints
可以用navigator.mediaDevices.getSupportedConstraints()
來獲得目前支援的constraint。雖然有點複雜,但如果指定好了,產生的stream應該就是你要的格式。可以把他存成blob來播放或下載。時間有點晚所以我沒動手試做,你有興趣也不妨嘗試看看是否可行。
好的,感謝大大提供可能的解法~再來嘗試看看
考慮用這一套:
https://github.com/higuma/web-audio-recorder-js
我測試了一下MediaRecorder,發現他並不支援wav,所以非得用Web Audio API不可了,自己寫很麻煩...這一套是用Web Audio API寫的,看起來你要的設定他有支援。