java record用法_Android AudioRecord的用法完整示例

这个Android AudioRecord录音功能是小编自己项目中使用的,因为以后要经常用到,因此想把AudioRecord的使用作为笔记记录下来,小编将Android录音功能写在了Service类里面会更加科学实用,因为可以后台录音,下面是小编的代码,代码可以直接拿来使用!

AudioRecord录制的为“.pcm”格式的文件,需要将它转码成mp3或其它格式的语音文件才能在网页或播放器上播放,后续本站会发布pcm格式转mp3格式语音文件的文章供大家学习!

一:在Service实现AndroidRecord录音功能package com.xuanyin.homektv.service;

import android.app.Service;

import android.content.Intent;

import android.media.AudioFormat;

import android.media.AudioRecord;

import android.media.MediaRecorder;

import android.os.Binder;

import android.os.IBinder;

import android.support.annotation.Nullable;

import android.util.Log;

import com.tpyyes.MainActivity;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

public class RecorderService extends Service {

private AudioRecord audioRecord;

//缓冲区大小

private int bufferSize;

//录音线程

private Thread recordThread = null;

//外部传进来的mp3文件名称

private String songName = "";

//录音标记

private boolean isRunning = true;

//存储语音数据

private byte[] voiceData;

@Nullable

@Override

public IBinder onBind(Intent intent) {

return new Binder();

}

//启动Service,会启动录音功能

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

if(intent.hasExtra("SONG_NAME")){

songName = intent.getStringExtra("SONG_NAME");

}

startRecorder();

return START_STICKY;

}

//开始录音

public void startRecorder(){

//获取最适合的缓冲大小(小编在原有基础上放大了2倍)

bufferSize = AudioRecord.getMinBufferSize(16000,AudioFormat.CHANNEL_IN_MONO,AudioFormat.ENCODING_PCM_16BIT);

//存储语音数据的数组

voiceData = new byte[bufferSize];

//创建录音对象(参数为:输入源为麦克风,赫兹16000,音道,比特数)

audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,16000, AudioFormat.CHANNEL_IN_MONO,

AudioFormat.ENCODING_PCM_16BIT,bufferSize);

//录音

audioRecord.startRecording();

//录音线程

recordThread = new Thread(new Runnable() {

@Override

public void run() {

writeAudioToDirectory();

}

},"recorder Thread");

//开启线程

recordThread.start();

}

//将录音文件写入文件夹

private void writeAudioToDirectory() {

//文件存储位置

String filePath = MainActivity.MY_SONGS_VOICE + songName +"_"+(System.currentTimeMillis() / 1000) + ".pcm";

FileOutputStream os = null;

try {

os = new FileOutputStream(filePath);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

int read = 0;

//循环写入文件

while(isRunning){

Log.e("writeAudioToDirectory2","在写入语音文件:"+isRunning);

read = audioRecord.read(voiceData,0,bufferSize);

if(AudioRecord.ERROR_INVALID_OPERATION != read){

try{

os.write(voiceData);

Log.e("writeAudioToDirectory","在写入语言文件");

}catch (Exception ex){

ex.printStackTrace();

}

}

}

}

//停止录音

public void stopRecorder(){

isRunning = false;

if(recordThread != null){

recordThread.interrupt();

recordThread = null;

}

if(audioRecord != null){

audioRecord.stop();

audioRecord.release();

audioRecord = null;

}

}

//销毁录音对象和线程

@Override

public void onDestroy() {

super.onDestroy();

stopRecorder();

Log.e("writeAudioToDirectory33","在写入文件:"+isRunning+"==="+songName);

}

}

二:注册Service

如果在Service中想要想要开启AudioRecord录音功能,必须要在AndroidManifest.xml中注册Service,代码如下:

三:在AndroidManifest.xml中给与录音权限

四:在Fragment中启动或关闭AudioRecord录音功能(当然也可以在Activity中使用)//启动或关闭录音,可用在Click点击事件中

private void recordUserVoice() {

String luyinStr = weixin_luyin.getText().toString();

Intent intent = new Intent(getActivity(), RecorderService.class);

//开启录音

if(luyinStr.equals("开始录音")){

//可以将文件名传入到Service中,例如

intent.putExtra("SONG_NAME","测试歌曲名称");

getActivity().startService(intent);

}else{ //关闭录音

weixin_luyin.setText("开始录音");

getActivity().stopService(intent);

}

}

来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/android/986.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值