当前位置:操作系统 > 安卓/Android >>

Android使用AudioRecord录音相关和音频文件的封装

 

在Android中录音可以用MediaRecord录音,操作比较简单。但是不够专业,就是不能对音频进行处理。如果要进行音频的实时的处理或者音频的一些封装

 

就可以用AudioRecord来进行录音了。

 

这里给出一段代码。实现了AudioRecord的录音和WAV格式音频的封装。

 

用AudioTrack和AudioTrack类可以进行边录边播,可以参考:http://www.zzzyk.com/kf/201112/113210.html

 

我们这里的代码没有播放。但是有封装和详解,如下:

 

package com.ppmeet; 

 

import java.io.File; 

import java.io.FileInputStream; 

import java.io.FileNotFoundException; 

import java.io.FileOutputStream; 

import java.io.IOException; 

import android.app.Activity; 

import android.graphics.PixelFormat; 

import android.media.AudioFormat; 

import android.media.AudioRecord; 

import android.media.MediaRecorder; 

import android.os.Bundle; 

import android.view.View; 

import android.view.View.OnClickListener; 

import android.view.Window; 

import android.view.WindowManager; 

import android.widget.Button; 

 

/**

 * class name:TestAudioRecord<BR>

 * class description:用AudioRecord来进行录音<BR>

 * PS:<BR>

 * 

 * @version 1.00 2011/09/21

 * @author CODYY)peijiangping

 */ 

public class TestAudioRecord extends Activity { 

    // 音频获取源 

    private int audioSource = MediaRecorder.AudioSource.MIC; 

    // 设置音频采样率,44100是目前的标准,但是某些设备仍然支持22050,16000,11025 

    private static int sampleRateInHz = 44100; 

    // 设置音频的录制的声道CHANNEL_IN_STEREO为双声道,CHANNEL_CONFIGURATION_MONO为单声道 

    private static int channelConfig = AudioFormat.CHANNEL_IN_STEREO; 

    // 音频数据格式:PCM 16位每个样本。保证设备支持。PCM 8位每个样本。不一定能得到设备支持。 

    private static int audioFormat = AudioFormat.ENCODING_PCM_16BIT; 

    // 缓冲区字节大小  www.zzzyk.com

    private int bufferSizeInBytes = 0; 

    private Button Start; 

    private Button Stop; 

    private AudioRecord audioRecord; 

    private boolean isRecord = false;// 设置正在录制的状态 

    //AudioName裸音频数据文件 

    private static final String AudioName = "/sdcard/love.raw"; 

    //NewAudioName可播放的音频文件 

    private static final String NewAudioName = "/sdcard/new.wav"; 

 

    public void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

        getWindow().setFormat(PixelFormat.TRANSLUCENT);// 让界面横屏 

        requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉界面标题 

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 

                WindowManager.LayoutParams.FLAG_FULLSCREEN); 

        // 重新设置界面大小 

        setContentView(R.layout.main); 

        init(); 

    } 

 

    private void init() { 

        Start = (Button) this.findViewById(R.id.start); 

        Stop = (Button) this.findViewById(R.id.stop); 

        Start.setOnClickListener(new TestAudioListener()); 

        Stop.setOnClickListener(new TestAudioListener()); 

        creatAudioRecord(); 

    } 

 

    private void creatAudioRecord() { 

        // 获得缓冲区字节大小 

        bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz, 

                channelConfig, audioFormat); 

        // 创建AudioRecord对象 

        audioRecord = new AudioRecord(audioSource, sampleRateInHz, 

                channelConfig, audioFormat, bufferSizeInBytes); 

    } 

 

    class TestAudioListener implements OnClickListener { 

 

        @Override 

        public void onClick(View v) { 

            if (v == Start) { 

                startRecord(); 

            } 

            if (v == Stop) { 

                stopRecord(); 

            } 

 

        } 

 

    } 

 

    private void startRecord() { 

        audioRecord.startRecording(); 

        // 让录制状态为true 

        isRecord = true; 

        // 开启音频文件写入线程 

        new Thread(new AudioRecordThread()).start(); 

    } 

 

    private void stopRecord() { 

        close(); 

    } 

 

    private void close() { 

        if (audioRecord != null) { 

            System.out.println("stopRecord"); 

            isRecord = false;//停止文件写入 

            audioRecord.stop(); 

            audioRecord.release();//释放资源 

      &nb

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,