您的位置 首页 > 德语词汇

audio record是什么意思、读音?Android音视频(二)音频AudioRecord和AudioTrack

各位老铁们好,相信很多人对audio record是什么意思、读音都不是特别的了解,因此呢,今天就来为大家分享下关于audio record是什么意思、读音以及Android音视频(二)音频AudioRecord和AudioTrack的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

Android音视频(一)Camera2API采集数据

audio record是什么意思、读音?Android音视频(二)音频AudioRecord和AudioTrack

AudioRecord和AudioTrack是Android系统提供的用于实现录音、播放音频的功能类,使用这两个类做音频的采集与播放还是非常简单的。

privatevoidstartRecorder(){\ntry{\n//1、输出pcm文件\nmAudioFile=newFile(Environment.getExternalStorageDirectory().getAbsolutePath()+"/RecorderTest/"+\nSystem.currentTimeMillis()+".pcm");\nmAudioFile.getParentFile().mkdirs();\nmAudioFile.createNewFile();\nmFileOutputStream=newFileOutputStream(mAudioFile);\n\n//2、配置AudioRecord\n//声音来源\nintaudioSource=MediaRecorder.AudioSource.MIC;\n//采样率Hz\nintsampleRate=44100;\n//音频通道的配置MONO单声道\nintchannelConfig=AudioFormat.CHANNEL_IN_MONO;\n//返回音频数据的格式\nintaudioFormat=AudioFormat.ENCODING_PCM_16BIT;\n//AudioRecord能接受的最小的buffer大小\nintminBufferSize=AudioRecord.getMinBufferSize(sampleRate,channelConfig,audioFormat);\nmAudioRecorder=newAudioRecord(audioSource,sampleRate,channelConfig,\naudioFormat,Math.max(minBufferSize,2048));\n\n//3、开始录音\nmAudioRecorder.startRecording();\n\n\n//4、一边从AudioRecord中读取声音数据到初始化的buffer,一边将buffer中数据导入数据流,写入文件中\nwhile(mIsRecording){//标志位,是否停止录音\nintread=mAudioRecorder.read(mBuffer,0,2048);\nif(read>0){\nmFileOutputStream.write(mBuffer,0,read);\n//也可以在这里对音频数据进行处理,压缩、直播等\n}\n}\n\n//5、停止录音,释放资源\nmAudioRecorder.stop();\nmAudioRecorder.release();\nmAudioRecorder=null;\nmFileOutputStream.close();\n\n}catch(IOException|RuntimeExceptione){\ne.printStackTrace();\n}finally{\nif(mAudioRecorder!=null){\nmAudioRecorder.release();\nmAudioRecorder=null;\n}\n}\n}

【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpegwebRTCrtmphlsrtspffplaysrs等等)有需要的可以点击788280672加群免费领取~

AndroidSDK中有两套音频采集的API,分别是:MediaRecorder和AudioRecord。

如果只是想简单地做一个录音机,录制音频文件,就使用MediaRecorder,而如果需要对音频做进一步的算法处理、或者采用第三方的编码库进行压缩、以及网络传输、直播等应用,则建议使用AudioRecord。AudioTrack

privatevoiddoPaly(FilemAudioFile){\n//音频流的类型\n//STREAM_ALARM:警告声\n//STREAM_MUSIC:音乐声\n//STREAM_RING:铃声\n//STREAM_SYSTEM:系统声音,例如低电提示音,锁屏音等\n//STREAM_VOCIE_CALL:通话声\nintstreamType=AudioManager.STREAM_MUSIC;\n\n//采样率Hz\nintsampleRate=44100;\n//单声道\nintchannelConfig=AudioFormat.CHANNEL_OUT_MONO;\n\n//音频数据表示的格式\nintaudioFormat=AudioFormat.ENCODING_PCM_16BIT;\n\n//MODE_STREAM:在这种模式下,通过write一次次把音频数据写到AudioTrack中。这和平时通过\n//write系统调用往文件中写数据类似,但这种工作方式每次都需要把数据从用户提供的Buffer中拷贝到\n//AudioTrack内部的Buffer中,这在一定程度上会使引入延时。为解决这一问题,AudioTrack就引入\n//了第二种模式。\n\n//MODE_STATIC:这种模式下,在play之前只需要把所有数据通过一次write调用传递到AudioTrack\n//中的内部缓冲区,后续就不必再传递数据了。这种模式适用于像铃声这种内存占用量较小,延时要求较\n//高的文件。但它也有一个缺点,就是一次write的数据不能太多,否则系统无法分配足够的内存来存储\n//全部数据。\nintmode=AudioTrack.MODE_STREAM;\n\nintminBufferSize=AudioTrack.getMinBufferSize(sampleRate,channelConfig,audioFormat);\n\nAudioTrackaudioTrack=newAudioTrack(streamType,sampleRate,channelConfig,audioFormat,Math.max(minBufferSize,2048),mode);\n\nFileInputStreammFileInputStream=null;\ntry{\nmFileInputStream=newFileInputStream(mAudioFile);\nintread;\naudioTrack.play();\nwhile((read=mFileInputStream.read(mBuffer))>0){\nintret=audioTrack.write(mBuffer,0,read);\nswitch(ret){\ncaseAudioTrack.ERROR_BAD_VALUE:\ncaseAudioTrack.ERROR_INVALID_OPERATION:\ncaseAudioManager.ERROR_DEAD_OBJECT:\npalyFaile();\nbreak;\ndefault:\nbreak;\n}\n}\n}catch(RuntimeException|IOExceptione){\ne.printStackTrace();\npalyFaile();\n}finally{\nmIsPalying=false;\nif(mFileInputStream!=null){\ncloseQuietly(mFileInputStream);\n}\naudioTrack.stop();\naudioTrack.release();\n}\n}

AudioTrack与MediaPlayer

在Android中播放声音也是有两套API:MediaPlayer和AudioTrack,两者还是有很大的区别的。

MediaPlayer在framework层还是会创建AudioTrack,把解码后的PCM数流传递给AudioTrack,AudioTrack再传递给AudioFlinger进行混音,然后才传递给硬件播放,所以是MediaPlayer包含了AudioTrack。

Demo作者:MzDavid原文Android音视频(二)音频AudioRecord和AudioTrack-掘金

audio record是什么意思、读音的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Android音视频(二)音频AudioRecord和AudioTrack、audio record是什么意思、读音的信息别忘了在本站进行查找哦。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023