如何在NSData中存储.flac文件内容?

时间:2015-08-04 12:19:36

标签: ios nsurlconnection speech-recognition nsdata nsurlrequest

在我的应用中,我在资源文件夹中添加了一个.flac文件。我想将此.flac文件发送给Google的语音识别服务......以下是我的代码:

NSURL* urlGoogle = [NSURL URLWithString:@"https://www.google.com/speech-api/v1/recognize"];

NSMutableURLRequest *urlGoogleRequest = [[NSMutableURLRequest  alloc]initWithURL:urlGoogle];

[urlGoogleRequest setHTTPMethod:@"POST"];

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

NSURLResponse* response = nil;

NSError* error = nil;

    NSArray *docDirs = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docDir = [docDirs objectAtIndex:0];
    NSString *path = [[docDir stringByAppendingPathComponent:@"surround88"]
                         stringByAppendingPathExtension:@"flac" ];

    NSURL* url = [NSURL fileURLWithPath:path];

//Here I'm getting flacData value is nil

NSData *flacData = [NSData dataWithContentsOfURL:url]; //flacData = nil

    [urlGoogleRequest setHTTPBody:flacData];
    NSData* googleResponse = [NSURLConnection sendSynchronousRequest:urlGoogleRequest
                                                   returningResponse:&response
                                                               error:&error];
    id jsonObject=[NSJSONSerialization JSONObjectWithData:googleResponse options:kNilOptions error:nil];
    NSLog(@"Googles response is: %@",jsonObject);

由于我没有向服务器发送任何数据,因此我的回复为空。

我测试了其他第三方apis,如openears,dragon,ispeech等,并且不满意。

有人能帮助我如何进一步发展。这是实现谷歌语音识别功能的正确方法吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

由于您将文件放在资源文件夹中,因此您无法使用NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);找到该文件。这就是[NSData dataWithContentsOfURL:url]返回nil的原因。

您的文件现已放入Bundle中,因此请尝试使用以下文件加载文件内容:

NSURL *url = [[NSBundle mainBundle] URLForResource:@"surround88" withExtension:@"flac"];
NSData *flacData = [NSData dataWithContentsOfURL:url];

编辑:根据以下评论

确保该文件是您正在构建的目标的成员。换句话说:

Managing resources and targets in Xcode

  1. 选择.flac文件
  2. 请务必使用
  3. 选中您正在测试的目标框

    使用上面的测试项目,我能够从.flac文件成功创建一个NSData对象。