首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想要iLBC格式,但似乎只能录制IMA4格式的音频

我想要iLBC格式,但似乎只能录制IMA4格式的音频
EN

Stack Overflow用户
提问于 2012-10-27 16:52:43
回答 1查看 1.1K关注 0票数 4

如何录制iLBC格式的音频?我从#1010343问题中得到了一些帮助,并实现了以下代码:

代码语言:javascript
复制
NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] initWithCapacity:10];        
[recordSetting setValue:[NSNumber numberWithInt:kAudioFormatAppleIMA4] forKey:AVFormatIDKey];
//  [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];  //  doesn't work:  no error, but no sound
//  [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatiLBC] forKey:AVFormatIDKey];  //  doesn't work:  no error, but not sound
[recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];
[recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey];
[recordSetting setObject:[NSNumber numberWithInt:12800] forKey:AVEncoderBitRateKey];
[recordSetting setObject:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
[recordSetting setObject:[NSNumber numberWithInt: AVAudioQualityHigh] forKey: AVEncoderAudioQualityKey];
recorder = [[AVAudioRecorder alloc] initWithURL:audioFile settings:recordSetting error: &avError ];
[recorder setDelegate:self];
[recorder recordForDuration:(NSTimeInterval) secLeft];
[recorder record];

就像上面的,它工作得很好。录制得很好。轻松回放。您会注意到其他格式被注释掉了。如果我尝试其中任何一个,我什么也得不到。我想要更小的文件,根据问题#7279643,它提供了以下有价值的信息:

代码语言:javascript
复制
Here are the results for few encoding supported by iPhone:
Size of audio file of duration 10 sec.
   kAudioFormatMPEG4AAC :      164 kB
   kAudioFormatAppleLossless : 430 kB
   kAudioFormatAppleIMA4 :     475 kB
   kAudioFormatULaw :          889 kB
   kAudioFormatALaw :          889 KB

我应该可以用iLBC录制。但如果我试了,我什么也得不到。当我使用IMA4格式以外的其他格式时,是否需要在录制或回放时更改其他内容?

以下是我的播放代码:

代码语言:javascript
复制
NSError     *avError;
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayback error:&avError];
[audioSession setActive:YES error:&avError];
if( !avError ) {
    if( [audioPlayer isPlaying] ) {
        [audioPlayer stop ];
    }
    while( ![audioPlayer isPlaying] ) {
        AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:audioFile  error:nil];
        self.audioPlayer = player;
        self.audioPlayer.numberOfLoops = 0;
        [audioPlayer prepareToPlay];
        [audioPlayer play];
    }
} else {
    NSLog(@"Playback Error: %@", avError );
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-04 20:33:33

通过删除以下命令修复:

代码语言:javascript
复制
[recordSetting setValue:[NSNumber numberWithFloat:44100.0]forKey:AVSampleRateKey]; 
[recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey]

我猜它们与iLBC默认值冲突。

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

https://stackoverflow.com/questions/13098632

复制
相关文章

相似问题

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