Saya menggunakan Google Speech To Text API dari paket googleapis. Tetapi saya tidak menemukan dokumentasi (Untuk dart & flutter) yang menjelaskan cara menggunakan file audio lokal yang ada di folder aset aplikasi sebagai data audio saat mengirim RecognizeRequest.fromJson. Saya ingin tahu bagaimana saya bisa menggunakan file lokal sebagai pengganti konten audio di _json dalam kode. Terima kasih sebelumnya.

    final httpClient = await clientViaServiceAccount(_credentials, _scopes);
    try {
      final speech2Text = SpeechApi(httpClient);

      final _json = {
        "config": {
          "encoding": "FLAC",
          "sampleRateHertz": 16000,
          "languageCode": "en-US",
          "enableWordTimeOffsets": false
        },
        "audio": {"uri": "gs://cloud-samples-tests/speech/brooklyn.flac"}
      };
      final _recognizeRequest = RecognizeRequest.fromJson(_json);
      await speech2Text.speech.recognize(_recognizeRequest).then((response) {
        for (var result in response.results) {
          print(result.toJson());
        }
      });
    } finally {
      httpClient.close();
    }
  }
0
D C 10 Mei 2021, 16:08

1 menjawab

Jawaban Terbaik

Saya akhirnya berhasil melakukannya dengan melihat contoh paket google_speech ini.

  1. Tambahkan file audio sebagai aset di pubsepec.yaml:
assets:
- assets/brooklyn.flac
  1. Kemudian salin file dari aset:
Future<void> _copyFileFromAssets(String name) async {
  var data = await rootBundle.load('assets/$name');
  final directory = await getApplicationDocumentsDirectory();
  final path = directory.path + '/$name';
  await File(path).writeAsBytes(
      data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));
}
  1. Kemudian dapatkan konten audio:
Future<List<int>> _getAudioContent(String name) async {
  final directory = await getApplicationDocumentsDirectory();
  final path = directory.path + '/$name';
  if (!File(path).existsSync()) {
    await _copyFileFromAssets(name);
  }
  return File(path).readAsBytesSync().toList();
}
  1. Sekarang Encode konten ke Base64:
final audio = await _getAudioContent('brooklyn.flac');
String audio64 = base64Encode(audio);
  1. Lewati string yang disandikan sebagai string konten di bagian audio:
final _json = {
   "config": {
      "encoding": "FLAC",
      "sampleRateHertz": 16000,
      "languageCode": "en-US",
      "enableWordTimeOffsets": false
      },
      // "audio": {"uri": "gs://cloud-samples-tests/speech/brooklyn.flac"}
   "audio": {"content": audio64},
   };

Saya harap ini membantu seseorang dengan masalah serupa.

0
D C 10 Mei 2021, 14:33