To LUGNET HomepageTo LUGNET News HomepageTo LUGNET Guide Homepage
 Help on Searching
 
Post new message to lugnet.roboticsOpen lugnet.robotics in your NNTP NewsreaderTo LUGNET News Traffic PageSign In (Members)
 Robotics / 2289
2288  |  2290
Subject: 
Re: Playing music (Was: Auld Lang Syne for RCX)
Newsgroups: 
lugnet.robotics
Date: 
Mon, 4 Jan 1999 23:09:57 GMT
Viewed: 
3957 times
  
I recall somebody (Kekoa?) stating that the RCX continues processing
asynchronusly while notes are queued up. Maybe the RCX can only queue 8 notes
at a time thusly you might be able to tell it to play the first 8 all in a
row then wait the amount of time for those 8 to play, THEN send the next 8
this would shorten your code significantly yes?

Ben Kimball wrote:

> > For example, instead of this:
> > 
> > PlayNote( A, time );
> > PlayNote( B, time );
> > [...]
> > 
> > Do this:
> > 
> > PlayNote( A, time );
> > Pause( time );
> > PlayNote( B, time );
> > Pause( time );
> > [...]
> 
> Funny, I ran into this exact thing last night. I think there's something
> a little more subtle going on with the timing, however. Maybe someone who
> knows the hardware can help.
> 
> I first wrote a little program to play an ascending C Major scale
> starting at C3. No problem, even without the waits. I noted that there
> were only 8 notes in my pattern. When I added seven more, descending back
> down the CM scale, the latter notes did not play at all (i.e., there was
> no change) until I added the waits. The RCX would play 8 and only 8 notes
> of any given pattern if no waits were specified (at this point, I'm only
> testing the case in which every note has the same duration).
> 
> So, armed with the newfound knowledge that waits were necessary, I wrote
> another little app to play the opening notes of a simple Bach minuet (NQC
> 1.0b4):
> 
> #define TEMPO   120
> 
> #define GetSixteenth(n) ((1500 / TEMPO) * n)
> 
> #define EIGHTH_NOTE             (GetSixteenth (2))
> #define QUARTER_NOTE    (GetSixteenth (4))
> #define HALF_NOTE               (GetSixteenth (8))
> 
> task main
> {
>         PlayNote (587, QUARTER_NOTE);
>         Sleep (QUARTER_NOTE);
>         PlayNote (392, EIGHTH_NOTE);
>         Sleep (EIGHTH_NOTE);
>         PlayNote (440, EIGHTH_NOTE);
>         Sleep (EIGHTH_NOTE);
>         PlayNote (494, EIGHTH_NOTE);
>         Sleep (EIGHTH_NOTE);
>         PlayNote (523, EIGHTH_NOTE);
>         Sleep (EIGHTH_NOTE);
>         PlayNote (587, QUARTER_NOTE);
>         Sleep (QUARTER_NOTE);
>         PlayNote (392, QUARTER_NOTE);
>         Sleep (QUARTER_NOTE);
>         PlayNote (392, QUARTER_NOTE);
>         Sleep (QUARTER_NOTE);
> }
> 
> If you listen carefully, you'll note that the final two notes do not last
> a full second, as they should. Instead, they're abbreviated. This is
> especially noticeable when you change the note duration of the last two
> notes to EIGHTH_NOTE, leaving the Sleep value at QUARTER_NOTE.
> 
> Any ideas?
> 
> Cheers,
> Ben
> 
> --
> Ben Kimball                                  <mailto:ben@fusiondev.com>
> Fusion Development                          <http://www.fusiondev.com/>
> Custom Intranet Solutions         P.O. Box 204325, Austin TX 78720-4325
> Visit the siphonFAQ!           <http://siphon.scripting.org/siphonFAQ/>

--
Technical Support requests should be sent to support@opendisc.com
Joe Greene
Technical Support
OpenDisc Systems, Inc.
Boulder, Colorado, 80301-2442 USA
303-546-0460
Joe_Greene@OpenDisc.Com



Message is in Reply To:
  Playing music (Was: Auld Lang Syne for RCX)
 
(...) Funny, I ran into this exact thing last night. I think there's something a little more subtle going on with the timing, however. Maybe someone who knows the hardware can help. I first wrote a little program to play an ascending C Major scale (...) (28 years ago, 28-Dec-98, to lugnet.robotics)

2 Messages in This Thread:

Entire Thread on One Page:
Nested:  All | Brief | Compact | Dots
Linear:  All | Brief | Compact
    

©2005 LUGNET. All rights reserved. - hosted by steinbruch.info GbR