xcode:如何使用AVFoundation录制audio后保存audio文件
我浏览了与这个主题相关的各种post,但答案并没有真正的帮助。 我使用本教程来实现录制audio文件和播放。 似乎缺less的是如何永久保存logging。 当我退出我的应用程序的声音文件是在那里,但没有任何内容。 我甚至不知道它是保存rocerd还是只创build文件。 这是一个代码示例:
NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docsDir = [dirPaths objectAtIndex:0]; NSString *soundFilePath = [docsDir stringByAppendingPathComponent:@"tmpSound.caf"]; tempRecFile = [NSURL fileURLWithPath:soundFilePath]; NSDictionary *recSettings = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:AVAudioQualityMin], AVEncoderAudioQualityKey, [NSNumber numberWithInt:16], AVEncoderBitRateKey, [NSNumber numberWithInt: 2], AVNumberOfChannelsKey, [NSNumber numberWithFloat:44100.0], AVSampleRateKey, nil]; recorder = [[AVAudioRecorder alloc] initWithURL:tempRecFile settings:recSettings error:nil]; [recorder setDelegate:self]; [recorder prepareToRecord]; [recorder record];
我在这里看到了这个问题的一个可能的解决scheme,但是因为我是iOS新手,所以我没有真正理解它,或者只是不适合我。
请帮助并提供一个代码示例。 我读了关于AVFoundation和其他类的文档,但没有任何积极的结果。
SOS 🙂
更新这是我的录音方法:
-(IBAction)recording{ //***** METHOD for recording if(isNotRecording){ isNotRecording = NO; [recButton setTitle:@"Stop" forState:UIControlStateNormal]; recStateLabel.text = @"Recording"; [recorder setDelegate:self]; [recorder prepareToRecord]; [recorder record]; } else{ isNotRecording = YES; [recButton setTitle:@"Rec Begin" forState:UIControlStateNormal]; playButton.hidden = NO; recStateLabel.text = @"Not recording"; [recorder stop]; } }
这是我的viewDidLoad:
- (void)viewDidLoad { //record sound test code - start isNotRecording = YES; //playButton.hidden = YES; recStateLabel.text = @"Not recording"; AVAudioSession *audioSession = [AVAudioSession sharedInstance]; [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; [audioSession setActive:YES error:nil]; //record sound test code - END [super viewDidLoad]; // Do any additional setup after loading the view from its nib. // code for generating the sound file that is to be saved NSArray *dirPaths; NSString *docsDir; dirPaths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES); docsDir = [dirPaths objectAtIndex:0]; NSString *soundFilePath = [docsDir stringByAppendingPathComponent:@"sound.caf"]; NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath]; NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:AVAudioQualityMin], AVEncoderAudioQualityKey, [NSNumber numberWithInt:16], AVEncoderBitRateKey, [NSNumber numberWithInt: 2], AVNumberOfChannelsKey, [NSNumber numberWithFloat:44100.0], AVSampleRateKey, nil]; NSError *error = nil; recorder = [[AVAudioRecorder alloc] initWithURL:soundFileURL settings:recordSettings error:&error]; if (error) { NSLog(@"error: %@", [error localizedDescription]); } else { [recorder prepareToRecord]; } }
这是我的playBack方法:
-(IBAction)playback{ //AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:temporaryRecFile error:nil]; NSError *error; // setting the uri of the formed created file NSArray *dirPaths; NSString *docsDir; dirPaths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES); docsDir = [dirPaths objectAtIndex:0]; NSString *soundFilePath = [docsDir stringByAppendingPathComponent:@"sound.caf"]; NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath]; AVAudioPlayer *player = [[AVAudioPlayer alloc]initWithContentsOfURL:soundFileURL error:&error]; [player setNumberOfLoops:0]; [player prepareToPlay]; [player setVolume:1]; [player play]; NSLog(@"URL je: %@", soundFileURL); //method 2 if (error) NSLog(@"Error: %@", [error localizedDescription]); else { [player play]; if(player.isPlaying==YES) { NSLog(@"It's playing"); } }
}
我跳了一遍,这说明了我的工作。 任何build议,我可能是错的?
您需要停止录制才能将数据永久保存到文件中:
[recorder stop];
问题是,当你告诉XCode(在viewDidLoad方法)到[recorder prepareToRecord]; 它摆脱了以前录制的audio文件。 消除“if”语句中的那段代码,当您退出并回到应用程序时,您的audio文件将被保存。
仅供参考 – “[logging器prepareToRecord]”方法创build一个新的audio文件,覆盖任何以前logging的文件。
- 核心图像 – 在CMSampleBufferRef上渲染一个透明的图像会导致它周围的黑框
- AVSpeechSynthesizer在后台模式下
- 初始化The Amazing Audio Engine后,没有录像中的audio(使用GPUImage)
- 我可以在AppDelegate上使用AVAudioPlayer吗?
- 在iOS中裁剪和修复video方向
- AVPlayerLayeranimation帧更改
- 录制video时更换相机捕捉设备
- iOS检测系统音量水平变化。 私人API或不? AVSystemController_SystemVolumeDidChangeNotification
- 使用AVCaptureSession录制video时,音乐应用程序(在后台播放)会中断