【问题标题】:How to solve Speech-To-Text error: "unable to transcode data stream audio/wav -> audio/x-float-array"如何解决 Speech-To-Text 错误:“无法转码数据流音频/wav -> 音频/x-float-array”
【发布时间】:2020-12-15 16:10:58
【问题描述】:

我正在通过在其中集成 IBM Speech-To-Text 服务来构建一个 android 应用程序,首先我正在录制音频并将其保存到设备,然后传递以进行转换,但是在传递我的音频时,我收到错误为“无法转码数据流音频/wav -> 音频/x-float-array”,我也尝试提供不同格式的音频,但每种格式都出现相同的错误。虽然音频可以正确保存并且可以使用音乐播放器收听。所以,请帮助我摆脱这个错误。

首先我使用 MediaRecorder 录制音频,然后将其保存到设备,然后将其发送以进行对话,但出现错误,我尝试使用所有可能的音频格式

fileName = getExternalCacheDir().getAbsolutePath() + "/" + "examples.wav";
    try {
                        RecognizeOptions recognizeOptions = new RecognizeOptions.Builder()
                                .audio(new FileInputStream(fileName))
                                .contentType("audio/wav")
                                .model("en-US_BroadbandModel")
                                .build();

                        BaseRecognizeCallback baseRecognizeCallback =
                                new BaseRecognizeCallback() {

                                    @Override
                                    public void onTranscription
                                            (SpeechRecognitionResults speechRecognitionResults) {
                                        System.out.println(speechRecognitionResults);
                                    }

                                    @Override
                                    public void onConnected() {
                                    }

                                    @Override
                                    public void onError(Exception e) {
                                        Log.i("Error", e.getMessage());
                                        enableMicButton();
                                    }

                                    @Override
                                    public void onDisconnected() {
                                        enableMicButton();
                                    }

                                    @Override
                                    public void onInactivityTimeout(RuntimeException runtimeException) {

                                    }

                                    @Override
                                    public void onListening() {

                                    }

                                    @Override
                                    public void onTranscriptionComplete() {

                                    }


                                };

                        speechToText.recognizeUsingWebSocket(recognizeOptions,
                                baseRecognizeCallback);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
               

【问题讨论】:

    标签: android audio ibm-cloud speech-to-text


    【解决方案1】:

    如果您使用的是 watson-developer-cloud Java SDK,下面是一个通过正确的示例HTTPMediaType

    FileInputStream audio = new FileInputStream("src/test/resources/speech_to_text/sample1.wav");
    
        RecognizeOptions options =
            new RecognizeOptions.Builder()
                .audio(audio)
                .interimResults(true)
                .contentType(HttpMediaType.AUDIO_WAV)
                .build();
    
        service.recognizeUsingWebSocket(
            options,
            new BaseRecognizeCallback() {
              @Override
              public void onTranscription(SpeechRecognitionResults speechResults) {
                System.out.println(speechResults);
              }
    
              @Override
              public void onDisconnected() {
                lock.countDown();
              }
            });
    

    你可以找到完整的例子here

    【讨论】:

    • 仍然出现同样的错误,甚至将内容类型更改为 HttpMediaType.AUDIO_WAV
    猜你喜欢
    • 1970-01-01
    • 2017-06-09
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    相关资源
    最近更新 更多