Skip to content

jbsohn/SteelSidekick-Classic

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

91 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SteelSidekick Classic

SteelSidekick Classic is the original cross-platform companion for pedal steel, lap steel, and related instruments. It visualizes chords and scales on interactive fret board, making it easy to explore tunings, pedal/knee lever setups, and note relationships.

This repository hosts the legacy "Classic" implementation that currently ships on iOS, Android, and macOS. A ground-up rewrite is in development for the AppStore release; use this codebase for maintenance or historical reference.

Why "Classic"?

  • Stable feature set shared by loyal users across App Store, Google Play, and macOS builds.
  • My first iOS app — plenty of lessons learned along the way, but Classic still delivers for longtime users.
  • Only receives critical fixes and compatibility updates—major new work targets the AppStore rewrite.
  • Remains GPL-2.0 licensed.

Features

  • Interactive fret board canvas, highlighting roots and intervals in real time.
  • Extensive library of lap steel and pedal steel copedents, plus custom guitar editor with pedals and knee levers.
  • Scale and chord explorers that switch between theory systems and root notes on the fly.
  • Toggle accidentals (sharps or flats) and “show all notes” overlays to match your learning style.
  • Data-driven configuration (JSON/settings files) so new tunings, adjustments, or scales can be added without recompiling.
  • Shared SGuitar C++ engine exposed to each client via SWIG-generated bindings for consistent behavior.

Repository Layout

  • Android/ – Android Studio project (Java + OpenGL) with Gradle + CMake for the SGuitar shared library.
  • iOS/ – Objective-C/Swift UIKit project, consuming SGuitar through Objective-C++ wrappers.
  • macOS/ – Swift AppKit/OpenGL project for desktop users, also backed by SGuitar.
  • SGuitar/ – Cross-platform C++ core, SWIG interface definitions, and embedded third-party dependencies (JsonBox, nanovg).
  • Resources/ – Tunings, scales, chord definitions, and shared images loaded by every platform.
  • Screenshots/ – Product imagery referenced by this README.
  • _config.yml – GitHub Pages configuration (kept for legacy docs).

Getting Started

Prerequisites

  • Git, CMake ≥ 3.4, and a C++11-capable toolchain.
  • SWIG 4.x installed and available on your PATH. Classic expects /usr/local/bin/swig; if absent the generated bindings in SGuitar/swig/java and SGuitar/swig/objc are reused.
  • Android Studio (2022.3+ recommended) with the Android SDK, NDK r21+ (or newer compatible release), and the CMake component.
  • Xcode 14+ with command-line tools for iOS and macOS development.
  • Optional: Homebrew or another package manager to install SWIG and OpenGL dependencies quickly.

Clone the repository and step into the root:

git clone [email protected]:jbsohn/SteelSidekick-Classic.git
cd SteelSidekick-Classic

All external libraries are committed in SGuitar/External, so no additional submodules are required.

Android

  1. Open Android/ in Android Studio, or run ./gradlew commands from that directory.
  2. Confirm your local NDK path in local.properties. Android Studio will prompt if it cannot find one.
  3. Install SWIG if you need to modify the C++ interface; Gradle’s runSwig task regenerates the JNI bindings before preBuild. Without SWIG, existing generated sources are reused.
  4. Build and run via Run > Run 'app' or the CLI: ./gradlew assembleDebug.
  5. Resources from ../Resources are packaged automatically into the APK via the custom assets.srcDirs mapping.

iOS

  1. Open iOS/SteelSidekick.xcodeproj in Xcode.
  2. Select the SteelSidekick scheme and an appropriate simulator or device target.
  3. Build and run (⌘R). The project mixes Objective-C, Objective-C++, and Swift; Xcode compiles the SGuitar bridge automatically.
  4. Assets and settings are bundled from Resources/ at build time.

macOS

  1. Open macOS/SteelSidekick.xcodeproj.
  2. Choose the SteelSidekick scheme.
  3. Run (⌘R) to launch the desktop app, which uses SwiftOpenGLView to render the shared fretboard.

SGuitar Core

  • Located in SGuitar/src and SGuitar/include, the SGuitar engine centralizes music theory logic, fret board rendering, and data loaders.
  • SWIG interface files live in SGuitar/swig and generate:
    • Java wrappers under SGuitar/swig/java/com/steelsidekick/sguitar for Android.
    • Objective-C++ glue consumed by iOS and macOS.
  • Third-party components: JsonBox (JSON parsing) and nanovg (vector rendering). Their licenses reside alongside their sources.

To regenerate bindings manually:

cd SGuitar/swig
swig -java -c++ -cppext .cpp -package com.steelsidekick.sguitar \
     -outdir java/com/steelsidekick/sguitar -o cpp/SG.cpp SGuitar.i

Adjust the flags to emit Objective-C wrappers if you change the interface.

Data and Customization

  • Resources/Guitars/ contains copedents (for example, E9, C6) with defined string tunings and pedal/knee lever steps.
  • Resources/Settings/Scales.settings, Chords.settings, and GuitarTypes.settings declare the theory library. Add entries here to surface new intervals or instrument families.
  • Resources/Images/ stores UI artwork shared by each platform.

Update these files to expand the library, then rebuild the relevant client.

Screenshots

iOS Android macOS

Roadmap

  • Active rewrite: migrating SteelSidekick to a modernized codebase for the AppStore distribution.
  • Classic branch: accepts critical bug fixes, platform compatibility tweaks, and data updates only.

License

SteelSidekick Classic is distributed under the terms of the GNU General Public License v2.0. Third-party libraries bundled in SGuitar/External retain their original licenses—review their headers for details.