مشکل در ضبط صدا
ببخشید یه چند روزی است که داخل کد ضبط صدا گیر کردم،کدش کامل زدم ولی نمیدونم چرا هنگام استارت ارور میده(srart fiald)
لطفا هرکی میتونه کمکم کنه،مرسییییییی
این یک کد کامل برای ضبط صدا با فرمت بسیار مطلوب هست .
البته مکنه در امولیتور خوب جواب نده ، واسه ی گوشی با کیفیت بسیار خوبی ضبط میکنه :
شما کدتون رو توی سوالتون درج نکردید ، برای اصلاح کدتون ، درجش کنید :
public class Audio_Record extends Activity {
private static final int RECORDER_SAMPLERATE = 8000;
private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO;
private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT;
private AudioRecord recorder = null;
private Thread recordingThread = null;
private boolean isRecording = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setButtonHandlers();
enableButtons(false);
int bufferSize = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE,
RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING);
}
private void setButtonHandlers() {
((Button) findViewById(R.id.btnStart)).setOnClickListener(btnClick);
((Button) findViewById(R.id.btnStop)).setOnClickListener(btnClick);
}
private void enableButton(int id, boolean isEnable) {
((Button) findViewById(id)).setEnabled(isEnable);
}
private void enableButtons(boolean isRecording) {
enableButton(R.id.btnStart, !isRecording);
enableButton(R.id.btnStop, isRecording);
}
int BufferElements2Rec = 1024; // want to play 2048 (2K) since 2 bytes we use only 1024
int BytesPerElement = 2; // 2 bytes in 16bit format
private void startRecording() {
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
RECORDER_SAMPLERATE, RECORDER_CHANNELS,
RECORDER_AUDIO_ENCODING, BufferElements2Rec * BytesPerElement);
recorder.startRecording();
isRecording = true;
recordingThread = new Thread(new Runnable() {
public void run() {
writeAudioDataToFile();
}
}, "AudioRecorder Thread");
recordingThread.start();
}
//convert short to byte
private byte[] short2byte(short[] sData) {
int shortArrsize = sData.length;
byte[] bytes = new byte[shortArrsize * 2];
for (int i = 0; i < shortArrsize; i++) {
bytes[i * 2] = (byte) (sData[i] & 0x00FF);
bytes[(i * 2) + 1] = (byte) (sData[i] >> 8);
sData[i] = 0;
}
return bytes;
}
private void writeAudioDataToFile() {
// Write the output audio in byte
String filePath = "/sdcard/voice8K16bitmono.pcm";
short sData[] = new short[BufferElements2Rec];
FileOutputStream os = null;
try {
os = new FileOutputStream(filePath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while (isRecording) {
// gets the voice output from microphone to byte format
recorder.read(sData, 0, BufferElements2Rec);
System.out.println("Short wirting to file" + sData.toString());
try {
// // writes the data to file from buffer
// // stores the voice buffer
byte bData[] = short2byte(sData);
os.write(bData, 0, BufferElements2Rec * BytesPerElement);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private void stopRecording() {
// stops the recording activity
if (null != recorder) {
isRecording = false;
recorder.stop();
recorder.release();
recorder = null;
recordingThread = null;
}
}
private View.OnClickListener btnClick = new View.OnClickListener() {
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnStart: {
enableButtons(true);
startRecording();
break;
}
case R.id.btnStop: {
enableButtons(false);
stopRecording();
break;
}
}
}
};
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
finish();
}
return super.onKeyDown(keyCode, event);
}
}
import java.io.IOException;
import android.R.string;
import android.app.Activity;
import android.media.MediaRecorder;
import android.net.MailTo;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.TextView;
public class RecordSoundActivity extends Activity {
private MediaRecorder MR;
public static int counter=0;
public ImageView imgrecorder;
public TextView txttime;
public static boolean isrocording=false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imgrecorder=(ImageView)findViewById(R.id.imgrecord);
txttime=(TextView)findViewById(R.id.txttime);
imgrecorder.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
TogglRecording();
}
});
}
private void TogglRecording()
{
if(isrocording)
stoprocording();
else
startrecording();
}
public void stoprocording()
{
isrocording=false;
MR.release();
}
public void startrecording()
{
counter=0;
isrocording=true;
Counterthreed thread=new Counterthreed();
thread.start();
try {
MR=new MediaRecorder();
MR.setAudioSource(MediaRecorder.AudioSource.MIC);
MR.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
MR.setOutputFile(G.Dir +"/"+ System.currentTimeMillis());
MR.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
MR.prepare();
MR.start();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public class Counterthreed extends Thread{
@Override
public void run()
{
while(isrocording)
{
try
{
Thread.sleep(1000);
counter++;
G.handler.post(new Runnable() {
@Override
public void run() {
txttime.setText(countertime(counter));
}
});
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
public String countertime(int counter)
{
int min=counter/60;
int sec=counter-min*60;
String minprifex="";
String secprifex="";
if(min<10)
minprifex="0";
if(sec<10)
secprifex="0";
return minprifex +""+ min+":"+secprifex+""+sec;
}
}
import java.io.File;
import android.app.Application;
import android.os.Environment;
import android.os.Handler;
public class G extends Application {
public static final Handler handler=new Handler();
public static final String Dir=Environment.getExternalStorageDirectory().getAbsolutePath()+"/Recorder/";
@Override
public void onCreate() {
super.onCreate();
new File(Dir).mkdirs();
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .