Compare commits

..

8 Commits

Author SHA1 Message Date
tanhakabir 46ab845c8e Release 2.12.0 2021-02-22 22:47:40 -08:00
tanhakabir b597704115 Fix locating files in downloads
Co-Authored-By: fayinsky <38639193+fayinsky@users.noreply.github.com>
2021-02-22 22:42:27 -08:00
tanhakabir 889e2257ab Add documentation for supported file types (#63) 2021-02-22 22:37:26 -08:00
tanhakabir e962008b4c Fix freezing on seek (#62) 2021-02-22 22:32:54 -08:00
tanhakabir d6c1d13d7d create API for setting preference for downloading on cellular data (#61)
* set cellular downloads to true to allow for simulator downloads

* add documentation
2021-02-22 22:13:36 -08:00
tanhakabir 922a794d09 remove noisey logs 2021-02-22 21:48:34 -08:00
tanhakabir 96092a208c Add files per Xcode 9.3 2021-02-22 17:37:07 -08:00
tanhakabir b71729035d Open up access to playerNode (#60) 2021-02-22 17:34:59 -08:00
11 changed files with 74 additions and 9 deletions
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
@@ -103,6 +103,8 @@ class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
SAPlayer.Downloader.allowUsingCellularData = true
SAPlayer.shared.DEBUG_MODE = true
isPlayable = false
+10
View File
@@ -123,6 +123,10 @@ SwiftAudioPlayer is available under the MIT license. See the LICENSE file for mo
Access the player and all of its fields and functions through `SAPlayer.shared`.
### Supported file types
Known supported file types are `.mp3` and `.wav`.
### Playing Audio (Basic Commands)
To set up player with audio to play, use either:
@@ -199,6 +203,12 @@ And use the following to stop any active or prevent future downloads of the corr
func cancelDownload(withRemoteUrl url: URL)
```
By default downloading will be allowed on cellular data. If you would like to turn this off set:
```swift
SAPlayer.Downloader.allowUsingCellularData = false
```
You can also retrieve what preference you have set for cellular downloads through `allowUsingCellularData`.
### Manage Downloaded
Use the following to manage downloaded audio files.
+10
View File
@@ -290,6 +290,16 @@ class AudioStreamEngine: AudioEngine {
updateNetworkBufferRange()
}
override func pause() {
queue.async { [weak self] in
self?.pauseHelperDispatchQueue()
}
}
private func pauseHelperDispatchQueue() {
super.pause()
}
override func invalidate() {
super.invalidate()
converter.invalidate()
@@ -83,7 +83,7 @@ public enum ConverterError: LocalizedError {
Log.warn("Weird unexpected reader error. Should not have happened")
return "Weird unexpected reader error. Should not have happened"
case .cannotCreatePCMBufferWithoutConverter:
Log.warn("Could not create a PCM Buffer because reader does not have a converter yet")
Log.debug("Could not create a PCM Buffer because reader does not have a converter yet")
return "Could not create a PCM Buffer because reader does not have a converter yet"
case .throttleParsingBuffersForEngine:
Log.warn("Preventing the reader from creating more PCM buffers since the player has more than 60 seconds of audio already to play")
+6 -1
View File
@@ -32,6 +32,7 @@ protocol AudioDataManagable {
var allowCellular: Bool { get set }
func setBackgroundCompletionHandler(_ completionHandler: @escaping () -> ())
func setAllowCellularDownloadPreference(_ preference: Bool)
func clear()
@@ -51,7 +52,7 @@ protocol AudioDataManagable {
}
class AudioDataManager: AudioDataManagable {
var allowCellular: Bool = false
var allowCellular: Bool = true
static let shared: AudioDataManagable = AudioDataManager()
@@ -99,6 +100,10 @@ class AudioDataManager: AudioDataManagable {
backgroundCompletion = completionHandler
}
func setAllowCellularDownloadPreference(_ preference: Bool) {
allowCellular = preference
}
func attach(callback: @escaping (_ id: ID, _ progress: Double)->()) {
globalDownloadProgressCallback = callback
}
+9 -6
View File
@@ -103,12 +103,15 @@ extension FileStorage {
}
static func locate(_ id: ID) -> URL? {
let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
for url in urls {
if url.absoluteString.contains(id) && url.pathExtension != "" {
_ = getUrl(givenId: id, andFileExtension: url.pathExtension)
return url
let folderUrls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
guard folderUrls.count != 0 else { return nil }
if let urls = try? FileManager.default.contentsOfDirectory(at: folderUrls[0], includingPropertiesForKeys: nil) {
for url in urls {
if url.absoluteString.contains(id) && url.pathExtension != "" {
_ = getUrl(givenId: id, andFileExtension: url.pathExtension)
return url
}
}
}
return nil
+11
View File
@@ -56,6 +56,17 @@ public class SAPlayer {
}
}
/**
Access the player node of the engine. Node is nil if player has not been initialized with audio.
- Important: Changes to the engine and this node are not safe guarded, thus unknown behaviour can arise from changing the engine or this node. Just be wary and read [documentation of AVAudioEngine](https://developer.apple.com/documentation/avfoundation/avaudioengine) well when modifying,
*/
public var playerNode: AVAudioPlayerNode? {
get {
return player?.playerNode
}
}
/**
Corresponding to the overall volume of the player. Volume's default value is 1.0 and the range of valid values is 0.0 to 1.0. Volume is nil if no audio has been initialized yet.
*/
+9
View File
@@ -100,5 +100,14 @@ extension SAPlayer {
public static func setBackgroundCompletionHandler(_ completionHandler: @escaping () -> ()) {
AudioDataManager.shared.setBackgroundCompletionHandler(completionHandler)
}
/**
Whether downloading audio on cellular data is allowed. By default this is set to `true`.
*/
public static var allowUsingCellularData = true {
didSet {
AudioDataManager.shared.setAllowCellularDownloadPreference(allowUsingCellularData)
}
}
}
}
+1 -1
View File
@@ -8,7 +8,7 @@
Pod::Spec.new do |s|
s.name = 'SwiftAudioPlayer'
s.version = '2.11.0'
s.version = '2.12.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.