pia

PianoKeyboard

Piano keyboard view for iOS, in Swift

Showing:

Popularity

Downloads/wk

0

GitHub Stars

87

Maintenance

Last Commit

8mos ago

Contributors

1

Package

Dependencies

0

License

MIT

Categories

Readme

PianoKeyboard

CI

An iOS piano keyboard view for iPhone or iPad, written in Swift 5. Has an IBDesignable preview in interface builder with IBInspectable properties for:

  • Number of keys
  • Hide/show note names on keys
  • Black key height and width
  • Hightlight keys, with individual colour (optional play note)
  • Custom key labels
  • Latch, toggle key on/off

All images are drawn using Core Graphics.

Example app

alt tag

Installation

CocoaPods

To use via CocoaPods, add the following line to your Podfile:

pod 'PianoKeyboard'

Swift Package Manager

With Xcode 11+ you can add PianoKeyboard to your project using the Swift Package Manager. From the File menu select Swift Packages and then select Add Package Dependency. A dialogue then will request the package repository URL, enter:

https://github.com/garynewby/PianoKeyboard.git

Demo

The Example app demonstrates how to integrate and use PianoKeyboard in your project. It includes a simple AVAudioEngine/AVAudioUnitSampler based sound source.

Delegate Methods

func pianoKeyDown(_ keyNumber: Int) {
  // Called when the key corresponding to midi number keyNumber is pressed
}

func pianoKeyUp(_ keyNumber: Int) {
  // Called when the key corresponding to midi number keyNumber is released
}

Key Labels

A key's label must be assigned a value for it to show:

keyboard.setLabel(for: 60, text: "Do")
keyboard.setLabel(for: 62, text: "Re")
keyboard.setLabel(for: 64, text: "Mi")

for noteNumber in 65...72 {
    keyboard.setLabel(for: noteNumber, text: Note.name(for: noteNumber))
}

Requirements

  • Swift 5
  • SwiftLint (for Example app) brew install swiftlint

Author

Gary Newby

License

Licensed under the MIT License.

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100