iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0

在繼續研究怎麼設定RIFF檔頭內需要的參數以前,應該先想想還有什麼方向可以進行?(還有什麼問題可以拿去問AI?)

「請問除了Flutter套件以外,有沒有什麼網路上的服務或API可以幫我完成將錄音資料轉成WAVE的任務?」

所謂的網路服務和API是指什麼呢?

先說說API吧!
這個詞的意思其實比較空泛,凡是讓一件軟硬體可以被其他軟硬體交互溝通並互相合作的方式,都可以稱為API。
白話翻譯:一件軟硬體將自己如何被其他人或其他軟硬體使用的方式,就是API。

比如:APP如何使用作業系統上的各種功能與資源?靠作業系統(設計師)提供給APP(設計師)的API。
比如:網路上的AI如何接受使用者在網頁上輸入的各種問題、然後回覆答案給網頁?靠AI(設計師)提供給網頁(設計師)的API。

使用者看到的只是APP或網頁,但內裡的功能都是靠API去完成的。
比如:APP其實沒有能力開啟相機、儲存讀取照片、或是使用網路傳輸資料,都是作業系統將這些功能設定成API後,讓APP去呼叫來完成的。
「APP說:作業系統請幫我打開相機!」「APP說:作業系統幫我打開檔案管理!」「APP說:作業系統給我網路傳輸通道!」

作業系統提供給APP的API長得像函數。
但遠端網路提供給網頁的API長得像網址URL。
(廢話,因為就是網址URL。)

回來上面的問題「有沒有什麼網路上的服務或API可以幫我完成將錄音資料轉成WAVE的任務?」

還真的有!


import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;

Future<void> convertAudioToWave(String inputFilePath, String outputFilePath) async {
  final apiKey = 'your_cloudconvert_api_key';
  final processUrl = 'https://api.cloudconvert.com/v2/convert';

  final requestHeaders = {
    'Authorization': 'Bearer $apiKey',
    'Content-Type': 'application/json',
  };

  final requestBody = jsonEncode({
    'input': {
      'type': 'upload',
      'file': base64Encode(File(inputFilePath).readAsBytesSync()),
    },
    'output_format': 'wav',
    'engine': 'ffmpeg',
  });

  final response = await http.post(
    Uri.parse(processUrl),
    headers: requestHeaders,
    body: requestBody,
  );

  if (response.statusCode == 200) {
    final responseBody = jsonDecode(response.body);
    final outputUrl = responseBody['output']['url'];

    final outputFile = await http.get(Uri.parse(outputUrl));
    await File(outputFilePath).writeAsBytes(outputFile.bodyBytes);
  } else {
    throw Exception('Failed to convert audio file: ${response.body}');
  }
}

其中,有個地方就是網路服務的API網址URL。


final processUrl = 'https://api.cloudconvert.com/v2/convert';

但是有段程式碼要求我自己手動替換裡面的資料。


final apiKey = 'your_cloudconvert_api_key';

什麼叫「your_cloudconvert_api_key」?
「cloudconvert」是這個服務的名字,「api」上面解釋過了,那「key」是什麼?

「key」是種安全機制,有點類似身分證或密碼,用來向伺服器證明「是誰在向它傳輸交換資料」,而伺服器可以從這個「key」去知道你是誰或你的權限,從而判斷要不要讓你使用它的功能。

去哪裡取得「key」?

首先我們要去「cloudconvert」的網頁,進行註冊後進入它的網頁後台,(這個後台是相對的,對「cloudconvert」來說,這就是它開放給我們使用的前台服務,但對我們來說,這是個後台。試著去感受一下。)
然後找到「dashboard」,點進去後再找到「Authorization」,裡面有個「API Key」,裡面有個「create new api key」....

哇!好長一串亂數,(注意!有些明顯的是給人閱讀用的資訊,那不是key的一部份。)
將這串亂數複製起來後到剛剛說的地方將它複製貼上。

另外,程式碼有個地方有點小問題...


import 'package:http/http.dart' as http;

這行程式碼下面被標注了紅色的曲線,這是AndroidStudio在告訴我們「這段程式碼有錯誤」。
什麼樣的錯誤呢?把滑鼠游標移過去,會彈出一個小視窗,它會告訴我們。
將裡面的訊息複製起來問AI吧!

(簡單來說,要改設定檔才能取得這個套件。這種錯誤在AI提供的程式碼中很常見,嚴格說起來程式碼沒有錯,只是AI沒想到要提醒我們需要改設定檔這件事。)


上一篇
音檔,除了格式檔頭以外,的各種學問...
下一篇
外部API果然沒這麼簡單順利....
系列文
用AI寫程式也是要點本事的30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言