https://github.com/fsynthlib/fsynth
Music synthesizer, written for fun and to learn stuff
https://github.com/fsynthlib/fsynth
functional-programming kotlin multiplatform music synthesizer
Last synced: 7 months ago
JSON representation
Music synthesizer, written for fun and to learn stuff
- Host: GitHub
- URL: https://github.com/fsynthlib/fsynth
- Owner: fsynthlib
- License: mit
- Created: 2018-06-05T21:42:43.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2021-12-31T14:15:46.000Z (almost 4 years ago)
- Last Synced: 2025-03-10T18:05:38.805Z (7 months ago)
- Topics: functional-programming, kotlin, multiplatform, music, synthesizer
- Language: Kotlin
- Homepage:
- Size: 2.22 MB
- Stars: 11
- Watchers: 1
- Forks: 1
- Open Issues: 18
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://app.circleci.com/pipelines/github/krzema12/fsynth) [](https://codecov.io/gh/krzema12/fsynth) [](https://github.com/KotlinBy/awesome-kotlin)
# What is fsynth?
It's a simple music synthesizer. It focuses on generating the waveforms from scratch, no samples are used. You can listen to it via the Web player, or using the cross-platform Java CLI. Read on to learn more.
Secondly, this project is my playground for learning Kotlin, functional programming (hence the "f" in "fsynth"), front-end development, Gradle, multiplatform projects, and other. It's also a place where I can focus more on quality than I normally could afford in a professional environment, because here I don't have a pressure to deliver on time. That's why my aim here is also to have as little technical debt as possible, and have as clean code as I can write.
Songs are described with such DSL:
```kotlin
val simpleDemoSong = song(
name = "Simple demo song",
beatsPerMinute = 120) {
track(instrument = organs, volume = 0.3f) {
note(1 by 8, D4)
note(1 by 16, Csharp4)
note(1 by 16, D4)
note(1 by 8, E4)
note(1 by 8, D4)pause(1 by 8)
chord(1 by 8, A3, D4, Fsharp4)
chord(1 by 4, B3, D4, G4)
}
}
```# How to listen
## Web
https://fsynthlib.github.io/fsynth/
## Java CLI
The CLI uses system sound output to play music.
You can use the CLI from the distribution package:
```
./gradlew :cli:installDist
cli/build/install/fsynth/bin/fsynth --song 'Van Halen - Jump (intro)'
```or during development, you can call the CLI through Gradle:
```
./gradlew :cli:run --args="--song 'Van Halen - Jump (intro)'"
```To see a list of available songs, call the CLI without arguments.
# Talk on [Tricity Kotlin User Group](https://www.facebook.com/groups/tricity.kotlin.user.group)
[![[TKUG #1] Piotr Krzemiński, 'Project fsynth: show and tell'](http://img.youtube.com/vi/mQEIn7Eqsio/0.jpg)](http://www.youtube.com/watch?v=mQEIn7Eqsio "[TKUG #1] Piotr Krzemiński, 'Project fsynth: show and tell'")
# Build prerequisites
The below dependencies won't be installed by Gradle:
* JDK + path to it in `JAVA_HOME`
(warning: use Oracle's JDK for now, there are some issue with OpenJDK; see #31 for details)
* Android SDK + path to it in `ANDROID_HOME`