`

利用录音AudioRecord实现吹一吹效果

 
阅读更多
不错的创意,记一下,原帖

原理其实就是话筒的监听,需要在AndroidManifest.xml中要加入两个权限
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
另外模拟器无法测试,只能用真机才有效果
另外:低于API 14的SDK可能无效,我测试小米android2.3.5似乎无效,三星9300 android4.0有效!
以下是copy的代码,留在此处以便将来有不时之需。
package com.li;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class BlowActivity extends Activity {
	static TextView text;
	Button btn;
	Button btn1;
	static int i=0;
	RecordThread tt=null;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        text=(TextView)findViewById(R.id.text);
        btn=(Button)findViewById(R.id.btn);
		btn.setOnClickListener(listener);
    }
    
    class MyHandler extends Handler{
    	
    }
    
    OnClickListener listener=new OnClickListener(){

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
				tt=new RecordThread(r);           //点击按钮,启动线程
				tt.start();
		}
    	
    };
    
    MyHandler r=new MyHandler(){
		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			super.handleMessage(msg);          //接收到message后更新UI,并通过isblow停止线程
			text.setText("你吹了一下屏幕"+i);
			Parameter.isblow=false;
	
		}
    };
}

package com.li;

import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Message;

import com.li.BlowActivity.MyHandler;

public class RecordThread extends Thread {
	private AudioRecord ar;
	private int bs = 100;
	private static int SAMPLE_RATE_IN_HZ = 8000;
	private Message msg;
	private int number = 1;
	private int tal = 1;
	private MyHandler handler;
	private long currenttime;
	private long endtime;
	private long time = 1;

	// 到达该值之后 触发事件
	private static int BLOW_ACTIVI = 3000;

	public RecordThread(MyHandler myHandler) {
		super();
		bs = AudioRecord.getMinBufferSize(SAMPLE_RATE_IN_HZ,
				AudioFormat.CHANNEL_CONFIGURATION_MONO,
				AudioFormat.ENCODING_PCM_16BIT);
		ar = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE_IN_HZ,
				AudioFormat.CHANNEL_CONFIGURATION_MONO,
				AudioFormat.ENCODING_PCM_16BIT, bs);
		handler = myHandler;
	}

	@Override
	public void run() {
		try {
			ar.startRecording();
			Parameter.isblow = true;
			// 用于读取的 buffer
			byte[] buffer = new byte[bs];
			while (Parameter.isblow) {
				number++;
				sleep(8);
				currenttime = System.currentTimeMillis();
				int r = ar.read(buffer, 0, bs) + 1;
				int v = 0;
				for (int i = 0; i < buffer.length; i++) {
					v += (buffer[i] * buffer[i]);
				}
				int value = Integer.valueOf(v / (int) r);
				tal = tal + value;
				endtime = System.currentTimeMillis();
				time = time + (endtime - currenttime);

				if (time >= 500 || number > 5) {

					int total = tal / number;
					if (total > BLOW_ACTIVI) {
						// 发送消息通知到界面 触发动画

						// 利用传入的handler 给界面发送通知
						BlowActivity.i += 1;
						handler.sendEmptyMessage(0); // 改变i的值后,发送一个空message到主线程

						//
						number = 1;
						tal = 1;
						time = 1;
					}
				}

			}
			ar.stop();
			ar.release();
			bs = 100;

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

public class Parameter {
	static boolean isblow;
}
分享到:
评论

相关推荐

    AudioRecord 实现通话双向录音案例

    网上的通话录音大多数都是基于mediarecoder开发的,我最后反编译了一款apk,发现里面用的是audiorecord开发的,下面是我的核心代码展示,良心开发,不要差评谢谢

    Android使用AudioRecord实现暂停录音2.0

    本文将深入探讨如何利用`AudioRecord`来实现一个具有暂停和恢复功能的录音器,同时关注代码的耦合度和性能优化。 首先,`AudioRecord`的初始化至关重要。我们需要设置录音的参数,如采样率、通道数和音频格式。采样...

    Android 使用AudioRecord实现暂停录音功能

    本文将深入探讨如何利用`AudioRecord`来实现暂停和恢复录音的功能,这对于开发具有高度用户交互性的音频应用非常有用。 ### 一、`AudioRecord`基础知识 `AudioRecord`类的主要任务是创建一个音频记录器实例,并...

    Android AudioRecord和MediaRecorder录音并实现了实时获取音量大小

    结合`AudioRecord`和`MediaRecorder`,可以在`AudioRecord`中实时监控音量,同时利用`MediaRecorder`进行录音,这样既能保证录音的质量,又能实现音量的实时反馈。需要注意的是,由于`AudioRecord`和`MediaRecorder`...

    AudioRecord录音代码实例

    本篇文章将深入探讨如何使用AudioRecord进行录音,并利用MediaPlayer进行回放,从而实现一个完整的音频录制与播放的代码实例。 ### AudioRecord基础知识 AudioRecord类是Android SDK中的一个关键类,它允许开发者...

    Android下录音及播放录音(AudioRecord)

    本文将深入探讨如何使用Android的`AudioRecord`类进行录音,并利用`MediaPlayer`或`AudioTrack`进行播放。`AudioRecord`是Android SDK中的一个关键组件,它允许开发者捕获原始音频数据,而`MediaPlayer`则用于播放...

    利用AudioRecord录制音频并播放

    在这个项目中,“利用AudioRecord录制音频并播放”,我们将会探讨如何使用AudioRecord实现录音功能,以及如何配合MediaPlayer或AudioTrack类来播放录制的音频。 1. **AudioRecord的基本概念** AudioRecord类允许...

    Android audioRecord录音Demo

    这个`Android audioRecord录音Demo`将向我们展示如何利用`AudioRecord`类来实现一个简单的录音功能,并最终将录制的音频保存为WAV格式的文件。 首先,我们需要理解`AudioRecord`类的基本概念。`AudioRecord`是一个...

    android使用audioRecord和audioTrack实现语音录音播放与即时播放

    接下来,我们将深入探讨如何使用`AudioRecord`和`AudioTrack`来实现语音录音和即时播放。 **一、AudioRecord:录音** `AudioRecord`类用于从设备的麦克风捕捉音频数据。首先,我们需要初始化一个`AudioRecord`实例...

    用AudioRecord实现录制wav格式的音频

    实现wav格式的音频录制: 开始录制: AudioUtil audio = AudioUtil.getInstance() audio.startRecord(name , int) audio.recordData(); 结束录制: audio.stoprecord(); audio.converWaveFile&#40;name&#41;;

    AudioRecord和AudioTrack实现录音和播放

    在实际应用中,为了同时实现录音和播放,通常会创建两个线程,一个用于AudioRecord的录音操作,另一个用于AudioTrack的播放操作。录音线程持续读取麦克风数据并存入缓冲区,播放线程则从缓冲区取出数据并播放。为了...

    AudioRecord录音 AudioTrack播放

    AudioRecord和AudioTrack是Android SDK提供的两个核心类,分别用于录音和播放音频数据。这两个类是实现Android设备上音频输入输出的基础。 AudioRecord类允许开发者从设备的麦克风获取原始的PCM(脉冲编码调制)...

    android audiorecord录音并绘图

    综上所述,通过`AudioRecord`进行录音并利用自定义视图进行实时绘图,可以实现一个简单的Android音频录制和可视化应用。在实际项目中,还需要关注权限管理、错误处理和用户交互等方面,以提供更好的用户体验。

    bin_audiorecord_audiorecord_QTaudio_

    总结来说,"bin_audiorecord_audiorecord_QTaudio_"项目展示了如何利用Qt框架的强大功能来创建一个跨平台的音频录制工具。通过Qt的QAudioRecorder类,开发者可以轻松实现录音功能,并通过Qt的音频模块与不同平台的...

    Audio Record Wizard(录音软件) 7.16中文版.rar

    点击软件右下角的齿轮图标,选择Options选项,可以设置录音效果,支持自动增益自动高速录音音量,以及噪声抑制模式。可以限制录音时文件长度,限制录制时间或文件大小。为录制后输出的文件指定保存位置,录制的类型...

    Android录音--AudioRecord、MediaRecorder

    Android提供了两个API用于实现录音功能:android.media.AudioRecord、android.media.MediaRecorder。 网上有很多谈论这两个类的资料。现在大致总结下: 1、AudioRecord 主要是实现边录边播(AudioRecord+...

    android的AudioRecord

    综上所述,AudioRecord是Android音频录制的核心工具,通过精细配置和有效利用,可以实现高质量的录音及语音质量评测功能。开发者在实际应用中,应结合具体需求,灵活调整参数和策略,以达到最佳的录音效果。

    android AudioRecord AudioTrack实现录音并播放

    android AudioRecord AudioTrack实现录音并播放 并支持参数选择(频率、编码格式、声道) 更多信息可参考http://blog.sina.com.cn/u/1788464665

    AudioRecord_java_

    本项目聚焦于使用AudioRecord实现录音与播放功能,尤其强调即使在锁屏状态下也能持续录音的特性。下面我们将深入探讨AudioRecord的相关知识点及其在实际应用中的实现细节。 1. **AudioRecord类的基本概念** Audio...

    Android使用AudioRecord实现暂停录音功能实例代码

    在该实例代码中,我们可以看到,作者使用了AudioRecord类来实现录音功能,并使用了ExecutorService来管理线程池,以减少系统开销。同时,作者还使用了静态枚举类Status来记录录音的状态,并提供了监听录音音频流和...

Global site tag (gtag.js) - Google Analytics