这些是我传入的值,它是我工作的唯一值组合。
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
录音有效,但录音和播放时会产生很多噪音。它可以与此代码有关吗?
答案 0 :(得分:3)
我可以看到两个可能的错误。首先,正如@invalidname指出的那样,立体声录音可能无法在iPhone等单声道设备上运行。嗯,它可能会起作用,但如果确实如此,那么你只需要取回双单声道立体声流,那么为什么呢?您也可以将流配置为单声道工作,并节省CPU开销。
第二个问题可能是声音失真的根源。您的流描述格式标志应为:
kAudioFormatFlagIsSignedInteger |
kAudioFormatFlagsNativeEndian |
kAudioFormatFlagIsPacked
另外,不要忘记将mReserved标志设置为0.虽然这个标志的值可能被忽略,但为了确保它显式设置为0并没有什么坏处。
编辑:在iPhone上调试音频的另一个更一般的提示 - 如果您遇到失真,剪辑或其他奇怪的效果,请从手机中获取数据有效负载并查看录制内容波形编辑器。能够缩小并查看单个样本将为您提供很多关于出错的线索。
要执行此操作,您需要打开“管理器”窗口,单击手机,然后展开应用程序旁边的小箭头(在通常卸载它的位置)。现在您将看到一个向下指向的箭头,如果您单击它,Xcode会将数据有效负载从您的应用程序复制到硬盘驱动器上的某个位置。如果要将录制内容转储到磁盘,则可以在此处找到提取的文件。
答案 1 :(得分:1)
您的输入设备是什么?提供的耳塞上的麦克风或手机的内置麦克风还是什么?或者您是否正在录制模拟器?
除噪音外,其他一切听起来都是正确的:速度,音高等等吗?
它可能不会导致任何问题,但您指定的是双声道输入,而您的输入设备可能是单声道。
最后一个想法:这是第一代iPhone吗?我认为该模型存在一个奇怪的问题,即8 KHz输入转换为44.1。