Comment enregistrer de l'audio / voix en arrière plan en continu dans Android?

Comme je veux enregistrer de l'audio en arrière-plan, j'utilise le service … Mais je ne peux pas enregistrer l'audio en service.

J'ai essayé le même code dans Activité, ça marche pour moi. Mais comment faire l'enregistrement audio en arrière-plan lorsque la voix / la parole est entrée, c'est-à-dire que l'enregistrement audio devrait commencer s'il y a entrée vocale et devrait être en arrière-plan …?

  • Définissez le poids de la mise en page d'un TextView par programme
  • ClassCastException: CustomFragment ne peut pas être diffusé sur android.app.Fragment / Using android.support.v4.app.Fragment
  • Comment introduire l'application à l'avant lorsque l'icône de notification est cliquée (à partir du Service)?
  • Impossible d'installer apk en utilisant AdB sur un périphérique mis à niveau vers Android Lollipop
  • Compat de Session de Médias ne montrant pas les contrôles de Serrure sur Pré-Lollipop
  • Android Spinner - Comment rendre la vue déroulante transparente?
  • 2 Solutions collect form web for “Comment enregistrer de l'audio / voix en arrière plan en continu dans Android?”

    Dans l'un de mes projets, j'avais cette obligation d'enregistrer continuellement de l'audio à partir du microphone. Je ne peux pas partager le projet mais je peux partager la classe AudioRecorder spécifique.

     import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.ByteOrder; import android.content.Context; import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder; import android.util.Log; public class AudioRecorder { public enum State {INITIALIZING, READY, RECORDING, ERROR, STOPPED}; private byte[] audioBuffer = null; private int source = MediaRecorder.AudioSource.MIC; private int sampleRate = 0; private int encoder =0; private int nChannels = 0; private int bufferRead = 0; private int bufferSize = 0; private RandomAccessFile tempAudioFile = null; public AudioRecord audioRecorder = null; private State state; private short bSamples = 16; private int framePeriod; // The interval in which the recorded samples are output to the file // Used only in uncompressed mode private static final int TIMER_INTERVAL = 120; volatile Thread t = null; public int TimeStamp =0, count=0, preTimeStamp =0; public AudioRecorder(Context c) { this.sampleRate = 11025; this.encoder = AudioFormat.ENCODING_PCM_16BIT; this.nChannels = AudioFormat.CHANNEL_CONFIGURATION_MONO; this.preTimeStamp = (int) System.currentTimeMillis(); myApp = (MyApp)c.getApplicationContext(); mQueue = myApp.getQueue(); try { /* String fileName = "/sdcard/XYZ/11025.wav"; tempAudioFile = new RandomAccessFile(fileName,"rw"); */ framePeriod = sampleRate * TIMER_INTERVAL / 1000; bufferSize = framePeriod * 2 * bSamples * nChannels / 8; if (bufferSize < AudioRecord.getMinBufferSize(sampleRate, nChannels, encoder)) { bufferSize = AudioRecord.getMinBufferSize(sampleRate, nChannels, encoder); // Set frame period and timer interval accordingly framePeriod = bufferSize / ( 2 * bSamples * nChannels / 8 ); Log.w(AudioRecorder.class.getName(), "Increasing buffer size to " + Integer.toString(bufferSize)); } audioRecorder = new AudioRecord(source,sampleRate,nChannels,encoder,bufferSize); audioBuffer = new byte[2048]; audioRecorder.setRecordPositionUpdateListener(updateListener); audioRecorder.setPositionNotificationPeriod(framePeriod); } catch(Exception ex) { ex.printStackTrace(); } } private AudioRecord.OnRecordPositionUpdateListener updateListener = new AudioRecord.OnRecordPositionUpdateListener() { @Override public void onPeriodicNotification(AudioRecord recorder) { // Log.d(Constant.APP_LOG,"Into Periodic Notification..."); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } */ } @Override public void onMarkerReached(AudioRecord recorder) { // TODO Auto-generated method stub } }; public void start() { if (state == State.INITIALIZING) { audioRecorder.startRecording(); state = State.RECORDING; t = new Thread() { public void run() { //Here You can read your Audio Buffers audioRecorder.read(audioBuffer, 0, 2048); } }; t.setPriority(Thread.MAX_PRIORITY); t.start(); } else { Log.e(AudioRecorder.class.getName(), "start() called on illegal state"); state = State.ERROR; } } public void stop() { if (state == State.RECORDING) { audioRecorder.stop(); Thread t1 = t; t=null; t1.interrupt(); count =0; state = State.STOPPED; } else { Log.e(AudioRecorder.class.getName(), "stop() called on illegal state"); state = State.ERROR; } } public void release() { if (state == State.RECORDING) { stop(); } if (audioRecorder != null) { audioRecorder.release(); } } public void reset() { try { if (state != State.ERROR) { release(); } } catch (Exception e) { Log.e(AudioRecorder.class.getName(), e.getMessage()); state = State.ERROR; } } public State getState() { return state; } } 

    Maintenant, créez le service et appelez simplement la méthode start () et manipulez votre tampon audio enregistré à vos besoins.

    J'espère que cela vous aidera.

    Pour commencer l'enregistrement en backgroun, vous pouvez soit

    • Créez un fil et faites l'enregistrement dans un fil.

    • Créez un service qui fonctionnera en arrière-plan.

    J'espère que cela aide.

    Modifier 1

     Thread recordInBackGround= new Thread(new Runnable() { @Override public void run() { //Your recording portion of the code goes here. } }); recordInBackGround.start(); 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.