Android录制和播放AudioRecord和AudioTrack

package com.esa.audio;

import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioRecord;
import android.media.AudioTrack;
import android.media.MediaRecorder;

public class Audio {

	public static final int AUDIO_SOURCE = MediaRecorder.AudioSource.MIC;
	public static final int STREAM_TYPE = AudioManager.STREAM_MUSIC;
	public static final int SAMPLE_RATE_IN_HZ = 8000;// 44100
	public static final int CHANNEL_CONFIG = AudioFormat.CHANNEL_CONFIGURATION_MONO;// AudioTrack和AudioRecord都能用
	public static final int RECORD_CHANNEL_CONFIG = AudioFormat.CHANNEL_IN_MONO;
	public static final int TRACK_CHANNEL_CONFIG = AudioFormat.CHANNEL_OUT_MONO;
	public static final int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
	public static final int TRACK_BUFFER_SIZE_IN_BYTES = AudioTrack.getMinBufferSize(SAMPLE_RATE_IN_HZ, TRACK_CHANNEL_CONFIG, AUDIO_FORMAT);
	public static final int RECORD_BUFFER_SIZE_IN_BYTES = AudioRecord.getMinBufferSize(SAMPLE_RATE_IN_HZ, RECORD_CHANNEL_CONFIG, AUDIO_FORMAT);;
	public static final int MODE = AudioTrack.MODE_STREAM;

	private static Audio audio;
	private AudioTrack track = null;
	private AudioRecord record = null;

	public static Audio getAudio() {
		if (audio == null) {
			audio = new Audio();
		}
		return audio;
	}

	public AudioTrack getTrack() {
		if (track == null) {
			track = new AudioTrack(STREAM_TYPE, SAMPLE_RATE_IN_HZ, TRACK_CHANNEL_CONFIG, AUDIO_FORMAT, TRACK_BUFFER_SIZE_IN_BYTES, MODE);
		}
		return track;
	}

	public AudioRecord getRecord() {
		if (record == null) {
			record = new AudioRecord(AUDIO_SOURCE, SAMPLE_RATE_IN_HZ, RECORD_CHANNEL_CONFIG, AUDIO_FORMAT, RECORD_BUFFER_SIZE_IN_BYTES);
		}
		return record;
	}

	public void releaseRecord() {
		if (record != null) {
			record.stop();
			record.release();
		}
		record = null;
	}

	public void releaseTrack() {
		if (track != null) {
			track.stop();
			track.release();
		}
		track = null;
	}
}

转载于:https://my.oschina.net/hes/blog/160303

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值