
android手机buffer图形domainaudio
也望懂行的童鞋们给点高招,就楼主于水火之中。望广大致力于建设贴吧发展贴吧的童鞋们,能够严格遵守我们的要求。(6)狮王休足时间贴,简直是逛街的神器,不仅妹纸需要,男性童鞋们也十分需要啊,据说贴上之后可以逛街10小时不喘气。
android提供可以实现录音功能的有AudioRecord和MediaRecorder,其中AudioRecord是读取Mic的音频流,可以边录音边分析流的数据;而MediaRecorder则能够直接把Mic的数据存到文件,并且能够进行编码(如AMR,MP3等)。
首先,要将你的应用加入权限(无论你是使用AudioRecord还是MediaRecorder):
<uses-permission android:name="android.permission.RECORD_AUDIO" />
然后,分开介绍两者的用法。
《!--AudioRecord--》
1、新建录音采样类,实现接口:

} } public class methodcacheinterceptor implements methodinterceptor, initializingbean { private static final log logger = logfactory .getlog(methodcacheinterceptor.class)。 } } public class methodcacheafteradvice implements afterreturningadvice, initializingbean { private static final log logger = logfactory .getlog(methodcacheafteradvice.class)。public class hellouser implements bundleactivator {public void start(bundlecontext ctx) { servicereference ref = ctx.getservicereference(hello.class.getname())。
2、关于AudioRecord的初始化:
static public int getminbuffersize(int samplerateinhz, int channelconfig, int audioformat)。audiorecord(int audiosource, int samplerateinhz, int channelconfig, int audioformat, int buffersizeinbytes)。int getminbuffersize(int samplerateinhz, int channelconfig, int audioformat)。
audioSource:录音源(例如:MediaRecorder.AudioSource.MIC 指定Mic为录音源)
sampleRateInHz:默认的采样频率,单位为Hz。(常用的如44100Hz、22050Hz、16000Hz、11025Hz、8000Hz,有人说44100Hz是目前保证在所有厂商的android手机上都能使用的采样频率,但是个人在三星i9000上使用却不然,经测试8000Hz似乎更为靠谱)
原因一:没有使用音频或者所选择的通道不带音频。4、效果插件已导入机架内,则要设置软件的asio通道,单击“选项”—“音频设置”,进入音频设置窗口,如下图所示:。统一设置所有通道的增益:按“设置/确认”键1秒以上,功能灯闪烁,按“通道设置”键,通道指示灯闪烁,按“数据+”或“数据-”键修改通道,使通道显示“1-”,按“功能选择”键选择“增益”,增益对应指示灯闪烁,通道指示灯灭,按“数据+”或“数据-”键修改增益,再按“设置/确认”键android 音频播放,确定增益,增益指示灯常亮,增益统一设置完成。
audioFormat:音频数据支持格式。(这个好像跟声道有关,16bit的脉码调制录音应该是所谓的双声道,而8bit脉码调制录音是单声道。AudioFormat.ENCODING_PCM_16BIT、AudioFormat.ENCODING_PCM_8BIT)
因为写进程是在缓冲区的末尾写入,读进程是在缓冲区的头部读取,他们各自。因为写进程是在缓冲区的末尾写入,读进程是在缓冲区的头部读取,他们各自 的数据结构不同,所以功能不同。函数返回缓冲区的缓冲区的前4个字节是已加载的内核模块总数记为n,后面是共有n个元素的system_module_information_entry内核模块信息数组,用一个for循环n次即可遍历整条链。

3、初始化成功后则可启动录音 audioRecord.startRecording()
4、编写线程类将录音数据读入缓冲区,进行分析
short[] buffer = new short[bufferSize];//short类型对应16bit音频数据格式,byte类型对应于8bit
audioRecord.read(buffer, 0, bufferSize);//返回值是个int类型的数据长度值
5、在此需要对buffer中的数据进行一些说明:
这样读取的数据是在时域下的数据,直接用于计算没有任何实际意义。需要将时域下的数据转化为频域下的数据,才能诉诸于计算。
频域(frequency domain)是指在对函数或信号进行分析时,分析其和频率有关部份,而不是和时间有关的部份。
函数或信号可以透过一对数学的运算子在时域及频域之间转换。例如傅里叶变换可以将一个时域信号转换成在不同频率下对应的振幅及相位,其频谱就是时域信号在频域下的表现,而反傅里叶变换可以将频谱再转换回时域的信号。

信号在时域下的图形可以显示信号如何随着时间变化,而信号在频域下的图形(一般称为频谱)可以显示信号分布在哪些频率及其比例。频域的表示法除了有各个频率下的大小外,也会有各个频率的相位,利用大小及相位的资讯可以将各频率的弦波给予不同的大小及相位,相加以后可以还原成原始的信号。
经傅立叶变化后得到的复数数组是个二维数组,实部和虚部的平方和取对数后乘以10就大致等于我们通常表示音量的分贝了。
《!--MediaRecorder--》
相对于AudioRecord,MediaRecorder提供了更为简单的api。
[java] view plaincopyprint?
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
式 outputformat 输出。 //设置视频源为camera mmediarecorder.setoutputformat(mediarecorder.outputformat.three_gpp)。mmediarecorder.setoutputformat(mediarecorder.outputformat.default)。

mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediaRecorder.setOutputFile("/dev/null");
mediaRecorder = new MediaRecorder();
stagefright由awesongplayer来控制,他会调用setdatasource()方法来加载音频文件,根据音频文件的头字段不同来选 择不同的解析器,这个解析器会进行av分离分离出audiotrack和videotrack,接着会根据audiotrack的minetype类型来 选择不同的编码器来进行编码,这个是由audiosource来进行解码android 音频播放,audiosource是对omxcodec的封装,而audioplayer 则是用来控制audiosource和audiotrack的。mmediarecorder.setaudiosource(mediarecorder.audiosource.mic)。 mrecorder.setaudiosource(mediarecorder.audiosource.mic)。
式 outputformat 输出。 //设置视频源为camera mmediarecorder.setoutputformat(mediarecorder.outputformat.three_gpp)。mmediarecorder.setoutputformat(mediarecorder.outputformat.default)。
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediaRecorder.setOutputFile("/dev/null");
设置好mediaRecorder的各个属性,然后通过线程调用方法 mediaRecorder.getMaxAmplitude();
得到的是瞬时的最大振幅,直接取对数然后乘以10就可以表征分贝了。
最后需要说明一下,android手机厂商定制的硬件不尽相同,所以mic获取的值也只能“表征”,而不能拿过来当真正的依据。它们虽是智能手机,但也还是手机,机器人不是人!呵呵。。。
静态时,vt1处于临界饱和状态,使vt2截止,led1和led2皆不发光,r1给电容话筒mic提供偏置电流,话筒捡取室内环境中的声波信号后即转为相应的电信号,经电容c1送到vt1的基极进行放大,vt1、vt2组成两级直接耦合放大电路,只要选取合适的r2、r3使无声波信号。凡是公司使用光纤都需要使用光猫对输入来的光纤中光信号进行转换,通过光猫转换后的信号已经是电信号了。这些天一直在弄一个极板电容信号测量的电路,电容做为传感器,内阻非常大,但是adc采样的输入要求是低阻抗,这个怎么转换呢,怎么测量这个电容信号,谁有好一点的办法啊。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-110485-1.html
太正确了
主要是中国的国籍不开放