2016-07-30 5 views
6

一般的に、AlexaにはAlexaのavs sdkを使用して、マイクの録音だけでなくオーディオファイルを解析する必要があります。Amazonの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をダウンロードした後、私が設定され、実行companionService(nodejsを)してからJavaクライアントとそれが動作..私はマイクにものを言うと、アレクサが応答します。マイクだけではなく、コンピュータからサウンドを読み込んで再生する機能を追加したいと考えています。

最初にUIにボタンを追加するための関数を作成しました。 だから私はsamples/javaclient/src/main/java/com/amazon/alexa/avs/AVSApp.javaを編集しました。私はボタン「リスニングを開始」追加機能を複製して、それを修正:で...今

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

OK:私はプライベートAVSApp機能で、この関数の実行を追加した後

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); 
} 

私の新しい addBrowseField()関数私は startFileRecordingというコントローラーで作成した新しい関数を呼び出しています。 私は startFileLoadingstartRecording機能をコピーし、それを修正することにより samples/javaclient/src/main/java/com/amazon/alexa/avs/AVSController.java

を修正:あなたが見ることができるよう

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にそれを変換するので、私は実際にeli3.rawオーディオファイルをロードし、新しく作成されたBrowseボタンをクリックして、数秒私はStop Browseボタンと何をクリックして、本当に起こります。

Javaエラーは発生しません。何も警告はありません。

私はおそらく何か間違っているので、すべてのAVS SDKの新しいです。ちょっと考えていない。

答えて

0

ok ..オーディオファイルのフォーマットが間違っていました。これらのフラグにffmpegを使用すると、ffmpeg -i eli.m4a -acodec pcm_s16le -ac 1 -ar 16000 eli.wavが問題を解決しました。

関連する問題