A simple string synthesizer implementing the Karplus-Strong algorithm. Licensed under the GNU LGPL.

Dependencies:   mbed

Committer:
elleo
Date:
Wed Jan 09 22:46:12 2013 +0000
Revision:
0:ce6724069f0a
Migration to new repository

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elleo 0:ce6724069f0a 1 /*
elleo 0:ce6724069f0a 2 * libmbed-synth An audio synthesis library capable of running
elleo 0:ce6724069f0a 3 * alongside other activities.
elleo 0:ce6724069f0a 4 * Copyright (C) <2009> Michael Sheldon <mike@mikeasoft.com>
elleo 0:ce6724069f0a 5 *
elleo 0:ce6724069f0a 6 * This library is free software; you can redistribute it and/or
elleo 0:ce6724069f0a 7 * modify it under the terms of the GNU Library General Public
elleo 0:ce6724069f0a 8 * License as published by the Free Software Foundation; either
elleo 0:ce6724069f0a 9 * version 2 of the License, or (at your option) any later version.
elleo 0:ce6724069f0a 10 *
elleo 0:ce6724069f0a 11 * This library is distributed in the hope that it will be useful,
elleo 0:ce6724069f0a 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
elleo 0:ce6724069f0a 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
elleo 0:ce6724069f0a 14 * Library General Public License for more details.
elleo 0:ce6724069f0a 15 *
elleo 0:ce6724069f0a 16 * You should have received a copy of the GNU Library General Public
elleo 0:ce6724069f0a 17 * License along with this library; if not, write to the
elleo 0:ce6724069f0a 18 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
elleo 0:ce6724069f0a 19 * Boston, MA 02111-1307, USA.
elleo 0:ce6724069f0a 20 */
elleo 0:ce6724069f0a 21
elleo 0:ce6724069f0a 22 #ifndef MBED_SYNTH_H
elleo 0:ce6724069f0a 23 #define MBED_SYNTH_H
elleo 0:ce6724069f0a 24
elleo 0:ce6724069f0a 25 #include "mbed.h"
elleo 0:ce6724069f0a 26 #include "Instrument.h"
elleo 0:ce6724069f0a 27 #include "PluckedGuitar.h"
elleo 0:ce6724069f0a 28 #include "Note.h"
elleo 0:ce6724069f0a 29 #include "Notes.h"
elleo 0:ce6724069f0a 30
elleo 0:ce6724069f0a 31 class Synth {
elleo 0:ce6724069f0a 32
elleo 0:ce6724069f0a 33 public:
elleo 0:ce6724069f0a 34 Synth(PinName aout);
elleo 0:ce6724069f0a 35 void add_note(float frequency, float duration);
elleo 0:ce6724069f0a 36 void rest(double duration);
elleo 0:ce6724069f0a 37 void play();
elleo 0:ce6724069f0a 38 void pause();
elleo 0:ce6724069f0a 39 void stop();
elleo 0:ce6724069f0a 40 void set_repeat(bool repeat);
elleo 0:ce6724069f0a 41 void set_instrument(PluckedGuitar *instrument);
elleo 0:ce6724069f0a 42 void set_bpm(int bpm);
elleo 0:ce6724069f0a 43
elleo 0:ce6724069f0a 44 protected:
elleo 0:ce6724069f0a 45 AnalogOut _aout;
elleo 0:ce6724069f0a 46 Ticker _ticker;
elleo 0:ce6724069f0a 47 int _samplerate;
elleo 0:ce6724069f0a 48 double *_samples;
elleo 0:ce6724069f0a 49 int _sample_size;
elleo 0:ce6724069f0a 50 bool _repeat;
elleo 0:ce6724069f0a 51 int _position;
elleo 0:ce6724069f0a 52 int _bpm;
elleo 0:ce6724069f0a 53 PluckedGuitar *_instrument;
elleo 0:ce6724069f0a 54 Note *_notes;
elleo 0:ce6724069f0a 55 int _num_notes;
elleo 0:ce6724069f0a 56 void _proc_sample();
elleo 0:ce6724069f0a 57 };
elleo 0:ce6724069f0a 58
elleo 0:ce6724069f0a 59
elleo 0:ce6724069f0a 60 #endif