2013-12-16 21 views
17

Uygulamamda AVSpeechSynthesizer kullanıyorum ve konuşulan metni bir ses dosyasına veya AVAsset'e kaydetmek istiyorum. Apple'ın dokümanlarını inceledim ve bir şey görmedim ama emin olmak için bir soru yayınlayacağımı düşündüm. Aşağıda mevcut kodum var.Ses dosyası için AVSpeechSynthesizer ifadesi

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

Bu API yenidir ve bu nedenle daha sonra eklenebilecek bazı özellikler eksik olabilir. Belki de çalmakta olan sesleri kaydetmenin bir yolunu mu arıyorsunuz? – erdekhayser

+0

Evet, bir AVAudioRecoder hazırladım ama sadece temiz bir çözüm olup olmadığını görmek istedim – Sean

+0

Bu sorun için uygun bir çözüm buldunuz mu? Benzer bir şey inşa etmek istiyorum. –

cevap

4

O sizin uygulamanın oluşturduğu ses kaydetmek mümkündür (değil diğer uygulamalardan). AVSpeech, oluşturulan sesi kaydetmek için bir API sağlamaz, ancak Apple, işi yapabilen diğer API'lere sahiptir. Çözüm muhtemelen istediğiniz kadar temiz değil, ama işe yaramalı.

Apple, gelişmiş ses işleme ve kaydetmeyi yönetmek için Audio Unit Framework adlı bir çerçeve sağlar. Bu, iOS SDK'da (bilgimle) aynı anda ses çalabilen ve kaydedebilen tek Çerçeve. Audio Unit Hosting Guide, umut verici görünüyor ve Audio Mixer Sample App. Not: AVSpeechSynthesizer ile Ses Birimi Çerçevesini kullanmayı denemedim (çalışabilir veya çalışmayabilir.). Ancak, AVSpeechSynthesizer'ın CoreAudio ile iyi çalıştığı düşünülürse, o zaman AudioUnits ile çalışacağı daha fazladır.


Yukarıdaki çözüm işe yaramazsa, basit bir çözüm hileyi yapabilir. AVSpeechSynthesizer, düzgün çalışması için herhangi bir ağ bağlantısına gerek duymaz, bu nedenle çoğu durumda , sesi kaydetmek için'a gerek duymaz. Bunun yerine daha sonra NSFileManager kullanmak için metni kurtarabilecek:

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]; 

Metin sentezlemek için hazır olduğunda, sadece dosyadan okumak ve geri AVSpeechSynthesizer takın. Bu çözümün her durumda çalışmayacağını veya uygulanmayacağını biliyorum (örneğin, ses dosyasını birisine göndermeniz gerekiyorsa).


olanlar

sadece geçici çözümler ve ya özel senaryoya göre çalışmıyor olabilir her ikisi de sorunun birkaç olası çözümler vardır. YMMV. İyi şanslar!

+0

Sam'in cevabının ilk kısmı iyi - Apple Ses Birimlerini kullanmak için kaynak sağlıyor ve ses işlemek, kayıt ve oynatmak için bir ses işleme kuyruğudur, ancak kullanımı oldukça karmaşıktır ve yatırım yapmak istediğinizden daha fazla zamanınız olabilir. Ancak bunun tek seçeneğiniz olduğunu düşünüyorsanız, Apple'ın Core Audio çerçevesine kullanımı daha kolay bir arayüz sağlayan The Amazing Audio Engine'e bakmalısınız. [İnanılmaz Ses Motoru Web Sitesi] (http://theamazingaudioengine.com/) – themantalope

İlgili konular