3

我想保存 TTS SDK 生成的音频文件。我不确定使用 NSURL 路径的正确方法是什么。

这是代码,但结果说不。如果我不尝试保存音频文件,MyAcaTTS 可以正常工作。

NSString *FileNamePath = [[NSBundle mainBundle] pathForResource:@"testAudio" ofType:@"aiff"];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appSettingsPath = [documentsDirectory stringByAppendingPathComponent:FileNamePath];
NSURL *url=[[NSURL alloc]initWithString:appSettingsPath];

BOOL result =  [MyAcaTTS_ startSpeakingString:@"testing" toURL:url];

Acapela iPhone SDK 文档。

6.2.3.startSpeakingString:toURL: 概要

  • (BOOL)startSpeakingString:(NSString *)string toURL:url;

描述

开始将字符串合成为声音 (AIFF) 文件。当字符串合成正常完成或停止时,speechSynthesizer:didFinishSpeaking: 消息将发送给委托人。参数 string 要合成的文本。当 nil 或空时,不会发生合成。url 输出声音文件的文件系统位置。合成成功时返回值为YES,否则返回NO。

http://www.ecometrixem.com/cms-assets/documents/44729-919017.acapela-for-iphone.pdf

4

1 回答 1

2

您在代码中需要考虑两件事:

  1. 该行 NSString *FileNamePath = [[NSBundle mainBundle] pathForResource:@"testAudio" ofType:@"aiff"]; 不是必需的,因为它返回文件的完整路径,而您只需要它的最后一部分:“testAudio.aiff”

  2. 您使用构造函数构造 URL 对象,该构造函数接受具有有效协议前缀的字符串,例如“http://”或“ftp://”,而您需要另一个命名的构造函数initFileURLWithPath:

因此,通过以上所有内容,您的代码可能如下所示:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appSettingsPath = [documentsDirectory stringByAppendingPathComponent:@"testAudio.aiff"];
NSURL *url=[[NSURL alloc]initFileURLWithPath:appSettingsPath];

BOOL result =  [MyAcaTTS_ startSpeakingString:@"testing" toURL:url];
于 2012-11-11T21:00:35.187 回答