1

我正在使用 EZAudioPlayer 播放音频文件。我希望在 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 不绘制吗?

感谢您的见解!!!

4

1 回答 1

2

对于实时显示,您需要将此行添加到您的 plot2 var

plot2.shouldOptimizeForRealtimePlot = false;

希望它可以帮助你:)

这是文档:

@property (nonatomic, assign) BOOL shouldOptimizeForRealtimePlot;

一个 BOOL,允许优化音频绘图的实时显示。由于更新函数可能会非常快速地更新绘图数据(每秒超过 60 帧),因此此属性会将绘图调用限制为每秒 60 帧(或任何屏幕速率)。具体来说,它禁用了波形层上的隐式路径更改动画,并设置了一个显示链接以渲染 60 fps(以 44.1 kHz 更新绘图的音频会导致它重新渲染 86 fps - 远远高于视觉显示所需的速度)。

于 2016-04-05T08:25:14.987 回答