package ycq.testspeek;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.AsyncTask;
import android.util.Log;
public class RecordTask extends AsyncTask<Void, Integer, Void>{
private boolean isRecording=true;
private String ip_add;
private int port;
private OutputStream out_audio;
private Socket socket_audio;
private int frequence = 8000; // 录制频率,单位hz.这里的值注意了,写的不好,可能实例化AudioRecord对象的时候,会出错。我开始写成11025就不行。这取决于硬件设备
private int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO;
private int audioEncoding = AudioFormat.ENCODING_PCM_16BIT; // AudioFormat.ENCODING_PCM_16BIT;
private Video_instruction video_pack = new Video_instruction();
private int flg=1;
private AudioRecord record;
/**
* @param ip_add --远程设备ip
* @param port --远程设备端口
* */
public RecordTask(String ip_add,int port)
{
this.ip_add=ip_add;
this.port=port;
}
/**
* @param flg --对讲切换 1表示讲话,0表示听话
* */
public void setFlg(int flg)
{
this.flg=flg;
}
private void connectionVideo()
{
try {
InetAddress add = InetAddress.getByName(ip_add);
socket_audio = new Socket(add, port);
socket_audio.setTcpNoDelay(false);
socket_audio.setReceiveBufferSize(10240);
out_audio = socket_audio.getOutputStream();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
/**
* 关闭通话
* */
public void close()
{
isRecording=false;
try {
if(out_audio!=null)
{
out_audio.close();
}
if (socket_audio != null) {
socket_audio.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
protected Void doInBackground(Void... arg0){
isRecording = true;
connectionVideo();
try {
// 根据定义好的几个配置,来获取合适的缓冲大小
int bufferSize = AudioRecord.getMinBufferSize(frequence,
channelConfig, audioEncoding);
// 实例化AudioRecord
record = new AudioRecord(
MediaRecorder.AudioSource.MIC,frequence,
channelConfig, audioEncoding, bufferSize);
// 定义缓冲
byte[] buffer = new byte[bufferSize];
// 开始录制
record.startRecording();
//Timer_socket();
// 定义循环,根据isRecording的值来判断是否继续录制
while (isRecording) {
record.read(buffer, 0, buffer.length);
for(int i=0;i<buffer.length;i++)
{
buffer[i]= (byte) (buffer[i]*5);
}
out_audio.write(video_pack.Video(buffer));
out_audio.flush();
}
// 录制结束
record.stop();
record.release();
// dos.close();
} catch (Exception e) {
// TODO: handle exception
record.stop();
record.release();
}
return null;
}
}
注意红色那行是调节音量的,5是音量的大小
android AudioRecord录音时调节录音声音的大小
最新推荐文章于 2021-08-23 00:28:01 发布