首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >录音iPhone - AudioStreamBasicDescription的值

问录音iPhone - AudioStreamBasicDescription的值
EN

Stack Overflow用户
提问于 2009-05-27 08:11:38
回答 2查看 4.5K关注 0票数 4

这些是我传入的值,这是我得到的唯一的值组合。

代码语言:javascript
复制
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

录音工作正常,但在录音和回放过程中噪音很大。它会和这段代码有什么关系吗?

EN

回答 2

Stack Overflow用户

发布于 2010-09-21 04:14:49

我可以看到两个可能的错误。首先,正如@invalidname指出的那样,立体声录制可能不会在iPhone这样的单声道设备上工作。好吧,它可能会起作用,但如果它起作用了,你无论如何都会得到双单声道立体声流,所以为什么要费心呢?您也可以将流配置为单声道工作,这样就可以省去CPU开销。

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

代码语言:javascript
复制
kAudioFormatFlagIsSignedInteger |
kAudioFormatFlagsNativeEndian |
kAudioFormatFlagIsPacked

另外,不要忘记将mReserved标志设置为0。虽然这个标志的值可能会被忽略,但为了确保这一点,显式地将它设置为0并不会有什么坏处。

编辑:在iPhone上调试音频的另一个更通用的技巧--如果您遇到失真、剪辑或其他奇怪的效果,请从手机中抓取数据负载,并在编辑器中查看录音。能够缩小并查看单个样本将为您提供许多关于哪里出了问题的线索。

要做到这一点,你需要打开“管理器”窗口,点击你的手机,然后展开你的应用程序旁边的小箭头(在你通常卸载它的地方)。现在你会看到一个向下的小箭头,如果你点击它,Xcode会将数据有效负载从你的应用程序复制到你硬盘上的某个地方。如果您要将录音转储到磁盘,您可以在此处找到解压缩的文件。

票数 3
EN

Stack Overflow用户

发布于 2009-07-06 19:09:24

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

除了噪音之外,其他一切听起来都对吗:速度、音调等?

这可能不会造成任何问题,但您指定的是双声道输入,而您的输入设备可能是单声道。

最后一个想法:这是第一代iPhone吗?我认为这个模型有一个奇怪的问题,8个KHz输入被上转换为44.1。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/914536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档