gpt4 book ai didi

iphone - 为什么我的录音无法播放? (iPhone SDK)

转载 作者:行者123 更新时间:2023-12-03 00:22:27 28 4
gpt4 key购买 nike

我正在编写一个应用程序,它可以让我记录门铃声音并在用户按下按钮时看到的门铃上播放它们。
我的应用程序似乎记录并保存了文件(根据 iPhone 模拟器,文件在那里(在文档中),因为我在应用程序委托(delegate)中创建了目录)。
但是播放不起作用。 (顺便说一下,recording 属性返回 TRUE。)

更新 : 这里是 the zip of the whole project .

有人可以帮我看看有什么问题吗?

- (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]);
}

}

在另一个 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];
}
}

最佳答案

唯一让我大吃一惊的是,您调用的是 [NSNumber numberWithInt:44100.0] 而不是 numberWithDouble。

关于iphone - 为什么我的录音无法播放? (iPhone SDK),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2292390/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com