Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么我只能从录音的输出中得到零?_Android_Android Audiorecord - Fatal编程技术网

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,以对应于数组中的数据。