8

我有一个实时应用程序,估计有 15% 的用户报告说记录功能不起作用。这在我们的测试设备上没有发生,但报告显示问题是 prepareToRecord 返回 NO。我很难找到 AAC 格式的示例设置。我的任何设置都关闭了吗?应用需要 iOS5 并使用 ARC。

 AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryRecord error:nil];

NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
 [NSNumber numberWithInt:kAudioFormatMPEG4AAC], AVFormatIDKey,
 [NSNumber numberWithFloat:44100.0], AVSampleRateKey,
 [NSNumber numberWithInt:1], AVNumberOfChannelsKey,
 [NSNumber numberWithInt:AVAudioQualityHigh], AVSampleRateConverterAudioQualityKey,
 [NSNumber numberWithInt:128000], AVEncoderBitRateKey,
 [NSNumber numberWithInt:16], AVEncoderBitDepthHintKey,
 nil];

NSString *fileName = [NSString stringWithFormat:@"%@%@.caf", verseGUID, bRecordingReference ? @"_ref" : @""];
NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@", [[Utilities sharedInstance] documentsDirectoryPath], fileName]];
NSError *error = nil;
audioRecorder = [[AVAudioRecorder alloc] initWithURL:url settings:recordSettings error:&error];
if([audioRecorder prepareToRecord]){
    [audioRecorder record];
}else{
    int errorCode = CFSwapInt32HostToBig([error code]);
    NSLog(@"Error: %@ [%4.4s])", [error localizedDescription], (char*)&errorCode);
}  
4

3 回答 3

3

可能很多事情都与录制设置无关。

您想要回答的真正问题似乎是:什么会导致录制不发生?

audioRecorder 可能为 nil 或 audioRecorder prepareToPlay 可能返回 NO。前者似乎更有可能。

传递给 initWithURL 的 url 可能格式不正确: - 您是否通过使用 verseGUID、bRecordReference 值进行了测试?也许您的设备永远不会有错误的 verseGUID,但是没有发生录制的设备的 verseGUID 为零/空。这可能导致文件名只是“.caf”。

您似乎有自己的类方法 [Utilities sharedInstance] 。由于某种原因,这可以在您的设备上工作,但不能在故障设备上工作吗?如果是这样,您可能会要求在您无意中记录在顶级目录中。

你能让你拥有的测试人员进入“测试版”列表吗?注册 TestFlight 或 Hockey Kit 之类的东西,让一个或多个录制失败的用户也注册,然后上传您的应用程序的测试版,其中包含诊断程序,在屏幕上显示一个对话框并显示“错误”。这可能是最明显的。我使用 testflightapp.com 只是因为它是我第一次尝试,它对我来说很容易管理并且对我的 beta 测试人员来说非常轻松。

于 2012-07-16T22:29:31.157 回答
2

试试这个我用来录制 MPEG 4 AAC 格式的设置......它工作得很好......

NSString *tempDir = NSTemporaryDirectory();
NSString *soundFilePath = [tempDir stringByAppendingPathComponent:@"sound.m4a"];

NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                                  [NSNumber numberWithInt:kAudioFormatMPEG4AAC], AVFormatIDKey,
                                  [NSNumber numberWithInt:AVAudioQualityMin], AVEncoderAudioQualityKey,
                                  [NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
                                  [NSNumber numberWithFloat:8000.0], AVSampleRateKey,
                                  nil];
于 2012-07-17T00:13:21.567 回答
1

抱歉,这有点切题,但我刚刚遇到了一个非常相似的问题,许多用户无法录制,我认为这与音频设置有关。

但是对我来说,事实证明他们拒绝了访问麦克风的权限。这意味着它prepareToRecord正在工作(并截断文件)并record报告它正在工作,但实际上它没有记录任何内容。

当我想录制时,我使用了这个:

AVAudioSession.sharedInstance().requestRecordPermission({(granted: Bool)-> Void in
    if granted {
        // can record - create AVAudioRecorder here

    } else {
        // can't record - update UI (or react accordingly)
    }
})

希望如果他们遇到类似的问题,它可以节省一些时间。

于 2016-05-05T21:13:03.873 回答