I'm programming an app that lets me record doorbell sounds and play them back on a doorbell that the user sees when they push the button. My app seems to record and save the file (the file is there (in Documents) according to the iPhone simulator as I've created the directory in the app delegate)). However playback isn't working. (By the way, the recording property returns TRUE.)
UPDATE: Here's the zip of the whole project.
Can someone help me see what's wrong?
- (void)viewDidLoad {
[super viewDidLoad];
self.view.layer.cornerRadius = 8;
[actionButton setBackgroundImage:[[UIImage imageNamed:@"biggreenbutton.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0] forState:UIControlStateNormal];
NSFileManager *nsf = [NSFileManager defaultManager];
NSArray *allDocs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [allDocs objectAtIndex:0];
NSString *savedDBells = [path stringByAppendingPathComponent:@"Custom Doorbells"];
NSString *nextFile;
for (NSInteger i = 1; i < 100; i++){
if (![nsf fileExistsAtPath:[savedDBells stringByAppendingPathComponent:[NSString stringWithFormat:@"d%i%@",i,@".caf"]]]){
nextFile = [savedDBells stringByAppendingPathComponent:[NSString stringWithFormat:@"d%i%@",i,@".caf"]];
break;
}
}
NSURL *url = [[NSURL alloc] initFileURLWithPath:nextFile];
NSDictionary *setup = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithInt:kAudioFormatMPEG4AAC],AVFormatIDKey,
[NSNumber numberWithInt:44100.0],AVSampleRateKey,
[NSNumber numberWithInt: 2],AVNumberOfChannelsKey,
[NSNumber numberWithInt:16],AVLinearPCMBitDepthKey,
[NSNumber numberWithBool:NO],AVLinearPCMIsBigEndianKey,
[NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey,
nil];
NSError *err;
NSLog(@"%@",url);
recorder = [[AVAudioRecorder alloc] initWithURL:url settings:setup error:&err];
[setup release];
[url release];
//Gradient code
/*
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = self.view.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor whiteColor] CGColor], (id)[[UIColor blackColor] CGColor], nil];
[self.view.layer insertSublayer:gradient atIndex:0];
*/
}
-(IBAction) actionButtonPressed: (id) sender{
NSLog(@"%@",actionButton.titleLabel.text);
if ([actionButton.titleLabel.text isEqual:@"Finish Recording"]){
BOOL test = recorder.recording;
NSLog(@"Recording property = %i",test);
[upCounter invalidate];
[recorder stop];
[self dismissModalViewControllerAnimated:YES];
}
if ([actionButton.titleLabel.text isEqual:@"Begin Recording"]){
upCounter = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:upCounter forMode:NSDefaultRunLoopMode];
[actionButton setTitle:@"Finish Recording" forState:UIControlStateNormal];
[actionButton setBackgroundImage:[[UIImage imageNamed:@"bigredbutton.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0] forState:UIControlStateNormal];
NSLog(@"Recorder record = %i",[recorder record]);
}
}
In another view controller:
-(IBAction) recordingButtonPressed:(id) sender{
AVAudioSession *avs = [AVAudioSession sharedInstance];
//Test for written folder
/*NSFileManager *fileMan = [NSFileManager defaultManager];
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
*/
if (avs.inputIsAvailable){
NSString *recordedFile;
RecordingViewController *recorderVC = [[RecordingViewController alloc] initWithNibName:@"RecordingViewController" bundle:nil];
recorderVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController:recorderVC animated:YES];
recordedFile = [recorderVC.recorder.url absoluteString];
[recorderVC release];
self.currentSoundPath = recordedFile;
NSLog(@"%@",currentSoundPath);
/*if ([fileMan fileExistsAtPath:recordedFile]){
UIActionSheet *overwrite = [[UIActionSheet alloc] initWithTitle:@"Overwrite the current doorbell recording?" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Overwrite" otherButtonTitles:nil];
overwrite.delegate = self;
[overwrite showInView:self.view];
[overwrite release];
}*/
/*NSDictionary *recorderSettingsDict=[[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithInt:kAudioFormatAppleIMA4],AVFormatIDKey,
[NSNumber numberWithInt:44100.0],AVSampleRateKey,
[NSNumber numberWithInt: 2],AVNumberOfChannelsKey,
[NSNumber numberWithInt:16],AVLinearPCMBitDepthKey,
[NSNumber numberWithBool:NO],AVLinearPCMIsBigEndianKey,
[NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey,
nil];
AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:recordedFile settings:<#(NSDictionary *)settings#> error:<#(NSError **)outError#>];*/
}
else{
UIAlertView *noAudio = [[UIAlertView alloc] initWithTitle:@"No microphone connected" message:@"Please connect a microphone to record a doorbell." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[noAudio show];
[noAudio release];
}
}