【问题标题】:What technology to use to build Apple Watch's Siri Waveform使用什么技术来构建 Apple Watch 的 Siri 波形
【发布时间】:2016-05-25 07:21:45
【问题描述】:

我正在为 iOS 构建音乐播放器。 我想要一个可视化器,它与Siri on Apple Watch 的波形非常相似。

我在Github 上找到了看起来很有希望的开源项目。它使用 Core Graphics 进行绘图,并且非常易于理解。但它在 iPhone 6 上使用了约 50% 的 CPU,并且在高振幅下它无法达到 60 fps。 有没有办法使用 UIKit 或 SpriteKit 来实现这种效果并提高性能(注意混合效果 - 这非常重要)?此外,该项目的作者也谈到了 FFT(在 todos 中)。我花了将近一天的时间来了解 FFT,但我仍然不确定在这种情况下它如何帮助实现效果(或者可能变得更有性能)。 有什么想法吗?

【问题讨论】:

    标签: ios iphone uikit core-graphics fft


    【解决方案1】:

    您可以使用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];
    

    您可以参考该链接中的演示项目以获得更好的理解。

    希望这会有所帮助:)

    【讨论】:

    • 嗨!感谢您的快速答复。我已经在 Github 上测试了大多数类似 Siri 的波形。上面帖子中的YZWaveformView 基于 SiriWaveView。我仍然需要填充波形并将它们混合以达到预期的效果。
    猜你喜欢
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 2017-04-28
    相关资源
    最近更新 更多