Jukebox alternatives and similar libraries
Based on the "Audio" category.
Alternatively, view Jukebox alternatives based on common mentions on social networks and blogs.
-
EZAudio
An iOS and macOS audio visualization framework built upon Core Audio useful for anyone doing real-time, low-latency audio processing and visualizations. -
PandoraPlayer
🅿️ PandoraPlayer is a lightweight music player for iOS, based on AudioKit and completely written in Swift. -
AudioPlayer
AudioPlayer is syntax and feature sugar over AVPlayer. It plays your audio files (local & remote). -
IQAudioRecorderController
A drop-in universal library allows to record audio within the app with a nice User Interface. -
TheAmazingAudioEngine2
The Amazing Audio Engine is a sophisticated framework for iOS audio applications, built so you don't have to.
SaaSHub - Software Alternatives and Reviews
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Jukebox or a related project?
README
Jukebox is an iOS audio player written in Swift.
Contents
- Features
- Installation
- Supported OS & SDK versions
- Usage
- Handling remote events
- Public interface
- Delegation
- License
- Contact
Features
- [x] Support for streaming both remote and local audio files
- [x] Support for streaming live audio feeds
- [x] Functions to
play
,pause
,stop
,replay
,play next
,play previous
,control volume
andseek
to a certain second. - [x] Background mode integration with
MPNowPlayingInfoCenter
Installation
CocoaPods
CocoaPods is a dependency manager for Cocoa projects.
CocoaPods 0.36 adds supports for Swift and embedded frameworks. You can install it with the following command:
$ gem install cocoapods
To integrate Jukebox
into your Xcode project using CocoaPods, specify it in your Podfile
:
pod 'Jukebox'
Then, run the following command:
$ pod install
Carthage
Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.
You can install Carthage with Homebrew using the following command:
$ brew update
$ brew install carthage
To integrate Jukebox
into your Xcode project using Carthage, specify it in your Cartfile
:
github "teodorpatras/Jukebox"
Run carthage update
to build the framework and drag the built Jukebox.framework
into your Xcode project.
Manually
If you prefer not to use either of the aforementioned dependency managers, you can integrate Jukebox into your project manually.
Supported OS & SDK versions
- iOS 8.0+
- Xcode 7+
Usage
Prerequisites
- In order to support background mode, append the following to your
Info.plist
:
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
- If you want to stream from
http://
URLs, append the following to yourInfo.plist
:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Getting started
1) Create an instance of Jukebox
:
// configure jukebox
jukebox = Jukebox(delegate: self, items: [
JukeboxItem(URL: NSURL(string: "http://www.noiseaddicts.com/samples_1w72b820/2514.mp3")!),
JukeboxItem(URL: NSURL(string: "http://www.noiseaddicts.com/samples_1w72b820/2958.mp3")!)
])
2) Play and enjoy:
jukebox?.play()
Handling remote events
In order to handle remote events, you should do the following:
- First, you need to call for receiving remote events:
UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
- Secondly, override
remoteControlReceivedWithEvent(event:)
:
override func remoteControlReceived(with event: UIEvent?) {
if event?.type == .remoteControl {
switch event!.subtype {
case .remoteControlPlay :
jukebox.play()
case .remoteControlPause :
jukebox.pause()
case .remoteControlNextTrack :
jukebox.playNext()
case .remoteControlPreviousTrack:
jukebox.playPrevious()
case .remoteControlTogglePlayPause:
if jukebox.state == .playing {
jukebox.pause()
} else {
jukebox.play()
}
default:
break
}
}
}
Public interface
Public methods
/**
Starts item playback.
*/
public func play()
/**
Plays the item indicated by the passed index
- parameter index: index of the item to be played
*/
public func play(atIndex index: Int)
/**
Pauses the playback.
*/
public func pause()
/**
Stops the playback.
*/
public func stop()
/**
Starts playback from the beginning of the queue.
*/
public func replay()
/**
Plays the next item in the queue.
*/
public func playNext()
/**
Restarts the current item or plays the previous item in the queue
*/
public func playPrevious()
/**
Restarts the playback for the current item
*/
public func replayCurrentItem()
/**
Seeks to a certain second within the current AVPlayerItem and starts playing
- parameter second: the second to seek to
- parameter shouldPlay: pass true if playback should be resumed after seeking
*/
public func seek(toSecond second: Int, shouldPlay: Bool = false)
/**
Appends and optionally loads an item
- parameter item: the item to be appended to the play queue
- parameter loadingAssets: pass true to load item's assets asynchronously
*/
public func append(item: JukeboxItem, loadingAssets: Bool)
/**
Removes an item from the play queue
- parameter item: item to be removed
*/
public func remove(item: JukeboxItem)
/**
Removes all items from the play queue matching the URL
- parameter url: the item URL
*/
public func removeItems(withURL url : URL)
Public properties
Property | Type | Description |
---|---|---|
volume |
Float |
volume of the player |
currentItem |
JukeboxItem |
object encapsulating the meta of the current player item |
Delegation
Jukebox
defines a delegate protocol which you can use if you want to be announced when about custom events:
public protocol JukeboxDelegate: class {
func jukeboxStateDidChange(_ state : Jukebox)
func jukeboxPlaybackProgressDidChange(_ jukebox : Jukebox)
func jukeboxDidLoadItem(_ jukebox : Jukebox, item : JukeboxItem)
func jukeboxDidUpdateMetadata(_ jukebox : Jukebox, forItem: JukeboxItem)
}
License
Jukebox
is released under the MIT license. See the LICENSE
file for details.
Contact
You can follow or drop me a line on my Twitter account. If you find any issues on the project, you can open a ticket. Pull requests are also welcome.
*Note that all licence references and agreements mentioned in the Jukebox README section above
are relevant to that project's source code only.