我正在使用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不会画?
感谢您的见解!!!
答案 0 :(得分:2)
对于实时显示,您需要将此行添加到plot2 var
plot2.shouldOptimizeForRealtimePlot = false;
希望它可以帮助你:)
以下是文档:
@property(nonatomic,assign)BOOL shouldOptimizeForRealtimePlot;
BOOL允许实时优化音频图的绘图 显示器。由于更新功能可能正在更新绘图的数据 非常快(每秒超过60帧)这个属性将扼杀 绘图调用为每秒60帧(或任何屏幕 率是)。具体来说,它禁用隐式路径更改动画 waveformLayer并设置一个显示链接以渲染60 fps(音频 以44.1 kHz更新绘图使其重新渲染86 fps - 远 大于视觉显示所需的内容。)