iOS   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了objective-c – 播放暂停的AVAudioRecorder文件大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

在我的程序中,我希望用户能够: >记录他的声音, >暂停录音过程, >听听他录制的内容 >然后继续录制. 我已经设法达到了可以用AVAudioRecorder和AVAudioPlayer录制和播放录音的程度.但每当我尝试录制,暂停录制然后播放时,播放部分都会失败并且没有错误. 我可以猜测它没有播放的原因是因为音频文件尚未保存并仍在内存中. 有没有办法播放暂停的录音? 如果有请告诉我如何 我正在使用
在我的程序中,我希望用户能够:

>记录他的声音,
>暂停录音过程,
>听听他录制的内容
>然后继续录制.

我已经设法达到了可以用AVAudioRecorder和AVAudioPlayer录制和播放录音的程度.但每当我尝试录制,暂停录制然后播放时,播放部分都会失败并且没有错误.

我可以猜测它没有播放的原因是因为音频文件尚未保存并仍在内存中.

有没有办法播放暂停的录音?
如果有请告诉我如何

我正在使用Xcode 4.3.2

解决方法

RecordAudioViewController.h

#import <UIKit/UIKit.h>
 #import <AVFoundation/AVFoundation.h>
 #import <CoreAudio/CoreAudioTypes.h>

   @interface record_audio_testViewController : UIViewController <AVAudioRecorderDelegate> {

IBOutlet UIButton * btnStart;
IBOutlet UIButton * btnPlay;
IBOutlet UIActivityInDicatorView * actSpinner;
BOOL toggle;

//Variables setup for access in the class:
NSURL * recordedTmpFile;
AVAudioRecorder * recorder;
NSError * error;

 }

 @property (nonatomic,retain)IBOutlet UIActivityInDicatorView * actSpinner;
 @property (nonatomic,retain)IBOutlet UIButton * btnStart;
 @property (nonatomic,retain)IBOutlet UIButton * btnPlay;

 - (IBACtion) starT_Button_pressed;
 - (IBACtion) play_button_pressed;
 @end

RecordAudioViewController.m

@synthesize actSpinner,btnStart,btnPlay;
   - (void)viewDidLoad {
    [super viewDidLoad];

//Start the toggle in true mode.
toggle = YES;
btnPlay.hidden = YES;

//Instanciate an instance of the AVAudioSession object.
AVAudioSession * audioSession = [AVAudioSession sharedInstance];
//Setup the audioSession for playBACk and record. 
//We Could just use record and then switch it to playBACk leter,but
//since we are going to do both lets set it up once.
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error: &error];
//Activate the session
[audioSession setActive:YES error: &error];

  }


 - (IBACtion)  starT_Button_pressed{

if(togglE)
{
    toggle = NO;
    [actSpinner startAnimaTing];
    [btnStart settitle:@"Stop Recording" forState: UIControlStateNormal ];  
    btnPlay.enabled = toggle;
    btnPlay.hidden = !toggle;

    //Begin the recording session.
    //Error handling removed.  Please add to your own code.

    //Setup the Dictionary object with all the recording setTings that this 
    //Recording sessoin will use
    //Its not clear to me which of these are required and which are the bare minimum.
    //This is a good resource: http://www.totodotnet.net/tag/avaudiorecorder/
    NSMutableDictionary* recordSetTing = [[NSMutableDictionary alloc] init];
    [recordSetTing SETVALue :[NSnumber numberWithInt:kAudioFormatAppleIMA4] forKey:AVFormatIDKey];
    [recordSetTing SETVALue:[NSnumber numberWithFloat:44100.0] forKey:AVSampleRateKey]; 
    [recordSetTing SETVALue:[NSnumber numberWithInt: 2] forKey:AVnumberOfChAnnelsKey];

    //Now that we have our setTings we are going to instanciate an instance of our recorder instance.
    //Generate a temp file for use by the recording.
    //This sample was one I found online and seems to be a good choice for making a tmp file that
    //will not overwrite an exisTing one.
    //I kNow this is a mess of collapsed things into 1 call.  I can break it out if need be.
    recordedTmpFile = [NSURL fileURLWithPath:[NstemporaryDirectory() StringByAppendingPathComponent: [NSString StringWithFormat: @"%.0f.%@",[NSDate timeIntervalSinceReferenceDate] * 1000.0,@"caf"]]];
    NSLog(@"Using File called: %@",recordedTmpFilE);
    //Setup the recorder to use this file and record to it.
    recorder = [[ AVAudioRecorder alloc] initWithURL:recordedTmpFile setTings:recordSetTing error:&error];
    //Use the recorder to start the recording.
    //Im not sure why we set the delegate to self yet.  
    //Found this in antother example,but Im fuzzy on this still.
    [recorder setDelegate:self];
    //We call this to start the recording process and initialize 
    //the subsstems so that when we actually say "record" it starts right away.
    [recorder prepareToRecord];
    //Start the actual Recording
    [recorder record];
    //There is an optional method for doing the recording for a limited time see 
    //[recorder recordForDuration:(NSTimeInterval) 10]

}
else
{
    toggle = YES;
    [actSpinner stopAnimaTing];
    [btnStart settitle:@"Start Recording" forState:UIControlStateNormal ];
    btnPlay.enabled = toggle;
    btnPlay.hidden = !toggle;

    NSLog(@"Using File called: %@",recordedTmpFilE);
    //Stop the recorder.
    [recorder stop];
}
  }

  - (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data,images,etc that aren't in use.
  }

  -(IBACtion) play_button_pressed{

//The play button was pressed... 
//Setup the AVAudioPlayer to play the file that we just recorded.
AVAudioPlayer * avPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:recordedTmpFile error:&error];
[avPlayer prepareToPlay];
[avPlayer play];

  }

   - (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
//Clean up the temp file.
NSFileManager * fm = [NSFileManager defaultManager];
[fm removeItemAtPath:[recordedTmpFile path] error:&error];
//Call the dealloc on the remaining objects.
[recorder dealloc];
recorder = nil;
recordedTmpFile = nil;
  }


  - (void)dealloc {
[super dealloc];
  }

 @end

RecordAudioViewController.xib

拿2个按钮. 1用于开始录制,另一个用于播放录制

@H_673_59@

大佬总结

以上是大佬教程为你收集整理的objective-c – 播放暂停的AVAudioRecorder文件全部内容,希望文章能够帮你解决objective-c – 播放暂停的AVAudioRecorder文件所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。