在繼續研究怎麼設定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沒想到要提醒我們需要改設定檔這件事。)