Cursor mCursor = null;
String[] mAudiocols = new String[] {
MediaStoreAudioMediaTITLE,
MediaStoreAudioMediaDURATION,
MediaStoreAudioMediaARTIST,
MediaStoreAudioMedia_ID,
MediaStoreAudioMediaSIZE,
MediaStoreAudioMediaDATA,
MediaStoreAudioMediaDISPLAY_NAME,
MediaStoreAudioMediaBOOKMARK,
MediaStoreAudioMediaALBUM
};
mCursor =getContentResolver()query(MediaStoreAudioMediaEXTERNAL_CONTENT_URI,mAudiocols,"is_music=1",null,MediaStoreAudioMediaTITLE);
mTotalFiles = mCursorgetCount();
while(mCurrentPos < mTotalFiles){
mCurrentPos++;
mCursormoveToPosition(mCurrentPos);
mCursorgetColumnIndexOrThrow(MediaStoreAudioMediaTITLE));
}
具体没看过,大概流程:
client端的AudioSystem中调用getParameters,调用到IAudioFlinger,然后调用到libs下的AudioFlinger::getParameters,再下去就是要看每个系统了,我们是自己的硬件系统,所以无法给你更多的提示。
30至40分贝。30至40分贝相当于安卓手机音量的一格或者两格,0至20分贝很静,几乎感觉不到,20至40分贝安静,犹如轻声絮语,40至60分贝正常,普通室内谈话。安卓手机指的是使用Android系统的手机。点击进入太平洋电脑网,点击手机通讯,点击安卓手机,这时即可看到大部分安卓手机的型号。
想将视频变成mp3,只需要把视频中的音频提取出来,然后保存成mp3格式文件即可!
电脑端点击这里免费下载软件 —>> 万能音频提取工具
步骤一:选择功能
首先需要打开,选择我们需要的“音频提取”功能,点击并进入;
步骤二:添加文件
将你需要提取的MP4视频添加到转换器中,添加时可以点击左上角的两个添加按钮,也可以把文件拖拽至空白处;
步骤四:参数设置
设置输出格式——MP3格式,再设置一下“输出路径”,为了方便寻找文件可以点击更改路径按钮把输出路径改为便于寻找文件的路径;
步骤四:完成转换
最后点击“全部转换”按钮,就可以把添加好的MP4视频转换成MP3格式了。
成了一个木马窍听器了!!搜下,文章多的是。
这也是我的下一个目标,才学一个月,尚没到这一步呢。
-------------------
android手机的Mic对声音的感知
2011-11-08 11:54 5225人阅读 评论(7) 收藏 举报
android手机buffer图形domainaudio
这段时间做了个有关android手机利用mic捕获外界环境音量的小东东,多方查询,各种研究,现在把这些东西跟童鞋们分享一下,如有不足或者差错,还望大牛们多给意见。
android提供可以实现录音功能的有AudioRecord和MediaRecorder,其中AudioRecord是读取Mic的音频流,可以边录音边分析流的数据;而MediaRecorder则能够直接把Mic的数据存到文件,并且能够进行编码(如AMR,MP3等)。
首先,要将你的应用加入权限(无论你是使用AudioRecord还是MediaRecorder):
<uses-permission android:name="androidpermissionRECORD_AUDIO" />
然后,分开介绍两者的用法。
《!--AudioRecord--》
1、新建录音采样类,实现接口:
public class MicSensor implements AudioRecordOnRecordPositionUpdateListener
2、关于AudioRecord的初始化:
public AudioRecord (int audioSource, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes)
audioSource: 录音源(例如:MediaRecorderAudioSourceMIC 指定Mic为录音源)
sampleRateInHz: 默认的采样频率,单位为Hz。(常用的如44100Hz、22050Hz、16000Hz、11025Hz、8000Hz,有人说44100Hz是目前保证在所有厂商的android手机上都能使用的采样频率,但是个人在三星i9000上使用却不然,经测试8000Hz似乎更为靠谱)
channelConfig: 描述音频通道设置。(在此我使用了AudioFormatCHANNEL_CONFIGURATION_MONO)
audioFormat: 音频数据支持格式。(这个好像跟声道有关,16bit的脉码调制录音应该是所谓的双声道,而8bit脉码调制录音是单声道。AudioFormatENCODING_PCM_16BIT、AudioFormatENCODING_PCM_8BIT)
bufferSizeInBytes: 在录制过程中,音频数据写入缓冲区的总数(字节)。 从缓冲区读取的新音频数据总会小于此值。 getMinBufferSize(int, int, int)返回AudioRecord 实例创建成功后的最小缓冲区。 设置的值比getMinBufferSize()还小则会导致初始化失败。
3、初始化成功后则可启动录音 audioRecordstartRecording()
4、编写线程类将录音数据读入缓冲区,进行分析
short[] buffer = new short[bufferSize]; //short类型对应16bit音频数据格式,byte类型对应于8bit
audioRecordread(buffer, 0, bufferSize); //返回值是个int类型的数据长度值
5、在此需要对buffer中的数据进行一些说明:
这样读取的数据是在时域下的数据,直接用于计算没有任何实际意义。需要将时域下的数据转化为频域下的数据,才能诉诸于计算。
频域(frequency domain)是指在对函数或信号进行分析时,分析其和频率有关部份,而不是和时间有关的部份。
函数或信号可以透过一对数学的运算子在时域及频域之间转换。例如傅里叶变换可以将一个时域信号转换成在不同频率下对应的振幅及相位,其频谱就是时域信号在频域下的表现,而反傅里叶变换可以将频谱再转换回时域的信号。
信号在时域下的图形可以显示信号如何随着时间变化,而信号在频域下的图形(一般称为频谱)可以显示信号分布在哪些频率及其比例。频域的表示法除了有各个频率下的大小外,也会有各个频率的相位,利用大小及相位的资讯可以将各频率的弦波给予不同的大小及相位,相加以后可以还原成原始的信号。
经傅立叶变化后得到的复数数组是个二维数组,实部和虚部的平方和取对数后乘以10就大致等于我们通常表示音量的分贝了。
《!--MediaRecorder--》
相对于AudioRecord,MediaRecorder提供了更为简单的api。
[java] view plaincopyprint
mediaRecorder = new MediaRecorder();
mediaRecordersetAudioSource(MediaRecorderAudioSourceMIC);
mediaRecordersetOutputFormat(MediaRecorderOutputFormatTHREE_GPP);
mediaRecordersetAudioEncoder(MediaRecorderAudioEncoderAMR_NB);
mediaRecordersetOutputFile("/dev/null");
mediaRecorder = new MediaRecorder();
mediaRecordersetAudioSource(MediaRecorderAudioSourceMIC);
mediaRecordersetOutputFormat(MediaRecorderOutputFormatTHREE_GPP);
mediaRecordersetAudioEncoder(MediaRecorderAudioEncoderAMR_NB);
mediaRecordersetOutputFile("/dev/null");
设置好mediaRecorder的各个属性,然后通过线程调用方法 mediaRecordergetMaxAmplitude();
得到的是瞬时的最大振幅,直接取对数然后乘以10就可以表征分贝了。
最后需要说明一下,android手机厂商定制的硬件不尽相同,所以mic获取的值也只能“表征”,而不能拿过来当真正的依据。它们虽是智能手机,但也还是手机,机器人不是人!呵呵。。。
对了,每个手机mic在声信号和电信号进行转换时都有做过电容保护,为了其不因外界环境的过于嘈杂而易受到损坏。所以超声波和次声波,我们人不容易接受的声音,手机也不会入耳的。
dBm是使用产生声音信号的功率作为被测物理量,选择1毫瓦(1mW)作为基准值,计算分贝值。在物理,功率P可以有电压V和电阻R计算得到。
dBu使用电压作为测量量,计算声音的分贝值。若R = 600 欧姆。在dBm中,使用1mW作为基准值,那么在 R = 600 欧姆时就可以得到此时的电压为0775V。所以,dBu是以电压作为测量量,计算声音的分贝值,选择的基准电压为0775V。
dBV在实际音频设备的输入阻抗都是600欧姆,是固定不变的。但是到了现代,就有了更高阻抗的设备,例如1000欧姆,这样再选择0775作为电压的基准值,显然是不合理的。所以,就有了一个新基准值1V。本质上dBu和dBV是没有区别的,都是选择电压作为被测单位,只是选择的基准值不同罢了。
以8mv为例可计算出:
8mV=78dBu ——以1uv为0dB
8mV=-40dBm ——以600Ω1mW为0dB
8mV=-42dBV ——以1V为0dB
扩展资料:
1、dBSPL,通常所说的dB,使用声压作为被测量,选择作为基准值。
2、dBm,使用功率作为被测量,选择1mW作为基准值。
3、dBu,使用电压作为被测量,选择0775V作为基准值。
4、dBV,和dBu一样,使用电压作为被测量,选择1V作为基准值。
5、dBFS,和上面的量都不相同,上面的量都是测量模拟值的,dBFS是测量数字音频的,其选择的基准值为sample的最大值为0dBFS,其他的值都为负值。
以上就是关于如何在android中读取音频文件的所有信息全部的内容,包括:如何在android中读取音频文件的所有信息、安卓手机一格音量多少格、怎么把b站的视频变成mp3 如何把b站的视频变成mp3等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)