iT邦幫忙

0

想請教對於 wav 音檔格式(audioChannels、sampleRate)修改有經驗的大大~

  • 分享至 

  • xImage

大家好,目前我碰到一個困難,先分別描述一下需求和目前解決的辦法:

當前需求是在 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 做改變,或是有推薦的套件也可以~感謝大家囉

基本上麥克風是在用戶端,所以,她系統設定多少就是多少,我是沒看過能夠直接去調整系統設定,那是軟體驅動硬體的方式,既然不能調整,那就是只能後台轉檔,你要找的是WAVE 轉換套件,而不是錄音套件,至於在後台怎麼讓前台收進來的WAVE 可以轉換的動作,你要自己思考一下
harry xie iT邦研究生 1 級 ‧ 2021-11-11 15:42:33 檢舉
了解~目前這個轉換也用已產生的 wav 檔給後端嘗試處理了
感謝回覆
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
fillano
iT邦超人 1 級 ‧ 2021-11-12 00:39:33
最佳解答

雖然你已經有做法,不過還是幫你找些答案...

傳給navigator.mediaDevices.getUserMedia()的參數{audio:true},除了true還可以是MediaTrackConstraints物件,規格可以參考:

https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints

可以用navigator.mediaDevices.getSupportedConstraints()來獲得目前支援的constraint。雖然有點複雜,但如果指定好了,產生的stream應該就是你要的格式。可以把他存成blob來播放或下載。時間有點晚所以我沒動手試做,你有興趣也不妨嘗試看看是否可行。

harry xie iT邦研究生 1 級 ‧ 2021-11-12 08:58:36 檢舉

好的,感謝大大提供可能的解法~再來嘗試看看

fillano iT邦超人 1 級 ‧ 2021-11-12 09:24:11 檢舉

考慮用這一套:
https://github.com/higuma/web-audio-recorder-js

我測試了一下MediaRecorder,發現他並不支援wav,所以非得用Web Audio API不可了,自己寫很麻煩...這一套是用Web Audio API寫的,看起來你要的設定他有支援。

我要發表回答

立即登入回答