답변

0

예는, 당신은

int AQRecorder::ComputeRecordBufferSize(const AudioStreamBasicDescription *format, float seconds) 
{ 
    int packets, frames, bytes = 0; 
    try { 
     frames = (int)ceil(seconds * format->mSampleRate); 

     if (format->mBytesPerFrame > 0) 
      bytes = frames * format->mBytesPerFrame; 
     else { 
      UInt32 maxPacketSize; 
      if (format->mBytesPerPacket > 0) 
       maxPacketSize = format->mBytesPerPacket; // constant packet size 
      else { 
       UInt32 propertySize = sizeof(maxPacketSize); 
       XThrowIfError(AudioQueueGetProperty(mQueue, kAudioQueueProperty_MaximumOutputPacketSize, &maxPacketSize, 
                &propertySize), "couldn't get queue's maximum output packet size"); 
      } 
      if (format->mFramesPerPacket > 0) 
       packets = frames/format->mFramesPerPacket; 
      else 
       packets = frames; // worst-case scenario: 1 frame in a packet 
      if (packets == 0)  // sanity check 
       packets = 1; 
      bytes = packets * maxPacketSize; 
     } 
    } catch (CAXException e) { 
     char buf[256]; 
     return 0; 
    } 
    return bytes; 
} 

및 설정, 기본적으로

AudioQueue 버퍼 크기

는 40ms로 설정해야하며, 따라서 AudioQueue를 구성 설정해야합니다 형식, 내 경우에 대한

void AQRecorder::SetupAudioFormat(UInt32 inFormatID) 
{ 
    AudioStreamBasicDescription sRecordFormat; 
    FillOutASBDForLPCM (sRecordFormat, 
         SAMPLING_RATE, 
         1, 
         8*BYTES_PER_PACKET, 
         8*BYTES_PER_PACKET, 
         false, 
         false 
         ); 
    memset(&mRecordFormat, 0, sizeof(mRecordFormat)); 

    mRecordFormat.SetFrom(sRecordFormat); 
} 

,이 매크로의 값입니다

#define SAMPLING_RATE 16000 
#define kNumberRecordBuffers 3 
#define BYTES_PER_PACKET 2 
+0

안녕 Rohan, 답장을 보내 주셔서 감사합니다. 프로젝트를 적절하게 변경 했으므로 작업이 끝났습니다. 이 분야를 처음 접했을 때, 패킷 당 40ms 오디오 프레임에서 어떻게 작동하는지 어떻게 확인할 수 있습니까? 감사합니다, – Pravin

+0

AudioQueue 프레임 워크는 대기열에 넣어 진 버퍼가 채워질 때 콜백을 throw하므로 최소 간격은 40ms가됩니다 ... – Amitg2k12

+0

감사합니다. Rohan, 패킷 당 40ms 오디오 프레임에 대해 아이디어를 주시겠습니까? 매크로에 대한 계산/정의 즉 위의 함수에서 SAMPLING_RATE, kNumberRecordBuffers, BYTES_PER_PACKET – Pravin

관련 문제