我正在为iOS构建音乐播放器。 我想要一个可视化器,它与Siri on Apple Watch的波形非常相似。
我在Github找到了看起来很有希望的开源项目。它使用Core Graphics进行绘图,并且很容易理解。但它在iPhone 6上使用了大约50%的CPU,并且在高振幅时它无法达到60 fps。 是否有任何方法可以使用UIKit或SpriteKit来提高性能(注意混合效果 - 这非常重要)?此外,该项目的作者还说了一些关于FFT的内容(在todos中)。我花了将近一天的时间来理解FFT,但我仍然不确定在这种情况下它是如何帮助实现效果的(或者可能变得更高效)。 有什么想法吗?
答案 0 :(得分:0)
您可以使用SiriWaveView。从github下载。
然后你可以将它的实例化为,
siriWaveView = [[SCSiriWaveformView alloc]initWithFrame:CGRectMake(20, (self.view.frame.size.height/2) - 160 + 120, self.view.frame.size.width - 40, 80)]; //you can set your desired frame
siriWaveView.backgroundColor = appGrayColor;
然后你可以设置像
这样的属性 [siriWaveView setWaveColor:myColor]; //desired color
[siriWaveView setPrimaryWaveLineWidth:3.0f];
[siriWaveView setSecondaryWaveLineWidth:1.0];
实施此方法,
- (void)updateMeters
{
if (audioPlayer.playing) {
CGFloat normalizedValue;
[audioPlayer updateMeters];
normalizedValue = [self _normalizedPowerLevelFromDecibels:[audioPlayer averagePowerForChannel:0]];
[siriWaveView updateWithLevel:normalizedValue];
// NSLog(@"Update meter called");
}
}
- (CGFloat)_normalizedPowerLevelFromDecibels:(CGFloat)decibels
{
if (decibels < -60.0f || decibels == 0.0f) {
return 0.0f;
}
return powf((powf(10.0f, 0.05f * decibels) - powf(10.0f, 0.05f * -60.0f)) * (1.0f / (1.0f - powf(10.0f, 0.05f * -60.0f))), 1.0f / 2.0f);
}
播放音频或音乐时,如
displaylink = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateMeters)];
[displaylink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
您可以从该链接中引用演示项目以便更好地理解。
希望这会有所帮助:)