java - 使用 Java 的 Google 云语音

标签 java google-speech-api

我尝试通过 Java 程序与 Google Cloud Speech API 进行通信,但收到此错误:

Exception in thread "main" com.google.api.gax.grpc.ApiException: io.grpc.StatusRuntimeException: INVALID_ARGUMENT: Invalid Wav File: Not 16 bit Linear PCM or 8 bit MULAW.

谁能帮我解决这个问题吗?

最佳答案

Google 云语音 API 接受 wav 文件。而且不仅如此。 来自文档:https://cloud.google.com/speech-to-text/docs/encoding

Note: Speech-to-Text supports WAV files with LINEAR16 or MULAW encoded audio.

根据Google语音转文本云网站上的语音转文本/资源,我能够上传带有8位PCM签名的.wav文件。转录得很好。但是,如果我尝试使用他们的 Java API 上传文件,则会出现此错误。我测试了几个库,包括新的测试版。所以我可以同意这很奇怪。我可以在每个播放器上播放 8 位 16KHz PCM SIGNED 编码,也可以播放 8KHz,并且文件头没有任何问题,我可以上传它,但不能通过 Java API 上传。

以下是一些可能有帮助的提示: 如果您想使用 API,则必须转换为 16 位 PCM,或例如 8 位 ULAW。

为此,您可以使用javax.sound.sampled库。

看一下这个例子:SimpleSoundCapture ! 您可以根据需要进行修改。输入“out”变量 ByteArrayOutputStream 或使用 ULAW 编码记录自定义编码 wav 文件。

您可以使用此设置:

AudioFormat.Encoding encoding = AudioFormat.Encoding.ULAW; 
floatrate = 16000.0f; 
int channels = 1; 
int frameSize = 4; 
int sampleSize = 8; 
boolean bigEndian = true;

Google 从第二次、第三次起就能够毫无问题地识别 ULAW 样本。有时甚至从一开始就是如此。也用 8000.0f 进行了测试。 在使用ULAW之前,请先从语音API的RecognitionConfig对象中删除setEncoding()方法,因为使用ULAW可能会导致另一个异常。

 RecognitionConfig config
                = RecognitionConfig.newBuilder()
                //      .setEncoding(AudioEncoding.UNRECOGNIZED)
                .setLanguageCode("en-US")
                .setSampleRateHertz(16000)
                .build();

关于java - 使用 Java 的 Google 云语音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42950768/

相关文章:

Java从 "addActionListener"调用 "FocusListener"

java - 使用处理从 Twitter 获取位置信息

ruby-on-rails - 将mp3转换为flac文件

java - 如何在speech_event_type : END_OF_SINGLE_UTTERANCE Google Speech cloud Java之后连续发送请求

google-cloud-platform - Google-speech-api 错误地转录语音数字

audio - Google Cloud Speech:配额组 token 不足

java - 无法在JSP中编译JSONObject

Java Spring REST Get 工作得很好,但是在发布 json 时出现 404 错误

java - java在添加方法时出错

google-speech-api - 第400章 指定MP3编码来匹配音频文件