Я написал аудио-рекордер для 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);
}
}