2017-06-03 66 views
0

我打電話的iOS文本到語音在一個相當標準的方法:完成iOS文本到語音轉換工作時鈴聲靜音

static AVSpeechSynthesizer* synthesizer = NULL; 
//... 
+(void)readText:(NSString*)text 
{ 
    if(synthesizer == NULL) 
    synthesizer = [[AVSpeechSynthesizer alloc] init]; 
    AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:text]; 
    utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"fr-FR"]; 
    [synthesizer speakUtterance:utterance]; 
} 

它的工作,但有一個問題:當鈴聲是在設備靜​​音,文本到語音也是靜音的。即使鈴聲靜音,我如何使其工作?

+6

我猜想這正是鈴聲是爲製作。因此,沒有像您這樣的開發人員可以繞過靜音狀態並播放聲音,而用戶期望手機保持安靜。 – LinusGeffarth

+0

以前我認爲鈴聲僅用於靜音電話和信息。現在很明顯,它比這更復雜:[http://artoftheiphone.com/2012/02/10/basics-what-does-the-iphone-ringer-switch-mute-and-not-mute/]。儘管如此,許多應用程序確實會在鈴聲關閉的情況下發出聲音(例如,瀏覽器正在播放YouTube),我想繞過它,因爲這似乎是我預期的行爲。 – Antonio

+0

@LinusGeffarth nope,即使設備靜音,也可以激活音頻。 –

回答

1

只是取消靜音裝置

static AVSpeechSynthesizer* synthesizer = NULL; 
//... 
+(void)readText:(NSString*)text 
{ 
    if(synthesizer == NULL) 
    synthesizer = [[AVSpeechSynthesizer alloc] init]; 
    AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:text]; 
    utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"fr-FR"]; 

    //Add the following code to active audio 
    NSError *setCategoryErr = nil; 
    NSError *activationErr = nil; 
    [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr]; 
    //magic is here 
    [[AVAudioSession sharedInstance] setActive:YES error:&activationErr]; 

    //speech your text 
    [synthesizer speakUtterance:utterance]; 
} 
+0

但蘋果會批准嗎?如[Apple的應用程序審閱指南](https://developer.apple.com/app-store/review/guidelines/#software-requirements)第2.5.9節中所述,應用程序可能不會更改標準開關的功能。更改當前的振鈴狀態可能會被視爲違反本指南。 – LinusGeffarth

+0

那麼,臉譜,Instagram和其他許多應用程序使用它 –

+0

1)你怎麼知道? 2)Facebook從來不是一個好的參考,也不應該是推特。這些應用程序確實有特殊的權限他們甚至本地集成到操作系統中! – LinusGeffarth

1

的iOS音頻會話類別是這個正確答案:https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategoriesandModes/AudioSessionCategoriesandModes.html

的默認值是AVAudioSessionCategorySoloAmbient,但如果音頻功能是至關重要的應用程序(我們的情況下),應設置爲AVAudioSessionCategoryPlayback

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];