arunc@uxe.cso.uiuc.edu (07/13/88)
I am writing a program in Turbo Pascal 4.0 to drill musicians in their recognition of sequences of intervals. TP4 has a built-in Sound(Frequency) function, where "Frequency" is an integer value. However, I need frequencies which are real-number values. (For example, middle C (C4) is 261.6 Hz.) I have completed writing the program using only integers, but the resulting pitch-intervals are, understandably, "out of tune". How can frequencies be gotten out of the speaker that are real-number values? Can this be done using Turbo Pascal? Are there other languages which allow for this degree of control? Thanks for any help, Arun Chandra arunc@uiucuxc.CSO.UIUC.EDU
dixon@control.steinmetz (walt dixon) (07/16/88)
I'm not familiar with the TP library and the Sound routine in
particular, but I have messed around with the sound generation
hardware. The common way to generate sounds is to use one
channel of an 8253 counter/timer chip in mode3. This causes
the square wave output of the chip to go to the speaker through
a low pass filter. The counter clocks at 1,193,180Hz. You
load a counter with a divisor to get specific frequencies.
For example, the 440Hz a above middle c requires a counter
of 1193180/440. This tone is faithfully reproduced. The
accuracy of the resulting note is limited by roundoff/truncation
in the division. I don't know how the TP sound function
works.
I have written a device driver which takes character strings
similar to the BASICA sound statement. (My driver also supports
key signatures, double sharps/flags, and naturals). To my untrained
(more like tone deaf), I was able to get reasonable accurate
reproduction in the 3rd octave and above. The most difficult
problem I had to deal with was getting accurate note timings.
I eventually sped up the system clock to increase timer resolution.
This driver is published in chapter 11 of the MS-DOS Papers
(Howard Sams, 1988). Take a look at this chapter if you need
more information. [I don't get any royalties from book sales --
just citing what I belive to be a good reference.]
I hope this helps.
Walt Dixon {ARPA: Dixon@ge-crd.arpa }
{US Mail: GE CRD }
{ PO Box 8 }
{ Schenectady, NY 12345 }
{Phone: 518-387-5798 }