Compare commits

...

8 Commits

Author SHA1 Message Date
tanhakabir ad63b89ede Release 7.2.0 2021-08-17 03:38:52 -07:00
tanhakabir 43e887b823 Merge pull request #143 from tanhakabir/issue-138
Experimental set download location
2021-08-17 03:38:28 -07:00
tanhakabir 006b94ea10 experimental set download location 2021-08-17 03:38:00 -07:00
tanhakabir abb0a29fb4 Release 7.1.0 2021-08-17 03:13:19 -07:00
tanhakabir ed3ba9698d Merge pull request #132 from cntrump/pr_fix_seek_fail
Fix seek fail issue when data is not loaded for AudioStreamEngine.
2021-08-17 03:12:43 -07:00
tanhakabir 294902e3fe Release 7.0.1 2021-08-17 03:06:08 -07:00
tanhakabir c25071d83a Merge branch 'master' into pr_fix_seek_fail 2021-08-12 23:56:19 -07:00
Lvv.me 19db1fc74b Fix seek fail issue when data is not loaded for AudioStreamEngine. 2021-08-09 15:50:38 +08:00
7 changed files with 32 additions and 7 deletions
+3 -2
View File
@@ -115,10 +115,11 @@ class AudioDiskEngine: AudioEngine {
}
let playing = playerNode.isPlaying
let seekToNeedle = needle > Needle(duration) ? Needle(duration) : needle
self.needle = needle // to tick while paused
self.needle = seekToNeedle // to tick while paused
seekFrame = AVAudioFramePosition(Float(needle) * audioSampleRate)
seekFrame = AVAudioFramePosition(Float(seekToNeedle) * audioSampleRate)
seekFrame = max(seekFrame, 0)
seekFrame = min(seekFrame, audioLengthSamples)
currentPosition = seekFrame
+9
View File
@@ -273,6 +273,15 @@ class AudioStreamEngine: AudioEngine {
//MARK:- Overriden From Parent
override func seek(toNeedle needle: Needle) {
Log.info("didSeek to needle: \(needle)")
// if not playable (data not loaded etc), duration could be zero.
guard isPlayable else {
if predictedStreamDuration == 0 {
seekNeedleCommandBeforeEngineWasReady = needle
}
return
}
guard needle < (ceil(predictedStreamDuration)) else {
if !isPlayable {
seekNeedleCommandBeforeEngineWasReady = needle
+7
View File
@@ -30,10 +30,12 @@ protocol AudioDataManagable {
var numberOfActive: Int { get }
var allowCellular: Bool { get set }
var downloadDirectory: FileManager.SearchPathDirectory { get }
func setHTTPHeaderFields(_ fields: [String: String]?)
func setBackgroundCompletionHandler(_ completionHandler: @escaping () -> ())
func setAllowCellularDownloadPreference(_ preference: Bool)
func setDownloadDirectory(_ dir: FileManager.SearchPathDirectory)
func clear()
@@ -54,6 +56,7 @@ protocol AudioDataManagable {
class AudioDataManager: AudioDataManagable {
var allowCellular: Bool = true
var downloadDirectory: FileManager.SearchPathDirectory = .documentDirectory
static let shared: AudioDataManagable = AudioDataManager()
@@ -110,6 +113,10 @@ class AudioDataManager: AudioDataManagable {
allowCellular = preference
}
func setDownloadDirectory(_ dir: FileManager.SearchPathDirectory) {
downloadDirectory = dir
}
func attach(callback: @escaping (_ id: ID, _ progress: Double)->()) {
globalDownloadProgressCallback = callback
}
+2 -2
View File
@@ -64,7 +64,7 @@ struct FileStorage {
// MARK:- Audio
extension FileStorage {
struct Audio {
private static let directory: FileManager.SearchPathDirectory = .documentDirectory
private static let directory: FileManager.SearchPathDirectory = AudioDataManager.shared.downloadDirectory
private init() {}
static func isStored(_ id: ID) -> Bool {
@@ -103,7 +103,7 @@ extension FileStorage {
}
static func locate(_ id: ID) -> URL? {
let folderUrls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let folderUrls = FileManager.default.urls(for: directory, in: .userDomainMask)
guard folderUrls.count != 0 else { return nil }
if let urls = try? FileManager.default.contentsOfDirectory(at: folderUrls[0], includingPropertiesForKeys: nil) {
+1 -2
View File
@@ -585,8 +585,7 @@ extension SAPlayer: SAPlayerDelegate {
}
internal func seekEngine(toNeedle needle: Needle) {
var seekToNeedle = needle < 0 ? 0 : needle
seekToNeedle = needle > Needle(duration ?? 0) ? Needle(duration ?? 0) : needle
let seekToNeedle = needle < 0 ? 0 : needle
player?.seek(toNeedle: seekToNeedle)
}
}
+9
View File
@@ -109,5 +109,14 @@ extension SAPlayer {
AudioDataManager.shared.setAllowCellularDownloadPreference(allowUsingCellularData)
}
}
/**
EXPERIMENTAL!
*/
public static var downloadDirectory: FileManager.SearchPathDirectory = .documentDirectory {
didSet {
AudioDataManager.shared.setDownloadDirectory(downloadDirectory)
}
}
}
}
+1 -1
View File
@@ -8,7 +8,7 @@
Pod::Spec.new do |s|
s.name = 'SwiftAudioPlayer'
s.version = '6.4.0'
s.version = '7.2.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.