AudioKit Synth One: Open-Source iOS Synthesizer App

AudioKit Synth One

We've open-sourced the code for this synthesizer so that everyone is able to make changes to the code, introduce new features, fix bugs, improve efficiency, and keep the synthesizer up-to-date with all new capabilities of the base operating system.

If you're new to AudioKit, you can learn more: here. This code and app is made possible by all the contributors to AudioKit, code here. Many of the features of Synth One are availble as modules in AudioKit, allowing you easy access to filters, reverbs, effects, and other DSP processing.

App Store Location

Master and Develop Branches

The two primary branches of this repository are intended to be used as follows:

  • Master branch will work with the current release version of AudioKit - ie. AudioKit's "master" branch. Changes should not be made on this branch so that it can be kept as stable as possible.
  • Develop branch is intended to be built with code from Develop branch of AudioKit. Pull requests should be made to this branch.

Installation

You must install the pods that we depend on before you can compile the project. To do so, run the following at the root of the project:

  • pod repo update
  • pod install

You may uncomment the line in Podfile to switch to our cutting-edge staging (unstable) releases of AudioKit, as opposed to the stable releases in the mainstream CocoaPods specs.

Requirements

  • Mac or computer running Xcode (Free Download)
  • Knowledge of programming, specifically Swift, AudioKit, C/C++, & the iOS SDK

If you are new to iOS development, we recommend the Ray Wenderlich videos. There is also a great tutorial on basic synthesis with AudioKit here.

Beginner? We have two additional code examples. There is a simple Swift Synth and a Sample Player. A fun exercise might be replacing the sample player code engine with synthesis.

Documentation

We intend to have every major section of the code placed within its own folder, with an included
README.md file, like this one. This file should explain the contents of the folder and give developers
any hints about what could be improved.

This folder's contents

  • AudioKitSynthOne/ - This folder contains most of the source code
  • AudioKitSynthOne.xcodeproj - This file is a part of the workspace, which you should open instead
  • AudioKitSynthOne.xcworkspace - This is the file you should open with Xcode, it contains reference to both the project files for the synth code and associated Pods
  • OneSignalNotificationServiceExtension/ - code for a third party extension we use
  • Podfile and Podfile.lock - Cocoapods configuration files
  • .swiftlint.yml - Swiftlint configuration

Opportunities for Contributing

Here's a few ideas for you to contribute to this historic project:

  • Add accessibility functionality to AudioKit Synth One. We have received multiple requests from visually impaired musicians. Help make Synth One accessible to all musicians.
  • Midi Learn Matrix. Create a view that will allow users to easily change the MIDI Learn assignments.
  • Localizations in your language
  • Create iPhone or Universal interface
  • Ability to search presets
  • Make TouchPads assignable
  • Add an EQ Panel (8-band/16-band/etc)
  • Improve Arp (Add Gate, Beat Divisions, etc)
  • Add a trance/rhythm gate panel
  • Add a side chain/volume ducking panel
  • Add the ability for Sequencer to modulate more parameters
  • Double tap knobs to go to defaults
  • Filter key tracking options & settings
  • MIDI out
  • Sample & Hold

If you have audio development experience and want to be involved with contributing to the app store version of Synth One, please email hello@audiokitpro.com

There are a few major updates we intend for this synth:

  • Storyboards are a source of bugs on large scale projects like this one. We will replace storyboards with programmatically generated views.
  • Too much business logic is inside the "Manager" view controller. We have done our best to separate out the functions of this view controller into well defined extensions, but more work could be done with this.

Code Usage

You are free to:

(1) Use this code as a learning tool.
(2) Re-skin this app (change the graphics), modify the controls, and upload to the app store.
(3) Change the graphics, and include this as part of a bigger app you are building.
(4) Contribute code back to this project and improve the code for other people

If you use any code, it would be great if you gave this project some credit or a mention. The more love this code receives, the better we can make it for everyone. And, always give AudioKit a shout-out when you can! :)

If you make an app with this code, please let us know! We think you're awesome, and would love to hear from you and/or feature your app.

IMPORTANT: You must change the graphics if you upload this to the app store.

IMPORTANT: You must fill in your own private API keys for AudioBus and others in the Private.swift file to match your own project. The default placeholder values are not suitable for distribution.

GitHub