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

How to store .flac file content in NSData?

在我的应用程序中,我在我的资源文件夹中添加了一个 .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);

由于我没有向服务器发送任何数据,所以得到的响应是空的。

我已经测试了其他 3rd 方 api,如 openears、dragon、ispeech 等,但并不满意。

有人可以帮助我如何进行下一步。这是实现 google 语音识别功能的正确方法吗?任何帮助将不胜感激。

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

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

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

编辑:基于下面的评论

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

  1. Select 你的 .flac 文件
  2. 确保选中您正在测试的目标的复选框

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