为什么 AVPlayerItem 不遵守 AVAudioTimePitchAlgorithmVarispeed 设置?
Why would AVPlayerItem not honor AVAudioTimePitchAlgorithmVarispeed setting?
我正在尝试根据发送到 AVPlayer 的速率更改 AVPlayerItem 的音频音调。
为此,我使用指定 'AVAudioTimePitchAlgorithmVarispeed' 的 AVAsset 初始化 AVPlayerItem,如下所示:
AVPlayerItem *nPlayerItem = [AVPlayerItem playerItemWithAsset:asset];
[nPlayerItem setAudioTimePitchAlgorithm:AVAudioTimePitchAlgorithmVarispeed];
然后我将 playerItem 附加到 AVPlayer,但是当我将 AVPlayer 的速率设置为小于 1 或大于 1 时,音调不会改变。相反,AVPlayerItem 使用 'AVAudioTimePitchAlgorithmSpectral' 算法并且不遵循我指定的算法。我的目标是 10.9 并针对 10.9 进行构建。根据文档,此功能从 10.9 开始可用。
我通过 1) 将 playerItem 添加到 AVPlayer 2) 在播放器项目的状态上设置键值观察 (KVO) 解决了我的问题:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
if ([object isKindOfClass:[AVPlayerItem class]] && [keyPath isEqualToString:@"status"]) {
AVPlayerItem *nPlayerItem = (AVPlayerItem *)object;
if([nPlayerItem status] == AVPlayerItemStatusReadyToPlay){
[nPlayerItem setAudioTimePitchAlgorithm:AVAudioTimePitchAlgorithmVarispeed];
}
}
}
只有当 playerItem 达到 'AVPlayerItemStatusReadyToPlay' 状态后,我才能在 playerItems 的 audioTimePitchAlgorithm 上成功设置 AVAudioTimePitchAlgorithmVarispeed。
我正在尝试根据发送到 AVPlayer 的速率更改 AVPlayerItem 的音频音调。
为此,我使用指定 'AVAudioTimePitchAlgorithmVarispeed' 的 AVAsset 初始化 AVPlayerItem,如下所示:
AVPlayerItem *nPlayerItem = [AVPlayerItem playerItemWithAsset:asset];
[nPlayerItem setAudioTimePitchAlgorithm:AVAudioTimePitchAlgorithmVarispeed];
然后我将 playerItem 附加到 AVPlayer,但是当我将 AVPlayer 的速率设置为小于 1 或大于 1 时,音调不会改变。相反,AVPlayerItem 使用 'AVAudioTimePitchAlgorithmSpectral' 算法并且不遵循我指定的算法。我的目标是 10.9 并针对 10.9 进行构建。根据文档,此功能从 10.9 开始可用。
我通过 1) 将 playerItem 添加到 AVPlayer 2) 在播放器项目的状态上设置键值观察 (KVO) 解决了我的问题:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
if ([object isKindOfClass:[AVPlayerItem class]] && [keyPath isEqualToString:@"status"]) {
AVPlayerItem *nPlayerItem = (AVPlayerItem *)object;
if([nPlayerItem status] == AVPlayerItemStatusReadyToPlay){
[nPlayerItem setAudioTimePitchAlgorithm:AVAudioTimePitchAlgorithmVarispeed];
}
}
}
只有当 playerItem 达到 'AVPlayerItemStatusReadyToPlay' 状态后,我才能在 playerItems 的 audioTimePitchAlgorithm 上成功设置 AVAudioTimePitchAlgorithmVarispeed。