一.变量声明
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格式。下面我们将详细探讨这两个关键点。 **1. Android AudioRecorder录音** Audio...
总结来说,AudioRecord是Android系统中实现语音录取的关键工具,通过合理使用和处理,我们可以实现高效、灵活的录音功能,并将录音数据转换为其他常见的音频格式,如.wav。理解并掌握这些技术,对于开发涉及音频处理...
GiliSoft Audio Recorder Pro是一款电脑录音软件,可以从录制电脑声音和麦克风,并保存为MP3/MP2/MKA/OGG/VOC/WAV/WMA格式音频文件。这个软件使用起来非常容易,选择录制的设备,选择输出格式和输出目录,点击...
GiliSoft Audio Recorder Pro 是一款专业的音频录制软件,旨在帮助用户高质量地录制音频流、音乐、语音以及电脑中的各种声音。无论是用于录制在线音乐、网络广播、语音通话还是创建教育内容,这款软件都提供了强大而...
audioRecorder.requestDevice(function(recorder){ // Create a recorder object (this will ask browser for microphone access) recorder.start(); // Start recording setTimeout(function(){ // Stop ...
### 使用AudioRecorder录制WAV文件 1. **初始化AudioRecorder** - **设置音频源**:如`AudioSource.MIC`,表示使用麦克风作为音频输入源。 - **选择音频格式**:WAV文件需要`AudioFormat.ENCODING_PCM_16BIT`编码...
Resco Audio Recorder 4.01是一款功能丰富的音频录制软件,专为中文用户设计。这款软件以其出色的录音质量和易用性赢得了用户的喜爱。在这款"真正可以注册的"版本中,用户无需担心软件的授权问题,可以充分利用其...
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的多媒体框架,为开发者提供了一套强大而灵活的音频录制解决方案,可以在多种平台上...
Gilisoft Audio Recorder Pro是来自国外的一款功能完善,简单实用的轻量级录音...有了它,你可以从麦克风设备上录制音频或者录制电脑中的各类声音,包括网络上、电脑游戏中、或是各种播放器中的各类音频,用户可根据
本项目“project_录音并保存为wav文件_matlab录音”提供了这样的功能,允许用户通过MATLAB录制声音并将其存储为WAV格式,这是一种无损音频文件格式,广泛应用于各种音频处理软件和系统中。 在MATLAB中实现录音主要...
总的来说,GiliSoft Audio Recorder 6.4.0凭借其优秀的录音性能、广泛的音频格式支持、友好的用户界面以及方便的定时录音功能,成为了一款值得推荐的录音工具。无论你是音频爱好者,还是需要进行专业音频录制的用户...
可在Edge和Safari中录制音频。 在尝试一下,请参阅 。 规格兼容。 将来所有浏览器都支持MediaRecorder时,您将删除polyfill。 小的。 1.11 KB(缩小并压缩)。 没有依赖关系。 它使用来控制大小。 一个文件。 与...
3. 多格式支持:MCAudioRecorder能够保存录制的音频为多种常见格式,如MP3、WAV、AAC等,满足用户在不同设备和平台上的使用需求。 二、操作界面与用户体验 MCAudioRecorder的界面设计简洁直观,即便是对计算机操作...
audiorecorder 函数可以用来录制音频并将其保存到MATLAB工作空间中,而audioread 函数则可以用来读取音频文件。 使用audiorecorder 函数录制音频的基本步骤如下: 1. 打开MATLAB命令行界面并输入以下命令以创建一...
2. 使用Recorder录制mp3或AAC音频文件。Recorder可以直接录制mp3或AAC音频文件,避免了wav文件的转换过程。Recorder使用Lame库来编码生成mp3音频文件。 Recorder库提供了一个比较成熟的解决方案,可以满足大多数的...
将任何音频文件从一种格式转换为另一种格式。从以下音频格式中选择 - MP3,WAV,AAC,MP4,FLAC,OGG,OPUS,具有不同的通道,采样和比特率 ♪音频录制/ 录音带有所需音源,声道,采样率,音频格式以及噪音抑制器...
iOS和Android音频互通,提供音频的录制与播放,音频格式AMR和WAV互转(支持64位)。 音频转码的实现的是使用libopencore框架,这里引用了对libopencore的封装。 ######PLAudioPlayer类的使用 PLAudioPlayer类是音频...