【问题标题】:How to record audio on iPhone如何在 iPhone 上录制音频
【发布时间】:2010-09-28 20:08:09
【问题描述】:

我想使用 iphone 录制音频(

谢谢!

【问题讨论】:

    标签: iphone


    【解决方案1】:

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

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

    AudioQueues 的参考(到目前为止,您将处理最多的部分)是:

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

    至于音频会话:

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

    尽管您可以忽略大部分 AudioSession 内容,因为您不会做任何那么复杂的事情。所以基本上,这里是步骤:

    1. 使用 AudioInterrupt 回调初始化您的音频会话。此回调处理来电情况,中断您的程序。
    2. 设置传入音频和文件绑定音频的数据格式。这存储在名为 AudioStreamBasicDescription 的结构中。
    3. 创建一个 AudioQueue 对象并使用 AudioQueueNewInput 对其进行初始化。您必须指定一个回调来处理传入的音频。您可以在此处指定将音频保存到文件中,但请注意,这是一个实时线程,您必须尽量不要将其阻塞太久。
    4. 定义您的录音系统将拥有多少个 AudioQueueBuffer。这些缓冲区会根据您在第 2 步中指定的采样率填满。您必须进行调整,以便在下一个缓冲区到达之前有足够的时间进行处理。
    5. AudioSessionSetActive(YES);
    6. AudioQueueStart 在您的 AudioQueue 上。

    我没有在这里包含所有参数,但这就是 API 的用途。

    希望对您有所帮助。

    [编辑]

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

    干杯。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        此代码用于录制音频

        别忘了添加 AVFoundation 和 AudioToolBox 框架

        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];
        

        【讨论】:

          猜你喜欢
          • 2010-09-21
          • 2010-11-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-25
          • 2011-05-17
          • 2012-01-13
          相关资源
          最近更新 更多