YampaSynth-0.1.2: YampaSynth.cabal
name: YampaSynth
version: 0.1.2
cabal-Version: >= 1.2
license: BSD3
license-file: LICENSE
copyright: (c) 2007-2010 George Giorgidze and Henrik Nilsson
author: George Giorgidze and Henrik Nilsson
maintainer: George Giorgidze (GGG at CS dot NOTT dot AC dot UK)
homepage: http://www.cs.nott.ac.uk/~ggg/
stability: experimental
category: Sound, Music
synopsis: Software synthesizer
description:
YampaSynth is a software synthesizer implemented in Yampa, domain specific language embedded in Haskell. It contains a little framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications:
.
* "yampasynth-wav" is an application which synthesizes a MIDI music and writes result into a WAVE audio file.
.
* "yampasynth-openal" is an application which synthesizes a MIDI music and sends audio data in real-time to a sound card. We use Haskell binding of OpenAL library as an interface to audio hardware.
.
* "yampasynth-gtk" is an application with the simple graphical user interface which allows you to play a music with various instruments in real-time using the keyboard of your computer. We use Haskell binding of GTK library for GUI programming and Haskell binding of OpenAL library as an interface to audio hardware.
.
Software synthesizer uses the MIDI standard as a music description and the SoundFont standard as an instrument description.
.
Implementation is based on the paper "Switched-on Yampa: Declarative Programming of Modular Synthesizers", by George Giorgidze and Henrik Nilsson (<http://www.cs.nott.ac.uk/~ggg/publications/padl2008.pdf>), In Proceedings of 10th International Symposium on Practical Aspects of Declarative Languages, San Francisco, CA, USA, January 7-8, 2008.
.
This is mainly a proof of concept, but already useful to some extent.
build-type: Simple
data-files: gui/YampaSynth.glade, README
flag wav
description: Builds yampasynth-wav executable which synthesizes a MIDI music and writes result into a WAVE audio file.
flag openal
description: Builds yampasynth-openal executable which synthesizes MIDI music and sends audio data in real-time to a sound card. We use Haskell binding of OpenAL library as an interface to audio hardware.
flag gtk
description: Builds yampasynth-gtk executable with simple graphical user interface which allows you to play music with various instruments in real-time using keyboard of your computer. We use Haskell binding of GTK library for GUI programming and Haskell binding of OpenAL library as an interface to audio hardware.
executable yampasynth-wav
if flag (wav)
build-depends: base < 5, array, bytestring, containers, Yampa, HCodecs
else
buildable: False
hs-source-dirs: src
main-is: Main/Wav.hs
other-modules: SynthBasics, SynthParams, MidiSynth, Player.Wav
ghc-options: -O3 -Wall
executable yampasynth-openal
if flag (openal)
build-Depends: base < 5, array, containers, OpenAL, Yampa, HCodecs
else
buildable: False
extensions: FlexibleInstances, UndecidableInstances
hs-source-dirs: src
main-is: Main/OpenAL.hs
other-modules: SynthBasics, SynthParams, MidiSynth, Player.OpenAL
ghc-options: -threaded -O3 -Wall
executable yampasynth-gtk
if flag (gtk)
build-Depends: base < 5, array, containers, OpenAL, glade, gtk, Yampa, HCodecs
else
buildable: False
extensions: FlexibleInstances, UndecidableInstances
hs-source-dirs: src
main-is: Main/Gtk.hs
other-modules: SynthBasics, SynthParams, MidiSynth, Player.OpenAL, Player.Gtk
ghc-options: -threaded -O3 -Wall