首页 / 专利库 / 商业 / 回执 / 一种基于Android实现边说边上传语音的方法

一种基于Android实现边说边上传语音的方法

阅读:81发布:2020-05-14

专利汇可以提供一种基于Android实现边说边上传语音的方法专利检索,专利查询,专利分析的服务。并且本 发明 涉及Android技术领域,特别涉及一种实现边说边上传语音的方法:一、在项目中引入百度语音支持包并配置相关权限;二、实现录音录制功能,进行录音;三、将获取到的音频数据流进行编码;四、将编码好的数据写入到文件中,生成音频文件;五、将音频文件分片上传到文件 服务器 上,未上传成功则录完整个上传;六、将音频文件地址发送给消息服务器,由消息服务器路由到接收方;七、用户手机接收到消息服务器的 回执 , 请求 文件服务器,对数据进行解码,还原语音。本发明解决了语音录制完毕后上传文件过大,上传缓慢,对方不能及时收到消息的问题。,下面是一种基于Android实现边说边上传语音的方法专利的具体信息内容。

1.一种基于Android实现边说边上传语音的方法,其特征在于:一、在项目中引入百度语音支持包并配置相关权限;二、实现录音录制功能,进行录音;三、将获取到的音频数据流进行编码;四、将编码好的数据写入到文件中,生成音频文件;五、将音频文件分片上传到文件服务器上,未上传成功则录完整个上传;六、将音频文件地址发送给消息服务器,由消息服务器路由到接收方;七、用户手机接收到消息服务器的回执请求文件服务器,对数据进行解码,还原语音;从而本发明解决了语音录制完毕后上传文件过大,上传缓慢,对方不能及时收到消息的问题。
2.根据权利要求1所述的基于Android平台的实现一种边说边上传语音的方法,其特征在于:将采集的语音文件进行切割,分段上传文件服务器,再把地址发送给消息服务器,由消息服务器通知用户上传完成;所述的方法具体包括如下步骤:
步骤一、在项目中引入百度语音支持包并配置相关权限;
步骤二、实现录音录制功能,进行录音,所述的具体实现:1、创建录音布局文件;2、根据布局创建对应的Activity;3、在Activity中初始化录音对象;4、添加按钮监听事件;5、在按钮监听事件中,进行语音的录制与采集;
步骤三、将获取到的音频数据流进行AAC编码,采用AAC编码可以实现高压缩比,比一般的好很多,而且音频不失真;
步骤四、将编码好的数据写入到文件中,生成音频文件;
步骤五、将音频文件分段上传文件服务器,判断每一段是否上传成功,如果没上传成功,再判断是否是最后一段语音,如果是则进行合并,否则上传整个语音;
步骤六、将音频文件地址发送给消息服务器,由消息服务器路由到接收方;
步骤七、用户手机接收到消息服务器的回执,请求文件服务器,对数据进行解码,还原语音。

说明书全文

一种基于Android实现边说边上传语音的方法

技术领域

[0001] 本发明涉及Android技术领域,特别涉及一种基于Android实现边说边上传语音的方法。

背景技术

[0002] 随着移动通信网络的快速发展,以及智能应用软件的快速普及,手机对人们来说不再只是简单的通讯工具,而是成了生活中必不可少的伴侣,可以用它跟朋友进行语音对话、面对面的视频聊天、一起玩游戏以及一起学习等等有意思的活动。
[0003] 谈起语音对话功能,目前大部份流行的社交APP还是采用的是录制完毕后再发送给对方的方法,虽然此方法能让对方收到语音,但并不能让对方知道你在及时回答他的过程中。如果你要说的话很长,对方就会觉得您没有在回复他,而去做其它的事情去了,这样一来,就没有形成有效的沟通。
[0004] 本发明主要是针对以上问题,通过边聊天,边采集,边上传的技术手段,实现了语音聊天时动态快速回复的目的。

发明内容

[0005] 本发明解决的技术问题在于提供一种基于Android实现边说边上传语音的方法;本发明解决了语音录制完毕后上传文件过大,上传缓慢,对方不能及时收到消息的问题。
[0006] 本发明解决上述技术问题的技术方案是:一、在项目中引入百度语音支持包并配置相关权限;二、实现录音录制功能,进行录音;
三、将获取到的音频数据流进行编码;四、将编码好的数据写入到文件中,生成音频文件;
五、将音频文件分片上传到文件服务器上,未上传成功则录完整个上传;六、将音频文件地址发送给消息服务器,由消息服务器路由到接收方;七、用户手机接收到消息服务器的回执请求文件服务器,对数据进行解码,还原语音。
[0007] 所述的方法具体包括如下步骤:步骤一、在项目中引入百度语音支持包并配置相关权限;
步骤二、实现录音录制功能,进行录音,所述的具体实现:1、创建录音布局文件;2、根据布局创建对应的Activity;3、在Activity中初始化录音对象;4、添加按钮监听事件;5、在按钮监听事件中,进行语音的录制与采集;
步骤三、将获取到的音频数据流进行AAC编码,采用AAC编码可以实现高压缩比,比一般的好很多,而且音频不失真;
步骤四、将编码好的数据写入到文件中,生成音频文件;
步骤五、将音频文件分段上传文件服务器,判断每一段是否上传成功,如果没上传成功,再判断是否是最后一段语音,如果是则进行合并,否则上传整个语音。
[0008] 步骤六、将音频文件地址发送给消息服务器,由消息服务器路由到接收方;步骤七、用户手机接收到消息服务器的回执,请求文件服务器,对数据进行解码,还原语音。
[0009] 本发明的有益效果:通过边聊天,边采集,边上传的技术手段,实现了语音聊天时动态快速回复的目的。有效地解决了语音录制完毕后上传文件过大,上传缓慢,对方不能及时收到消息的问题。附图说明
[0010] 下面结合附图对本发明进一步说明:图1为本发明的流程图

具体实施方式

[0011] 如图1所示,本发明采用如下步骤:步骤一、在项目中引入百度语音支持包并配置相关权限;
1)AndroidManifest.xml配置





2)Application配置
StringBuffer param = new StringBuffer();
param.append("appid="+getString(R.string.app_id));
param.append(",");
param.append(Const.ENGINE_MODE+"="+Const.MODE_MSC);
SpeechUtility.createUtility(SpeechApp.this, param.toString());
步骤二、实现录音录制功能,进行录音,所述的具体实现:1、创建录音布局文件;2、根据布局创建对应的Activity;3、在Activity中初始化录音对象;4、添加按钮监听事件;5、在按钮监听事件中,进行语音的录制与采集;如:
public class MainActivity extends Activity implements OnClickListener {
   // 多媒体录制器
   private MediaRecorder mediaRecorder = new MediaRecorder();
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      // 获得三个按钮的UI控件
      Button  btnStart  =  (Button) findViewById(R.id.btnStart);
btnStart.setOnClickListener(this);
   }
   @Override
   public void onClick(View view) {
      try {
         switch (view.getId()) {
         // 开始录音
         case R.id.btnStart:
               // 准备并且开始启动录制器
               mediaRecorder.prepare();
               mediaRecorder.start();
               break;
         }
}
三、将获取到的音频数据流进行AAC编码,采用AAC编码可以实现高压缩比,比一般的好很多,而且音频不失真;如:
private void encodeAAC(byte[] data) {
       int inputBufferIndex = mEncoder.dequeueInputBuffer(-1);
       if (inputBufferIndex >= 0) {
      ByteBuffer inputBuffer = mEncoder.getInputBuffer(inputBufferIndex);
                inputBuffer.clear();
                inputBuffer.put(data);
                inputBuffer.limit(data.length);
        mEncoder.queueInputBuffer(inputBufferIndex, 0, data.length,
                        System.nanoTime(), 0);
            }
            int outputBufferIndex = mEncoder.dequeueOutputBuffer
(mBufferInfo, 0);
            while (outputBufferIndex >= 0) {
                ByteBuffer outputBuffer = mEncoder.getOutputBuffer(outputBufferIndex);
                //给adts头字段空出7的字节
                int length=mBufferInfo.size+7;
                if(mFrameByte==null||mFrameByte.length                    mFrameByte=new byte[length];
                }
                addADTStoPacket(mFrameByte,length);
                outputBuffer.get(mFrameByte,7,mBufferInfo.size);
            }
}
四、将编码好的数据写入到文件中,生成音频文件;如:
String tmpName = System.currentTimeMillis() + "_" + mSampleRateInHZ + "";
final File tmpFile = createFile(tmpName + ".pcm");
final File tmpOutFile = createFile(tmpName + ".wav");
mTmpFileAbs = tmpFile.getAbsolutePath();
mLogTv.setText(tmpFile.getAbsolutePath());
isRecording = true;
mAudioRecord.startRecording();
mExecutor.execute(new Runnable() {
     @Override
    public void run() {
        try {
           FileOutputStream outputStream = new FileOutputStream
(tmpFile.getAbsoluteFile());
                    while (isRecording) {
                        int readSize = mAudioRecord.read(mAudioData, 0, mAudioData.length);
                        outputStream.write(mAudioData);
                    }
                    outputStream.close();
                     pcmToWave(tmpFile.getAbsolutePath(), 
tmpOutFile.getAbsolutePath());
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
}
五、将音频文件分段上传文件服务器,判断每一段是否上传成功,如果没上传成功,再判断是否是最后一段语音,如果是则进行合并,否则上传整个语音;如:
private void audioUpLoad() {
     new Thread() {
        public void run() {
// post请求上传
           HttpClient httpclient = new DefaultHttpClient();
HttpPost post = new HttpPost("...");
           FileBody fileBody = new FileBody(audioFile);
           try {
              StringBody stringBody = new StringBody("...");
              MultipartEntity entity = new MultipartEntity();
              entity.addPart("file", fileBody);
              entity.addPart("desc", stringBody);
              post.setEntity(entity);
              HttpResponse response = httpclient.execute(post);
              if (HttpStatus.SC_OK == response.getStatusLine()
.getStatusCode()) {
                 HttpEntity entitys = response.getEntity();
                 if (entity != null) {
                 }
              }
           } catch (Exception e) {
              e.printStackTrace();
           }
           httpclient.getConnectionManager().shutdown();
        };
     }.start();
}
步骤六、将音频文件地址发送给消息服务器,由消息服务器路由到接收方;如:
Handler handler = new Handler() {
     public void handleMessage(android.os.Message msg) {
        String showMessage = "";
        switch (msg.what) {
        case UPLOAD_SUCCESS:
            notifyUser(msg);
           showMessage = "录音文件上传成功!";
           break;
        case UPLOAD_FAIL:
           showMessage = "录音文件上传失败!";
           break;
        }
     };
  };
步骤七、用户手机接收到消息服务器的回执,请求文件服务器,对数据进行解码,还原语音。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈