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开始播放后,开启线程去写入数据发声

  • 相关阅读:
    Egret白鹭开发小游戏中容易犯的错
    egret之消除游戏开发
    Jmeter学习之— 参数化、关联、断言、数据库的操作
    JMeter学习-031-JMeter 3.0 POST Body Data 中文乱码问题
    Nginx负载均衡的五种策略
    Linux性能监控分析命令(五)—free命令介绍
    Linux性能监控分析命令(四)—top命令介绍
    ssh连接时提示THE AUTHENTICITY OF HOST XX CAN'T BE ESTABLISHED
    Linux性能监控分析命令(二)—sar命令介绍
    jProfiler远程连接Linux监控jvm1运行状态
  • 原文地址:https://www.cnblogs.com/smile365/p/3336467.html
Copyright © 2011-2022 走看看