2016-05-25 5 views
-1

zu bauen Ich baue Musik-Player für iOS. Ich möchte einen Visualizer haben, der der Wellenform von Siri on Apple Watch sehr ähnlich ist.Welche Technologie zu verwenden, um Apple Watch Siri Waveform

Ich habe Open-Source-Projekt auf Github gefunden, die vielversprechend aussieht. Es verwendet Core Graphics zum Zeichnen und ist sehr einfach zu verstehen. Aber es verwendet ~ 50% der CPU auf dem iPhone 6 und mit hohen Amplituden kann es nicht 60 fps erreichen. Gibt es eine Möglichkeit, diesen Effekt mit UIKit oder SpriteKit mit verbesserter Leistung zu erzielen (beachten Sie den Blending-Effekt - es ist sehr wichtig)? Auch Autor dieses Projekts sagt etwas über FFT (in Todos). Ich habe fast einen Tag damit verbracht, FFT zu verstehen, aber ich bin mir immer noch nicht sicher, wie es in diesem Fall helfen kann, den Effekt zu erzielen (oder vielleicht leistungsfähiger zu werden). Irgendwelche Ideen?

Antwort

0

Sie können SiriWaveView verwenden. Download von GitHub.

Dann können Sie Instanz davon machen, wie,

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; 

dann können Sie Eigenschaften wie gesetzt,

[siriWaveView setWaveColor:myColor]; //desired color 
    [siriWaveView setPrimaryWaveLineWidth:3.0f]; 
    [siriWaveView setSecondaryWaveLineWidth:1.0]; 

diese Methoden implementieren,

- (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); 
} 

, wenn die Wiedergabe von Audio- oder Musik Anruf wie,

displaylink = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateMeters)]; 
    [displaylink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; 

Sie können das Demo-Projekt zum besseren Verständnis auf diesen Link verweisen.

Hoffe, das wird helfen :)

+0

Hallo! Danke für die schnelle Antwort. Ich habe die meisten Siri-ähnlichen Wellenformen bereits auf Github getestet. [YZWaveformView] (https://github.com/AustinChou/YZWaveformView) aus dem obigen Beitrag basiert auf SiriWaveView. Ich brauche immer noch Wellenformen und mische sie, um den gewünschten Effekt zu erzielen. –

Verwandte Themen