在mac OS X核心音频示例中传递回调用的麦克风音频格式

时间:2015-11-12 00:58:18

标签: macos core-audio

我需要从macbook上的麦克风访问音频数据。我有一个示例程序,用于根据" Learning Core Audio"中的一个来录制麦克风数据。当我运行这个程序并打破回调例程时,我看到了inBuffer指针和mAudioData指针。但是,我很想知道数据。我已经尝试将指向mAudioData的void *指针转换为SInt16,转换为SInt32并浮动并尝试了许多带有无意义结果的字节序转换。我最需要知道的是缓冲区中数据的数字格式。该示例实际上将麦克风数据写入我可以播放的文件,因此我知道正在录制真实的音频。

   AudioStreamBasicDescription recordFormat;
memset(&recordFormat,0,sizeof(recordFormat));
//recordFormat.mFormatID = kAudioFormatMPEG4AAC;
recordFormat.mFormatID = kAudioFormatLinearPCM;
recordFormat.mChannelsPerFrame = 2;
recordFormat.mBitsPerChannel = 16;
recordFormat.mBytesPerPacket = recordFormat.mBytesPerFrame = recordFormat.mChannelsPerFrame * sizeof(SInt16);
recordFormat.mFramesPerPacket = 1;
MyGetDefaultInputDeviceSampleRate(&recordFormat.mSampleRate);
UInt32 propSize = sizeof(recordFormat);
CheckError(AudioFormatGetProperty(kAudioFormatProperty_FormatInfo,
                                  0,
                                  NULL,
                                  &propSize,
                                  &recordFormat),
           "AudioFormatProperty failed");

//set up queue
AudioQueueRef queue = {0};
CheckError(AudioQueueNewInput(&recordFormat,
                              MyAQInputCallback,
                              &recorder,
                              NULL,
                              kCFRunLoopCommonModes,
                              0,
                              &queue),
           "AudioQueueNewInput failed");
UInt32 size = sizeof(recordFormat);
CheckError(AudioQueueGetProperty(queue,
                                 kAudioConverterCurrentOutputStreamDescription,
                                 &recordFormat,
                                 &size), "Couldn't get queue's format");

0 个答案:

没有答案