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

私はこれがこれであなたを助けるかもしれないと思います。ボリュームスパイクを検出するだけで、目的に必要だと思いますよね?

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

橋脚。

于 2013-01-01T03:43:31.497 に答える
1

それはあなたが持っている挑戦的な目標です。iOSには、音声を具体的に認識するためのスマート機能は含まれていません。そのためには、フィルターまたは独自のフィルターを用意する必要があります。VOXタイプのサポートが必要な場合(つまり、特定のレベルのオーディオが検出されたときに録音を開始する場合)、AudioToolboxFrameworkを使用してオーディオレベルを監視することで簡単に実行できます。

音声を具体的に認識する必要がある場合は、オーディオデータを実行するための専用の認識フィルターが必要になります。

このようなフィルターがある場合は、次の2つの方法のいずれかを使用できます。a)すべてを録音し、結果のオーディオデータを後処理して、音声が認識されるタイムインデックスを特定し、その時点までのデータを無視します(残りをコピーします)。データを別のバッファに送信する可能性があります)またはb)Audio Toolbox Frameworkを使用して、記録されたデータをリアルタイムで監視します。データを音声検索フィルターに渡し、フィルターがトリガーされたときにのみデータのバッファリングを開始します。

実際の実装は非常に複雑で、ここで扱うには長すぎますが、本やオンラインでサンプルコードを見て、そこから始めることができます。申し訳ありませんが、現時点で共有できるリンクはありませんが、近いうちに投稿する予定です。

于 2012-09-11T01:16:16.357 に答える