ex
Fork of mbed-os-example-mbed5-blinky by
Diff: dcs-sdk-java-master/app/src/main/java/com/baidu/duer/dcs/framework/DeviceModuleFactory.java
- Revision:
- 45:2aa9f933c8d2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dcs-sdk-java-master/app/src/main/java/com/baidu/duer/dcs/framework/DeviceModuleFactory.java Tue Jul 18 16:34:48 2017 +0800
@@ -0,0 +1,210 @@
+/*
+ * Copyright (c) 2017 Baidu, Inc. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.baidu.duer.dcs.framework;
+
+import com.baidu.duer.dcs.devicemodule.alerts.AlertsDeviceModule;
+import com.baidu.duer.dcs.devicemodule.audioplayer.AudioPlayerDeviceModule;
+import com.baidu.duer.dcs.devicemodule.playbackcontroller.PlaybackControllerDeviceModule;
+import com.baidu.duer.dcs.devicemodule.screen.ScreenDeviceModule;
+import com.baidu.duer.dcs.devicemodule.speakcontroller.SpeakerControllerDeviceModule;
+import com.baidu.duer.dcs.devicemodule.system.SystemDeviceModule;
+import com.baidu.duer.dcs.devicemodule.system.message.SetEndPointPayload;
+import com.baidu.duer.dcs.devicemodule.system.message.ThrowExceptionPayload;
+import com.baidu.duer.dcs.devicemodule.voiceinput.VoiceInputDeviceModule;
+import com.baidu.duer.dcs.devicemodule.voiceoutput.VoiceOutputDeviceModule;
+import com.baidu.duer.dcs.http.HttpConfig;
+import com.baidu.duer.dcs.systeminterface.IMediaPlayer;
+import com.baidu.duer.dcs.systeminterface.IPlatformFactory;
+import com.baidu.duer.dcs.systeminterface.IPlaybackController;
+import com.baidu.duer.dcs.systeminterface.IWebView;
+import com.baidu.duer.dcs.util.LogUtil;
+
+/**
+ * 创建语音输入、语音输出、扬声器、音频播放器、播放控制、闹钟、屏幕显示和系统等deviceModule
+ * <p>
+ * Created by wuruisheng on 2017/6/15.
+ */
+public class DeviceModuleFactory {
+ private static final String TAG = DeviceModuleFactory.class.getSimpleName();
+ private final IDeviceModuleHandler deviceModuleHandler;
+ private final IMediaPlayer dialogMediaPlayer;
+
+ private VoiceInputDeviceModule voiceInputDeviceModule;
+ private VoiceOutputDeviceModule voiceOutputDeviceModule;
+ private SpeakerControllerDeviceModule speakerControllerDeviceModule;
+ private AudioPlayerDeviceModule audioPlayerDeviceModule;
+ private AlertsDeviceModule alertsDeviceModule;
+ private SystemDeviceModule systemDeviceModule;
+ private PlaybackControllerDeviceModule playbackControllerDeviceModule;
+ private ScreenDeviceModule screenDeviceModule;
+
+ // 数字越大,优先级越高,播放优先级
+ private enum MediaChannel {
+ SPEAK("dialog", 3),
+ ALERT("alert", 2),
+ AUDIO("audio", 1);
+
+ private String channelName;
+ private int priority;
+
+ MediaChannel(String channelName, int priority) {
+ this.channelName = channelName;
+ this.priority = priority;
+ }
+ }
+
+ public DeviceModuleFactory(final IDeviceModuleHandler deviceModuleHandler) {
+ this.deviceModuleHandler = deviceModuleHandler;
+ dialogMediaPlayer = deviceModuleHandler.getMultiChannelMediaPlayer()
+ .addNewChannel(MediaChannel.SPEAK.channelName, MediaChannel.SPEAK.priority);
+ }
+
+
+ public void createVoiceInputDeviceModule() {
+ /*
+ * 传入VoiceOutput的MediaPlayer,因为根据dcs协议的规范
+ * 对话通道:
+ * 对应语音输入(Voice Input)和语音输出(Voice Output)端能力;
+ * 用户在语音请求时,或者设备在执行Speak指令进行播报时,对话通道进入活跃状态
+ */
+ voiceInputDeviceModule = new VoiceInputDeviceModule(
+ dialogMediaPlayer, deviceModuleHandler.getMessageSender(),
+ deviceModuleHandler.getPlatformFactory().getVoiceInput(),
+ deviceModuleHandler.getDialogRequestIdHandler(),
+ deviceModuleHandler.getResponseDispatcher());
+ deviceModuleHandler.addDeviceModule(voiceInputDeviceModule);
+ }
+
+ public VoiceInputDeviceModule getVoiceInputDeviceModule() {
+ return voiceInputDeviceModule;
+ }
+
+ public void createVoiceOutputDeviceModule() {
+ voiceOutputDeviceModule = new VoiceOutputDeviceModule(dialogMediaPlayer,
+ deviceModuleHandler.getMessageSender());
+ voiceOutputDeviceModule.addVoiceOutputListener(new VoiceOutputDeviceModule.IVoiceOutputListener() {
+ @Override
+ public void onVoiceOutputStarted() {
+ LogUtil.d(TAG, "DcsResponseBodyEnqueue-onVoiceOutputStarted ok ");
+ deviceModuleHandler.getResponseDispatcher().blockDependentQueue();
+ }
+
+ @Override
+ public void onVoiceOutputFinished() {
+ LogUtil.d(TAG, "DcsResponseBodyEnqueue-onVoiceOutputFinished ok ");
+ deviceModuleHandler.getResponseDispatcher().unBlockDependentQueue();
+ }
+ });
+
+ deviceModuleHandler.addDeviceModule(voiceOutputDeviceModule);
+ }
+
+ public void createSpeakControllerDeviceModule() {
+ BaseMultiChannelMediaPlayer.ISpeakerController speakerController =
+ deviceModuleHandler.getMultiChannelMediaPlayer().getSpeakerController();
+ speakerControllerDeviceModule =
+ new SpeakerControllerDeviceModule(speakerController,
+ deviceModuleHandler.getMessageSender());
+ deviceModuleHandler.addDeviceModule(speakerControllerDeviceModule);
+ }
+
+ public void createAudioPlayerDeviceModule() {
+ IMediaPlayer mediaPlayer = deviceModuleHandler.getMultiChannelMediaPlayer()
+ .addNewChannel(MediaChannel.AUDIO.channelName,
+ MediaChannel.AUDIO.priority);
+ audioPlayerDeviceModule = new AudioPlayerDeviceModule(mediaPlayer,
+ deviceModuleHandler.getMessageSender());
+ deviceModuleHandler.addDeviceModule(audioPlayerDeviceModule);
+ }
+
+ public AudioPlayerDeviceModule getAudioPlayerDeviceModule() {
+ return audioPlayerDeviceModule;
+ }
+
+ public void createAlertsDeviceModule() {
+ IMediaPlayer mediaPlayer = deviceModuleHandler.getMultiChannelMediaPlayer()
+ .addNewChannel(MediaChannel.ALERT.channelName,
+ MediaChannel.ALERT.priority);
+ alertsDeviceModule = new AlertsDeviceModule(mediaPlayer,
+ deviceModuleHandler.getPlatformFactory().createAlertsDataStore(),
+ deviceModuleHandler.getMessageSender(),
+ deviceModuleHandler.getPlatformFactory().getMainHandler());
+
+ alertsDeviceModule.addAlertListener(new AlertsDeviceModule.IAlertListener() {
+ @Override
+ public void onAlertStarted(String alertToken) {
+ }
+ });
+
+ deviceModuleHandler.addDeviceModule(alertsDeviceModule);
+ }
+
+ public void createSystemDeviceModule() {
+ systemDeviceModule = new SystemDeviceModule(deviceModuleHandler.getMessageSender());
+ systemDeviceModule.addModuleListener(new SystemDeviceModule.IDeviceModuleListener() {
+ @Override
+ public void onSetEndpoint(SetEndPointPayload endPointPayload) {
+ if (null != endPointPayload) {
+ String endpoint = endPointPayload.getEndpoint();
+ if (null != endpoint && endpoint.length() > 0) {
+ HttpConfig.setEndpoint(endpoint);
+ }
+ }
+ }
+
+ @Override
+ public void onThrowException(ThrowExceptionPayload throwExceptionPayload) {
+ LogUtil.v(TAG, throwExceptionPayload.toString());
+ }
+ });
+ deviceModuleHandler.addDeviceModule(systemDeviceModule);
+ }
+
+ public SystemDeviceModule getSystemDeviceModule() {
+ return systemDeviceModule;
+ }
+
+ public SystemDeviceModule.Provider getSystemProvider() {
+ return systemDeviceModule.getProvider();
+ }
+
+ public void createPlaybackControllerDeviceModule() {
+ IPlaybackController playback = deviceModuleHandler.getPlatformFactory().getPlayback();
+ playbackControllerDeviceModule = new PlaybackControllerDeviceModule(playback,
+ deviceModuleHandler.getMessageSender(), alertsDeviceModule);
+ deviceModuleHandler.addDeviceModule(playbackControllerDeviceModule);
+ }
+
+ public void createScreenDeviceModule() {
+ IWebView webView = deviceModuleHandler.getPlatformFactory().getWebView();
+ screenDeviceModule = new ScreenDeviceModule(webView, deviceModuleHandler.getMessageSender());
+ deviceModuleHandler.addDeviceModule(screenDeviceModule);
+ }
+
+ public interface IDeviceModuleHandler {
+ IPlatformFactory getPlatformFactory();
+
+ DialogRequestIdHandler getDialogRequestIdHandler();
+
+ IMessageSender getMessageSender();
+
+ BaseMultiChannelMediaPlayer getMultiChannelMediaPlayer();
+
+ void addDeviceModule(BaseDeviceModule deviceModule);
+
+ DcsResponseDispatcher getResponseDispatcher();
+ }
+}
