使用如何在 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 格式录制声音的音频队列服务示例的主要内容,如果未能解决你的问题,请参考以下文章