当前位置: 首页 > 知识库问答 >
问题:

颤振:Google语音到文本API始终返回null

林德惠
2023-03-14

我试图调用google speech to text api,但它总是返回空结果。我从这个答案中得到了实现提示:在dart、FLATTER中使用gcloud语音api进行实时语音识别

我使用的是颤振声(https://pub.dev/packages/flutter_sound)打包以录制音频,然后将base64编码的音频发送到语音API

录音代码

String path = await flutterSound.startRecorder(
        Platform.isIOS ? 'ios.' : 'android.aac',
        androidEncoder: AndroidEncoder.AAC,
        sampleRate: 16000 ,
        numChannels: 1,
        androidAudioSource: AndroidAudioSource.MIC,
      );
      print('startRecorder: $path');

音频文件android。aac带。从上述代码成功生成aac扩展。

下面的代码用于将音频数据发送到语音api

final _credentials = new ServiceAccountCredentials.fromJson(r'''
{
  "type": "service_account",
  "project_id": "",
  "private_key_id": "",
   ....

''');

  final _SCOPES = const [SpeechApi.CloudPlatformScope];

  void convert() async {
    clientViaServiceAccount(_credentials, _SCOPES).then((http_client) {
      var speech = new SpeechApi

      try{
        String myPath= _path;
        _readFileByte(myPath).then((bytesData) async {
          String audioString = base64.encode(bytesData);
          print('audioString: $audioString');
          String audioStringSample = "";
          RecognizeRequest r = RecognizeRequest();
          RecognitionAudio audio = RecognitionAudio.fromJson({ 'content': audioString});
          r.audio = audio;
          RecognitionConfig config = RecognitionConfig.fromJson({
            'languageCode' : 'en-US',
            'encoding' : 'LINEAR16',
            'sampleRateHertz' : 16000,
          });
          r.config = config;
          speech.speech.recognize(r).then((results) {
            for (var result in results.results) {
              print(result.alternatives[0].transcript);
            }
          });

        });
      } catch (e) {
        // if path invalid or not able to read
        print(e);
      }
    });
  }

  Future<Uint8List> _readFileByte(String filePath) async {
    Uri myUri = Uri.parse(filePath);
    File audioFile = File.fromUri(myUri);
    Uint8List bytes;
    await audioFile.readAsBytes().then((value) {
      bytes = Uint8List.fromList(value);
      print('reading of bytes is completed');
    }).catchError((onError) {
      print('Exception Error while reading audio from path:' +
          onError.toString());
    });
    return bytes;
  }

上面的代码与audioStringSample完美配合(在此处查找示例音频内容:https://gist.github.com/DazWilkin/34d628b998b4266be818ffb3efd688aa),但当我传递自己的音频即audioString时,结果始终为空。我在这里做错了什么吗?

附言:我也尝试了语音API参考(https://cloud.google.com/speech-to-text/docs/encoding)中列出的不同编码方法,但仍然不成功。

共有2个答案

景宏朗
2023-03-14

我最近也遇到了这个确切的问题,我认为问题在于文件的编码。我将v2.0.3用于flatter\u sound,但根据https://cloud.google.com/speech-to-text/docs/encoding,它们唯一可接受的文件类型是flac、amr、wav和其他一些类型。

我在使用https://pub.dev/packages/google_speech预设编码为

'编码':'LINEAR16',

这解释了wav文件工作的原因

谢俊英
2023-03-14

问题出在录音库里。解决问题的记录器:https://pub.dev/packages/flutter_audio_recorder

 类似资料:
  • 我跟着这首短裙:https://jbinformatique.com/2018/02/16/android-speech-to-text-api-google-tutoriel/ 它工作得很好!它使用android.speech.识别意图包,它是免费的,它可以在没有互联网的情况下工作,正如这里提到的: Android语音到文本API(识别器意图)和Google Cloud Speech API之间

  • 我似乎在这上面找不到任何东西。iOS7中是否有任何Siri类或API允许您进行文本到语音转换?我所要做的就是如下所示: 然后让Siri从我的应用程序中说出来。 看来我们应该有能力做到这一点,不是吗?似乎是一件微不足道的事情。

  • 注意:同样的代码,当使用在另一个帐户的firebase工作,我似乎不能解决问题。

  • 使用Microsoft语音API转录中/大型音频文件(每个文件约6-10分钟)的最佳方式是什么?比如批量音频文件转录? 我使用了https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/speech-to-text-sample中提供的代码,用于连续转录语音,但它在某个时候停止转录。转录有任何限制吗?我只使用免

  • Xcode的输出:在文件中包含从 /Users/dani/development/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-6.0.3/ios/Classes/FLTURLLauncherPlugin.m: 7: /Users/dani/development/flutter/.pub-cache/hosted/pub.dart

  • Android谷歌语音转文本SDK,语音录制由SDK控制。我需要将其设置为手动按钮,用于启动和停止语音录制,以便将语音转换为文本。例如:当单击按钮开始语音识别时,它会继续录制音频,直到单击停止按钮。但在android SDK中,它会自动停止录制并将录制的音频传递给处理。