我正在使用AVAudioRecorder
。如果我点按了录制按钮,只有在识别出声音后录音才能start/save
。
- (void)viewDidLoad
{
recording = NO;
NSString * filePath = [NSHomeDirectory()
stringByAppendingPathComponent:@"Documents/recording.caf"];
NSDictionary *recordSettings =
[[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithFloat: 44100.0],AVSampleRateKey,
[NSNumber numberWithInt: kAudioFormatAppleLossless],
AVFormatIDKey,
[NSNumber numberWithInt: 1],
AVNumberOfChannelsKey,
[NSNumber numberWithInt: AVAudioQualityMax],
AVEncoderAudioQualityKey,nil];
AVAudioRecorder *newRecorder = [[AVAudioRecorder alloc]
initWithURL: [NSURL fileURLWithPath:filePath]
settings: recordSettings
error: nil];
[recordSettings release];
self.soundRecorder = newRecorder;
[newRecorder release];
self.soundRecorder.delegate = self;
NSLog(@"path is %@",filePath);
[super viewDidLoad];
}
- (IBAction) record:(id) sender {
if (recording) {
[self.soundRecorder stop];
[recordBtn setTitle:@"Record" forState:UIControlStateNormal];
recording = NO;
} else {
[self.soundRecorder record];
[recordBtn setTitle:@"Stop" forState:UIControlStateNormal];
recording = YES;
}
}
- (IBAction) play {
NSString * filePath = [NSHomeDirectory()
stringByAppendingPathComponent:@"Documents/recording.caf"];
AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: [NSURL fileURLWithPath:filePath] error: nil];
newPlayer.delegate = self;
NSLog(@"playing file at url %@ %d",[[newPlayer url] description],[newPlayer play]);
}
请帮帮我。
答案 0 :(得分:1)
这是一个具有挑战性的目标。 iOS不包括专门识别语音的智能,您必须提供过滤器或您自己的功能。如果您只想要VOX类型支持(即在检测到给定级别的音频时开始录制),可以通过使用音频工具箱框架监视音频级别来轻松完成。
如果您需要专门识别语音,则需要使用专门的识别过滤器来运行音频数据。
如果您有这样的过滤器,您可以选择以下两种方法之一:a)只记录所有内容,然后对生成的音频数据进行后期处理,以找到识别语音的时间索引,并忽略直至该点的数据(或许将剩余数据复制到另一个缓冲区)或b)使用Audio Toolbox Framework实时监控记录的数据。通过语音查找过滤器传递数据,并仅在过滤器触发时开始缓冲数据。
实际实施非常复杂,而且在这里解决的时间太长了,但我已经看到了可以从书本和在线开始的示例代码。对不起,我此时没有任何链接可以分享,但会发布我在不久的将来遇到的任何内容。
答案 1 :(得分:1)
我认为这可能会对此有所帮助。我认为检测音量峰值就是你所需要的,对吧?
http://mobileorchard.com/tutorial-detecting-when-a-user-blows-into-the-mic/
码头。