录音,播放音频

邵阳辉
2023-12-01

#pragma mark - 取得录音文件保存路径

/**

 *  取得录音文件保存路径

 *

 *  @return 录音文件路径

 */

-(NSURL *)getSavePath{

    NSString *urlStr=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

    urlStr=[urlStr stringByAppendingPathComponent:@"audio"];

    YJLog(@"录音文件路径:%@",urlStr);

    NSURL *url=[NSURL fileURLWithPath:urlStr];

    return url;

}


#warning 录音大小需要看一下,如果太大可以下调相关设置

#pragma mark - 取得录音文件设置

/**

 *  取得录音文件设置

 *

 *  @return 录音设置

 */

-(NSDictionary *)getAudioSetting{

    NSMutableDictionary *dicM=[NSMutableDictionary dictionary];

    //设置录音格式

    [dicM setObject:@(kAudioFormatMPEG4AAC) forKey:AVFormatIDKey];

    //设置录音采样率,8000是电话采样率,对于一般录音已经够了

    [dicM setObject:@(22050.0) forKey:AVSampleRateKey];

    //设置通道,这里采用单声道

    [dicM setObject:@(2) forKey:AVNumberOfChannelsKey];

    //每个采样点位数,分为8162432

    [dicM setObject:@(16) forKey:AVLinearPCMBitDepthKey];

    //是否使用浮点数采样

    [dicM setObject:@(YES) forKey:AVLinearPCMIsFloatKey];

    //音频编码质量

    [dicM setObject:@(AVAudioQualityMin) forKey:AVEncoderAudioQualityKey];

    //....其他设置等

    return dicM;

}


#pragma mark - 删除音频文件

/**

 *  删除音频

 */

- (void)deleteAudioResource

{

    //删除语音资源

    NSString * filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

    filePath = [filePath stringByAppendingPathComponent:@"audio"];

    if([[NSFileManager defaultManager] fileExistsAtPath:filePath])

    {

        NSError * error;

        [[NSFileManager defaultManager] removeItemAtPath:filePath error:&error];

        if (error) {

            YJLog(@"删除音频资源失败");

        }else

        {

            YJLog(@"删除音频资源成功");

        }

    }

}


#pragma mark -  懒加载
- ( AVAudioRecorder  *)audioRecorder{
   
  if  ( _audioRecorder  ==  nil ) {
       
  // 录音相关
       
  AVAudioSession  *audioSession=[ AVAudioSession  sharedInstance ];
       
  // 设置为播放和录音状态,以便可以在录制完之后播放录音
        [audioSession
  setCategory : AVAudioSessionCategoryPlayAndRecord  error : nil ];
        [audioSession
  setActive : YES  error : nil ];
       
       
  // 创建录音文件保存路径
       
  NSURL  * url = [ self  getSavePath ];
       
  // 创建录音格式设置
       
  NSDictionary  * setting = [ self  getAudioSetting ];
       
  // 创建录音机
       
  NSError  * error =  nil ;
       
  _audioRecorder  = [[ AVAudioRecorder  alloc ]  initWithURL :url  settings :setting  error :&error];
       
       
  _audioRecorder . delegate  =  self ;
       
  if  (error) {
           
  YJLog ( @" 创建录音机对象时发生错误,错误信息: %@" , error. localizedDescription );
           
  return  nil ;
        }
    }
   
  return  _audioRecorder ;
}

/**
 * 
  创建播放器
 *
 * 
  @return  播放器
 */

- (
AVAudioPlayer  *)audioPlayer{
   
  if  ( _audioPlayer  ==  nil ) {
       
  // 录音相关
       
  AVAudioSession  *audioSession=[ AVAudioSession  sharedInstance ];
        // 设置为外放模式
        [audioSession  setCategory : AVAudioSessionCategoryPlayback  error : nil ];
        [audioSession
  setActive : YES  error : nil ];
       
  NSURL  * url = [ self  getSavePath ];
       
  NSError  * error =  nil ;
       
  _audioPlayer  = [[ AVAudioPlayer  alloc ]  initWithContentsOfURL :url  error :&error];
       
  _audioPlayer . volume  =  1.0 ;
       
  _audioPlayer . numberOfLoops  =  0 ;
       
  _audioPlayer . delegate  =  self ;
        [
_audioPlayer  prepareToPlay ];
       
  if  (error) {
           
  YJLog ( @" 创建播放器过程中发生错误,错误信息: %@" , error. localizedDescription );
           
  return  nil ;
        }
    }
   
  return  _audioPlayer ;
}
 类似资料: