RhythmBox
A Rhythm Box System for your iOS app
What can I do with RhythmBox?
- Generate a BPM or RPM Tempo
- Select the Time Signature
- Create a Rhythm pattern
Demo Project
To run the example project, clone the repo, and run pod install from the Example directory first.
Getting Started
Requirements
- iOS 8.0+ / tvOS 9.0+
- Xcode 8.0+
- Swift 3.0+
Installation with CocoaPods
CocoaPods is a 3rd-party dependency manager for Swift and Objective-C projects. For more information, refer to the CocoaPods Getting Started Guide. Otherwise, you can install CocoaPods with the following command:
$ gem install cocoapodsPodfile
To integrate RhythmBox into your Xcode project using CocoaPods, specify it in your Podfile:
source 'https://github.com/CocoaPods/Specs.git'
pod 'RhythmBox'Then, run the following command:
$ pod installInstallation Manually
To integrate RhythmBox into your Xcode project manually, just include the filest from /Pod/Classes/ folder in your Appβs Xcode project.
Quick Guide
Usage
To Generate a constant BPM signal is as simple as this.
1. Import class
import RhythmBox2. Create a RhythmBox class
let rhythmBox = RhythmBox(bpm: 120, timeSignature: (4,4))
3. Start the Rhythm
rhythmBox.perform {CurrentBeat, CurrentSubBeat, CurrentNote in
print("CurrentBeat", CurrentBeat)
print("CurrentSubBeat", CurrentSubBeat)
print("CurrentNote", CurrentNote)
return .resume
}
4. Stop the Rhythm
rhythmBox.stop()
Examples
Example 1
Create a 120 BPM signal with a block.
let rhythmBox = RhythmBox(bpm: 120)
rhythmBox.perform {CurrentBeat, CurrentSubBeat, CurrentNote in
print("CurrentBeat", CurrentBeat)
return .resume
}
Example 2
Create a 150 BPM signal with a time signature of 6/8 with default subdivision of 
let rhythmBox = RhythmBox(bpm: 150, timeSignature: (6,8))
rhythmBox.perform {CurrentBeat, CurrentSubBeat, CurrentNote in
print("CurrentBeat", CurrentBeat)
return .resume
}Example 3
Create a 90 BPM signal with a time signature of 3/4 and subdivision of 
let rhythmBox = RhythmBox(bpm: 90, timeSignature: (3,4), subdivision: "11")
rhythmBox.perform {CurrentBeat, CurrentSubBeat, CurrentNote in
print("CurrentBeat", CurrentBeat)
return .resume
}Example 4
Create a 90 BPM signal with a time signature of 3/4 and subdivision of 
let rhythmBox = RhythmBox(bpm: 90, timeSignature: (3,4), subdivision: "111")
rhythmBox.perform {CurrentBeat, CurrentSubBeat, CurrentNote in
print("CurrentBeat", CurrentBeat)
return .resume
}Example 5
Create a 90 BPM signal with a time signature of 3/4 and subdivision of 
let rhythmBox = RhythmBox(bpm: 90, timeSignature: (3,4), subdivision: "011")
rhythmBox.perform {CurrentBeat, CurrentSubBeat, CurrentNote in
print("CurrentBeat", CurrentBeat)
return .resume
}Example 6
Create a 90 BPM signal with a time signature of 3/4 and subdivision of 
let rhythmBox = RhythmBox(bpm: 90, timeSignature: (3,4), subdivision: "10111")
rhythmBox.perform {CurrentBeat, CurrentSubBeat, CurrentNote in
print("CurrentBeat", CurrentBeat)
return .resume
}Roadmap
- CocoaPods support
- Carthage support
- Swift Package Manager support
- Tests
Change Log
See Changelog.md
Contribute
Contributions are welcomed and encouraged
Author
- Manuel Escrig Ventura, @manuelescrig
- Email manuel@ventura.media
- Portfolio http://ventura.media
License
RhythmBox is available under the MIT license. See the LICENSE file for more info.

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.

