0

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

请帮帮我。

4

2 回答 2

1

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

如果您需要专门识别语音,您将需要一个专门的识别过滤器来运行您的音频数据。

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

实际的实现非常复杂且时间太长,无法在这里解决,但我在书籍和在线上看到了示例代码,您可以从这些示例代码开始。很抱歉,我目前没有任何链接可分享,但会在不久的将来发布我遇到的任何链接。

于 2012-09-11T01:16:16.357 回答
1

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

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

码头。

于 2013-01-01T03:43:31.497 回答