帖子

JAVA版本网页端示例(持续更新中)

 关闭 [复制链接]

该用户从未签到

30171 test 发表于 2013-3-8 16:32:35 1#
本帖最后由 cyhu 于 2013-3-8 16:32 编辑

       首先说明思路,欢迎持不同意见的童鞋来一起讨论(QQ:443545603). LZ这里是通过APPLET来让客户端加载Java小程序进行录音,通过HTTP将录音传到后台Servlet,在Server端调用Java的SDK来获取音频识别结果,再将识别结果返回给前台APPLET。
    贴代码之前先说明,通过APPLET进行录音会有权限访问的问题(因为通过浏览器调用了设备驱动),这里推荐一篇BLOG供大家参考来提升自己的APPLET权限http://aspnetdb.iteye.com/blog/648370
       下面先贴上网页端录音的精简代码供大家参考,传递录音数据的代码下次提供.
      
       //获取录音对象.
       TargetDataLine mTargetDataLine;
      //外部音频输入流.
      AudioInputStream mAudioInputStream;

      //设置录音对象相关参数
   public AudioFormat getRecordFormat() {
        //采样率参数,SDK支持16000和8000
       float sampleRate = 16000.0F;
        int sampleSizeInBits = 16;// 8,16
        int channels = 1;// 1,2
        boolean signed = true;// true,false
        boolean bigEndian = false;// true,false
        return new AudioFormat(sampleRate, sampleSizeInBits, channels, signed,
                        bigEndian);
       }

      //初始化DataLine,从录音驱动中获取数据.
      mTargetDataLine = (TargetDataLine) AudioSystem.getLine(info);
      mTargetDataLine.open(format, mTargetDataLine.getBufferSize());
      ByteArrayOutputStream out = new ByteArrayOutputStream();
      int frameSizeInBytes = format.getFrameSize();
      int bufferLengthInFrames = mTargetDataLine.getBufferSize() / 8;
      int bufferLengthInBytes = bufferLengthInFrames * frameSizeInBytes;
      byte[] data = new byte[bufferLengthInBytes];
      int numBytesRead;
      //开始录音.
      mTargetDataLine.start();
      while (mThread != null) {
        if ((numBytesRead = mTargetDataLine.read(data, 0, bufferLengthInBytes)) == -1) {
               break;
        }
                //获取录音数据
                out.write(data, 0, numBytesRead);
        }
         mTargetDataLine.stop();
         mTargetDataLine.close();
         mTargetDataLine = null;
        //下面就可以直接使用out来操作音频数据了...
        byte audioBytes[] = out.toByteArray();

网页端录音.zip (2.3 KB, 下载次数: 150)
hygui 发表于 2015-5-5 15:31:31
2#
{:soso_e142:}{:soso_e142:}{:soso_e142:}
使用道具 举报 回复