[Cc'd to -hackers because of the MIDI sound driver patches, i'm running this on FreeBSD 3.2-stable with Seigo TANIMURA's midi driver for serial ports and with an old Atari MSTe as serial<->midi interface...]
On Wed, Jun 16, 1999 at 09:05:29PM +0200, I wrote: > Hi! I'm trying to use Rosegarden 2.1-beta on FreeBSD 3.2-stable > and came across the following problems: > > Trying to play _BREEZE.MID (example from session wintendo sequencer) > kills Rosegarden Sequencer, popping up the dialog with Chris Cannam's > old email address. (which bounced which is why i subscribed to this list.) > Trying to play almost(?) anything else, for example glazunov.rose > sends SEQ_MIDIPUTC with strange device bytes (the one i checked was 0x20, > i have only one midi device configured), leading to kernel panics until i > patched this: First, this was actually 020 ie 16... anyway, problem fixed itself: rebuilt mapper/src/Mapper.o with -g and found out Mapper_NewDeviceList() turned Device.Data.Midi.device from 0 into 16. Looked at the source and thought `strange'... Rebuilt mapper/src/Device.o with -g and suddenly Mapper_NewDeviceList() stopped doing that and everything worked again! Rebuilt Mapper.o and Device.o without -g and everything still worked. *hmmm*. Any insight how that could have happened very much appreciated... As for _BREEZE.MID, i guess that still segfaults (haven't tried). Okay so playback works again, now recording: it played back nothing from the existing tracks until i hit a note, then it played a few notes and stopped until i hit another note, and so on. Also the stop button didn't visibly react until i hit another note. Well so that must be a real difference between linux' sound system and FreeBSD's... this patch fixed it: Index: sequencer.c =================================================================== RCS file: /home/cvs/cvs/src/sys/i386/isa/sound/sequencer.c,v retrieving revision 1.23.2.1 diff -u -r1.23.2.1 sequencer.c --- sequencer.c 1999/05/04 13:42:01 1.23.2.1 +++ sequencer.c 1999/06/20 20:44:37 @@ -162,8 +162,23 @@ int chn; +#if 1 + /* + * XXX don't wait if pre_event_timeout 0 (default), + * rosegarden sequencer seems to expect this + * behaviour (use -1 for no timeout) + */ + if (pre_event_timeout == 0) { + splx(flags); + return 0; + } + midi_sleeper = &chn; + DO_SLEEP(chn, midi_sleep_flag, pre_event_timeout == -1 ? + 0 : pre_event_timeout); +#else midi_sleeper = &chn; DO_SLEEP(chn, midi_sleep_flag, pre_event_timeout); +#endif if (!iqlen) { splx(flags); @@ -402,7 +417,7 @@ seq_sleeper = &chn; - DO_SLEEP(chn, seq_sleep_flag, 0); + DO_SLEEP(chn, seq_sleep_flag, hz / 10); } if (qlen >= SEQ_MAX_QUEUE) @@ -1223,7 +1238,7 @@ int chn; seq_sleeper = &chn; - DO_SLEEP(chn, seq_sleep_flag, 0); + DO_SLEEP(chn, seq_sleep_flag, hz / 10); } splx(flags); (the bottom 2 hunks are for a hang in ioctl SNDCTL_SEQ_SYNC and a possible similar hang in another place.) Alright so now i have a recorded track. But trying to delete a note got me a segfault and viewing the data as piano roll as well as saving and reloading the midi file got me -- an empty track. Also the `Recorded Track ..' and `Created by the Rosegarden sequencer' labels appeared at the end of the new track not at the start... Well, i found the fix for that too: :) Index: sequencer/src/Record.c @@ -178,6 +178,7 @@ (&EventBuffer, True)); } + RunningPtr = (EventList)First(RunningPtr); TempPtr = Midi_SeqRecordTimingDefaults(&RunningPtr); Midi_TrackConvertToOnePointRepresentation(TempPtr); Mapper_NewTrackMetaInfo(); Now i still have to find out why my midi keyboard keeps changing the volume between full and low at the start of every x'th playback, another problem of the more stranger kind... Happy MIDI-ing, -- Juergen Lock <nox....@jelal.kn-bremen.de> (remove dot foo from address to reply) To Unsubscribe: send mail to majord...@freebsd.org with "unsubscribe freebsd-hackers" in the body of the message