实例编程iPhone 录音和播放是本文要介绍的内容,最近准备做一个关于录音和播放的项目!查了一些资料,很简单的做了一个,下面我就分享一下iPhone的录音和播放的使用心得。iPhone的录音和播放使用到了media层的内容,media层处于cocoa层之下,用到的很大一部分都是c语言的结构。1、引入框架。#import <AVFoundation/AVFoundation.h>2、创建录音项。- (void) prepareToRecord  {  AVAudioSession *audioSession = [AVAudioSession sharedInstance];  NSError *err = nil;  [audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err];  if(err){  NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);  return;  }  [audioSession setActive:YES error:&err];  err = nil;  if(err){  NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);  return;  }  recordSetting = [[NSMutableDictionary alloc] init];  [recordSetting setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];  [recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];   [recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey];  [recordSetting setValue :[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];  [recordSetting setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey];  [recordSetting setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey];  // Create a new dated file  NSDate *now = [NSDate dateWithTimeIntervalSinceNow:0];  NSString *caldate = [now description];  recorderFilePath = [[NSString stringWithFormat:@"%@/%@.caf", DOCUMENTS_FOLDER, caldate] retain];  NSURL *url = [NSURL fileURLWithPath:recorderFilePath];  err = nil;  recorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recordSetting error:&err];  if(!recorder){  NSLog(@"recorder: %@ %d %@", [err domain], [err code], [[err userInfo] description]);  UIAlertView *alert =  [[UIAlertView alloc] initWithTitle: @"Warning"  message: [err localizedDescription]  delegate: nil  cancelButtonTitle:@"OK"  otherButtonTitles:nil];  [alert show];  [alert release];  return;  }  //prepare to record  [recorder setDelegate:self];  [recorder prepareToRecord];  recorder.meteringEnabled = YES;  BOOL audioHWAvailable = audioSession.inputIsAvailable;  if (! audioHWAvailable) {  UIAlertView *cantRecordAlert =  [[UIAlertView alloc] initWithTitle: @"Warning"  message: @"Audio input hardware not available"  delegate: nil  cancelButtonTitle:@"OK"  otherButtonTitles:nil];  [cantRecordAlert show];  [cantRecordAlert release];   return;  }  } 以上这个方法就是创建了录音项,其中包括录音的路径和一些音频属性,但只是准备录音还没有录,如果要录的话还要加入以下的方法:(void)startrecorder  {  [recorder record];  } 这样就在我们创建的路径下开始了录音。完成录音很简单:(void) stopRecording{  [recorder stop];  } 这里顺便提一下录音的代理方法:- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *) aRecorder successfully:(BOOL)flag  {  NSLog(@"recorder successfully");  UIAlertView *recorderSuccessful = [[UIAlertView alloc] initWithTitle:@"" message:@"录音成功"delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];  [recorderSuccessful show];  [recorderSuccessful release];  }  - (void)audioRecorderEncodeErrorDidOccur:(AVAudioRecorder *)arecorder error:(NSError *)error  {  btnRecorder.enabled = NO;  UIAlertView *recorderFailed = [[UIAlertView alloc] initWithTitle:@"" message:@"发生错误"delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];  [recorderFailed show];  [recorderFailed release];  } 以上两个代理方法分别指定了录音的成功或失败。录音中有一个的录音对象有一个averagePowerForChannel和peakPowerForChannel的属性分别为声音的最高振幅和平均振幅,有了他们就可以做一个动态的振幅的录音效果。- (void) updateAudioDisplay {  if (isStart == NO) {  currentTimeLabel.text = @"--:--";  } else {  double currentTime = recorder.currentTime;  currentTimeLabel.text = [NSString stringWithFormat: @"d:d",  (int) currentTime/60,  (int) currentTime%60];  //START:code.RecordViewController.setlevelmeters  [recorder updateMeters];  [leftLevelMeter setPower: [recorder averagePowerForChannel:0]  peak: [recorder peakPowerForChannel: 0]];  if (! rightLevelMeter.hidden) {  [rightLevelMeter setPower: [recorder averagePowerForChannel:1]  peak: [recorder peakPowerForChannel: 1]];  }  //END:code.RecordViewController.setlevelmeters  }  }  以上就是录音相关的内容。  下面说一下播放的方法:  void SystemSoundsDemoCompletionProc (  SystemSoundID  soundID,  void           *clientData)  {  AudioServicesDisposeSystemSoundID (soundID);  ((AudioRecorderPlayerAppDelegate*)clientData).statusLabel.text = @"Stopped";  }  -(void)playAudio  {  //START:code.SystemSoundsDemo.SystemSoundsDemoViewController.createsystemsound  // create a system sound id for the selected row  SystemSoundID soundID;  OSStatus err = kAudioServicesNoError;  // special case: vibrate//震动  //soundID = kSystemSoundID_Vibrate; //<label id="code.SystemSoundsDemo.SystemSoundsDemoViewController.createsystemsound.vibratesystemsound"/> // find corresponding CAF file  //NSString *cafName = [NSString stringWithFormat: @"%@",recorderFilePath]; //<label id="code.SystemSoundsDemo.SystemSoundsDemoViewController.createsystemsound.rowtonumberstring"/> NSURL *url = [NSURL fileURLWithPath:recorderFilePath];  //NSString *cafPath =   //[[NSBundle mainBundle] pathForResource:cafName ofType:@"caf"]; //<label id="code.SystemSoundsDemo.SystemSoundsDemoViewController.createsystemsound.findcafinbundle"/> //NSURL *cafURL = [NSURL fileURLWithPath:url]; //<label id="code.SystemSoundsDemo.SystemSoundsDemoViewController.createsystemsound.fileurlwithpath"/> err = AudioServicesCreateSystemSoundID((CFURLRef) url, &soundID); //<label id="code.SystemSoundsDemo.SystemSoundsDemoViewController.createsystemsound.createsystemsound"/> //END:code.SystemSoundsDemo.SystemSoundsDemoViewController.createsystemsound  //START:code.SystemSoundsDemo.SystemSoundsDemoViewController.registercompletionprocandplaysound  if (err == kAudioServicesNoError) {  // set up callback for sound completion  err = AudioServicesAddSystemSoundCompletion //<label id="code.SystemSoundsDemo.SystemSoundsDemoViewController.createsystemsound.addcompletionproc"/> (soundID,// sound to monitor  NULL,// run loop (NULL==main)  NULL,// run loop mode (NULL==default)  SystemSoundsDemoCompletionProc, // callback function //<label id="code.SystemSoundsDemo.SystemSoundsDemoViewController.createsystemsound.completionprocroutine"/> self // data to provide on callback  ); //<label id="code.SystemSoundsDemo.SystemSoundsDemoViewController.createsystemsound.addcompletionprocend"/> statusLabel.text = @"Playing"; //<label id="code.SystemSoundsDemo.SystemSoundsDemoViewController.createsystemsound.setlabel"/> AudioServicesPlaySystemSound (soundID); //<label id="code.SystemSoundsDemo.SystemSoundsDemoViewController.createsystemsound.playsound"/> }  if (err != kAudioServicesNoError) { //<label id="code.SystemSoundsDemo.SystemSoundsDemoViewController.createsystemsound.errorblockstart"/> CFErrorRef error = CFErrorCreate(NULL, kCFErrorDomainOSStatus, err, NULL); //<label id="code.SystemSoundsDemo.SystemSoundsDemoViewController.createsystemsound.createcferror"/> NSString *errorDesc = (NSString*) CFErrorCopyDescription (error); //<label id="code.SystemSoundsDemo.SystemSoundsDemoViewController.createsystemsound.copycferrordescription"/> UIAlertView *cantPlayAlert =  [[UIAlertView alloc] initWithTitle:@"Cannot Play:"  message: errorDesc  delegate:nil  cancelButtonTitle:@"OK"  otherButtonTitles:nil];  [cantPlayAlert show];  [cantPlayAlert release];   [errorDesc release]; //<label id="code.SystemSoundsDemo.SystemSoundsDemoViewController.createsystemsound.releaseerrordescription"/> CFRelease (error); //<label id="code.SystemSoundsDemo.SystemSoundsDemoViewController.createsystemsound.releaseerror"/> } //<label id="code.SystemSoundsDemo.SystemSoundsDemoViewController.createsystemsound.errorblockend"/> //END:code.SystemSoundsDemo.SystemSoundsDemoViewController.registercompletionprocandplaysound  } 通过以上的方法就应该能够实现播放,播放的时候也是可以加入振幅过程的,大家可以试试!这样一个iPhone录音机就做好了!哈哈

实例编程iPhone 录音和播放相关推荐

  1. 实例编程iPhone 录音和播放(收藏)

    分享一下iPhone的录音和播放的使用心得.iPhone的录音和播放使用到了media层的内容,media层处于cocoa层之下,用到的很大一部分都是c语言的结构. 1.引入框架. #import & ...

  2. iphone 录音与播放同时 音量问题

    播放与录音同时开工: AVAudioSession *audioSession = [AVAudioSession sharedInstance]; NSError *err = nil; [audi ...

  3. iPhone的录音和播放

    最近准备做一个关于录音和播放的项目!查了一些资料,很简单的做了一个,下面我就分享一下iPhone的录音和播放的使用心得. iPhone的录音和播放使用到了media层的内容,media层处于cocoa ...

  4. Android 实时录音和回放,边录音边播放 (KTV回音效果)

    原文地址为: Android 实时录音和回放,边录音边播放 (KTV回音效果) 上一篇介绍了如何使用Mediarecorder来录音,以及播放录音.不过并没有达到我的目的,一边录音一边播放.今天就讲解 ...

  5. unity获取麦克风音量_Unity调取移动端的麦克风进行录音并播放

    本文实例为大家分享了Unity调取移动端的麦克风进行录音并播放的具体代码,供大家参考,具体内容如下 1.对MicroPhone类的理解 对麦克风的调用在Unity里主要是用到了MicroPhone这个 ...

  6. 微信小程序录音与播放录音功能实现

    微信小程序录音与播放录音功能实现,话不多说直接上代码实例: test.wxml <button bindtap='start'>开始录音</button> <button ...

  7. Android录音并播放(mp3或amr格式)

    Android项目中媒体是很多人头疼的一个问题,不仅仅因为处理起来很麻烦,而且不同的手机差别很大(和硬件,系统都有关系),今天就总结一下Android中的录音和播放,可保存成mp3或amr格式. 小米 ...

  8. Android JNI实现录音和播放

    1.jni 部分开发,实现录音和播放 2.实现so库有效时间限制 /*** 引用和声明JNI库和函数的类*/public class RecoderJni {static {System.loadLi ...

  9. AudioRecord 录音和播放的Demo

    #AudioRecord 录音和播放的Demo 本文介绍一个AudioRecord的简单录音和播放的示例程序. 录音是需要动态获取权限的! ##主要代码 ###1.AudioRecord录音代码 // ...

最新文章

  1. CvBlobTrackerCC 多目标跟踪算法简析
  2. Mysql压测工具mysqlslap 讲解
  3. # W3C 中文离线教程 2016 年版
  4. 二柱子2.0编程总结
  5. ios app上架被拒的问题
  6. 编译器构造概述(详细)
  7. 安全和连接是IoT联网设备2大挑战
  8. java多线程模拟实现12306售票
  9. Linux配置文件字体颜色
  10. 马斯克火箭 SpaceX-API、程序员优雅赚钱项目……GitHub 热点速览
  11. DevExpress v17.2新版亮点——XAF篇
  12. 兴业银行研发中心笔试题_2021国考笔试成绩即将发布,面试重点考什么?
  13. .NET伪静态使用以及和纯静态的区别
  14. LINUX下载编译FreeSwitch
  15. mysql 分区表 知乎_mysql 分区表
  16. matlab编程绘制直方图,matlab绘制直方图程序
  17. 【百度地图2.5D、3D在Vue项目中的使用】嵌入二维百度地图、三维百度地图、多种显示模式风格样式颜色的百度地图
  18. bittorrent+sync+java_使用BitTorrent-Sync实现双机文件双向同步
  19. Result的类型分析和总结
  20. dwcs6中php为什么浏览不了,dreamweaver CS6编辑浏览器列表无法添加浏览器的解决处理...

热门文章

  1. uber司机如何注册 uber司机详细注册流程
  2. python简单心形代码爱情闪字_爱情留言板主人寄语代码闪字:我只希望你幸福!...
  3. 暑假)伪QQ项目ing
  4. 闭包的概念、作用、问题及解决方式
  5. 为什么有的人讨人喜欢?本质上是亲和力吧,或者说不以自我为中心
  6. alooa是华为什么型号_jkm一alooa华为什么型号
  7. (PE修改)QQ华夏显示对方生命值与法术值
  8. 嵌入式开发板的五大接口
  9. [4827][Hnoi2017]礼物——FFT
  10. 双重所有格的语法结构和适用场景