2013-12-16 15 views
17

Tôi đang sử dụng AVSpeechSynthesizer trong ứng dụng của mình và tôi đang tìm cách lưu văn bản đã nói vào tệp âm thanh hoặc AVAsset. Tôi đã đi qua tài liệu của Apple và không thấy bất cứ điều gì nhưng figured tôi muốn gửi một câu hỏi để đảm bảo. Dưới đây là mã hiện tại của tôi.AVSpeechSyntizer bộ phát âm cho tệp âm thanh

AVSpeechUtterance * utterance = [AVSpeechUtterance speechUtteranceWithString:textView.text]; 
float rate = [speedSlider value]/1.5; 
utterance.rate = rate; 
[speechSynthesizer speakUtterance:utterance]; 
+0

API này là mới và do đó có thể thiếu một số tính năng nhất định có thể được thêm vào sau này. Có thể xem xét cách ghi âm bất kỳ âm thanh nào đang phát? – erdekhayser

+0

Vâng tôi đã thiết lập một bộ AVAudioRecoder nhưng chỉ muốn xem liệu có một giải pháp sạch hơn – Sean

+0

Bạn có tìm thấy giải pháp phù hợp cho vấn đề này không? Tôi đang tìm cách để xây dựng một cái gì đó tương tự. –

Trả lời

4

Có thể ghi lại âm thanh được tạo ra bởi ứng dụng của bạn (không phải từ các ứng dụng khác). Mặc dù AVSpeech không cung cấp API để lưu âm thanh được tạo, Apple có các API khác có thể thực hiện công việc. Giải pháp có lẽ không sạch như bạn muốn, nhưng nó sẽ hoạt động.

Apple cung cấp một khung được gọi là Audio Unit Framework để quản lý quá trình ghi và xử lý âm thanh nâng cao. Đây là Framework duy nhất trong SDK iOS (theo kiến ​​thức của tôi) có thể phát và ghi âm đồng thời. Các Audio Unit Hosting Guide trông đầy hứa hẹn, và do đó, Audio Mixer Sample App.

Lưu ý: Tôi chưa thử sử dụng Khung đơn vị âm thanh với AVSpeechSynthesizer (có thể có hoặc không hoạt động). Tuy nhiên, xem xét AVSpeechSynthesizer chơi tốt với CoreAudio thì nó có nhiều khả năng nó sẽ làm việc với AudioUnits.


Nếu giải pháp trên không có tác dụng thì giải pháp đơn giản có thể thực hiện thủ thuật. AVSpeechSynthesizer không yêu cầu bất kỳ kết nối mạng nào hoạt động đúng cách, vì vậy trong nhiều trường hợp, bạn có thể không cần để lưu âm thanh. Thay vào đó bạn có thể lưu các văn bản cho sau này sử dụng NSFileManager:

NSString *textToSynthesize = @"Just what do you think you are doing, Dave?"; 

NSError *error; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths firstObject]; 

[textToSynthesize writeToFile:[documentsDirectory stringByAppendingPathComponent:@"synthText.txt"] atomically:YES encoding:NSUTF8StringEncoding error:&error]; 

Khi bạn đã sẵn sàng để tổng hợp các văn bản, chỉ cần đọc nó từ tập tin và cắm nó trở lại vào AVSpeechSynthesizer. Tôi nhận ra rằng giải pháp này sẽ không hoạt động hoặc áp dụng trong mọi trường hợp (ví dụ: nếu bạn cần gửi tệp âm thanh cho ai đó).


Đó chỉ là một vài giải pháp có thể cho vấn đề, cả hai cách giải quyết đều có thể hoặc có thể không hoạt động tùy theo trường hợp cụ thể của bạn. YMMV. Chúc may mắn!

+0

Phần đầu của câu trả lời của Sam là tốt - Apple cung cấp tài nguyên để sử dụng Audio Units và hàng đợi xử lý âm thanh để thao tác, ghi và phát âm thanh, tuy nhiên nó rất phức tạp để sử dụng và có thể tốn nhiều thời gian hơn bạn sẵn sàng đầu tư. Tuy nhiên nếu bạn cảm thấy rằng đây là lựa chọn duy nhất của bạn, bạn nên nhìn vào The Amazing Audio Engine, cung cấp giao diện dễ sử dụng hơn cho khung công tác Core Audio của Apple. [Trang web công cụ âm thanh tuyệt vời] (http://theamazingaudioengine.com/) – themantalope

Các vấn đề liên quan