一般來說,我想使用亞馬遜的avs sdk來解析音頻文件,而不僅僅是麥克風錄音。使用亞馬遜的Alexa AVS SDK解析音頻文件
使用OSX 10.11.6。
所以首先我下載了Alexa Voice Service Sample App
從https://developer.amazon.com/public/solutions/alexa/alexa-voice-service/docs/java-client-sample
然後我配置和執行companionService(的NodeJS),然後Java客戶端和它的作品..我說麥克風的東西和Alexa響應。現在我想添加一個加載聲音的功能,並從電腦而不是麥克風播放它。
所以首先我創建了一個函數來添加一個按鈕到用戶界面。 所以我編輯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所以我點擊,實際上加載eli3.raw
音頻文件新建Browse
按鈕,幾秒鐘我點擊Stop Browse
按鈕,並沒有真正發生。
我得到沒有Java錯誤,沒有警告沒有什麼。
我對所有的avs sdk都很陌生,所以我可能做錯了什麼。只是不知道是什麼。