//_______________________________________________________________________
static Boolean connect (short ref)
{
	MidiName name = MidiGetName(ref);
	if (!name) return false;
	if (gAddr.SetAddress (name)) {
		MidiConnect (gSrc, ref, true);
		return true;
	}
	if (strlen(name) >= 31) {
		MidiConnect (gSrc, ref, true);
		return true;
	}
	return false;
}
示例#2
0
void test16 ()
{
        printf("\n\n<TEST 16> send a Lyric to 'msDisplay'\n");
        printf("YOU NEED TO LAUNCH 'msDisplay' FOR THIS TEST!!!\n");
        DebugStr ("--> use g or G to send a Lyric to 'msDisplay' and go to the next test\n");

        if (MidiGetNamedAppl ("msDisplay") < 0) {
                printf("You need to launch msDisplay for this test\n");
        } else {
                MidiConnect(0, MidiGetNamedAppl ("msDisplay"), false);
                MidiConnect(ourRefNum, MidiGetNamedAppl ("msDisplay"), true);
                sendLyric("Hello");
        }
}
示例#3
0
void test10 ()
{
        printf("\n\n<TEST 10> connect the output of 'MidiShare Tutorial' to 'MidiShare'\n");
        DebugStr ("--> use g or G to make the connection and go to the next test\n");

        MidiConnect(ourRefNum, 0, true);
}
示例#4
0
void test19 ()
{
        printf("\n\n<TEST 19> thru incoming events\n");
        DebugStr ("--> use g or G to start thruing incoming events\n");

        MidiFlushEvs(ourRefNum);
  //      MidiSetRcvAlarm(ourRefNum, thru);
        MidiConnect(0, ourRefNum, true);
        MidiConnect(ourRefNum, 0, true);

        printf("Now play on the Midi keyboard\n");
        DebugStr ("--> use g or G to stop thruing incoming events and go to the next test\n");

        MidiConnect(0, ourRefNum, false);
 //       MidiSetRcvAlarm(ourRefNum, 0);
}
示例#5
0
void test20 ()
{
        printf("\n\n<TEST 20> transpose and delay in real-time\n");
        DebugStr ("--> use g or G to start transposing incoming events\n");

        MidiFlushEvs(ourRefNum);
//        MidiSetRcvAlarm(ourRefNum, transposeAndDelay);
        MidiConnect(0, ourRefNum, true);
        MidiConnect(ourRefNum, 0, true);

        printf("Now play on the Midi keyboard, notes are transposed and delayed\n");
        DebugStr ("--> use g or G to stop transposing events and go to the next test\n");

        MidiConnect(0, ourRefNum, false);
    //    MidiSetRcvAlarm(ourRefNum, 0);
}
示例#6
0
/* ----------------------------------------------------------------------------
MidiShare setup
---------------------------------------------------------------------------- */
Boolean SetUpMidi(void)
{
  if ( !MidiShare() ) {
                printf("MidiShare is not installed\n");
                return false;
  }
  myRefNum = MidiOpen(AppliName);
  if ( myRefNum == MIDIerrSpace ) {
                printf("Too much MidiShare client applications\n");
                return false;
  }
  MidiSetRcvAlarm(myRefNum,ReceiveEvents);
  InstallFilter();
  MidiConnect (myRefNum, 0, true);
  MidiConnect (0, myRefNum, true);
  return true;
}
示例#7
0
/* ------------------------------------------------------------------------- */
int InitMidi()
{
if ( !MidiShare())
{
sprintf (string_Last_Order,"MidiShare not available\n");
}
InitTblLibEv();
myRefNum = MidiOpen(AppliName);
if (myRefNum < 0) {sprintf(string_Last_Order,"MidiOpen failed!");}

MidiSetRcvAlarm(myRefNum,ReceiveEvents);
MidiConnect(0, myRefNum, true);//in
MidiConnect(myRefNum,0,true);//out
myFilter = MidiNewFilter();
InstallFilter( myRefNum,myFilter ); //filtrage

return(0);
}
示例#8
0
void OpenSeq(TSequencer * s, char * n)
{
        midiFILE *      f;
        int             i;
        
 // initialisation
 
 	s->ref = MidiOpen("msMidiPlayer");
        s->state = idle;
        s->seq = MidiNewSeq();
        s->playtask = 0;
	s->looptask = 0;
		
        
 // read the midi file
        
        f = MidiFileOpen(n, MidiFileRead);
		
        if (!f) {
                printf ("Error opening MidiFile %s (%d)\n", n, MidiFile_errno);
                CloseSeq(s);
                exit(MidiFile_errno);
        }
        for (i = f->ntrks; i; i--){ MixSeq( MidiFileReadTrack(f), s->seq); }
	           
        if (smpte(f)) 
                TrsfSmpteSeq(s->seq, frame_par_sec(f), ticks_par_frame(f));
        else
                TrsfTempoSeq(s->seq, ticks_par_quarterNote(f));
	
	if (First(s->seq))
	 	printf("File : %s, Format : %d, Tracks : %d, Length : %d, Duration : %d\n",
                        n, f->format, f->ntrks, LenSeq(s->seq), Date(Last(s->seq)) );
	           
        (void) MidiFileClose(f);
       
 // installation
    	
        MidiSetInfo(s->ref, s);
        MidiSetRcvAlarm(s->ref, NullRcv);
        
        MidiConnect(s->ref, 0, 1);
        MidiConnect(0, s->ref, 1);
}
示例#9
0
int main(int argc, char *argv[] )
{
	GtkWidget *window, *vbox;
	char applName[256];

	// Initialisations
	gtk_init (&argc, &argv);
	StripPath (argv[0], applName);
	CheckMidiShare (applName);
	gRefNum = MidiOpen(applName);
	MidiSetRcvAlarm (gRefNum,rcv_alarm);
	MidiConnect(gRefNum,0,1);
	MidiConnect(0,gRefNum,1);

	// Window definition
	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(window), applName);
	gtk_container_set_border_width(GTK_CONTAINER(window), 10);

	vbox = gtk_vbox_new (FALSE, 10);
	
	// Add controllers
	add_time (vbox);
	add(vbox, gtk_hseparator_new());
	add_buttons (vbox);
	
	gtk_container_add(GTK_CONTAINER(window), vbox);	
	gtk_widget_show_all (window);
	
	gtk_signal_connect(GTK_OBJECT(gRun), "clicked", GTK_SIGNAL_FUNC(start_stop_action), NULL);
	gtk_signal_connect(GTK_OBJECT(gReset), "clicked", GTK_SIGNAL_FUNC(reset_action), NULL);

	// Connexion of signals	
	gtk_signal_connect(
			GTK_OBJECT(window), "destroy", 
			GTK_SIGNAL_FUNC(my_delete_action), NULL
	);
	
	gtk_main ();

	return(0);
}
示例#10
0
static void __benchMark10(short refNum)
{
  long i, d = MidiGetTime() - 16;

  MidiConnect(refNum, 0, true);
  for (i = 1; i <= 16; i++) {
    MidiEvPtr e = MidiNewEv (typeKeyOn);
    if (e) {
      Chan(e) = i - 1;
      MidiTask (keyOnProcess, d + i, refNum, 16, (long)e, 0);
    }
  }
}
示例#11
0
/*____________________________________________________________________*/
int Open (void)
{
	refNum= MidiOpen( ApplName);
	if (refNum > 0) {
		myFilterPtr = NewFilter();
		if (!myFilterPtr) {
			Close ();
			return false;
		}
		MidiConnect( refNum, refNum, true);
		MidiSetFilter( refNum, myFilterPtr);
		return true;
	}
	return false;
}
示例#12
0
void test21 ()
{
        long    n;
        
        printf("\n\n<TEST 21> record and playback a sequence\n");
        DebugStr ("--> use g or G to start recording\n");

        ourSequence = MidiNewSeq();
    	ourFilter = MidiNewFilter();
        InstallFilter(ourRefNum,ourFilter);
        MidiFlushEvs(ourRefNum);
        MidiSetRcvAlarm(ourRefNum, record);
        MidiConnect(0, ourRefNum, true);
        MidiConnect(ourRefNum, 0, true);
        
        printf("Now play on the Midi keyboard, every thing is recorded\n");
        DebugStr ("--> use g or G to stop recording\n");

        MidiConnect(0, ourRefNum, false);
        MidiSetRcvAlarm(ourRefNum, 0);
        
        printf (" %ld events where recorded\n", size(ourSequence));

        DebugStr ("--> use g or G to play back the sequence\n");

        stopFlag = 0;
        if (FirstEv(ourSequence)) {
                MidiCall(play, MidiGetTime(), ourRefNum, (long) FirstEv(ourSequence), 0, 0);
        }
        
        printf("Now playing the sequence\n");
        DebugStr ("--> use g or G to stop play back and go to the next test\n");
        
        stopFlag = 1;
        MidiFreeSeq(ourSequence);
}
   /**
     * Create MidiShare input device for LinuxSampler. 
	 *
     * @param AutoConnectPortID - (optional) Alsa client and port ID of a
     *                            MIDI source we should auto connect to
     *                            (e.g. "64:0")
     * @throws MidiInputException  if initialization failed
     */
    MidiInputDeviceMidiShare::MidiInputDeviceMidiShare(char* AutoConnectPortID) : MidiInputDevice(MidiInputDevice::type_midishare) 
	{
		if (!MidiShare())
			throw MidiInputException("MidiShare not installed");
			
		#if defined(MIDISHARE_DRIVER)
			OpenDriver();
		#else
			OpenAppl();
		#endif
		
		hMidiFilter = MidiNewFilter();
		
		if (hMidiFilter == 0) {
			MidiClose(hRefnum);
			throw MidiInputException("MidiShare filter can not be allocated");	
		}
		  
		for (int i = 0 ; i < 256; i++) {
			MidiAcceptPort(hMidiFilter, i, 1); /* accept all ports */
			MidiAcceptType(hMidiFilter, i, 0); /* reject all types */ 
		} 
		  
		for (int i = 0 ; i < 16; i++) {
			MidiAcceptChan(hMidiFilter, i, 1); /* accept all chan */ 
		} 
		/* accept only the following types */
		MidiAcceptType(hMidiFilter, typeNote, 1);
		MidiAcceptType(hMidiFilter, typeKeyOn, 1);
		MidiAcceptType(hMidiFilter, typeKeyOff, 1);
		MidiAcceptType(hMidiFilter, typeCtrlChange, 1);
		//MidiAcceptType(hMidiFilter, typeProgChange, 1);
		MidiAcceptType(hMidiFilter, typePitchWheel, 1);
		  
		/* set the filter */
		MidiSetFilter(hRefnum, hMidiFilter);
	
		MidiSetRcvAlarm(hRefnum,ReceiveEvents);
		MidiSetApplAlarm(hRefnum,ApplAlarm);
		MidiSetInfo(hRefnum,this);
		MidiConnect(0,hRefnum,true);
	}
示例#14
0
/*
 * fluid_midishare_open_appl
 */
static int fluid_midishare_open_appl (fluid_midishare_midi_driver_t* dev)
{
    /* register to MidiShare */
#if defined(MACINTOSH) && defined(MACOS9)
    dev->refnum = MidiOpen(MSHDriverName);
    if (dev->refnum < 0) {
        FLUID_LOG(FLUID_ERR, "Can not open MidiShare Driver client");
        return 0;
    }
    dev->upp_alarm_ptr = NewRcvAlarmPtr(fluid_midishare_midi_driver_receive);
    dev->upp_task_ptr = NewTaskPtr(fluid_midishare_keyoff_task);
    MidiSetRcvAlarm(dev->refnum, dev->upp_alarm_ptr);
#else
    dev->refnum = MidiOpen(MSHDriverName);
    if (dev->refnum < 0) {
        FLUID_LOG(FLUID_ERR, "Can not open MidiShare Driver client");
        return 0;
    }
    MidiSetRcvAlarm(dev->refnum, fluid_midishare_midi_driver_receive);
    MidiConnect(0,dev->refnum,true);
#endif
    return 1;
}
示例#15
0
/* ------------------------------------------------------------------------- */
Boolean SetUpMidi(void)
{
	char buff[32], *name;

	InitTblLibEv();
	
	if ( !MidiShare()) {
		printf ("MidiShare not available\n");
		return false;
	}

	myRefNum = MidiOpen(AppliName);
	if ( myRefNum == MIDIerrSpace ){
		printf ( "Too much MidiShare client applications\n");
		return false;
	}
	
	MidiSetRcvAlarm(myRefNum,ReceiveEvents);
	MidiConnect( 0, myRefNum, true);
	myFilter = MidiNewFilter();
	InstallFilter( myRefNum, myFilter);
	return true;
}
示例#16
0
static void unselect_dst(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data)
{
	if (!gUpdateFlag) MidiConnect(row2ref(gCurRow), row2ref(row), 0);
}
示例#17
0
static void __benchMark12(short refNum)
{
  MidiConnect(refNum, 0, true);
  MidiTask (AccProcess, MidiGetTime(), refNum, 0, 0, 0);
}
示例#18
0
/*
 * fluid_midishare_wakeup
 */
static void fluid_midishare_wakeup (short r)
{
    MidiConnect (MidiShareDrvRef, r, true);
    MidiConnect (r, MidiShareDrvRef, true);
}
示例#19
0
void StartGen (short f)
{
  genRef = MidiOpen(GenName);
  MidiConnect (genRef, 0, true);
  GenProcess (MidiGetTime(), genRef, MidiGetTime(), 0, f * 100);
}
	void MidiInputDeviceMidiShare::WakeUp(short r)
	{
		MidiConnect(MidiShareDrvRef, r, true);
		MidiConnect(r, MidiShareDrvRef, true);
	}