ufk*_*ufk 6 java alexa-voice-service
一般来说,我想使用亚马逊的avs sdk为Alexa解析音频文件而不仅仅是麦克风录音.
使用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响应.现在我想添加一个加载声音的功能,并从计算机而不仅仅是麦克风播放它.
所以首先我创建了一个向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);
}
Run Code Online (Sandbox Code Playgroud)
然后我在私有AVSApp函数中添加了此函数的执行:
private AVSApp(DeviceConfig config) throws Exception {
...
addBrowseField();
...
}
Run Code Online (Sandbox Code Playgroud)
好了吧...在我的新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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以看到,我使用的是文件eli3.raw.我录制自己说一个命令(只有音频)并将其转换为LPCMffmpeg -i eli.m4a -f s16le -ac 1 -acodec pcm_s16le eli3.raw
所以我点击Browse实际加载eli3.raw音频文件的新创建的按钮,几秒钟我点击Stop Browse按钮,没有任何实际发生.
我没有得到任何java错误,也没有任何警告.
我对所有avs sdk都很陌生,所以我可能做错了什么......不知道是什么.
好的..所以音频文件的格式是错误的。将 ffmpeg 与这些标志一起使用:ffmpeg -i eli.m4a -acodec pcm_s16le -ac 1 -ar 16000 eli.wav解决了问题。
| 归档时间: |
|
| 查看次数: |
1032 次 |
| 最近记录: |