使用J2ME实现拍照和录音功能

CommandResources类,用于存放一些常量

package com.xiaoyu.record.common;

 

public class CommandResources {

 

    public static final String IMG_TYPE    = "jpeg";

    public static final int IMG_WIDTH = 128;

    public static final int IMG_HEIGHT = 128;

   

    private static int  TXT_ID = 0;

   

    public static final String TXT_T_APP    = "Record sound & video";

    public static final String TXT_T_CAM    = "拍照";

    public static final String TXT_T_REC    = "录音";

   

    //主界面List

    public static final String TXT_I_CAMERA = "我要拍照";

    public static final String TXT_I_RECORD = "我要录音";

    public static final String TXT_I_ABOUT  = "关于";

    public static final String TXT_I_EXIT   = "退出";

   

    public static final String TXT_C_OK     = "确定";

    public static final String TXT_C_CAM    = "拍照";

    public static final String TXT_C_REC    = "录音";

    public static final String TXT_C_EXIT   = "退出";

    public static final String TXT_C_PAUSE  = "暂停";

    public static final String TXT_C_RESUME = "继续";

    public static final String TXT_C_BACK   = "返回";

    public static final String TXT_C_REC_FIN = "完成";

   

    public static final byte EVENT_EXIT = 0;

    public static final byte EVENT_BACK    = 1;

    public static final byte EVENT_CAM = 2;//拍照

    public static final byte EVENT_REC = 3;//录音

    public static final byte EVENT_REC_PAUSE = 4;//暂停录音

    public static final byte EVENT_REC_RESUME = 5;//继续录音

    public static final byte EVENT_REC_FIN = 6;//完成录音

    public static final byte EVENT_GO_CAM  = 7;//进入拍照界面

    public static final byte EVENT_GO_REC  = 8;//进入录音界面

   

   

}

 

以下是控制器类:

package com.xiaoyu.record.controller;

 

import java.io.ByteArrayOutputStream;

import java.io.IOException;

 

import javax.microedition.lcdui.Displayable;

import javax.microedition.lcdui.Image;

import javax.microedition.lcdui.Item;

import javax.microedition.media.Manager;

import javax.microedition.media.MediaException;

import javax.microedition.media.Player;

import javax.microedition.media.control.RecordControl;

import javax.microedition.media.control.VideoControl;

 

import com.xiaoyu.record.common.CommandResources;

import com.xiaoyu.record.midlet.RecordMIDLet;

import com.xiaoyu.record.view.CameraForm;

import com.xiaoyu.record.view.MainMenuList;

import com.xiaoyu.record.view.RecordForm;

 

public class GUIController {

 

       private RecordMIDLet midlet;

 

       private MainMenuList mainMenuList;

       private CameraForm cameraForm;

       private RecordForm recordForm;

 

       private Player videoPlayer;

       private Player recordPlayer;

 

       private VideoControl videoControl;

       private RecordControl recordControl;

      

       private ByteArrayOutputStream baos = null;

      

       public GUIController(RecordMIDLet recordMIDLet) {

              this.midlet = recordMIDLet;

       }

 

       public void init() {

              mainMenuList = new MainMenuList(CommandResources.TXT_T_APP, this);

              cameraForm = new CameraForm(CommandResources.TXT_T_CAM, this);

              recordForm = new RecordForm(CommandResources.TXT_T_REC, this);

 

              setCurrent(mainMenuList);

       }

 

       public void handleEvent(int eventId) {

              try {

                     switch (eventId) {

                     case CommandResources.EVENT_GO_CAM:

                            setCurrent(cameraForm);

                            break;

                     case CommandResources.EVENT_CAM:

                            this.photo("/test.jpeg");

                            break;

                     case CommandResources.EVENT_GO_REC:

                            setCurrent(recordForm);

                            break;

                     case CommandResources.EVENT_REC:

                            this.record("D://audio.mid");

                            break;

                     case CommandResources.EVENT_REC_PAUSE:

                            this.recordPause();

                            break;

                     case CommandResources.EVENT_REC_RESUME:

                            this.recordResume();

                            break;

                     case CommandResources.EVENT_REC_FIN:

                            this.recordCommit();

                            break;

                     case CommandResources.EVENT_BACK:

                            setCurrent(mainMenuList);

                            break;

                     case CommandResources.EVENT_EXIT:

                            midlet.exit(true);

                            break;

                     default:

                            break;

                     }

              } catch (IOException e) {

                     e.printStackTrace();

              } catch (MediaException e) {

                     e.printStackTrace();

              }

       }

 

       public void setCurrent(Displayable dis) {

              midlet.setCurrent(dis);

       }

 

       public void record(String path) throws IOException, MediaException {

              if (recordPlayer == null) {

                     recordPlayer = Manager.createPlayer("capture://audio");

                     recordPlayer.realize();

                    

              }

             

              recordControl = (RecordControl) recordPlayer

                     .getControl("RecordControl");

              recordControl.reset();

             

              if (recordControl != null) {

                     baos = new ByteArrayOutputStream();

                     recordControl.setRecordStream(baos);

//                   recordControl.setRecordLocation(path);

                     recordControl.startRecord();

                     recordPlayer.start();

              }

       }

 

       public void recordPause() {

              if (recordControl != null) {

                     System.out.println("PAUSE--SIZE = " + baos.size());

                     recordControl.stopRecord();

              }

       }

 

       public void recordResume() {

              if (recordControl != null) {

                     System.out.println("RESUME--SIZE = " + baos.size());

                     recordControl.startRecord();

              }

       }

 

       public void recordCommit() throws IOException {

              if (recordControl != null) {

                     recordControl.commit();

                     System.out.println("COMMIT--SIZE = " + baos.size());

              }

       }

 

       public void photo(String path) throws IOException, MediaException {

 

              if (videoPlayer == null) {

                     videoPlayer = Manager.createPlayer("capture://video");

                     videoPlayer.realize();

                     videoControl = (VideoControl) videoPlayer

                                   .getControl("VideoControl");

                     if (videoControl != null) {

                            System.out.println("/** 已经得到了VideoControl!");

                            Item itemVideoWindow;

                           

                            itemVideoWindow = (Item) videoControl.initDisplayMode(0, null);

                            // USE_GUI_PRIMITIVE模式下,默认是可见的,而在USE_DIRECT_VIDEO模式下,

                            // 默认是不可见的,需要通过方法setVisible(boolean visible)来设置

                            itemVideoWindow.setLayout(3);

                           

                            cameraForm.append(itemVideoWindow);

                            videoPlayer.start();

                     }

                     videoControl.setVisible(true);

              }

 

              byte imageData[];

 

              imageData = videoControl.getSnapshot("encoding="

                            + CommandResources.IMG_TYPE);

//                          + "&width="

//                          + CommandResources.IMG_WIDTH + "&height="

//                          + CommandResources.IMG_HEIGHT);

 

              if (imageData != null) {

                     System.out.println(imageData.length);

                     Image img = Image.createImage(imageData, 0, imageData.length);

                    

              }

       }

 

       public MainMenuList getMainMenuList() {

              return mainMenuList;

       }

 

       public void setMainMenuList(MainMenuList mainMenuList) {

              this.mainMenuList = mainMenuList;

       }

 

       public CameraForm getCameraForm() {

              return cameraForm;

       }

 

       public void setCameraForm(CameraForm cameraForm) {

              this.cameraForm = cameraForm;

       }

 

       public RecordForm getRecordForm() {

              return recordForm;

       }

 

       public void setRecordForm(RecordForm recordForm) {

              this.recordForm = recordForm;

       }

 

}

 

 

以下是三个界面类:

package com.xiaoyu.record.view;

 

import javax.microedition.lcdui.Command;

import javax.microedition.lcdui.CommandListener;

import javax.microedition.lcdui.Displayable;

import javax.microedition.lcdui.Form;

 

import com.xiaoyu.record.controller.GUIController;

import com.xiaoyu.record.common.CommandResources;

 

public class CameraForm extends Form {

 

       private GUIController controller;

      

       private Command cmdCam;

       private Command cmdBack;

       private Command cmdExit;

      

       public CameraForm(String title, GUIController controller) {

              super(title);

             

              this.controller = controller;

             

              cmdCam = new Command(CommandResources.TXT_C_CAM, Command.SCREEN, 1);

              cmdBack = new Command(CommandResources.TXT_C_BACK, Command.BACK, 3);

              cmdExit = new Command(CommandResources.TXT_C_EXIT, Command.EXIT, 4);

             

              addCommand(cmdCam);

              addCommand(cmdBack);

              addCommand(cmdExit);

             

              this.setCommandListener(new CameraFormListener());

       }

      

       private class CameraFormListener implements CommandListener {

 

              public void commandAction(Command command, Displayable dis) {

                     if(command == cmdCam) {

                            controller.handleEvent(CommandResources.EVENT_CAM);

                     } else if(command == cmdBack) {

                            controller.handleEvent(CommandResources.EVENT_BACK);

                     } else if(command == cmdExit) {

                            controller.handleEvent(CommandResources.EVENT_EXIT);

                     }

              }

             

       }

}

 

 

package com.xiaoyu.record.view;

 

import javax.microedition.lcdui.Command;

import javax.microedition.lcdui.CommandListener;

import javax.microedition.lcdui.Displayable;

import javax.microedition.lcdui.List;

 

import com.xiaoyu.record.controller.GUIController;

import com.xiaoyu.record.common.CommandResources;;

 

public class MainMenuList extends List {

 

       private GUIController controller;

      

       private Command commandOk;

      

       public MainMenuList(String title, GUIController controller) {

              super(title, List.IMPLICIT);

             

              this.controller = controller;

             

              commandOk = new Command(CommandResources.TXT_C_OK,

                            Command.OK, 5);

              this.addCommand(commandOk);

              this.setCommandListener(new MainMenuListener());

             

              this.append(CommandResources.TXT_I_CAMERA, null);

              this.append(CommandResources.TXT_I_RECORD, null);

              this.append(CommandResources.TXT_I_ABOUT, null);

              this.append(CommandResources.TXT_I_EXIT, null);

             

       }

      

       private class MainMenuListener implements CommandListener {

 

              public void commandAction(Command command, Displayable dis) {

                     if(command == commandOk || (command == List.SELECT_COMMAND)){

                           

                            int index = ((List)dis).getSelectedIndex();

                           

                            switch(index) {

                            case 0 :

                                   controller.handleEvent(CommandResources.EVENT_GO_CAM);

                                   break;

                            case 1 :

                                   controller.handleEvent(CommandResources.EVENT_GO_REC);

                                   break;

                            case 2 :

                                   break;

                            case 3 :

                                   controller.handleEvent(CommandResources.EVENT_EXIT);

                                   break;

                            }

                     }

              }

             

       }

 

}

 

 

package com.xiaoyu.record.view;

 

import javax.microedition.lcdui.Command;

import javax.microedition.lcdui.CommandListener;

import javax.microedition.lcdui.Displayable;

import javax.microedition.lcdui.Form;

 

import com.xiaoyu.record.common.CommandResources;

import com.xiaoyu.record.controller.GUIController;

 

public class RecordForm extends Form {

 

       private GUIController controller;

 

       private Command cmdRec;

       private Command cmdPause;

       private Command cmdBack;

       private Command cmdExit;

       private Command cmdFin;

       private Command cmdResume;

      

       public RecordForm(String title, GUIController controller) {

              super(title);

 

              this.controller = controller;

             

              cmdRec = new Command(CommandResources.TXT_C_REC, Command.SCREEN, 1);

              cmdPause = new Command(CommandResources.TXT_C_PAUSE, Command.SCREEN, 2);

              cmdResume = new Command(CommandResources.TXT_C_RESUME, Command.SCREEN, 3);

              cmdBack = new Command(CommandResources.TXT_C_BACK, Command.BACK, 4);

              cmdExit = new Command(CommandResources.TXT_C_EXIT, Command.EXIT, 5);

              cmdFin = new Command(CommandResources.TXT_C_REC_FIN, Command.SCREEN, 6);

             

             

              addCommand(cmdRec);

              addCommand(cmdPause);

              addCommand(cmdBack);

              addCommand(cmdExit);

              addCommand(cmdFin);

              addCommand(cmdResume);

             

              this.setCommandListener(new RecordFormListener());

       }

      

       private class RecordFormListener implements CommandListener {

 

              public void commandAction(Command command, Displayable dis) {

                     if(command == cmdRec) {

                            controller.handleEvent(CommandResources.EVENT_REC);

                     } else if(command == cmdPause) {

                            controller.handleEvent(CommandResources.EVENT_REC_PAUSE);

                     } else if(command == cmdBack) {

                            controller.handleEvent(CommandResources.EVENT_BACK);

                     } else if(command == cmdExit) {

                            controller.handleEvent(CommandResources.EVENT_EXIT);

                     } else if(command == cmdFin) {

                            controller.handleEvent(CommandResources.EVENT_REC_FIN);

                     } else if(command == cmdResume) {

                            controller.handleEvent(CommandResources.EVENT_REC_RESUME);

                     }

              }

       }

}

 

 

最后是主MIDLet类:

package com.xiaoyu.record.midlet;

 

import javax.microedition.lcdui.Display;

import javax.microedition.lcdui.Displayable;

import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;

 

import com.xiaoyu.record.controller.GUIController;

import com.xiaoyu.record.common.CommandResources;;;

 

public class RecordMIDLet extends MIDlet {

 

       private Display display;

       private static GUIController controller;

      

       public RecordMIDLet() {

              super();

              display = Display.getDisplay(this);

       }

 

       protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

              controller = null;

       }

 

       protected void pauseApp() {

              if(display.getCurrent() == controller.getRecordForm()) {

                     controller.handleEvent(CommandResources.EVENT_REC_PAUSE);

              }

              this.notifyPaused();

       }

 

       protected void startApp() throws MIDletStateChangeException {

              GUIController controller = new GUIController(this);

             

              try {

                     controller.init();

              } catch (Exception e) {

                     e.printStackTrace();

              }

       }

      

       public void setCurrent(Displayable dis) {

              display.setCurrent(dis);

       }

      

       public Displayable getCurrent() {

              return display.getCurrent();

       }

 

       public Display getCurrentDisplay() {

              return display;

       }

 

       public void exit(boolean flag) {

              try {

                     this.destroyApp(flag);

                     this.notifyDestroyed();

              } catch (MIDletStateChangeException e) {

                     e.printStackTrace();

              }

             

       }

}

 

 

智慧旅游解决方案利用云计算、物联网和移动互联网技术,通过便携终端设备,实现对旅游资源、经济、活动和旅游者信息的智能感知和发布。这种技术的应用旨在提升游客在旅游各个环节的体验,使他们能够轻松获取信息、规划行程、预订票务和安排食宿。智慧旅游平台为旅游管理部门、企业和游客提供服务,包括政策发布、行政管理、景区安全、游客流量统计分析、投诉反馈等。此外,平台还提供广告促销、库存信息、景点介绍、电子门票、社交互动等功能。 智慧旅游的建设规划得到了国家政策的支持,如《国家中长期科技发展规划纲要》和国务院的《关于加快发展旅游业的意见》,这些政策强调了旅游信息服务平台的建设和信息化服务的重要性。随着技术的成熟和政策环境的优化,智慧旅游的时机已经到来。 智慧旅游平台采用SaaS、PaaS和IaaS等云服务模式,提供简化的软件开发、测试和部署环境,实现资源的按需配置和快速部署。这些服务模式支持旅游企业、消费者和管理部门开发高性能、高可扩展的应用服务。平台还整合了旅游信息资源,提供了丰富的旅游产品创意平台和统一的旅游综合信息库。 智慧旅游融合应用面向游客和景区景点主管机构,提供无线城市门户、智能导游、智能门票及优惠券、景区综合安防、车辆及停车场管理等服务。这些应用通过物联网和云计算技术,实现了旅游服务的智能化、个性化和协同化,提高了旅游服务的自由度和信息共享的动态性。 智慧旅游的发展标志着旅游信息化建设的智能化和应用多样化趋势,多种技术和应用交叉渗透至旅游行业的各个方面,预示着全面的智慧旅游时代已经到来。智慧旅游不仅提升了游客的旅游体验,也为旅游管理和服务提供了高效的技术支持。
智慧旅游解决方案利用云计算、物联网和移动互联网技术,通过便携终端设备,实现对旅游资源、经济、活动和旅游者信息的智能感知和发布。这种技术的应用旨在提升游客在旅游各个环节的体验,使他们能够轻松获取信息、规划行程、预订票务和安排食宿。智慧旅游平台为旅游管理部门、企业和游客提供服务,包括政策发布、行政管理、景区安全、游客流量统计分析、投诉反馈等。此外,平台还提供广告促销、库存信息、景点介绍、电子门票、社交互动等功能。 智慧旅游的建设规划得到了国家政策的支持,如《国家中长期科技发展规划纲要》和国务院的《关于加快发展旅游业的意见》,这些政策强调了旅游信息服务平台的建设和信息化服务的重要性。随着技术的成熟和政策环境的优化,智慧旅游的时机已经到来。 智慧旅游平台采用SaaS、PaaS和IaaS等云服务模式,提供简化的软件开发、测试和部署环境,实现资源的按需配置和快速部署。这些服务模式支持旅游企业、消费者和管理部门开发高性能、高可扩展的应用服务。平台还整合了旅游信息资源,提供了丰富的旅游产品创意平台和统一的旅游综合信息库。 智慧旅游融合应用面向游客和景区景点主管机构,提供无线城市门户、智能导游、智能门票及优惠券、景区综合安防、车辆及停车场管理等服务。这些应用通过物联网和云计算技术,实现了旅游服务的智能化、个性化和协同化,提高了旅游服务的自由度和信息共享的动态性。 智慧旅游的发展标志着旅游信息化建设的智能化和应用多样化趋势,多种技术和应用交叉渗透至旅游行业的各个方面,预示着全面的智慧旅游时代已经到来。智慧旅游不仅提升了游客的旅游体验,也为旅游管理和服务提供了高效的技术支持。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值