Audio Recording iPhone - AudioStreamBasicDescription的值

问题描述:

这些是我传入的值,它是我工作的值的唯一组合。Audio Recording iPhone - AudioStreamBasicDescription的值

dataFormat.mSampleRate = 44100;  
dataFormat.mFormatID = kAudioFormatLinearPCM; 
dataFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsBigEndian; 
dataFormat.mBytesPerPacket = 4; 
dataFormat.mFramesPerPacket = 1; 
dataFormat.mBytesPerFrame = 4; 
dataFormat.mChannelsPerFrame = 2; 
dataFormat.mBitsPerChannel = 16; 

status = AudioQueueNewInput( &dataFormat, AudioInputCallback, self, NULL, NULL, 0, 
        &queue); 

status = AudioFileCreateWithURL(fileUrl, kAudioFileCAFType, &dataformat, kAudioFileFlags_EraseFile, &audioFile 

录制工作,但在录制过程中和回放过程中噪音很大。它可以与这段代码有什么关系?

什么是您的输入设备?提供的耳塞上的麦克风或手机的内置麦克风或什么?或者你正在录制模拟器?

除了噪音,其他一切听起来是否正确:速度,音高等?

它可能不会引起任何问题,但是您指定了双通道输入,而您的输入设备可能是单声道输入。

最后一个想法:这是第一代iPhone吗?我认为这个模型有一个奇怪的问题,那就是8千赫输入上升到44.1。

+0

好的,比尔刚刚在coreaudio-api名单上表示,传闻中的第一代iPhone升频产品是虚假的。我的错。 – invalidname 2009-07-06 20:20:24

我可以看到两个可能的错误。首先,由于@invalidname指出,以立体声录制可能不适用于iPhone等单声道设备。好吧,它可能会起作用,但如果是这样的话,您只需要返回双单声道立体声流,那么为什么要麻烦呢?你也可以配置你的数据流在单声道工作,并节省CPU的开销。

第二个问题可能是声音失真的根源。你流描述格式的标志应该是:

kAudioFormatFlagIsSignedInteger | 
kAudioFormatFlagsNativeEndian | 
kAudioFormatFlagIsPacked 

另外,不要忘记将mReserved标志设置为0,虽然可能被忽略这个标志的价值,它不会伤害到明确将其设置为0只是为了确保。

编辑:在iPhone上调试音频的另一个更为一般的技巧 - 如果您正在获取失真,剪辑或其他奇怪效果,请从手机中获取数据有效载荷,然后在波形编辑器中查看录制内容。能够缩小并查看单个样本会为您提供很多关于错误的线索。要做到这一点,你需要打开“Organizer”窗口,点击你的手机,然后展开你的应用程序旁边的小箭头(在你通常会卸载它的地方)。现在你会看到一个向下的箭头,如果你点击它,Xcode会将你的应用中的数据有效载荷复制到硬盘上的某个地方。如果您将录制内容转储到磁盘,则会在此处找到解压缩的文件。