2014-01-11 5 views
0

Я вызываю функцию ниже, чтобы преобразовать речь в текст с помощью google api. Я делаю это в последней версии xcode и Im, делающей это приложение для mac. Проблема заключается в том, что функция ниже, по-видимому, разбивается на NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:nil];, поэтому я не могу проверить речевую речь. Я пробовал асинхронную отправку, но, похоже, это не помогло. Я также попробовал @autoreleasepool {}, но он также не помог. Любая помощь приветствуется!NSURLConnection не вызвано должным образом в объективе c для Mac-приложения

-(void)processSpeech { 
    NSURL *url = [NSURL fileURLWithPath:@"/Users/marcus/Documents/testvoices/okSpeak.query.flac"]; 

    NSData *flacFile = [NSData dataWithContentsOfURL:url]; 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://www.google.com/speech-api/v1/recognize?lang=en-US"]]; 
    [request setHTTPMethod:@"POST"]; 
    [request addValue:@"Content-Type" forHTTPHeaderField:@"audio/x-flac; rate=16000"]; 
    [request addValue:@"audio/x-flac; rate=16000" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPBody:flacFile]; 
    [request setValue:[NSString stringWithFormat:@"%ld",[flacFile length]] forHTTPHeaderField:@"Content-length"]; 
    NSHTTPURLResponse *urlResponse = nil; 
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:nil]; 
    NSString *rawData = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
    NSLog(@"Raw: %@",rawData); 

    return rawData; 
} 
+0

Вы получаете сообщение об ошибке? Нет данных? Что-то другое? – Zarathuztra

ответ

2

Если вы подозреваете, что проблема в вашем sendSynchronousRequest, вы должны рассмотреть по крайней мере три вещи:

  • Посмотрите на NSHTTPURLResponse объекта. Что он сообщил? Примечательно, что для HTTP-запросов вы увидите statusCode, который может быть информативным.

  • Вы должны передать его указатель NSError адрес, тоже, и убедитесь, что ошибка была nil тоже:

    NSError *error = nil; 
    NSHTTPURLResponse *urlResponse = nil; 
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error]; 
    
    if (!responseData) 
        NSLog(@"sendSynchronousRequest error: %@", error); 
    else { 
        NSLog(@"sendSynchronousRequest response = %@", urlResponse); 
        NSString *rawData = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
        NSLog(@"responseData = %@", rawData); 
    } 
    
  • Что вы получите в качестве rawData строки?

Кстати, если вам интересно, вы хотите Content-Type как поле заголовка, а не в качестве значения.

// [request addValue:@"Content-Type" forHTTPHeaderField:@"audio/x-flac; rate=16000"]; 
[request addValue:@"audio/x-flac; rate=16000" forHTTPHeaderField:@"Content-Type"]; 

 Смежные вопросы

  • Нет связанных вопросов^_^