Compare commits

...

2 Commits

Author SHA1 Message Date
tanhakabir 751ca765d5 Release 2.13.0 2021-03-06 19:51:39 -08:00
tanhakabir 68ea5a9468 fix crash on uncompressed audio (#69) 2021-03-06 19:50:18 -08:00
3 changed files with 15 additions and 14 deletions
+6 -3
View File
@@ -113,10 +113,13 @@ class AudioParser: AudioParsable {
didSet {
if let audioPacketByteSize = audioPackets.last?.0?.mDataByteSize {
sumOfParsedAudioBytes += audioPacketByteSize
numberOfPacketsParsed += 1
} else if let audioPacketByteSize = audioPackets.last?.1.count { // for uncompressed audio there are no descriptors to say how many bytes of audio are in this packet so we approximate by data size
sumOfParsedAudioBytes += UInt32(audioPacketByteSize)
}
//TODO: duration will not work with WAV or AIFF
numberOfPacketsParsed += 1
//TODO: duration will not be accurate with WAV or AIFF
}
}
@@ -204,7 +207,7 @@ class AudioParser: AudioParsable {
private func getOffset(fromPacketIndex index: AVAudioPacketCount) -> UInt64? {
//Clear current buffer if we have audio format
guard fileAudioFormat != nil, let bytesPerPacket = self.averageBytesPerPacket else {
Log.error("should not get here")
Log.error("should not get here \(String(describing: fileAudioFormat)) and \(String(describing: self.averageBytesPerPacket))")
return nil
}
@@ -34,7 +34,7 @@ import AVFoundation
#if swift(>=5.3)
func ParserPacketListener (_ context: UnsafeMutableRawPointer, _ byteCount: UInt32, _ packetCount: UInt32, _ streamData: UnsafeRawPointer, _ packetDescriptions: UnsafeMutablePointer<AudioStreamPacketDescription>?) {
parserPacket(context, byteCount, packetCount, streamData, packetDescriptions!)
parserPacket(context, byteCount, packetCount, streamData, packetDescriptions)
}
#else
@@ -43,16 +43,12 @@ func ParserPacketListener (_ context: UnsafeMutableRawPointer, _ byteCount: UInt
}
#endif
func parserPacket(_ context: UnsafeMutableRawPointer, _ byteCount: UInt32, _ packetCount: UInt32, _ streamData: UnsafeRawPointer, _ packetDescriptions: UnsafeMutablePointer<AudioStreamPacketDescription>){
func parserPacket(_ context: UnsafeMutableRawPointer, _ byteCount: UInt32, _ packetCount: UInt32, _ streamData: UnsafeRawPointer, _ packetDescriptions: UnsafeMutablePointer<AudioStreamPacketDescription>?){
let selfAudioParser = Unmanaged<AudioParser>.fromOpaque(context).takeUnretainedValue()
//bug in core audio where this could be nil
let packetDescriptionOrNil: UnsafeMutablePointer<AudioStreamPacketDescription>? = packetDescriptions
let isCompressed = packetDescriptionOrNil != nil
guard let fileAudioFormat = selfAudioParser.fileAudioFormat else {
Log.monitor("shouldnot have reached packet listener without a data format")
Log.monitor("should not have reached packet listener without a data format")
return
}
@@ -62,15 +58,17 @@ func parserPacket(_ context: UnsafeMutableRawPointer, _ byteCount: UInt32, _ pac
}
//TODO refactor this after we get it working
if isCompressed {
if let compressedPacketDescriptions = packetDescriptions { // is compressed audio (.mp3)
Log.debug("compressed audio")
for i in 0 ..< Int(packetCount) {
let audioPacketDescription = packetDescriptions[i]
let audioPacketDescription = compressedPacketDescriptions[i]
let audioPacketStart = Int(audioPacketDescription.mStartOffset)
let audioPacketSize = Int(audioPacketDescription.mDataByteSize)
let audioPacketData = Data(bytes: streamData.advanced(by: audioPacketStart), count: audioPacketSize)
selfAudioParser.audioPackets.append((audioPacketDescription,audioPacketData))
}
} else {
} else { // not compressed audio (.wav)
Log.debug("uncompressed audio")
let format = fileAudioFormat.streamDescription.pointee
let bytesPerAudioPacket = Int(format.mBytesPerPacket)
for i in 0 ..< Int(packetCount) {
+1 -1
View File
@@ -8,7 +8,7 @@
Pod::Spec.new do |s|
s.name = 'SwiftAudioPlayer'
s.version = '2.12.0'
s.version = '2.13.0'
s.summary = 'SwiftAudioPlayer is a Swift based audio player that can handle streaming from a remote location and audio manipulation.'
# This description is used to generate tags and improve search results.