- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我需要的是单独使用左声道或右声道播放音频。我知道 AVAudioPlayer 可以使用 pan 属性使用任一 channel 播放音频。如果 AVSpeechSynthesizer 没有办法做到这一点,是否可以使用 AVAudioPlayer 播放语音以便控制 channel ?如果我能以某种方式获取 AVSpeechUtterance 的 NSURL 并使用 AVAudioPlayer 播放它?
只有以前的类似问题:Any way to control which audio channel AVSpeechSynthesizer outputs to?我发现没有得到回答,我在试图找到解决方案时一无所获。
最佳答案
是的,您可以使用 AVSpeechSynthesizer
的 outputChannels
属性来执行此操作。 Apple 尚未为此发布任何文档,但它的工作方式与 AVAudioPlayer
的 channelAssignments
属性相同。这将返回一个人类可读的可用 channel 列表:
- (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;
}
您或用户可以选择要使用的 channel 名称。然后将 AVSpeechSynthesizer
设置为使用该 channel :
- (void)setSpeechSynthesizer:(AVSpeechSynthesizer *)speechSynthesizer toChannels:(NSArray *)channelNames {
AVAudioSession *session = [AVAudioSession sharedInstance];
AVAudioSessionRouteDescription *route = [session currentRoute];
NSArray *outputPorts = [route outputs];
NSMutableArray *channelDescriptions = [NSMutableArray array];
for (NSString *channelName in channelNames) {
for (AVAudioSessionPortDescription *outputPort in outputPorts) {
for (AVAudioSessionChannelDescription *channel in outputPort.channels) {
if ([channel.channelName isEqualToString:channelName]) {
[channelDescriptions addObject:channel];
}
}
}
}
if ([channelDescriptions count]) {
speechSynthesizer.outputChannels = channelDescriptions;
}
}
关于ios - 嗨,有没有办法让 AVSpeech 合成器在使用耳机播放音频的同时使用任一 channel 播放音频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39420687/
使用cats.Semigroup可以这样写: import cats.Semigroup import cats.implicits._ val l1: String Either Int = Lef
所以我的网页中有两个字段,一个用于电话号码,另一个用于电子邮件地址,我需要使用 JavaScript 而不是 jQuery 来填写其中之一。我在这里找到的大多数答案都是针对 jQuery 的,任何使用
我有一个类型,它的形状是这样的: val myType: Future[Either[MyError, TypeA]] = // some value 我知道我可以对此进行模式匹配并获得 Right
我的印象是某处有 Either a 的实例,但我似乎找不到它。我尝试导入 Control.Monad、Control.Monad.Instances 和 Data.Either,如图所示 module
我在一个宠物 Scala 项目中遇到了一个我真的不知道如何克服的情况。 以下示例显示了我的问题。 import scala.concurrent.Future import scala.concurr
我是一名优秀的程序员,十分优秀!