13

Вопрос по android – Как записать аудио / голос в фоновом режиме непрерывно в Android?

Поскольку я хочу записывать звук в фоновом режиме, я использую сервис. Но я не могу записать звук в сервисе.

Я попробовал тот же код в Activity, он работает для меня. но как сделать аудиозапись в фоновом режиме при вводе голоса / речи, что означает, что аудиозапись должна начинаться, если есть голосовой ввод, и это должно быть в фоновом режиме ...?

  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceededstackoverflow.com/questions/9547197/android-sound-verificationError: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от Dipali
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от Dipali
  • Error: User Rate Limit Exceeded

    от Dipali
  • Error: User Rate Limit Exceeded

    от Dipali
  • Вы работали?

    от Jithu
  • Что со всеми странными отступами и> символы?

    от Cylindric
  • 3

    Для начала записи в backgroun вы можете либо

    create a thread and do the recording inside a thread.

    create a service which will run in background.

    Надеюсь, поможет.

    Edit 1
    Thread recordInBackGround= new Thread(new Runnable() {
                        @Override
                        public void run() { 
    //Your recording portion of the code goes here.
    }
    });
    
    recordInBackGround.start();
    

  • 21

    В одном из моих проектов у меня было требование непрерывной записи зву

    ка с микрофона. я не могу поделиться проектом, но я могу поделиться конкретным классом AudioRecorder.

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

    Теперь создайте службу и просто вызовите метод start () и управляйте записанным звуковым буфером для ваших целей.

    Надеюсь, это поможет вам.