2012-06-07 1 views
0

Я хотел бы узнать, есть ли способ исправить продолжительность записи с помощью мобильного микрофона. Например, когда я нажимаю кнопку записи, которая должна начинаться и он должен остановиться в течение 5 секунд на себе, какой метод вы предлагаете мне использовать :-)Запись данных с использованием микрофона на фиксированную длительность

Edit:

Извините за сумбур, но я использую Класс AudioRecorder для записи данных, и я не думаю, что функция класса MediaRecorder работает должным образом (/ вообще) для того же самого.

ответ

1

Если вы используете таймер, я не думаю, что вы можете точно контролировать, сколько данных находится в буфере, когда ваше приложение читает его.

Я думаю, что они способ записать 5 секунд аудиоданных - использовать технику от this class.

В этом коде аккуратно задается размер звукового буфера, чтобы он перезвонил после того, как он записал данные за определенное количество времени. Вот отрезанный от этого класса.

public boolean startRecordingForTime(int millisecondsPerAudioClip, 
      int sampleRate, int encoding) 
    { 
     float percentOfASecond = (float) millisecondsPerAudioClip/1000.0f; 
     int numSamplesRequired = (int) ((float) sampleRate * percentOfASecond); 
     int bufferSize = 
       determineCalculatedBufferSize(sampleRate, encoding, 
         numSamplesRequired); 

     return doRecording(sampleRate, encoding, bufferSize, 
       numSamplesRequired, DEFAULT_BUFFER_INCREASE_FACTOR); 
    } 

Тогда позже код просто делает это:

while (continueRecording) 
     { 
      int bufferResult = recorder.read(readBuffer, 0, readBufferSize); 
//do stuff 
     } 

так readBufferSize как раз, вы получите количество данных, которые вы хотите (с некоторыми незначительными изменениями)

+0

удивительный ответ. .. спасибо, я уверен, что эта информация будет очень полезной :-) – Sumit

0

Используйте setMaxDuration из класса MediaRecorder.

попеременно

При начале записи начать новую нить и положить его спать в течение 5 секунд. когда он просыпается, прекратите запись. или используйте таймерную клавишу, которая должна вызывать стоп-запись после 5-секундной задержки. или

0

Это все, что вам нужно.

@Override 
    public void onClick(View view) 
    { 
     if (view.getId() == R.id.Record) 
     { 
      new Timer().schedule(new TimerTask() 
      { 

       @Override 
       public void run() 
       { 
        runOnUiThread(new Runnable() 
        { 

         @Override 
         public void run() 
         { 
          mediaRecorder.stop(); 
          mediaRecorder.reset(); 
          mediaRecorder.release(); 
          files.setEnabled(true); 
          record.setEnabled(true); 
          stop.setEnabled(false); 

         } 
        }); 

       } 
      }, 5000); 

      record.setEnabled(false); 
      files.setEnabled(false); 
      stop.setEnabled(true); 
      try 
      { 
       File file = new File(Environment.getExternalStorageDirectory(), 
         "" + new Random().nextInt(50) + ".3gp"); 
       adapter.add(file.getAbsolutePath()); 
       adapter.notifyDataSetChanged(); 
       mediaRecorder = new MediaRecorder(); 
       mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
       mediaRecorder 
         .setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
       mediaRecorder 
         .setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
       mediaRecorder.setOutputFile(file.getAbsolutePath()); 
       mediaRecorder.prepare(); 
       mediaRecorder.start(); 
       stop.setEnabled(true); 
      } catch (IllegalStateException e) 
      { 
       e.printStackTrace(); 
      } catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 

     } 

 Смежные вопросы

  • Нет связанных вопросов^_^