【问题标题】:Using Amazon's avs SDK for Alexa to parse Audio files使用 Amazon 的 avs SDK for Alexa 解析音频文件
【发布时间】:2016-12-04 21:24:41
【问题描述】:

一般来说,我想使用亚马逊的 avs sdk for Alexa 来解析音频文件,而不仅仅是麦克风录音。

使用 OSX 10.11.6。

所以我首先从https://developer.amazon.com/public/solutions/alexa/alexa-voice-service/docs/java-client-sample下载了Alexa Voice Service Sample App

然后我配置并执行了同伴服务(nodejs),然后是 java 客户端,它工作了。我在麦克风上说东西,Alexa 做出响应。现在我想添加一个功能来加载声音并从计算机播放它,而不仅仅是麦克风。

首先我创建了一个函数来向 UI 添加一个按钮。 所以我编辑了samples/javaclient/src/main/java/com/amazon/alexa/avs/AVSApp.java。我复制了添加“开始收听”按钮的功能并对其进行了修改:

private void addBrowseField() {
    final RecordingRMSListener rmsListener = this;
    browseButton = new JButton(BROWSE_LABEL);
    browseButton.setEnabled(true);
    browseButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            controller.onUserActivity();
            if (browseButton.getText().equals(BROWSE_LABEL)) { // if in idle mode
                browseButton.setText(BROWSE_STOP_LABEL);
                RequestListener requestListener = new RequestListener() {

                    @Override
                    public void onRequestSuccess() {
                        finishProcessing();
                    }

                    @Override
                    public void onRequestError(Throwable e) {
                        log.error("An error occured creating speech request", e);
                        JOptionPane.showMessageDialog(getContentPane(), e.getMessage(), "Error",
                                JOptionPane.ERROR_MESSAGE);
                        browseButton.doClick();
                        finishProcessing();
                    }
                };

                controller.startFileLoading("/Users/ufk/Desktop/eli3.raw", requestListener);
                // controller.stopRecording(); /// stop the recording so the request can complete
            } else {
                browseButton.setText(BROWSE_LABEL);
                controller.stopRecording();
            }
        }
    });
    getContentPane().add(browseButton);
}

然后我在私有的AVSApp函数中添加了这个函数的执行:

private AVSApp(DeviceConfig config) throws Exception {
...
        addBrowseField();
...
}

现在好...在我的新addBrowseField() 函数中,我正在调用我在控制器中创建的一个新函数startFileRecording。 所以我修改了 samples/javaclient/src/main/java/com/amazon/alexa/avs/AVSController.java

通过将startRecording 函数复制到startFileLoading 并对其进行修改:

public void startFileLoading(String path,RequestListener requestListener) {

    try {
        InputStream in = (InputStream)new BufferedInputStream(new FileInputStream(new File(path)));
        String dialogRequestId = dialogRequestIdAuthority.createNewDialogRequestId();

        RequestBody body = RequestFactory.createSpeechRegonizerRecognizeRequest(dialogRequestId,
                PROFILE, FORMAT, player.getPlaybackState(), player.getSpeechState(),
                alertManager.getState(), player.getVolumeState());

        dependentQueue.clear();

        avsClient.sendEvent(body, in, requestListener, AUDIO_TYPE);

        speechRequestAudioPlayerPauseController.startSpeechRequest();

    } catch (Exception e) {
        player.playMp3FromResource(ERROR_SOUND);
        requestListener.onRequestError(e);
    }
}

现在你可以看到,我使用文件eli3.raw。我录制了自己说的一个命令(只有音频),并用ffmpeg -i eli.m4a -f s16le -ac 1 -acodec pcm_s16le eli3.raw 将其转换为 LPCM

所以我点击了新创建的Browse 按钮,该按钮实际加载了eli3.raw 音频文件,几秒钟后我点击了Stop Browse 按钮,没有任何反应。

我没有收到 java 错误,没有警告,什么也没有。

我对所有 avs sdk 还是很陌生,所以我可能做错了什么......只是不知道是什么。

【问题讨论】:

    标签: java alexa-voice-service


    【解决方案1】:

    好的..所以音频文件的格式是错误的。使用带有这些标志的 ffmpeg:ffmpeg -i eli.m4a -acodec pcm_s16le -ac 1 -ar 16000 eli.wav 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多