iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
生成式 AI

用AI寫程式也是要點本事的系列 第 23

原來錄音功能可以指定「產生的資料類型」

  • 分享至 

  • xImage
  •  

研究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寫程式」這個主旨不合。)


上一篇
外部API果然沒這麼簡單順利....
下一篇
最後一週,準備開始衝刺....
系列文
用AI寫程式也是要點本事的30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言