如何在iPhone上录制音频

时间:2008-12-30 11:07:13

标签: iphone

我想用iphone录制音频(< 2分钟)并将其保存到文件中。 我看着SpeakHere,但它让我很困惑。我使用哪些课程?我创建了哪些委托方法?

谢谢!

3 个答案:

答案 0 :(得分:5)

我同意,SpeakHere不是学习iPhone音频的好起点。

iPhone音频使用两个概念。 AudioQueues和AudioSessions。如果要录制到文件,则需要创建一个AudioSession,激活会话,并创建AudioInputQueue和AudioOutputQueue。

AudioQueues的参考文献(到目前为止您将讨论最多的部分)是:

http://developer.apple.com/iphone/library/documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/Introduction/Introduction.html

至于AudioSessions:

http://developer.apple.com/iphone/library/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/Introduction/Introduction.html

虽然你可以忽略大部分AudioSession的东西,因为你不会做那么复杂的事情。所以基本上,这是步骤:

  1. 使用AudioInterrupt回调初始化音频会话。此回调处理来电的情况,中断您的程序。
  2. 设置传入音频和文件绑定音频的数据格式。它存储在名为AudioStreamBasicDescripion的结构中。
  3. 创建一个AudioQueue对象并使用AudioQueueNewInput对其进行初始化。您必须指定一个回调来处理传入的音频。这是您可以指定将音频保存到文件的位置,但要注意,这是一个实时线程,您必须尽可能地尝试阻止它太久。
  4. 定义录制系统将拥有的AudioQueueBuffers数量。这些缓冲区根据您在步骤2中指定的采样率进行填充。您必须调整这些缓冲区,以便在下一个缓冲区到达之前有足够的时间进行处理。
  5. AudioSessionSetActive(YES);
  6. AudioQueue上的AudioQueueStart。
  7. 我这里没有包含所有参数,但这就是API的用途。

    希望有所帮助。

    [编辑]

    抱歉,忘记包含输出内容,尽管它们非常简单。创建另一个AudioQueue,使用AudioQueueNewOutput进行初始化,API应该能够引导您完成剩下的工作。

    干杯。

答案 1 :(得分:2)

不再需要AudioQueues来录制音频。现在使用AVAudioRecorder类是一个非常简单的过程。

答案 2 :(得分:2)

录制音频

的此代码

别忘了添加AVFoundation和AudioToolBox Framework

NSMutableDictionary* recordSetting = [[NSMutableDictionary alloc] init];
        [recordSetting setValue :[NSNumber numberWithInt:kAudioFormatAppleIMA4] forKey:AVFormatIDKey];
        [recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey]; 
        [recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey];

recordedTmpFile = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:@"filename.caf"]];
NSLog(@"Using File called: %@",recordedTmpFile);

recorder = [[ AVAudioRecorder alloc] initWithURL:recordedTmpFile settings:recordSetting error:nil];
[recorder setDelegate:self];
[recorder prepareToRecord];
[recorder record];