Nexus S 4g Аудио рекордер частоты - PullRequest
1 голос
/ 15 февраля 2012

Я написал аудио-рекордер для Samsung Nexus S 4g.Код приведен ниже.Но когда я запускаю его, используя частоту дискретизации выше 8000, он выдает ошибку «Неподдерживаемая конфигурация».Пожалуйста, дайте мне знать, если кто-нибудь знает записываемый диапазон частот микрофона в Nexus s 4g.Код, который я написал, приведен ниже:

package receive.ultrasound;

import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class Beep_Beep_ReceiverActivity extends Activity{
    private int min_buff;
    private int len=0;

    File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/demo.pcm");

    AudioRecord record = null;

     Handler handler = new Handler();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        final Button buttonStart = (Button) findViewById(R.id.button1);
        final Button buttonStop = (Button) findViewById(R.id.button2);

        buttonStart.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Toast.makeText(getApplicationContext(), "button1 clicked!", 50).show();
            startDownload();
        }
    });

        buttonStop.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(), "button1 clicked!", 50).show();
                stopDownload();
            }
        });

    }

   #start download function:

    public void startDownload(){

        OutputStream os = null;
        try {
            os = new FileOutputStream(file);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
                DataOutputStream dos = new DataOutputStream(os);

        try {
            /*       Create a DataOuputStream to write the audio data into the saved file.*/




                  min_buff = AudioRecord.getMinBufferSize(8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, 
                        AudioFormat.ENCODING_PCM_16BIT);

                  if( min_buff == AudioRecord.ERROR_BAD_VALUE )
                        Log.e( "ram", "hardware not supported for this configuration" );

                  if( min_buff == AudioRecord.ERROR )
                        Log.e( "ram", "Bad Value for \"minBufferSize\", implementation was unable to query the hardware for its output properties" );


     #This is where i give the sample rate.             

         AudioRecord record = new AudioRecord(MediaRecorder.AudioSource.MIC, 8000,
                        AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, min_buff);





                  byte[] buffer = new byte[min_buff * 10]; 
                  byte[] temp_buffer = new byte[min_buff];

                  record.startRecording();


                  while (len < (min_buff * 10)) {
                         int bufferReadResult = record.read(temp_buffer, 0, min_buff);
                         for (int i = 0; i < bufferReadResult; i++)
                                    dos.writeByte(temp_buffer[i]);
                         len += min_buff; 
                  } 


              //    record.stop();
              //  dos.close();
        }catch (Exception e) {

        }


    }

    public void stopDownload(){

       System.exit(0);      
    }

}
...