2012-06-07 1 views
0

모바일 마이크를 사용하여 녹음 지속 시간을 수정하는 방법이 있는지 알고 싶습니다. 내가 버튼을 클릭하면 녹화가 시작해야하고 자신의 5 초 후에 중지해야처럼, 어떤 방법은 내가 사용하는 제안 할 :-)고정 된 시간 동안 마이크를 사용하여 데이터 기록

편집 :

죄송 혼란을하지만, 내가 사용하고 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

MediaRecorder 클래스의 setMaxDuration을 사용하십시오.

번갈아

새 스레드를 시작하고 5 초 동안 잠자기 상태로 촬영을 시작. 잠에서 깨어나면 녹음이 중지됩니다. 또는 5 초 지연 후 녹음 중지를 호출하는 timertask를 사용하십시오. 또는

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

     } 
관련 문제