如何在iphone中使用AVAudioRecorder识别语音

时间:2012-08-07 07:18:27

标签: iphone avaudiorecorder voice-recognition

我正在使用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]);
}

请帮帮我。

2 个答案:

答案 0 :(得分:1)

这是一个具有挑战性的目标。 iOS不包括专门识别语音的智能,您必须提供过滤器或您自己的功能。如果您只想要VOX类型支持(即在检测到给定级别的音频时开始录制),可以通过使用音频工具箱框架监视音频级别来轻松完成。

如果您需要专门识别语音,则需要使用专门的识别过滤器来运行音频数据。

如果您有这样的过滤器,您可以选择以下两种方法之一:a)只记录所有内容,然后对生成的音频数据进行后期处理,以找到识别语音的时间索引,并忽略直至该点的数据(或许将剩余数据复制到另一个缓冲区)或b)使用Audio Toolbox Framework实时监控记录的数据。通过语音查找过滤器传递数据,并仅在过滤器触发时开始缓冲数据。

实际实施非常复杂,而且在这里解决的时间太长了,但我已经看到了可以从书本和在线开始的示例代码。对不起,我此时没有任何链接可以分享,但会发布我在不久的将来遇到的任何内容。

答案 1 :(得分:1)

我认为这可能会对此有所帮助。我认为检测音量峰值就是你所需要的,对吧?

http://mobileorchard.com/tutorial-detecting-when-a-user-blows-into-the-mic/

码头。