Wie kann man Audio / Voice im Hintergrund kontinuierlich in Android aufnehmen?

Da ich Audio im Hintergrund aufnehmen möchte, benutze ich den Service. Aber ich bin nicht in der Lage, den Audio im Service aufzunehmen.

Ich habe den gleichen Code in der Aktivität probiert. Aber wie man Audio-Aufnahme im Hintergrund zu tun, wenn Sprache / Sprache eingegeben wird bedeutet, dass Audio-Aufnahme sollte beginnen, wenn es Spracheingabe und das sollte im Hintergrund sein …?

  • Kontextmenü mit Listenansicht in Android verwenden
  • Entfernen Sie Google Play Services von App in Android Studio
  • Firebase: Bei der Bearbeitung der Anfrage ist ein unbekannter Fehler aufgetreten. Versuch es noch einmal.
  • Wie bekomme ich das Bild von der URL-Website in Imageview in Android
  • Google Maps API v2 in Mono für Android hinzufügen
  • Wie kann man Android Studio Download-Abhängigkeiten Quellen und javadoc?
  • Android: Code in regelmäßigen Abständen ausführen
  • Was ist phonestateintentreceiver.notifyPhoneCallState verwendet?
  • 2 Solutions collect form web for “Wie kann man Audio / Voice im Hintergrund kontinuierlich in Android aufnehmen?”

    In einem meiner projekt hatte ich diese anforderung, um kontinuierlich Audio von Mikrofon aufzunehmen. Ich kann das Projekt nicht teilen, aber ich kann die spezifische AudioRecorder Klasse teilen.

     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; } } 

    Erstellen Sie jetzt Service und rufen Sie einfach start () -Methode an und bearbeiten Sie Ihren aufgezeichneten Audio-Puffer für Ihren Zweck.

    Hoffe, es wird dir helfen.

    Zum Starten der Aufnahme im Backgroun kannst du entweder

    • Erstellen Sie einen Thread und machen Sie die Aufnahme in einem Thread.

    • Erstellen Sie einen Dienst, der im Hintergrund läuft.

    Ich hoffe es hilft.

    Bearbeiten 1

     Thread recordInBackGround= new Thread(new Runnable() { @Override public void run() { //Your recording portion of the code goes here. } }); recordInBackGround.start(); 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.