AudioRecord 与 AudioTrack

AudioRecord录制原始声音PCM数据
==========================================================================================
构造方法
AudioRecord(
            int audioSource,
            int sampleRateInHz, 
            int channelConfig, 
            int audioFormat, 
            int bufferSizeInBytes)
    audioSource
        录音源,查看 MediaRecorder.AudioSource类
        { MediaRecorder.AudioSource.MIC, MediaRecorder.AudioSource.DEFAULT } 静态字段
        
    sampleRateInHz
        设置音频数据的采样率
        44100是目前的标准,但是某些设备仍然支持22050,16000,11025
        
    channelConfig
        设置音频的录制的声道
        AudioFormat.CHANNEL_IN_STEREO为双声道
        AudioFormat.CHANNEL_CONFIGURATION_MONO为单声道
        
    audioFormat
        音频数据格式
        PCM16位每个样本,保证设备支持。(AudioFormat.ENCODING_PCM_16BIT)
        PCM8位每个样本,不一定能得到设备支持。(AudioFormat.ENCODING_PCM_8BIT)

    bufferSizeInBytes
        缓存大小, 可根据静态方法getMinBufferSize获得
        AudioRecord.getMinBufferSize(int sampleRateInHz, int channelConfig, int audioFormat)

常用方法
    startRecording()  开始录音
    stop() 停止录音
    release() 释放资源
    read(byte[] audioData, int offsetInBytes, int sizeInBytes) 读取录音数据 (8位)
    read(short[] audioData, int offsetInShorts, int sizeInShorts) 读取录音数据 (16位)
==========================================================================================
AudioTrack播放原始声音PCM数据
==========================================================================================
构造方法
AudioTrack(
            int streamType, 
            int sampleRateInHz, 
            int channelConfig, 
            int audioFormat, 
            int bufferSizeInBytes, 
            int mode)
    streamType
        指定在流的类型
        AudioManager.STREAM_ALARM:警告声
        AudioManager.STREAM_MUSCI:音乐声
        AudioManager.STREAM_RING:铃声
        AudioManager.STREAM_SYSTEM:系统声音
        AudioManager.STREAM_VOCIE_CALL:电话声音
        
    sampleRateInHz
        参见AudioRecord
        
    channelConfig    
        参见AudioRecord
        
    audioFormat
        参见AudioRecord
        
    bufferSizeInBytes
        参见AudioRecord
        
    mode    
        设置模式类型,在这里设置为流类型
        AudioTrack中有MODE_STATIC和MODE_STREAM两种分类。
        STREAM方式表示由用户通过write方式把数据一次一次得写到audiotrack中。
        这种方式的缺点就是JAVA层和Native层不断地交换数据,效率损失较大。
        而STATIC方式表示是一开始创建的时候,就把音频数据放到一个固定的buffer,然后直接传给audiotrack,
        后续就不用一次次得write了。AudioTrack会自己播放这个buffer中的数据。
        这种方法对于铃声等体积较小的文件比较合适。
    
常用方法
    play()
    pause()
    flush()
    stop()
    release()
    write(byte[] audioData, int offsetInBytes, int sizeInBytes) 写入声音数据8位
    write(short[] audioData, int offsetInShorts, int sizeInShorts) 写入声音数据16位
==========================================================================================

AudioRecord开始录音后,开启线程去读取录音的数据
AudioTrack开始播放后,开启线程去写入数据发声

转载于:https://www.cnblogs.com/smile365/p/3336467.html

来实现一个基于Android平台的录音和播放功能? 要实现基于Android平台的录音和播放功能,可以结合使用AudioRecordAudioTrack,具体步骤如下: 1.创建AudioRecord对象,设置录音参数,如采样率、声道数和采样位深等。可以使用MediaRecorder.AudioSource.MIC设置音频输入源。 2.创建一个字节数组用于存储录制的声音,然后开始录制,不断将音频数据写入字节数组。 3.创建AudioTrack对象,设置播放参数,如采样率、声道数和采样位深等。使用MODE_STREAM模式。 4.将录制的数据写入AudioTrack中播放。 以下是代码示例: //录音 int frequency = 16000;//采样率 int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;//单声道 int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;//采样位深 int bufferSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration, audioEncoding); AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency, channelConfiguration, audioEncoding, bufferSize); byte[] recordBuffer = new byte[bufferSize]; audioRecord.startRecording(); while (isRecording) { int readSize = audioRecord.read(recordBuffer, 0, bufferSize); //处理录制的音频数据 } audioRecord.stop(); audioRecord.release(); //播放 AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, frequency, channelConfiguration, audioEncoding, bufferSize, AudioTrack.MODE_STREAM); audioTrack.play(); audioTrack.write(recordBuffer, 0, recordBuffer.length); audioTrack.stop(); audioTrack.release();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值