fluxamasynth

hello i am just trying to get a sound out of my fluxamasynth board. I have the right drivers for my computer "arduino uno r3"
the fluxamasynth is connect to the uno.

midi2fluxama-1.01

http://ardublog-codeman.blogspot.com/

i am using this guys code. and it won't compile.

it says

fluxamasynth does not name type

for this data

Fluxamasynth synth;

sorry all that I annoyed you all with the bagpipe chanter theroy

Hello again.

Do you have the fluxamasynth library installed in the sketches/ libraries folder?
Do you have the library included at the top of your sketch?
Also, the names are all case sensitive, so check you are using the right case.

Maybe post the code you have so we can read that, even if it is the same as what is on the web site.

//
// SoftFluxaSynthSMF.pde: Simple player for byte code files which can be
//                        generated  from MIDI format 0 or 1 files with
//                        midi2fluxama.pl
//
// Copyrights:
// Copyright (C) 2012 Holger Wirtz <dcoredump@gmail.com>
//
// This program may be modified and distributed under the
// terms of the GNU General Public License v3. You should have received
// a copy of the GNU General Public License along with this
// program; if not, write to the Free Software Foundation, Inc.
// 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
//
// USE THIS PROGRAM AT YOUR OWN RISK!
//
// This program code uses "Fluxamasynth_NSS.h" which ca be found at
// http://wiki.moderndevice.com/uploads/MD/Fluxamasynth.zip
//
// The code is testet with Arduino-0.22 but should be easy
// portable to Arduino-1.0.
//
// PREREQUIREMENTS
// You also need the following libraries:
// NewSoftSerial.h 	http://arduiniana.org/libraries/newsoftserial/
// Flash.h		http://www.pjrc.com/teensy/td_libs_MsTimer2.html
// FlexiTimer2.h	http://arduiniana.org/libraries/flash/
//
// See http://arduino.cc where to get the libraries and how to install them.
//
// If someone has MIDI data which sounds amazing and is licensed "free" please
// drop me the MIDI oder header file for including in this distribution.
//

#include <Fluxamasynth_NSS.h>
#include <NewSoftSerial.h>   // for software serial (using pin 4)
#include <Flash.h>           // needed for storing the song data in PROG_MEM
#include <FlexiTimer2.h>     // for correct, interrupt based timing
#include "data.h"            // this is the file with the data generated by
                             // midi2fluxama.pl

#define MASTER_VOL_MAX 100    // the maximum volume

Fluxamasynth synth;
unsigned int sp;  // the song pointer
unsigned long tempo=500000L;
const int events=midi_data.count();

void setup()
{
  synth.midiReset();
  synth.setMasterVolume(MASTER_VOL_MAX);
  event();
}

void loop()
{
  ;
}

void event()
{
  unsigned long tmp_ulong=0UL;
  unsigned int tmp_uint=0,bend=0,wait=0,tmp_sp=0;
  byte i=0;

  // save the actual song pointer
  tmp_sp=sp;

  if(sp<events)
  {
    // special handling of command 7 (delay)
    if((midi_data[sp+1]&0x0f)==7)
    {
      // for delaying next event >255 ticks
      for(i=0;i<2;i++)
      {
        tmp_uint=(unsigned int)midi_data[sp+i+1];
        wait+=tmp_uint<<((1-i)*8);
      }
      sp+=4;
    }

    if(midi_data[tmp_sp]+wait>0)
    {
      // timer for the next event
      FlexiTimer2::set((((float)tempo/1000)*(((float)midi_data[tmp_sp]+wait)/ppqn)),event);
      FlexiTimer2::start();
    }

    // check the type of event
    switch(midi_data[sp+1]&0x0f)
    {
    case 0:  // NoteOn
      synth.noteOn(midi_data[sp+1]>>4,midi_data[sp+2],midi_data[sp+3]);
      sp+=4;
      break;
    case 1:  // NoteOff
      synth.noteOff(midi_data[sp+1]>>4,midi_data[sp+2]);
      sp+=3;
      break;
    case 2:  // Controller
      synth.setChannelController(midi_data[sp+1]>>4, midi_data[sp+2],midi_data[sp+3]);
      sp+=4;
      break;
    case 3:  // PitchBend
      for(i=0;i<2;i++)
      {
        tmp_uint=(unsigned int)midi_data[sp+i+1];
        bend+=tmp_uint<<((1-i)*8);
      }
      synth.pitchBend(midi_data[sp+1]>>4, bend);
      sp+=4;
      break;
    case 4:  // ProgramChange
      synth.programChange(0,midi_data[sp+1]>>4, midi_data[sp+2]);
      sp+=3;
      break;
    case 5:  // Aftertouch
      synth.setChannelAftertouch(midi_data[sp+1]>>4, midi_data[sp+2]);
      sp+=3;
      break;
    case 6:  // Tempo
      tempo=0UL;
      for(i=0;i<4;i++)
      {
        tmp_ulong=(unsigned long)midi_data[sp+i+2];
        tempo+=tmp_ulong<<((3-i)*8);
      }
      sp+=6;
      break;
    }

    if(midi_data[tmp_sp]==0)
      event();
  }
  else
  {
    // after the end of the song reset the Fluxamasynth
    synth.midiReset();
    FlexiTimer2::set(5000,event);
    FlexiTimer2::start();
    return;
  }
}

///i just put the fluxamasynth librarys in the audio librarys folder
thanks on that tip
:slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile:
after adding the librarys
says "byte not declarded."

Can you please edit your post and add code tags (use the # button) around your code post, otherwise we get smiley faces and italics when the post is shown.

Replace byte with unit8_t.

Unit8_t or 8_t

uint8_t.

The spell check corrected when it did not need to, sorry.

const int events=midi_data.count();

"midi data" says not declared in this scope

That look like something that would be in the the converted data file header that you called data.h. My guess is that the file is just one big array called midi_data with the data to be played out.

What is the content of data.h?

data.h? :blush:

i did'nt get any thing like this.

Data.h is the last of the header files that you are including (see your sketch). from the use of "" it should be local to where the sketch is. The guy that did the blog has a program that creates data for this sketch from a midi file. I assume that this data array is what it creates. He called his include file something different on the web site sketch.

:blush: :blush: :blush:??????????
can't find data.h anywhere.

#include "data.h"            // this is the file with the data generated by
                             // midi2fluxama.pl

I don't know how to use midi2fluxama.pl in the arduino compiler

I didn't see it here. http://ardublog-codeman.blogspot.com/2012/01/midi-fluxmasynth-converter-version-10.html

how do I generate data.h with midi2flux.pl

breaking news i have just paid for a midi controler board "arduino" i hope this works for my fluxamasynth

I think that utility runs on the PC not the arduino. Maybe you can ask the guy with the blog how to use it? This is not something we here can help with unless we have done this before.

What controller board did you pay for?

this is alot like this one.

I think i know the problem. there are diffrent fluxamasynth librarys i may have downloaded the wrong one.h

oh... I have updataed the librarys and the compiler still says "byte has not been declared" even with the program "mary had a little lamb"

:frowning: :frowning: :frowning:

in such a dumb way i forgot to move pin 4 to pin 1.
now it plays a scale. do i have to format the fluxamasynth or just reprogram it.

To solve the byte problem you do the same as before.

That midi comms shield will allow you to communicate with a synthesiser or software on the PC willplay a midi stream. I don't think it will help with the fuxamasynth. On the other hand you will be able to use the new shield to play midi files from the arduino using the library that I wrote (see other posts on this forum). :slight_smile:

Are you saying i need a new shield to do this program? :stuck_out_tongue:
I tried "mary had a little lamb" and i used uint8_t and it still didn't work. :stuck_out_tongue:
My fluxamasynth plays a scale with a example in the arduino software.

You said you were getting a new shield. I just said that this was different from the fluxamasynth shield and can't see how it helps that to play on the fluxamasynth.

You have a fundamental problem with the shield and the example sketches you are using - you need to feed it data in a certain format that is created by the translation utility. You need to get that sorted out, pus some incompatibility because the examples are written using byte. There is no reason it should not work but you need to understand what the code is doing so you can solve the problems.

Have you looked where the data for Mary had a little lamb is to see if they are using byte there?

it's looking in the fluxamasynth.h libraries and it says byte not declared. :frowning:
I am using the old libraries and I can't download the new ones
here

oh the data.h is genrated by a midi file with midi2fluxama.pl
it will run on windows. 8)

why do I have to rename byte to uint8_t? do i have to do this with all byte commands? :0
and parameters to byte, channel and other ones?

C:\arduino\arduino-1.0.3\libraries\Fluxamasynth/Fluxamasynth.h:21
:22: error: WProgram.h: No such file or directory

just found out that Wprogram.h is renamed to Arduino.h in later relesses

will this additional code work?

#if (ARDUINO >= 100)
#include <Arduino.h>
#else
#include <WProgram.h>
#endif

That code will work.

Byte is no longer supported by the new arduino libraries and it is now renamed to uint8_t, so you either use #define to rename, as suggested above, or rename all instances. They are the same unit of data storage, just different names.