录音机不支持三星s3冲刺手机

时间:2012-11-30 21:30:11

标签: android audio galaxy recorder

我有一个录音机类来捕捉原始音频帧。它适用于所有其他手机,除了三星s3 sprit版本。(它适用于其他三星s3手机)。我已经找到了解决这个问题。问题似乎很奇怪,所以这个解决方案可以帮助一个人节省时间。

我的录音机代码是

// record init
 audioRecorder.setRecordPositionUpdateListener(updateListener);
 audioRecorder.setPositionNotificationPeriod(framePeriod);
 if(audioRecorder.getState() == AudioRecord.STATE_INITIALIZED ){
    //Buffer for audio record
     buffer = new byte[framePeriod*bSamples/8*nChannels];   
    audioRecorder.startRecording();
    audioRecorder.read(buffer, 0, buffer.length)
  }

和我的RecordPositionUpdate列表器

  public void onPeriodicNotification(AudioRecord recorder)
  {         
   int data_Len = audioRecorder.read(buffer, 0, buffer.length); // Fill buffer
   Log.d(TAG,"Recieved audio buffer of length "+data_Len);      
  }

如果是samsung s3 sprint,我可以看到第一个读取本身给出了“ERROR_INVALID_OPERATION”。因此,以下更改有助于解决问题

// record init
audioRecorder.setRecordPositionUpdateListener(updateListener);
audioRecorder.setPositionNotificationPeriod(framePeriod);
if(audioRecorder.getState() == AudioRecord.STATE_INITIALIZED ){
  //Buffer for audio record
    buffer = new byte[framePeriod*bSamples/8*nChannels];    
    audioRecorder.startRecording();

  //Fix for recording issue with Samsung s3 Sprint phones.Doing a delayed first read
  private final int audioRecorderSettleTime = 1500; 

  new Handler().postDelayed(new Runnable() {                    
   @Override
    public void run() {
    int bytesReceived = audioRecorder.read(buffer, 0, buffer.length);
    Log.d(TAG,"Delayed first read: bytes recieved "+ bytesReceived);
    }
}, audioRecorderSettleTime);

}

它工作正常并解决我的问题。看起来这些手机有硬件级别问题,延迟了录音机缓冲区初始化。所以第一次读取应该在延迟时间之后开始。  有什么方法可以解决这个问题吗?

0 个答案:

没有答案