2012-11-11 69 views
3

我要救通過TTS SDK生成的音頻文件。 我不知道用NSURL路徑做什麼是正確的方法。音頻文件保存到NSURL

這是代碼,但結果說NO。 如果我不嘗試保存音頻文件,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 *)字符串的toURL:URL;

說明

起始合成的字符串轉換成聲音(AIFF)文件。 當串的合成正常完成或停止時,該消息 speechSynthesizer:didFinishSpeaking:被髮送到委託。參數 字符串 要合成的文本。當零或空時,不發生合成。 url 輸出聲音文件的Filesystem位置。返回值 合成開始成功時爲YES,否則爲否。

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

回答

2

有兩件事情對你在你的代碼需要考慮:

  1. NSString *FileNamePath = [[NSBundle mainBundle] pathForResource:@"testAudio" ofType:@"aiff"]; 不是必需的,因爲它,而你只需要最後返回文件的完整路徑

  2. 您構建與有效協議前綴的構造函數接受字符串URL對象,如「testAudio.aiff」:它的一部分的「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]; 
+0

謝謝!它最終創建了一個文件,但它仍然沒有發出任何聲音,它只是一個空的aiff文件。 BOOL結果給出錯誤。也許我需要使用其他文件類型...... –

+1

其實,這是因爲MyAcaTTS只是代碼之前講另一種文字,現在工作得很好,非常感謝你! –

+0

如果我們有2個語句調用[self.MyAcaTTS startSpeakingString:text];第二條語句寫入一個文件時,它不起作用,否則,該文件將被創建爲音頻內容。 NSURL的構建在這裏看起來不是問題。 [self.MyAcaTTS startSpeakingString:短語的toURL:[NSURL fileURLWithPath:文件路徑]]; – Thiru

相關問題