嗨,有没有办法让AVSpeech Synthesizer在使用耳机播放音频时使用任一频道播放音频?

时间:2016-09-09 22:46:53

标签: ios audio avaudioplayer avspeechsynthesizer

我需要的是仅使用左声道或右声道播放音频。 我知道AVAudioPlayer可以使用pan属性使用任一通道播放音频。 如果AVSpeechSynthesizer无法完成此任务,是否可以使用AVAudioPlayer播放话语以便控制通道? 如果我能以某种方式获得AVSpeechUtterance的NSURL并使用AVAudioPlayer播放它?

只有先前类似的问题:Any way to control which audio channel AVSpeechSynthesizer outputs to?我发现没有回答,我试图寻找解决方案。

1 个答案:

答案 0 :(得分:2)

是的,您可以使用outputChannels的{​​{1}}属性执行此操作。 Apple尚未发布任何文档,但其工作方式与AVSpeechSynthesizer的{​​{1}}属性相同。这将返回一个人类可读的可用频道列表:

channelAssignments

您或用户可以选择要使用的频道名称。然后,这会将AVAudioPlayer设置为使用该频道:

- (NSArray *)getAudioChannelNames {
    // return the name of each channel in each connected audio port
    // examples: Headphones Left/Right, Speaker, DUO-CAPTURE 1/2
    AVAudioSession *session = [AVAudioSession sharedInstance];
    AVAudioSessionRouteDescription *route = [session currentRoute];
    NSArray *outputPorts = [route outputs];
    NSMutableArray *channels = [NSMutableArray array];
    for (AVAudioSessionPortDescription *outputPort in outputPorts) {
        for (AVAudioSessionChannelDescription *channel in outputPort.channels) {
            [channels addObject:channel.channelName];
        }
    }
    return channels;
}