آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مشکل در ضبط صدا

habib  9 سال پیش  9 سال پیش
0 0

ببخشید یه چند روزی است که داخل کد ضبط صدا گیر کردم،کدش کامل زدم ولی نمیدونم چرا هنگام استارت ارور میده(srart fiald)

لطفا هرکی میتونه کمکم کنه،مرسییییییی

 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
ChookD1  9 سال پیش
+2 0

این یک کد کامل برای ضبط صدا با فرمت بسیار مطلوب هست .

البته مکنه در امولیتور خوب جواب نده ، واسه ی گوشی با کیفیت بسیار خوبی ضبط میکنه :

شما کدتون رو توی سوالتون درج نکردید ، برای اصلاح کدتون ، درجش کنید :

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);
    }
}
+3 0
منبع این کد : لینک (9 سال پیش)
0 0
کدی که من زدم در واقع همون کدیست که اقای اقاجانی داخل پک اندروید اموزش داده، همین کدی که شما گذاشتید زدم ولی باز داخل start کردن error میده (9 سال پیش)
0 0
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 (9 سال پیش)
پاسخ به سوال 
habib  9 سال پیش
0 0

 

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();

}

}

 


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .