我的应用程序包括一个音频播放器,它使用AVAudio播放来自iPod音乐库的音频文件。我想添加一个音高转换功能到播放器,而我看过的音高转换库需要使用不同的音频框架来编写一个新播放器。
我目前正在使用一个AVAudioMix来改变播放器中的音量,我注意到音频输入参数之一是audioTimePitchAlgorithm,它有一个常量的AVAudioTimePitchAlgorithmSpectral,看起来就像我所需要的那样。文件显示,它支持从1/32到32之间的可变比率。但我不知道该怎么确定这个比率。
下面是我到目前为止(基于这就是答案)的代码,并指出了丢失的部分:
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编程指南和框架头文件,但没有找到更多的相关信息。有人知道这是怎么回事吗?
发布于 2014-05-27 16:32:21
恐怕你误解了文件(因为臭名昭著的“希望之泉永恒”效应)。AVAudioTimePitchAlgorithmSpectral的意思仅仅是“当你保持音高的变化率,做一个真正好的工作,当这是音乐”。在改变速度的同时保持音高有两种算法--一种更好的声音,一种更好的音乐。意思是“使用音乐一”。这并不意味着“改变音高而不改变速度”,这显然是你所追求的。AFAICT不提供任何内置的Cocoa触摸框架。
发布于 2015-08-04 08:16:59
对于AVPlayer:
在播放机项目上设置audioTimePitchAlgorithm并调整播放机比率。
player.playerItem.audioTimePitchAlgorithm = AVAudioTimePitchAlgorithmSpectral;
现在改变你的球员率将调整音频音高。
这也适用于AVAssetExportSession
缩放音频到一个新的持续时间和音频将保留原来的音高。
myAVAssetExportSession.audioTimePitchAlgorithm = AVAudioTimePitchAlgorithmSpectral; // (AVAssetExportSession's default algorithm)
发布于 2015-11-23 23:12:56
事实上,我认为你想要看的是AVAudioTimePitchAlgorithmVarispeed
,它会改变球场。
正如AV基础音频设置常数中在节时间基音算法设置下提到的那样
高质量,没有音高校正。音高随速度变化。变化率从1/32到32。
而且,你只需要做这样的事情
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url];
playerItem.audioTimePitchAlgorithm = AVAudioTimePitchAlgorithmVarispeed;
AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem];
[player play];
如这篇文章中所引用的
https://stackoverflow.com/questions/23900894
复制