Android 为什么我只能从录音的输出中得到零?
我想用一个音轨来播放一个声音,同时我用录音机录制了它。但是除了零,我什么也得不到。为什么? 我试图从Android 为什么我只能从录音的输出中得到零?,android,android-audiorecord,Android,Android Audiorecord,我想用一个音轨来播放一个声音,同时我用录音机录制了它。但是除了零,我什么也得不到。为什么? 我试图从字节[]缓冲区读取数据,但得到的结果是零。这是我的密码: import java.io.BufferedOutputStream; import java.io.DataOutputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; im
字节[]
缓冲区读取数据,但得到的结果是零。这是我的密码:
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Time;
import java.util.Timer;
import java.util.TimerTask;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
public class RecordThread implements Runnable {
private static final int Encording = AudioFormat.ENCODING_PCM_16BIT; //Data size for each frame = 16 bytes
private static final int Sample_rate = 8000; //Sample rate = 8000 HZ
private static final int Channel = AudioFormat.CHANNEL_IN_MONO; //Set as single track
public static final int Buffersize = AudioRecord.getMinBufferSize(Sample_rate, Channel, Encording); //Buffer size
@Override
public void run() {
// TODO Auto-generated method stub
AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,Sample_rate, Channel, Encording, Buffersize);
while(MessageUsed.RecordPermit){
try {
FileOutputStream ops = new FileOutputStream(TestoOFDMMain.file2);
BufferedOutputStream bos = new BufferedOutputStream(ops);
DataOutputStream dos = new DataOutputStream(bos);
byte[] buffer = new byte[Buffersize];
audioRecord.startRecording(); //Start Recording
int bufferReadResult = audioRecord.read(buffer, 0, buffer.length); //Read Array size
MessageUsed.RecordStop = false;
/*Write Data to file*/
for(int i=0;i<bufferReadResult;i++){
dos.write(buffer[i]);
System.out.println(buffer[i]);
if(MessageUsed.ProcessPermit == true){
break;
}
}
audioRecord.stop();
dos.close();
MessageUsed.RecordStop = true;
Thread.sleep(300);
MessageUsed.ProcessStart = true;
Thread.sleep(900);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
import java.io.BufferedOutputStream;
导入java.io.DataOutputStream;
导入java.io.FileNotFoundException;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.sql.Time;
导入java.util.Timer;
导入java.util.TimerTask;
导入android.media.AudioFormat;
导入android.media.AudioRecord;
导入android.media.MediaRecorder;
公共类RecordThread实现可运行{
私有静态最终整数编码=AudioFormat.ENCODING_PCM_16BIT;//每帧的数据大小=16字节
私有静态最终整数采样率=8000;//采样率=8000 HZ
私有静态最终int通道=AudioFormat.Channel\u IN_MONO;//设置为单轨
public static final int Buffersize=AudioRecord.getMinBufferSize(采样率、通道、编码);//缓冲区大小
@凌驾
公开募捐{
//TODO自动生成的方法存根
AudioRecord AudioRecord=新的录音(MediaRecorder.AudioSource.MIC、采样率、频道、编码、缓冲区大小);
while(MessageUsed.RecordPermit){
试一试{
FileOutputStream ops=新的FileOutputStream(TestoOFDMMain.file2);
BufferedOutputStream bos=新的BufferedOutputStream(ops);
DataOutputStream dos=新的DataOutputStream(bos);
字节[]缓冲区=新字节[Buffersize];
audioRecord.startRecording();//开始录制
int bufferReadResult=audioRecord.read(buffer,0,buffer.length);//读取数组大小
MessageUsed.RecordStop=false;
/*将数据写入文件*/
对于(inti=0;i我会快速浏览一下,假设您的System.out.println()
语句不允许出现结果。这是一个基本的java表达式,而不是Android java。您看到的0可能是您正在查看的任何字段的默认值。谢谢您的回复。但我已经发现了问题。在我将参数“encoding”从“AudioFormat.encoding\u PCM\u 16BIT”更改后“AudioFormat.ENCODING_PCM_8BIT”可以正常工作。我从Android指令中了解到,如果使用“read(byte[]audioData,int offsetingbytes,int sizeInBytes)”。录音构造函数中指定的格式应该是编码_PCM_8BIT,以对应于数组中的数据。