研究CloudConvertAPI的功能時,發現「我其實不知道自己上傳的資料是什麼格式」,(一直稱呼它為raw data顯然是不正確的、是「不專業」的習慣,)所以回頭問問AI...
「html.MediaRecorder產生的錄音檔是什麼格式的資料?」
(資料格式?檔案格式?這是不一樣的東西,有發現嗎?)
結果才發現「可以設定產生的資料格式」。
final mediaStream = await html.window.navigator.mediaDevices?.getUserMedia({'audio': true});
_mediaRecorder = html.MediaRecorder(mediaStream!, {'mimeType': 'audio/webm'});
資料格式...叫做「mimeType」?(就是個命名而已,似乎沒辦法從命名本身知道什麼。)
額外的了一下...
「有辦法知道瀏覽器或網頁環境支援的檔案類型嗎?」
還真的有!
void checkMimeTypeSupport() {
final supportedMimeTypes = ['audio/webm', 'audio/ogg', 'audio/wav', 'audio/mp3', 'audio/flac'];
for (var mimeType in supportedMimeTypes) {
if (html.MediaRecorder.isTypeSupported(mimeType)) {
print('$mimeType is supported');
} else {
print('$mimeType is not supported');
}
}
}
那,嘗試問一下那百萬大獎...
「有辦法使用audio/webm格式資料產生wav檔嗎?」
還真有!
Future<js.JsObject> decodeAudioData(js.JsObject audioData) async {
final audioContext = js.JsObject(js.context['AudioContext']);
final audioDataBuffer = await audioContext.callMethod('decodeAudioData', [audioData]);
return audioDataBuffer;
}
太好了!...才怪!測試的結果,這段程式碼無法正常運作。
這段程式碼的功能是「產生一個AudioContext的物件實體,然後使用這個物件的函數『decodeAudioData』來處理音訊資料。」
問題是「AudioContext」這個物件裡並沒有「decodeAudioData」這個函數,所以呼叫這個函數時就會產生錯誤導致程式無法繼續執行。
會有這個問題產生的原因在於「這段功能實質上是在網頁環境中呼叫JavaScript的功能、或使用JavaScript的物件」,而Flutter使用JavaScript物件「AudioContext」的方法有點問題....(什麼問題?不好意思,深究這個問題已經這超出我的PayGrade,也跟「使用AI寫程式」這個主旨不合。)