这里ios的录音功能主要依靠AVFoundation.framework与CoreAudio.framework来实现
在工程内添加这两个framework
我这里给工程命名audio_text
在生成的audio_textViewController.h里的代码如下
- #import <UIKit/UIKit.h>
- #import <AVFoundation/AVFoundation.h>
- #import <CoreAudio/CoreAudioTypes.h>
-
- @interface audio_textViewController : UIViewController {
-
- IBOutlet UIButton *bthStart;
- IBOutlet UIButton *bthPlay;
- IBOutlet UITextField *freq;
- IBOutlet UITextField *value;
- IBOutlet UIActivityIndicatorView *actSpinner;
- BOOL toggle;
-
-
- NSURL *recordedTmpFile;
- AVAudioRecorder *recorder;
- NSError *error;
- }
-
- @property (nonatomic,retain)IBOutlet UIActivityIndicatorView *actSpinner;
- @property (nonatomic,retain)IBOutlet UIButton *bthStart;
- @property (nonatomic,retain)IBOutlet UIButton *bthPlay;
-
- -(IBAction)start_button_pressed;
- -(IBAction)play_button_pressed;
- @end
audio_textViewController.m
最后在interface builder里面绘制好界面,如
设置下按键的属性
基本就ok了,可以开始录音了。
BUG解决
但是大家要注意一个貌似是ios5.0之后引入的bug,就是当你录制音频的时候启动时间往往会比较慢,大概需要3--5秒的时间吧,这种现象尤其在播放的时候立刻切换到录制的时候非常明显。
具体的原因我也不是很清楚,感觉应该是更底层的一些bug。目前我的解决方案是这样的。
1.在音频队列的初始化方法中加入代码
OSStatus error = AudioSessionInitialize(NULL, NULL, NULL, NULL);
UInt32 category = kAudioSessionCategory_PlayAndRecord;
error = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(category), &category);
AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, NULL, self);
UInt32 inputAvailable = 0;
UInt32 size = sizeof(inputAvailable);
AudioSessionGetProperty(kAudioSessionProperty_AudioInputAvailable, &size, &inputAvailable);
AudioSessionAddPropertyListener(kAudioSessionProperty_AudioInputAvailable, NULL, self);
AudioSessionSetActive(true);
2.在录制声音开始的时候先把播放声音stop,加入
UInt32 category = kAudioSessionCategory_PlayAndRecord;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(category), &category);
这样做应该会让你的录制启动速度显著加快的。