I have been working in AVAudioPlayer and draw a wave. I am using AudioArmada Github pods to draw waves With the help of AudioArmada Pods
. But Some Cases AVAudioFile Crash on reading buffer time.
Code Below:
public func openFile(_ file: URL) {
let audioFile = try! AVAudioFile(forReading: file)
// specify the format we WANT for the buffer
let format = AVAudioFormat(commonFormat: .pcmFormatFloat32, sampleRate: audioFile.fileFormat.sampleRate, channels: audioFile.fileFormat.channelCount, interleaved: false)
// initialize and fill the buffer
let buffer = AVAudioPCMBuffer(pcmFormat: format!, frameCapacity: UInt32(audioFile.length))
try! audioFile.read(into: buffer!)
// copy buffer to readFile struct
readFile.floatValuesLeft = Array(UnsafeBufferPointer(start: buffer?.floatChannelData?[0], count:Int(buffer!.frameLength)))
readFile.populated = true
reload(zoomFactor: zoomFactor)
}
public func reload(zoomFactor: Float = 1.0) {
self.zoomFactor = zoomFactor
setNeedsDisplay()
}
func drawSoundcloudWaveform(_ rect: CGRect) {
let path = UIBezierPath()
path.move(to: CGPoint(x: 0.0, y: rect.height/2))
var index = 0
while index < readFile.leftPoints.count {
let point = readFile.leftPoints[index]
let drawFrom = CGPoint(x: point.x, y: path.currentPoint.y)
path.move(to: drawFrom)
let drawPointBottom = CGPoint(x: point.x, y: path.currentPoint.y + (point.y))
path.addLine(to: drawPointBottom)
path.addLine(to: CGPoint(x: drawPointBottom.x + pixelWidth, y: drawPointBottom.y))
path.addLine(to: CGPoint(x: drawFrom.x + pixelWidth, y: drawFrom.y))
path.close()
path.move(to: drawFrom)
let drawPointTop = CGPoint(x: point.x, y: path.currentPoint.y - (point.y))
path.addLine(to: drawPointTop)
path.addLine(to: CGPoint(x: drawPointTop.x + pixelWidth, y: drawPointTop.y))
path.addLine(to: CGPoint(x: drawFrom.x + pixelWidth, y: drawFrom.y))
path.close()
index = index + Int(pixelWidth) + Int(pixelSpacing)
}
UIColor(red:0.21, green:0.77, blue:0.78, alpha:1.0).set()
path.stroke()
path.fill()
}
Below Cases:
-
Running Case:
guard let file = Bundle.main.url(forResource: "Beat9", withExtension: ".mp3") else { return } openFile(file) AVAudioPCMBuffer Output: AVAudioPCMBuffer@0x6000005c9300: 0/35864064 bytes
Wave Screen Shot:
-
Crash Case:
guard let file = Bundle.main.url(forResource: "IshqMubarak", withExtension: ".mp3") else { return } openFile(file) AVAudioPCMBuffer Output: AVAudioPCMBuffer@0x600003eb1180: 0/0 bytes // i m confused why show zero bytes buffer
Error: Fatal error: 'try!' expression unexpectedly raised an error: Foundation._GenericObjCError.nilError: file /Users/apple/Desktop/AudioArmada-90f214d3d9483e817cdb1396e08f8f626a7be821/AudioArmada/Classes/WaveformZoomable.swift, line 63
Question: How to solve this issue and why crash on some times?
Any help would be greatly appreciated.
Thanks in advance.
from Crash on Read AVAudioFile Buffer Create Waves Swift
No comments:
Post a Comment