当前位置: 首页 > news >正文

wordpress侧边栏目录seo单词优化

wordpress侧边栏目录,seo单词优化,门户网站开发,在百度做网站多少钱近期我的app须要一个录音功能,于是搜到这篇文章 文章中录音线程与主线程间的通讯是通过内部类訪问外部类成员变量的方式来实现 while (isRecord true) { //isRecord是外部类的成员变量readsize audioRecord.read(audiodata, 0, bufferSizeInBytes);if (AudioRecor…

近期我的app须要一个录音功能,于是搜到这篇文章

文章中录音线程与主线程间的通讯是通过内部类訪问外部类成员变量的方式来实现

		while (isRecord == true) { //isRecord是外部类的成员变量readsize = audioRecord.read(audiodata, 0, bufferSizeInBytes);if (AudioRecord.ERROR_INVALID_OPERATION != readsize) {try {fos.write(audiodata);} catch (IOException e) {e.printStackTrace();}}}


一来自己对Java语法不是非常熟,二来认为这样的方法扩展性不好,所以决定用Handler来与主线程通信

但子线程要想接收主线程发来的消息,势必要调用Looper类的loop方法,该方法是个死循环。且參数为空(没法插入回调)

    public void run() {super.run();Looper.prepare();Looper.loop();//一旦进入这个函数,就出不来了}

子线程无法既有Looper.loop()又有while(),所以我想到了一个workaround

将while里的语句放在一个事件里处理。处理完后调用handler再次向自身发送发送该事件,直到收到主线程的STOP事件

事实证明该方法可行,且相比Timer方式,没有时隙的浪费

上代码

package com.hp.speechclient;/*** Created by Administrator on 15-7-16.*/
import java.lang.Thread;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.FileNotFoundException;import android.util.Log;
import android.os.Handler;
import android.os.Message;
import android.os.Looper;
import android.os.Bundle;
import android.os.Environment;
import android.content.Context;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;public class RecordThread extends Thread {private Context mUiCtx;private Handler mUiHandler;private boolean bRecording = false;FileOutputStream mSpeechStream = null;private AudioRecord mAudioRecord;private int mUnitBufSize;private static String TAG = RecordThread.class.getSimpleName();public RecordThread(Context ctx, Handler handler){mUiCtx = ctx;mUiHandler = handler;mUnitBufSize = AudioRecord.getMinBufferSize(16000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, 16000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, mUnitBufSize);}private Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case CommonMsg.REC_STOP: {bRecording = false;break;}case CommonMsg.REC_START: {bRecording = true;startRecord();break;}case CommonMsg.UNIT_REC_FIN: {if (bRecording) {Message reply = mHandler.obtainMessage(CommonMsg.UNIT_REC_START);mHandler.sendMessage(reply);}else{stopRecord();Message reply = mUiHandler.obtainMessage(CommonMsg.REC_FIN);mUiHandler.sendMessage(reply);}break;}case CommonMsg.UNIT_REC_START: {recordUnit();break;}default:{assert false;break;}}}};public void run() {super.run();Looper.prepare();Looper.loop();}private void startRecord() {mAudioRecord.startRecording();try {mSpeechStream = new FileOutputStream(CommonMsg.SPEECH_PATH + ".raw");// 建立一个可存取字节的文件} catch (Exception e) {assert false;}//開始一小段录音recordUnit();}private void stopRecord() {mAudioRecord.stop();try {mSpeechStream.close();// 关闭写入流mSpeechStream = null;} catch (IOException e) {assert false;}convertToWav(CommonMsg.SPEECH_PATH+".raw", CommonMsg.SPEECH_PATH+".wav");}private void recordUnit() {// new一个byte数组用来存一些字节数据。大小为缓冲区大小byte[] audiodata = new byte[mUnitBufSize];int readsize = 0;readsize = mAudioRecord.read(audiodata, 0, mUnitBufSize);if (AudioRecord.ERROR_INVALID_OPERATION != readsize) {try {mSpeechStream.write(audiodata);} catch (IOException e) {assert false;}}Message reply = mHandler.obtainMessage(CommonMsg.UNIT_REC_FIN);mHandler.sendMessage(reply);}protected void finalize() {try {super.finalize();mAudioRecord.release();//释放资源mAudioRecord = null;}catch (Throwable e) {assert false;}}public Handler getHandler(){return mHandler;}private void convertToWav(String inFilename, String outFilename) {FileInputStream in = null;FileOutputStream out = null;long totalAudioLen = 0;long totalDataLen = totalAudioLen + 36;int sampleRate = 16000;int channels = 1;byte bitDepth = 16;long byteRate = bitDepth * sampleRate * channels / 8;byte[] data = new byte[mUnitBufSize];try {in = new FileInputStream(inFilename);out = new FileOutputStream(outFilename);totalAudioLen = in.getChannel().size();totalDataLen = totalAudioLen + 36;WriteWaveFileHeader(out, totalAudioLen, totalDataLen,sampleRate, channels, bitDepth);while (in.read(data) != -1) {out.write(data);}in.close();out.close();} catch (FileNotFoundException e) {assert false;} catch (IOException e) {assert false;}}private void WriteWaveFileHeader(FileOutputStream out, long totalAudioLen,long totalDataLen, int sampleRate, int channels, byte bitDepth)throws IOException {int byteRate = bitDepth * sampleRate * channels / 8;byte[] header = new byte[44];header[0] = 'R'; // RIFF/WAVE headerheader[1] = 'I';header[2] = 'F';header[3] = 'F';header[4] = (byte) (totalDataLen & 0xff);header[5] = (byte) ((totalDataLen >> 8) & 0xff);header[6] = (byte) ((totalDataLen >> 16) & 0xff);header[7] = (byte) ((totalDataLen >> 24) & 0xff);header[8] = 'W';header[9] = 'A';header[10] = 'V';header[11] = 'E';header[12] = 'f'; // 'fmt ' chunkheader[13] = 'm';header[14] = 't';header[15] = ' ';header[16] = 16; // 4 bytes: size of 'fmt ' chunkheader[17] = 0;header[18] = 0;header[19] = 0;header[20] = 1; // format = 1header[21] = 0;header[22] = (byte) channels;header[23] = 0;header[24] = (byte) (sampleRate & 0xff);header[25] = (byte) ((sampleRate >> 8) & 0xff);header[26] = (byte) ((sampleRate >> 16) & 0xff);header[27] = (byte) ((sampleRate >> 24) & 0xff);header[28] = (byte) (byteRate & 0xff);header[29] = (byte) ((byteRate >> 8) & 0xff);header[30] = (byte) ((byteRate >> 16) & 0xff);header[31] = (byte) ((byteRate >> 24) & 0xff);header[32] = (byte) (channels * bitDepth / 8); // block alignheader[33] = 0;header[34] = 16; // bits per sampleheader[35] = 0;header[36] = 'd';header[37] = 'a';header[38] = 't';header[39] = 'a';header[40] = (byte) (totalAudioLen & 0xff);header[41] = (byte) ((totalAudioLen >> 8) & 0xff);header[42] = (byte) ((totalAudioLen >> 16) & 0xff);header[43] = (byte) ((totalAudioLen >> 24) & 0xff);out.write(header, 0, 44);}}


转载于:https://www.cnblogs.com/zsychanpin/p/7101991.html

http://www.lbrq.cn/news/2795383.html

相关文章:

  • 网站建设的步骤教程下载2023年8月份新冠
  • 宁晋企业做网站广告关键词查询
  • 网站建设新闻发布注意什么怎么制作网站教程手机
  • 怎么自制网站dz论坛seo设置
  • 什么网站可以做项目网站关键词优化排名公司
  • 做关于什么的网站关键字排名查询
  • 巩义企业网站托管代运营公司网店代运营合同
  • 长安区网站建设小网站广告投放
  • 高新公司网站建设电话什么样的人适合做策划
  • 做h5的软件有哪些网奇seo赚钱培训
  • 网页设计证书考什么广州百度推广排名优化
  • php网站开发文档怎么制作一个简单的网页
  • 网站备案用户注销备案申请表国外网站推广平台有哪些?
  • 关于做ppt的网站有哪些内容吗镇江抖音seo
  • 高端 网站开发宁波seo在线优化方案公司
  • 如何做领券网站长沙seo全网营销
  • 网站推广效果不好原因是网页版百度
  • 成都个人网站制作公司十大计算机培训学校
  • 什么情况自己建设网站百度在线提问
  • 西电信息化建设处网站百度竞价推广开户费用
  • 浙江省电子商务网站建设宁波网站制作优化服务
  • 网站建设启示厦门seo新站策划
  • 中企动力网站后台 好用吗百度快速排名软件下载
  • 做网站付多少定金优化seo厂家
  • 工作是套模板做网站北京seo加盟
  • 怎么做自动提卡网站常德政府网站市民留言
  • 做网站维护价格今日足球比赛分析推荐
  • 渭南市建网站产品线下推广方式都有哪些
  • 大余网站帮我搜一下长沙做网络销售
  • 做网站需要看那几点排名优化公司口碑哪家好
  • 云原生俱乐部-RH294知识点归纳(1)
  • Java 性能优化实战(二):JVM 调优的 5 个核心维度
  • [特殊字符] 小豆包 API 聚合平台:让 AI 接入更简单、更高效
  • Matplotlib数据可视化实战:Matplotlib基础与实践-快速上手数据可视化
  • 20250819 强连通分量,边双总结
  • ISIS高级特性