私はいくつかのオーディオを録音していますが、このコードを使用してオーディオデータが保存されているディレクトリを選択していたときは問題ありませんでした:
NSArray *folders = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsFolder = [folders objectAtIndex:0];
result = [documentsFolder stringByAppendingPathComponent:@"Recording.m4a"];
しかし、オーディオファイルを別のディレクトリに保存する必要があるため、次のコードを試しました:
NSArray *folders = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsFolder = [folders objectAtIndex:0];
result = [documentsFolder stringByAppendingPathComponent:@"Sounds/Recording.m4a"];
AVAudioRecorder インスタンスは新しいパスで初期化されますが、呼び出す[myAudioRecorer prepareToRecord]
と[myAudioRecorder record]
失敗し、サウンドが録音されます。
ディレクトリを正しく変更するにはどうすればよいですか?
PS: 私も NSFileManager で新しいディレクトリを作成しようとしましたが、うまくいきませんでした。私はこのようにしていた:
[[NSFileManager defaultManager] createDirectoryAtPath:pathAsString withIntermediateDirectories:YES attributes:nil error:&error]
編集:
オーディオを録音するコードは次のとおりです。
//here is the method that returns the path i want to save the files
- (NSString *) audioRecordingPath{
NSString *result = nil;
NSArray *folders = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsFolder = [folders objectAtIndex:0];
result = [documentsFolder stringByAppendingPathComponent:@"Sounds/Recording.m4a"];
return result;
}
//just the record settings
- (NSDictionary *) audioRecordingSettings{
NSDictionary *result = nil;
NSMutableDictionary *settings = [[NSMutableDictionary alloc] init];
[settings setValue:[NSNumber numberWithInteger:kAudioFormatAppleLossless] forKey:AVFormatIDKey];
[settings setValue:[NSNumber numberWithFloat:44100.0f] forKey:AVSampleRateKey];
[settings setValue:[NSNumber numberWithInteger:1] forKey:AVNumberOfChannelsKey];
[settings setValue:[NSNumber numberWithInteger:AVAudioQualityLow] forKey:AVEncoderAudioQualityKey];
result = [NSDictionary dictionaryWithDictionary:settings];
return result;
}
//here is where i record the audio
- (IBAction)recordAudio{
NSError *error = nil;
NSString *pathAsString = [self audioRecordingPath];
NSURL *audioRecordingURL = [NSURL fileURLWithPath:pathAsString];
self.audioRecorder = [[AVAudioRecorder alloc] initWithURL:audioRecordingURL settings:[self audioRecordingSettings] error:&error];
if (self.audioRecorder != nil){
self.audioRecorder.delegate = self;
if ([self.audioRecorder prepareToRecord] && [self.audioRecorder record]){
NSLog(@"Successfully started to record.");
} else {
NSLog(@"Failed to record.");// the error returned.
self.audioRecorder = nil;
}
} else {
NSLog(@"Failed to create an instance of the audio recorder.");
}
}