2016-07-30 15 views
6

Generalnie chcę użyć avs sdk amazona do Alexy, aby parsować pliki audio, a nie tylko nagrywać mikrofon.Używanie SDK Amazon avs dla Alexa do parsowania plików audio

przy użyciu OS X 10.11.6.

Więc najpierw Pobrałem Alexa Voice Service Sample App z https://developer.amazon.com/public/solutions/alexa/alexa-voice-service/docs/java-client-sample

Potem skonfigurowany i wykonał companionService (nodejs), a następnie klient Java i działa .. mówię rzeczy na mikrofonie i Alexa odpowiada. teraz chcę dodać możliwość ładowania dźwięku i odtwarzania go z komputera zamiast tylko mikrofonu.

Najpierw utworzyłem funkcję dodawania przycisku do interfejsu użytkownika. , więc edytowałem samples/javaclient/src/main/java/com/amazon/alexa/avs/AVSApp.java. I duplikowane funkcję, która dodaje „Start Listening” przycisk i modyfikować go:

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

Potem dodałem wykonanie tej funkcji w funkcji prywatnej AVSApp:

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

ok teraz ... w moja nowa funkcja addBrowseField() nazywam nową funkcję, którą utworzyłem w kontrolerze o nazwie startFileRecording. więc zmodyfikowany samples/javaclient/src/main/java/com/amazon/alexa/avs/AVSController.java

kopiując funkcję startRecording do startFileLoading i modyfikując go:

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

Teraz, jak widać, używam plik eli3.raw. Nagrałem sobie mówiąc polecenia (tylko audio) i przekształcono go LPCM z ffmpeg -i eli.m4a -f s16le -ac 1 -acodec pcm_s16le eli3.raw

Więc kliknij nowo utworzony Browse przycisk, który rzeczywiście ładuje plik audio eli3.raw, a kilka sekund kliknięciu przycisku Stop Browse i nic tak naprawdę się dzieje .

Nie otrzymuję błędów java, żadnego ostrzeżenia, nie ma niczego.

Jestem całkiem nowy dla wszystkich avs SDK, więc prawdopodobnie robię coś złego .. po prostu nie wiem co.

Odpowiedz

0

ok .. więc format pliku audio był nieprawidłowy. użycie ffmpeg z tymi flagami: ffmpeg -i eli.m4a -acodec pcm_s16le -ac 1 -ar 16000 eli.wav rozwiązało problem.

Powiązane problemy