Android话筒音频采样和使用

Android手机话筒采样有部分代码是在网上找的,具体不记得了。

使用采样结果以及是自己的app的功能代码:

1. 在一部分app中会需要对话筒的音频输入获取使用,比如之前很火的吹裙子;

2. 采样线程:

public class MicroLevelRunnable implements Runnable {

private static final String tag = "MicroLevelThread";

private AudioRecord ar;

private short bs;

// 11 025 Hz、8 bit的声音称为电话音质;

// 22 050 Hz、16 bit的声音称为广播音质;

// 44 100 Hz、16 bit已达到CD的音质了[4]。

private final int SAMPLE_RATE_IN_HZ = 22050;

private boolean isRun = false;

public static final int msg_v = 0;

public static final int msg_vv = 1;

public static final int msg_vf = 2;

public static final int msg_vo = 3;

public static final int page_need_water = 10;

public static int bubble_speed = 2;// 每N次调用,出一个bubble

public MicroLevelRunnable() {

super();

}

public void stop(){

isRun = false;

ar.stop();

ar.release();

ar = null;

}

public void run() {

bs = (short)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);

// 用于读取的

ar.startRecording();

short[] buffer = new short[bs];

isRun = true;

int speed = 1;

while (true) {

if (!isRun) {

try {

synchronized (this) {

Log.v(tag, "wait..");

this.wait();

}

} catch (InterruptedException e) {

e.printStackTrace();

}

}

speed++;

int r = ar.read(buffer, 0, bs);

int v = 0;

for (int i = 0; i < buffer.length; i++) {

v += buffer[i] * buffer[i];

}

int value = (int) (Math.abs((int) (v / (float) r) / 10000) >> 1);

double dB = 10 * Math.log10(Math.abs(v) / (double) r);

Message msg = new Message();

msg.what = msg_v;

msg.arg1 = value;

msg.arg2 = (int) dB;

// -------------------------------------------

// 用以下方法区分是否是吹气,缺点是可以模拟

// DB白噪低于50为噪音,大于60为无效

// value值低于38为无声,大于60无无效

if (speed > bubble_speed) {

BubbleMain.MainHandle.sendMessage(msg);

speed = 1;

}

}

}

}

3. 启动采样线程:

mRunnable = new MicroLevelRunnable();

mThread = new Thread(mRunnable);

mThread.start();

4. 本人的android应用【http://openbox.mobilem.360.cn/index/d/sid/341284 http://zhushou.360.cn/detail/index/soft_id/341284
吹泡泡中就使用了如上功能模块

该应用是web+android组件的典型应用,吹泡泡的展现是优化修改过的web程序,通过webview接口以及话筒采样线程的结合,实现在手机上吹出泡泡的效果:

时间: 2024-08-10 23:29:40

Android话筒音频采样和使用的相关文章

Android高级音频应用

说到音频应用,首先想到的就是音乐播放器.有些播放器可以播放流媒体,有些可以播放本地音乐文件.随着Android平台的演变,需要更多高级的音频API.好在谷歌新增了这方面的API,支持低延迟的音频流媒体和录制. Android音频API提供了一些高级的功能,开发者可以把它们集成到自己的应用中.有了这些API,现在可以更容易地实现VoIP应用程序,构建定制的流媒体音乐客户端,实现低延迟的游戏音效.此外,还有提供文本到语音转换以及语音识别的API,用户可以直接使用音频和应用交互,而不需要使用用户界面或

视音频数据处理入门:PCM音频采样数据处理

上一篇文章记录了RGB/YUV视频像素数据的处理方法,本文继续上一篇文章的内容,记录PCM音频采样数据的处理方法.音频采样数据在视频播放器的解码流程中的位置如下图所示. 本文分别介绍如下几个PCM音频采样数据处理函数:  分离PCM16LE双声道音频采样数据的左声道和右声道  将PCM16LE双声道音频采样数据中左声道的音量降一半  将PCM16LE双声道音频采样数据的声音速度提高一倍  将PCM16LE双声道音频采样数据转换为PCM8音频采样数据  从PCM16LE单声道音频采样数据中截取一部

Android FrameWork音频管理AudioManager的一点解析

近期要匹配部分第三方应用到系统中,但是涉及到音频部分还存在逻辑的BUG.因此重点关注了下音频管理的部分代码,写一部分目前已经理解的部分. 首先要先阐述下为什么会做现在的工作,起因就是系统中已经有了要调用声音的应用,所以同时再运行另外的需要用到声音的应用时必须要有一个优先级来约束这些声音的音量大小及先后顺序.因此需要对这部分音频管理做逻辑上的处理,使其能协调的发出声音而不是产生声音的重叠和混乱. 查看了FrameWork的代码即SDK文档,最终定位在如下路径的源码中 /frameworks/bas

android MediaCodec 音频编解码的实现——转码

原文地址:http://blog.csdn.net/tinsanmr/article/details/51049179 从今天开始 每周不定期更新博客,把这一周在工作与学习中遇到的问题做个总结.俗话说:好记性不如写博客,善于总结的人才能走的更远.写博客这种利人利己的好处我就不一 一列举了,总之,谁做谁知道,哈哈.在文章中如果有什么问题或者错误,欢迎各位的讨论和指正.好了,步入正题,来看看我们今天要讲的MediaCodec 一.概述 由于项目的需要,需要将mp3文件转码为aac音频文件,起初打算移

android基础----&gt;音频和视频的使用

Android 在播放音频和视频方面也是做了相当不错的支持,它提供了一套较为完整的API,使得开发者可以很轻松地编写出一个简易的音频或视频播放器.今天我们开始android中音频和视频使用的学习. 目录导航 音频的播放 视频的播放 友情链接 音频的播放 项目结构如下:一个简单的读取sd卡上的音频或者视频资源的应用 在Android 中播放音频文件一般都是使用MediaPlayer 类来实现的,它对多种格式的音频文件提供了非常全面的控制方法,从而使得播放音乐的工作变得十分简单. 一. 初始化音频的

Android底层音频声道耳机插头和开关壳体的发展

Android潜在的发展耳机插头连接到音频频道切换的例子 因为使用的是耳机 麦克分离式的耳机,所以要分别上报事件.在Android系统层耳机插孔的检測是基于/sys/class/switch/h2w/state的值来推断的(以4.4.4_r2为样例位于WiredAccessoryManager.java). 仅仅要在内核中实现一个「或真或假」的基于switch类的h2w开关.Android系统就能够监听到插拔信息. 在播放音乐的时候插入耳机,使用tinymix(參考:Android音频底层调试-

android 小音频频繁播放

android中多媒体文件(音乐和视频)的播放是用MediaPlayer方式是大家比较熟悉的,但是现在要来说一下另外一种音乐文件播放的方式SoundPool,相比较而言,用MediaPlayer来播放音乐的话,占用的系统资源是很多的,加载资源也需要时间,所以它不适合用来频繁播放小音频文件,比如控件焦点.点击时需要播放小音频文件,这个时候用SoundPool来播放音频文件,比用MediaPlayer来播放效率要高很多.这里也来说说,如果用MediaPlayer来播放小音频文件的话,会出现延时,点击

android直播音频开发准备

前言 随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能,那么作为开发一个小白,如何快速学习音视频基础知识,了解音视频编解码的传输协议,编解码方式,以及如何技术选型,如何解决遇到的坑,本文抛砖引玉,欢迎大咖交流. 一. 音视频的基础知识 1.1 基本概念 视频是什么 静止的画面叫图像(picture).连续的图像变化每秒超过24帧(frame)画面以上时,根椐视觉暂留原理, 人眼无法辨别每付单独的静态画面,看上去是平滑连续的视觉效果.这样的连

Android实现音频录制的两种方式

在移动APP开发中,每逢APP应用设计到多媒体开发的时候,都会让很多的程序员头疼不已,而且项目的开发进度会放慢.项目 的难度也会加大蛮多,同时APP的测试也会增加.Android中的多媒体开发,有音频的播放.音频的录制.视频的播放.视频的录制 等,虽然Android的SDK中提供了一些基础的开发API类,如音频的录制就提供了两种方式:AudioRecord录制音频和MediaRecorder录 制音频.AudioRecord类相对于MediaRecorder来说,更加接近底层,为我们封装的方法也