`

audiorecorder录制音频,格式为wav

 
阅读更多
一.变量声明
private AudioRecord audioRecord = null;
	private static int frequency = 44100;
	private static int channel = AudioFormat.CHANNEL_IN_STEREO;// 设置声道
	private static int encodingBitRate = AudioFormat.ENCODING_PCM_16BIT;// 设置编码
	private static final int recorder_bpp = 16;
	private int recBufSize = 0;
	private int playBufSize = 0;
	private boolean isRecording = false;// 录音标志位
	private String tempFilePath;// 临时文件的路径
	private String saveFilePath;// 保存文件的路径
	private static final String saveFold = "Audio123";// 保存的文件夹名
	private static final String temp_file = "record_temp.raw";// 零时文件名
	private Thread recThread = null;//录音线程

	tempFilePath = SDCardHelp.getFilePath(saveFold) + "/" + temp_file;
		String fileName = DateHelp.getFormateDate(3);
		saveFilePath = SDCardHelp.getFilePath(saveFold) + "/" + fileName
				+ ".wav";


// 开始录音
	private void startRec() {
		recBufSize = AudioRecord.getMinBufferSize(frequency, channel,
				encodingBitRate);
		audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency,
				channel, encodingBitRate, recBufSize);
		audioRecord.startRecording();
		isRecording = true;
		recThread = new Thread(new Runnable() {
			public void run() {
				writeAudioDataToFile();
			}
		}, "AudioRecorder Thread");
		recThread.start();
	}

	// 将音频数据写入文件
	private void writeAudioDataToFile() {
		byte data[] = new byte[recBufSize];
		FileOutputStream os = null;
		try {
			os = new FileOutputStream(tempFilePath);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		int read = 0;
		if (null != os) {
			while (isRecording) {
				read = audioRecord.read(data, 0, recBufSize);
				if (AudioRecord.ERROR_INVALID_OPERATION != read) {
					try {
						os.write(data);
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}

			try {
				os.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	private void stopRecording() {
		if (null != audioRecord) {
			isRecording = false;
			audioRecord.stop();
			audioRecord.release();
			audioRecord = null;
			recThread = null;
		}
		String fileName = DateHelp.getFormateDate(3);
		saveFilePath = SDCardHelp.getFilePath(saveFold) + "/" + fileName
				+ ".wav";
		copyWaveFile(tempFilePath, saveFilePath);
		deleteTempFile();
	}

	// 删除临时文件
	private void deleteTempFile() {
		File file = new File(tempFilePath);
		file.delete();
	}

	private void copyWaveFile(String inFilename, String outFilename) {
		FileInputStream in = null;
		FileOutputStream out = null;
		long totalAudioLen = 0;
		long totalDataLen = totalAudioLen + 36;
		long longSampleRate = frequency;
		int channels = 2;
		long byteRate = recorder_bpp * frequency * channels / 8;

		byte[] data = new byte[recBufSize];

		try {
			in = new FileInputStream(inFilename);
			out = new FileOutputStream(outFilename);
			totalAudioLen = in.getChannel().size();
			totalDataLen = totalAudioLen + 36;
			WriteWaveFileHeader(out, totalAudioLen, totalDataLen,
					longSampleRate, channels, byteRate);

			while (in.read(data) != -1) {
				out.write(data);
			}

			in.close();
			out.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private void WriteWaveFileHeader(FileOutputStream out, long totalAudioLen,
			long totalDataLen, long longSampleRate, int channels, long byteRate)
			throws IOException {

		byte[] header = new byte[44];

		header[0] = 'R'; // RIFF/WAVE header
		header[1] = 'I';
		header[2] = 'F';
		header[3] = 'F';
		header[4] = (byte) (totalDataLen & 0xff);
		header[5] = (byte) ((totalDataLen >> 8) & 0xff);
		header[6] = (byte) ((totalDataLen >> 16) & 0xff);
		header[7] = (byte) ((totalDataLen >> 24) & 0xff);
		header[8] = 'W';
		header[9] = 'A';
		header[10] = 'V';
		header[11] = 'E';
		header[12] = 'f'; // 'fmt ' chunk
		header[13] = 'm';
		header[14] = 't';
		header[15] = ' ';
		header[16] = 16; // 4 bytes: size of 'fmt ' chunk
		header[17] = 0;
		header[18] = 0;
		header[19] = 0;
		header[20] = 1; // format = 1
		header[21] = 0;
		header[22] = (byte) channels;
		header[23] = 0;
		header[24] = (byte) (longSampleRate & 0xff);
		header[25] = (byte) ((longSampleRate >> 8) & 0xff);
		header[26] = (byte) ((longSampleRate >> 16) & 0xff);
		header[27] = (byte) ((longSampleRate >> 24) & 0xff);
		header[28] = (byte) (byteRate & 0xff);
		header[29] = (byte) ((byteRate >> 8) & 0xff);
		header[30] = (byte) ((byteRate >> 16) & 0xff);
		header[31] = (byte) ((byteRate >> 24) & 0xff);
		header[32] = (byte) (2 * 16 / 8); // block align
		header[33] = 0;
		header[34] = recorder_bpp; // bits per sample
		header[35] = 0;
		header[36] = 'd';
		header[37] = 'a';
		header[38] = 't';
		header[39] = 'a';
		header[40] = (byte) (totalAudioLen & 0xff);
		header[41] = (byte) ((totalAudioLen >> 8) & 0xff);
		header[42] = (byte) ((totalAudioLen >> 16) & 0xff);
		header[43] = (byte) ((totalAudioLen >> 24) & 0xff);

		out.write(header, 0, 44);
	}
分享到:
评论

相关推荐

    安卓AudioRecorder录音pcm数据流并且pcm格式数据转成wav

    在给定的标题和描述中,我们关注的是如何利用AudioRecorder进行pcm数据流的录音,以及如何将这些pcm格式的音频转换为更常见的wav格式。下面我们将详细探讨这两个关键点。 **1. Android AudioRecorder录音** Audio...

    AudioRecorder实现语音录取 并转换为wav文件

    总结来说,AudioRecord是Android系统中实现语音录取的关键工具,通过合理使用和处理,我们可以实现高效、灵活的录音功能,并将录音数据转换为其他常见的音频格式,如.wav。理解并掌握这些技术,对于开发涉及音频处理...

    GiliSoft Audio Recorder Pro(录音软件)6.2.0中文破解版.rar

    GiliSoft Audio Recorder Pro是一款电脑录音软件,可以从录制电脑声音和麦克风,并保存为MP3/MP2/MKA/OGG/VOC/WAV/WMA格式音频文件。这个软件使用起来非常容易,选择录制的设备,选择输出格式和输出目录,点击...

    GiliSoft Audio Recorder Pro 是一款专业的音频录制软件

    GiliSoft Audio Recorder Pro 是一款专业的音频录制软件,旨在帮助用户高质量地录制音频流、音乐、语音以及电脑中的各种声音。无论是用于录制在线音乐、网络广播、语音通话还是创建教育内容,这款软件都提供了强大而...

    audioRecord.js:在浏览器中轻松录制音频,导出为 WAV、MP3 或 OGG

    audioRecorder.requestDevice(function(recorder){ // Create a recorder object (this will ask browser for microphone access) recorder.start(); // Start recording setTimeout(function(){ // Stop ...

    Android录制WAV文件

    ### 使用AudioRecorder录制WAV文件 1. **初始化AudioRecorder** - **设置音频源**:如`AudioSource.MIC`,表示使用麦克风作为音频输入源。 - **选择音频格式**:WAV文件需要`AudioFormat.ENCODING_PCM_16BIT`编码...

    真正可以注册的Resco Audio Recorder 4.01中文XX版

    Resco Audio Recorder 4.01是一款功能丰富的音频录制软件,专为中文用户设计。这款软件以其出色的录音质量和易用性赢得了用户的喜爱。在这款"真正可以注册的"版本中,用户无需担心软件的授权问题,可以充分利用其...

    Recorder用于html5录音 html5录音 mp3 wav ogg webm amr g711a g711u 格式

    html5 js 录音 mp3 wav ogg webm amr g711a g711u 格式,​支持在大部分已实现getUserMedia的移动端、PC端浏览器麦克风录音、实时处理,主要包括:Chrome、Firefox、Safari、iOS 14.3+、Android WebView、腾讯...

    录制声卡播放声音为主流格式

    Magic Audio Recorder是一款轻量级但功能强大的录音软件,特别设计用于捕捉声卡播放的声音,并能将其保存为各种主流的音频格式,如MP3、WAV、WMA、AAC等。这些格式广泛应用于音乐分享、播客制作、语音备忘录和教育...

    Qt AudioRecorder

    - 音频流处理,支持从网络流中录制音频。 - 用户界面定制,提供可视化波形显示和实时音量指示。 总之,Qt AudioRecorder 利用Qt的多媒体框架,为开发者提供了一套强大而灵活的音频录制解决方案,可以在多种平台上...

    GilisoftAudioRecorderPro(轻量级录音工具)v7.3.0汉化破解安装版

    Gilisoft Audio Recorder Pro是来自国外的一款功能完善,简单实用的轻量级录音...有了它,你可以从麦克风设备上录制音频或者录制电脑中的各类声音,包括网络上、电脑游戏中、或是各种播放器中的各类音频,用户可根据

    project_录音并保存为wav文件_matlab录音_

    本项目“project_录音并保存为wav文件_matlab录音”提供了这样的功能,允许用户通过MATLAB录制声音并将其存储为WAV格式,这是一种无损音频文件格式,广泛应用于各种音频处理软件和系统中。 在MATLAB中实现录音主要...

    GiliSoft_Audio_Recorder 6.4.0

    总的来说,GiliSoft Audio Recorder 6.4.0凭借其优秀的录音性能、广泛的音频格式支持、友好的用户界面以及方便的定时录音功能,成为了一款值得推荐的录音工具。无论你是音频爱好者,还是需要进行专业音频录制的用户...

    audio-recorder-polyfill:MediaRecorder polyfill可在Edge和Safari中录制音频

    可在Edge和Safari中录制音频。 在尝试一下,请参阅 。 规格兼容。 将来所有浏览器都支持MediaRecorder时,您将删除polyfill。 小的。 1.11 KB(缩小并压缩)。 没有依赖关系。 它使用来控制大小。 一个文件。 与...

    MCAudioRecorder音频录制工具v1.2.0官方安装版

    3. 多格式支持:MCAudioRecorder能够保存录制的音频为多种常见格式,如MP3、WAV、AAC等,满足用户在不同设备和平台上的使用需求。 二、操作界面与用户体验 MCAudioRecorder的界面设计简洁直观,即便是对计算机操作...

    MATLAB录制及保存声音程序PPT课件.ppt

    audiorecorder 函数可以用来录制音频并将其保存到MATLAB工作空间中,而audioread 函数则可以用来读取音频文件。 使用audiorecorder 函数录制音频的基本步骤如下: 1. 打开MATLAB命令行界面并输入以下命令以创建一...

    Android录制语音文件wav转mp3的方法示例

    2. 使用Recorder录制mp3或AAC音频文件。Recorder可以直接录制mp3或AAC音频文件,避免了wav文件的转换过程。Recorder使用Lame库来编码生成mp3音频文件。 Recorder库提供了一个比较成熟的解决方案,可以满足大多数的...

    AudioLab-Audio Editor Recorder Pro 0.99.apk

    将任何音频文件从一种格式转换为另一种格式。从以下音频格式中选择 - MP3,WAV,AAC,MP4,FLAC,OGG,OPUS,具有不同的通道,采样和比特率 ♪音频录制/ 录音带有所需音源,声道,采样率,音频格式以及噪音抑制器...

    PLAudio:iOS和Android音频互通,提供音频的录制与播放,音频格式AMR和WAV互转(支持64位)

    iOS和Android音频互通,提供音频的录制与播放,音频格式AMR和WAV互转(支持64位)。 音频转码的实现的是使用libopencore框架,这里引用了对libopencore的封装。 ######PLAudioPlayer类的使用 PLAudioPlayer类是音频...

Global site tag (gtag.js) - Google Analytics