2016-02-17 3 views
1

Я играю аудиофайл с помощью EZAudioPlayer. Я хочу, чтобы звуковая волна была нарисована на EZAudioPlot.Программно созданный EZAudioPlot не рисует

Мне это удалось. Однако, когда я создаю EZAudioPlot программно, представление показывает, но звуковая волна не рисуется.

Вот некоторые из кода

var audioPlayer: EZAudioPlayer! 
@IBOutlet weak var plot1: EZAudioPlot! 
var plot1Flag:Bool = true 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    let plotType: EZPlotType = EZPlotType(rawValue: 1)!; 
    plot1?.plotType = plotType 
    plot1?.shouldFill = true; 
    plot1?.shouldMirror = true; 


    plot2 = EZAudioPlot() 
    plot2.plotType = plotType 
    plot2.shouldFill = true; 
    plot2.shouldMirror = true; 
    plot2.frame = CGRectMake(10, 200, 200, 200) 
    plot2.backgroundColor = UIColor.blueColor() 
    plot2.color = UIColor.whiteColor() 
    self.view.addSubview(plot2) 
} 

@IBAction func playSound(sender: UIButton) { 
    audioPlayer = EZAudioPlayer(URL: NSURL.fileURLWithPath(NSBundle.mainBundle().pathForResource("Alright", ofType: "wav")!), delegate: self) 
    audioPlayer.play() 
    plot1Flag = !plot1Flag 
} 

func audioPlayer(audioPlayer: EZAudioPlayer!, playedAudio buffer: UnsafeMutablePointer<UnsafeMutablePointer<Float>>, withBufferSize bufferSize: UInt32, withNumberOfChannels numberOfChannels: UInt32, inAudioFile audioFile: EZAudioFile!) { 
    if(plot1Flag){ 
     print("plot1") 
     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      self.plot1?.updateBuffer(buffer[0], withBufferSize: bufferSize); 
     }) 
    }else{ 
     print("plot2") 
     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      self.plot2.updateBuffer(buffer[0], withBufferSize: bufferSize); 
     }) 
    } 

} 

Можете ли вы сказать мне, почему созданные вручную Plot2 не рисовать?

Благодарим вас за понимание!

ответ

2

для реального времени отображает вам нужно добавить следующую строку в Plot2 вар

plot2.shouldOptimizeForRealtimePlot = false; 

Надеется, что это помогает :)

Вот документация:

@property (неатомическая , назначить) BOOL shouldOptimizeForRealtimePlot;

BOOL, который позволяет оптимизировать чертеж звукового графика для отображения в реальном времени . Так как функция обновления может очень быстро обновлять данные графика (более 60 кадров в секунду), это свойство будет дросселировать , при этом призывы рисования должны быть 60 кадров в секунду (или независимо от того, что имеет значение для экрана ). В частности, он отключает неявные анимации изменения пути на waveformLayer и устанавливает ссылку на изображение для рендеринга 60 кадров в секунду (звук , обновляющий график на 44,1 кГц, заставляет его повторно отображать 86 кадров в секунду - далеко больше, чем необходимо для визуального дисплей).