Android音视频技术2--Android AudioRecord 和 AudioTrack音频PCM数据采集和播放

一.AudioRecord 和 AudioTrack

AudioRecord:Android平台用于录制音频的类。

AudioTrack:Android平台用于播放音频的类。

二.AudioRecord 和 AudioTrack构造方法

AudioRecord音频采集

Public constructors
<init>(audioSource: Int, sampleRateInHz: Int, channelConfig: Int, audioFormat: Int, bufferSizeInBytes: Int)
  1. audioSource:音频源
  2. sampleRateInHz:采样频率
  3. channelConfig:音频通道,单声道,双声道,立体声。
  4. audioFormat:音频数据源格式
  5. bufferSizeInBytes:音频数据缓存总大小

AudioTrack音频播放

@param streamType the type of the audio stream. See
*   {@link AudioManager#STREAM_VOICE_CALL}, {@link AudioManager#STREAM_SYSTEM},
*   {@link AudioManager#STREAM_RING}, {@link AudioManager#STREAM_MUSIC},
*   {@link AudioManager#STREAM_ALARM}, and {@link AudioManager#STREAM_NOTIFICATION}.
Public constructors
<init>(streamType: Int, sampleRateInHz: Int, channelConfig: Int, audioFormat: Int, bufferSizeInBytes: Int, mode: Int)
  1. streamType:音频流数据类型,类型如下:
  • STREAM_VOICE_CALL:电话
  • STREAM_SYSTEM:系统
  • STREAM_RING:铃声
  • STREAM_MUSIC:音乐
  • STREAM_ALARM:闹钟
  • STREAM_NOTIFICATION:通知

 三.AudioRecord 和 AudioTrack使用

  1. AudioRecord
  • AudioRecord初始化:
int bufferSizeInBytes = AudioRecord.getMinBufferSize(SAMPLE_RATE_INHZ, CHANNEL_CONFIG, AUDIO_FORMAT);
        audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE_INHZ,
                CHANNEL_CONFIG, AUDIO_FORMAT, bufferSizeInBytes);
  • 获取音频数据并写入文件:
final byte data[] = new byte[bufferSizeInBytes];
        final File file = new File(getExternalFilesDir(Environment.DIRECTORY_MUSIC), "record.pcm");
FileOutputStream fos = null;
                try {
                    fos = new FileOutputStream(file);
                    while (isRecording) {
                        int read = audioRecord.read(data, 0, data.length);
                        if (AudioRecord.ERROR_INVALID_OPERATION != read) {
                            fos.write(data);
                        }
                    }

                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if (fos != null) {
                        try {
                            fos.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
  1.  
  2. AudioTrack
  • AudioTrack初始化:
audioTrack = new AudioTrack(
                new AudioAttributes.Builder()
                        .setUsage(AudioAttributes.USAGE_MEDIA)
                        .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                        .build(),
                new AudioFormat.Builder().setSampleRate(SAMPLE_RATE_INHZ)
                        .setEncoding(AUDIO_FORMAT)
                        .setChannelMask(AudioFormat.CHANNEL_OUT_MONO)
                        .build(),
                bufferSizeInBytes,
                AudioTrack.MODE_STREAM,
                AudioManager.AUDIO_SESSION_ID_GENERATE);
        audioTrack.play();
  • AudioTrack读取数据并写入:
  • <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值