- (void)viewDidLoad {
[super viewDidLoad];
NSArray *dirPath=NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
NSString *docPath=[dirPath objectAtIndex:0];
NSString *filePath=[docPath stringByAppendingPathComponent:@"test1.wav"];
_url=[NSURL URLWithString:filePath];
NSDictionary *recordSettings=[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:AVAudioQualityMin],
AVEncoderAudioQualityKey,
[NSNumber numberWithInt:16],
AVEncoderBitRateKey,
[NSNumber numberWithInt:2],
AVNumberOfChannelsKey,
[NSNumber numberWithFloat:44100.0],
AVSampleRateKey,
nil];
NSError *error;
//AVAudioRecorder *recorder;
//AVAudioPlayer *player;
_player=[[AVAudioPlayer alloc] initWithContentsOfURL:_url error:&error];
_recorder=[[AVAudioRecorder alloc] initWithURL:_url settings:recordSettings error:nil];
if (error) {
NSLog(@"%@",[error localizedDescription]);
}else{
[_recorder prepareToRecord];
}
}
调试的时候显示_player的值为nil,还有报错: The operation couldn’t be completed. (OSStatus error 2003334207.)我没在网上找到答案。
黄舟2017-04-17 14:58:03
_player の値が nil です。これは、Xcode のバグが原因であると考えられます。NSLog を使用して出力する場合、_player には値が必要です。
<オル>AVAudioRecorder
のプロキシを忘れずに設定してください<オル>objectivec
/// 記録許可を取得するための新しい API を追加しました。戻り値。YES は拒否なし、NO は記録の拒否を意味します。 + (BOOL)canRecord { __block BOOL bCanRecord = YES; if ([[[UIDevice currentDevice]systemVersion]floatValue] >= 7.0) { AVAudioSession *audioSession = [AVAudioSession 共有インスタンス]; if ([audioSession ReplysToSelector:@selector(requestRecordPermission:)]) { [audioSession PerformSelector:@selector(requestRecordPermission:) withObject:^(BOOL 付与) { (許可された場合) { bCanRecord = はい; } それ以外 { bCanRecord = いいえ; } }]; } } bCanRecord を返します。 }
objectivec
AVAudioSession *audioSession = [AVAudioSessionsharedInstance]; [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord エラー:nil]; [audioSession setActive:YES error:nil];