基于AudioTrack、AudioRecord获取分贝值、录制时长、PCM解码与编码

基于AudioTrack、AudioRecord获取分贝值、录制时长、PCM解码与编码,第1张

说明:音频的录制通过AudioRecord对象进行,这里录制出来的数据没有进行编码,是属于PCM格式的数据,可以理解为Android平台上的原始的音频数据,只能通过AudioTrack对象进行播放,AudioTrack对象可以对每一帧音频进行控制,灵活性比MediaXXX强大,缺点是播放的音频数据格式必须是PCM格式,因此如果我们使用AudioTrack播放进行了编码的音频数据,则需要先进行解码成PCM格式数据,这边先来展示一下自己写的小Demo。

功能描述:1、长按开始录制音频,松开结束录制并保存成文件(录制过程中会实时显示当前的分贝值数值,并且根据分贝值更新长按控件状态以及显示录制时长(单位秒))。2、支持文件的删除、重命名、解码成PCM、编码PCM格式数据。3播放支持05倍速,原始倍速,2倍速播放,支持播放与暂停。

视频展示:

附上获取分贝值 demo

MediaStore中定义了一系列的数据表格,通过ContentResolver提供的查询接口,我们可以得到各种需要的信息。

下面的命令将返回所有在外部存储卡上的音乐文件的信息:

Cursor cursor = query(MediaStoreAudioMediaEXTERNAL_CONTENT_URI, null,

null, null, MediaStoreAudioMediaDEFAULT_SORT_ORDER);

得到cursor后,我们可以调用Cursor的相关方法具体的音乐信息:

歌曲ID:MediaStoreAudioMedia_ID

Int id = cursorgetInt(cursorgetColumnIndexOrThrow(MediaStoreAudioMedia_ID));

歌曲的名称 :MediaStoreAudioMediaTITLE

String tilte = cursorgetString(cursorgetColumnIndexOrThrow(MediaStoreAudioMediaTITLE));

歌曲的专辑名:MediaStoreAudioMediaALBUM

String album = cursorgetString(cursorgetColumnIndexOrThrow(MediaStoreAudioMediaALBUM));

歌曲的歌手名: MediaStoreAudioMediaARTIST

String artist = cursorgetString(cursorgetColumnIndexOrThrow(MediaStoreAudioMediaARTIST));

歌曲文件的路径 :MediaStoreAudioMediaDATA

String url = cursorgetString(cursorgetColumnIndexOrThrow(MediaStoreAudioMediaDATA));

歌曲的总播放时长 :MediaStoreAudioMediaDURATION

Int duration = cursorgetInt(cursorgetColumnIndexOrThrow(MediaStoreAudioMediaDURATION));

歌曲文件的大小 :MediaStoreAudioMediaSIZE

Int size = cursorgetLong(cursorgetColumnIndexOrThrow(MediaStoreAudioMediaSIZE));

dc@Gentoo ~/Music $ file feathermp3 

feathermp3: Audio file with ID3 version 240, contains: MPEG ADTS, layer III, v1, 128 kbps, 441 kHz, JntStereo

用ffmpeg都能查看

使用audio的buffered属性,该属性返回表示音频已缓冲部分的 TimeRanges 对象。

这里假定_audio为所获取的audio标签,实现代码如下:

 // 获取已缓冲部分的 TimeRanges 对象

var timeRanges = _audiobuffered;

 // 获取以缓存的时间

var timeBuffered = timeRagesend(timeRageslength - 1);

 // 获取缓存进度,值为0到1

var bufferPercent = timeBuffered / _audioduration; 

//  

// 之后将bufferPercent按照自己需要的方式进行处理即可

// 处理的时候要注意浮点数精度造成的误差。

播放声音 function show() { var audio1=documentgetElementById("au"); audio1autoplay="'autoplay'"; documentallausrc= '1mp3'; }

以上就是关于基于AudioTrack、AudioRecord获取分贝值、录制时长、PCM解码与编码全部的内容,包括:基于AudioTrack、AudioRecord获取分贝值、录制时长、PCM解码与编码、Android平台中应该如何获取音乐文件的信息、linux下用什么命令行软件能获取MP3文件的码率,时间长度等信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9526996.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存