使用如何在 iPhone 中以 mp3 格式录制声音的音频队列服务示例

Posted

技术标签:

【中文标题】使用如何在 iPhone 中以 mp3 格式录制声音的音频队列服务示例【英文标题】:Audio Queue Service Example using How to record sound in mp3 format in iPhone 【发布时间】:2013-08-10 13:43:33 【问题描述】:

我是 ios 开发新手。我在 AudioToolBox 框架的帮助下使用音频队列服务从https://github.com/vecter/Audio-Queue-Services-Example 下载了示例录音机项目。在该示例项目中,录制的音频格式为 .aif。同时运行下载的示例项目工作正常。在示例示例项目中使用如何录制音频,如 .mp3 格式。我该怎么做?

我只是将 kAudioFileAIFFType 更改为 kAudioFileMP3Type 我从 nslog 收到消息

   //---------nslog message--------------
      Not recording, returning
      Writing buffer 0 
   //------------------

- (void)startRecording

[self setupAudioFormat:&recordState.dataFormat];

recordState.currentPacket = 0;

OSStatus status;
status = AudioQueueNewInput(&recordState.dataFormat,
                            AudioInputCallback,
                            &recordState,
                            CFRunLoopGetCurrent(),
                            kCFRunLoopCommonModes,
                            0,
                            &recordState.queue);

if (status == 0)

    // Prime recording buffers with empty data
    for (int i = 0; i < NUM_BUFFERS; i++)
    
        AudioQueueAllocateBuffer(recordState.queue, 16000, &recordState.buffers[i]);
        AudioQueueEnqueueBuffer (recordState.queue, recordState.buffers[i], 0, NULL);
    

    status = AudioFileCreateWithURL(fileURL,
                                    kAudioFileMP3Type,
                                    &recordState.dataFormat,
                                    kAudioFileFlags_EraseFile,
                                    &recordState.audioFile);
    if (status == 0)
    
        recordState.recording = true;        
        status = AudioQueueStart(recordState.queue, NULL);
        if (status == 0)
        
            labelStatus.text = @"Recording";
        
    


if (status != 0)

    [self stopRecording];
    labelStatus.text = @"Record Failed";


//--------------------------------------------- ------------------------------

- (void)startPlayback

playState.currentPacket = 0;

[self setupAudioFormat:&playState.dataFormat];

OSStatus status;
status = AudioFileOpenURL(fileURL, kAudioFileReadPermission, kAudioFileMP3Type, &playState.audioFile);
if (status == 0)

    status = AudioQueueNewOutput(&playState.dataFormat,
                                 AudioOutputCallback,
                                 &playState,
                                 CFRunLoopGetCurrent(),
                                 kCFRunLoopCommonModes,
                                 0,
                                 &playState.queue);

    if (status == 0)
    
        // Allocate and prime playback buffers
        playState.playing = true;
        for (int i = 0; i < NUM_BUFFERS && playState.playing; i++)
        
            AudioQueueAllocateBuffer(playState.queue, 16000, &playState.buffers[i]);
            AudioOutputCallback(&playState, playState.queue, playState.buffers[i]);
        

        status = AudioQueueStart(playState.queue, NULL);
        if (status == 0)
        
            labelStatus.text = @"Playing";
        
            


if (status != 0)

    [self stopPlayback];
    labelStatus.text = @"Play failed";


【问题讨论】:

记录成aif之类的,然后用ffmpeg转换成mp3 【参考方案1】:

不,您不能录制到 MP3。核心音频文档(核心音频 pdf 的第 51 页) 中清楚地解释了这背后的原因。

用他们自己的话说-> iOS 包含表 2-5 中列出的录制编解码器。如您所见,MP3 和 AAC 录制均不可用。 这是由于这些格式的高 CPU 开销以及随之而来的电池消耗所致。

iOS:录制音频格式

苹果无损 iLBC(互联网低比特率编解码器,一种语音编解码器) IMA/ADPCM(也称为 IMA-4) 线性 PCM µμLaw 和 aLaw

【讨论】:

以上是关于使用如何在 iPhone 中以 mp3 格式录制声音的音频队列服务示例的主要内容,如果未能解决你的问题,请参考以下文章

在 iPhone 应用程序中以 mp3 格式录制音频

在android中使用MIC以mp3格式录制音频

iPhone 和 Android 可以录制和播放哪种音频格式?

如何将倾城时光录制成MP3格式

可以在 iphone sdk 中录制 mp3 吗?

如何在 Swift 中以 wav 格式录制音频?