2017-02-20 1 views
5

TextToSpeech에 AVSpeechSynthesizer를 사용하고 있습니다. 헤드폰에서 발언을해야 채널 (모노 2)을 떠났습니다. 다음은 출력 채널을 설정하는 방법입니다.iOS : AVSpeechSynthesizer : 헤드폰 왼쪽 채널에서 텍스트를 말하십시오.

func initalizeSpeechForRightChannel(){  
    let avSession = AVAudioSession.sharedInstance() 
    let route = avSession.currentRoute 
    let outputPorts = route.outputs 
    var channels:[AVAudioSessionChannelDescription] = [] 
    //NSMutableArray *channels = [NSMutableArray array]; 
    var leftAudioChannel:AVAudioSessionChannelDescription? = nil 
    var leftAudioPortDesc:AVAudioSessionPortDescription? = nil 
    for outputPort in outputPorts { 
     for channel in outputPort.channels! { 
      leftAudioPortDesc = outputPort 
      //print("Name: \(channel.channelName)") 
      if channel.channelName == "Headphones Left" { 
       channels.append(channel) 
       leftAudioChannel = channel 
      }else { 
       // leftAudioPortDesc?.channels?.removeObject(channel) 
      } 
     } 
    } 

    if channels.count > 0 { 
     if #available(iOS 10.0, *) { 
      print("Setting Left Channel") 
      speechSynthesizer.outputChannels = channels 
      print("Checking output channel : \(speechSynthesizer.outputChannels?.count)") 

     } else { 
      // Fallback on earlier versions 
      } 
     } 
    } 

나는

1 캔트 outputchannels을 설정할 수, 그것은 항상 nil을 (그것은이 메서드를 호출 처음에 무슨 일이 일어나고, 연속 통화가 잘 작동) 코드에서이 문제

2 outputchannels *이 아이폰 OS 10에서 지원하지만 8.0

,691 아이폰 OS 에서이를 지원해야

최선의 방법을 제공해주십시오. 대신 기술적 인 channelName을 (즉, 사용자) 검사

+0

speechSynthesizer.outputChannels의 = 채널 이 선 후에 나는 outputChannels 그것이 0 인쇄하지만 개체 채널이 하나의 개체가 계산 인쇄하려고 – Sridhar

+0

"캔트 outputchannels을 설정할 수, 그것은 항상 전무"--- 아주 처음으로, 그것은 아무 것도 아니다. 다시 호출하면 작동한다. – Sridhar

+0

하나의 작은 주석 - channelName은 언어에 민감한 (지역화 된) 텍스트를 반환 할 수 있으므로 'if channel.channelName == "Headphones Left"는 그렇지 않다. 신뢰할 수있는 왼쪽 채널을 찾으려면 –

답변

1
  1. 상기 channelLabel를 확인한다. There is an enumeration containing the left channel.

  2. 나는 이것이 pre-iOS 10 이전 버전에서는 가능하지 않을 것으로 생각합니다. AVAudioSession에는 왼쪽 출력 채널 만 선택하는 방법이없는 것 같습니다.overrideAudioPort:error을 사용할 수 있지만 앱 전체에 영향을 미칩니다.

+1

AVAudioSessionPortOverride 상수의 왼쪽/오른쪽 채널에 관한 유용한 옵션이없는 것처럼 보입니다. –

+0

두 번째 모습이 올바른지 확인하십시오. @sridhar는 아마도 팬을 제어 할 수있는 AVAudioPlayer를 통해 연설을 재생할 수있는 또 다른 TTS 엔진을 조사해야 할 것입니다. 우리는 AVAudioPlayer를 통해 Google의 TTS 엔진을 사용 했으므로 거기에서 검색을 시작할 수 있습니다. 아직 사용할 수 있는지 모르겠습니다. – arsenius

관련 문제