首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用AVAudioTimePitchAlgorithmSpectral?

如何使用AVAudioTimePitchAlgorithmSpectral?
EN

Stack Overflow用户
提问于 2014-05-28 00:04:10
回答 3查看 2K关注 0票数 1

我的应用程序包括一个音频播放器,它使用AVAudio播放来自iPod音乐库的音频文件。我想添加一个音高转换功能到播放器,而我看过的音高转换库需要使用不同的音频框架来编写一个新播放器。

我目前正在使用一个AVAudioMix来改变播放器中的音量,我注意到音频输入参数之一是audioTimePitchAlgorithm,它有一个常量的AVAudioTimePitchAlgorithmSpectral,看起来就像我所需要的那样。文件显示,它支持从1/32到32之间的可变比率。但我不知道该怎么确定这个比率。

下面是我到目前为止(基于这就是答案)的代码,并指出了丢失的部分:

代码语言:javascript
代码运行次数:0
运行
复制
AVPlayer *player = self.audioPlayer;
NSArray *audioTracks = [player.currentItem.asset tracksWithMediaType:AVMediaTypeAudio];
NSMutableArray *allAudioParams = [NSMutableArray array];
for (AVAssetTrack *track in audioTracks) {
    AVMutableAudioMixInputParameters *audioInputParams = [AVMutableAudioMixInputParameters audioMixInputParameters];
    audioInputParams.audioTimePitchAlgorithm = AVAudioTimePitchAlgorithmSpectral;
    audioInputParams.audioTimePitchRate = 0.5; <-- NEED SOMETHING LIKE THIS
    audioInputParams.trackID = [track trackID];
    [allAudioParams addObject:audioInputParams];
}
AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
[audioMix setInputParameters:allAudioParams];
[player.currentItem setAudioMix:audioMix];

我搜索过Google、dev论坛、AVFoundation编程指南和框架头文件,但没有找到更多的相关信息。有人知道这是怎么回事吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-28 00:32:21

恐怕你误解了文件(因为臭名昭著的“希望之泉永恒”效应)。AVAudioTimePitchAlgorithmSpectral的意思仅仅是“当你保持音高的变化率,做一个真正好的工作,当这是音乐”。在改变速度的同时保持音高有两种算法--一种更好的声音,一种更好的音乐。意思是“使用音乐一”。这并不意味着“改变音高而不改变速度”,这显然是你所追求的。AFAICT不提供任何内置的Cocoa触摸框架。

票数 0
EN

Stack Overflow用户

发布于 2015-08-04 16:16:59

对于AVPlayer:

在播放机项目上设置audioTimePitchAlgorithm并调整播放机比率。

代码语言:javascript
代码运行次数:0
运行
复制
player.playerItem.audioTimePitchAlgorithm = AVAudioTimePitchAlgorithmSpectral;

现在改变你的球员率将调整音频音高。

这也适用于AVAssetExportSession

缩放音频到一个新的持续时间和音频将保留原来的音高。

代码语言:javascript
代码运行次数:0
运行
复制
myAVAssetExportSession.audioTimePitchAlgorithm = AVAudioTimePitchAlgorithmSpectral; // (AVAssetExportSession's default algorithm)
票数 0
EN

Stack Overflow用户

发布于 2015-11-24 07:12:56

事实上,我认为你想要看的是AVAudioTimePitchAlgorithmVarispeed,它会改变球场。

正如AV基础音频设置常数中在节时间基音算法设置下提到的那样

高质量,没有音高校正。音高随速度变化。变化率从1/32到32。

而且,你只需要做这样的事情

代码语言:javascript
代码运行次数:0
运行
复制
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url];
playerItem.audioTimePitchAlgorithm = AVAudioTimePitchAlgorithmVarispeed;
AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem];
[player play];

这篇文章中所引用的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23900894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档