zoukankan      html  css  js  c++  java
  • 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开始播放后,开启线程去写入数据发声

  • 相关阅读:
    dp(传球)
    最长上升子序列
    FromData获取表单数据
    php解决高并发问题
    php抽象类、接口、traint详解
    mysql、mongodb、redis 数据库之间的区别
    phpstorm2018 安装及破解方法
    phpstudy添加redis扩展
    mysql触发器trigger 实例详解
    mysql查询系列常考问题
  • 原文地址:https://www.cnblogs.com/smile365/p/3336467.html
Copyright © 2011-2022 走看看