TU78 Music Maker

Craig D. Rice, St. Olaf College cdr at thor.stolaf.edu
Fri Sep 8 02:20:09 AEST 1989


Below is a shar file which will enable your TU78 tape drive to make
music...  Just a little hack - see the README for more information.

Craig

---
Craig D. Rice		UNIX Systems Specialist
cdr at stolaf.edu		Academic Computer Center, St. Olaf College
+1 507 663-3631		Northfield, MN  55057   USA

----- CUT HERE -----
#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of shell archive."
# Contents:  makesong makesong/NOTES makesong/README makesong/Songs
#   makesong/makesong makesong/Songs/BACH makesong/Songs/B_DAY
#   makesong/Songs/ENTERTAINER makesong/Songs/REVILE
#   makesong/Songs/SCALE makesong/Songs/SHORT makesong/Songs/UMYAYA
# Wrapped by cdr at thor.acc.stolaf.edu on Tue Sep  5 09:18:43 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test ! -d 'makesong' ; then
    echo shar: Creating directory \"'makesong'\"
    mkdir 'makesong'
fi
if test -f 'makesong/NOTES' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'makesong/NOTES'\"
else
echo shar: Extracting \"'makesong/NOTES'\" \(569 characters\)
sed "s/^X//" >'makesong/NOTES' <<'END_OF_FILE'
X/* Note declarations for TU78 */
X/* These values are approximate and need to be tuned (pun intended) */
X
X
X#define	A1	4700
X#define B1b	4400
X#define	B1	4200
X#define	C1	3700
X#define C1s	3400
X#define Db	3400
X#define	D	3050
X#define Eb	2700
X#define	E	2500
X#define	F	2100
X#define Fs	1900
X#define Gb	1900
X#define	G	1700
X#define Gs	1500
X#define Ab	1500
X#define	A	1300
X#define	Bb	1100
X#define	B	900
X#define Cb	770
X#define	C	700
X#define Cs	625
X#define	REST	100000
X
X/* These are unused */
X
X#define	SIXTEENTH	1
X#define	EIGTH		2
X#define	QUARTER		4
X#define	HALF		8
X#define	WHOLE		10
X
END_OF_FILE
if test 569 -ne `wc -c <'makesong/NOTES'`; then
    echo shar: \"'makesong/NOTES'\" unpacked with wrong size!
fi
# end of 'makesong/NOTES'
fi
if test -f 'makesong/README' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'makesong/README'\"
else
echo shar: Extracting \"'makesong/README'\" \(1737 characters\)
sed "s/^X//" >'makesong/README' <<'END_OF_FILE'
X
X"Makesong"* is a shell script which turns your TU78 tape-drive into 
Xa musical marvel...  It is just a quick hack, so do not expect
Xanything close to perfection.  The numbers found in the "NOTES" file
Xare approximate and could be a lot better, but I don't have the 
Xtime to do it.
X
XSee the example songs in the Songs/ directory... Format for a song file
Xshould be obvious from the examples... Songfiles are run through the 
XC Preprocessor (/lib/cpp), so feel free to include comments, #defines,
X#includes, etc.
X
XImprovements/Bugs
X	- the values for the notes should be tuned
X	- more notes should be added
X	- rests should be implemented a different way
X	- as it stands, higher-pitched notes are shorter in duration
X		than lower notes - the correct value for DURATION (now
X		a constant 1000) should be a function of pitch.
X	- different length notes (whole, half, quarter, etc.) should
X		also be added
X	- something other than /etc/termcap should be used as dd's if=,
X		preferably something with unlimited size -- maybe
X		/usr/ucb/yes "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
X		or a variant
X	- due to the implementation of the MUSIC variable, there is
X		probably a sh-imposed limit on the number of notes
X		in a Songfile
X
XInteresting effects may be achieved by combining 'mt fsf' with 'mt bsf'
Xcommands - 'bsf' produces a richer "timber" of sound than does 'fsf'.
X
XPlease let me know about changes and improvements you make -- also
Xany songs you teach your TU78 to play! :-)
X
X[* Note, "makesong" works the tape drive pretty hard, so be nice. . .]
X
XEnjoy!
XCraig	Fri Aug 25 11:12:17 CDT 1989
X---
XCraig D. Rice		UNIX Systems Specialist
Xcdr at stolaf.edu		Academic Computer Center, St. Olaf College
X+1 507 663-3631		Northfield, MN  55057   USA
END_OF_FILE
if test 1737 -ne `wc -c <'makesong/README'`; then
    echo shar: \"'makesong/README'\" unpacked with wrong size!
fi
# end of 'makesong/README'
fi
if test ! -d 'makesong/Songs' ; then
    echo shar: Creating directory \"'makesong/Songs'\"
    mkdir 'makesong/Songs'
fi
if test -f 'makesong/makesong' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'makesong/makesong'\"
else
echo shar: Extracting \"'makesong/makesong'\" \(766 characters\)
sed "s/^X//" >'makesong/makesong' <<'END_OF_FILE'
X#!/bin/sh
X
X# This script empowers your TU78 tapedrive with musicical abilities
X# you never knew it had!
X
X# makesong [-p] Songs/songfile
X# 	-p is just "play-only" - do not write the song to tape
X
XNOTES=0
XDURATION=1000
XPLAY_ONLY=0
X
Xif [ $# -gt 2 ]; then
X	echo "usage: makesong [-playonly] Songs/songfile"
X	exit 0
Xfi
X
X# Okay, so we don't care what the first argument is. . .
Xif [ $# -eq 2 ]; then
X	PLAY_ONLY=1
X	shift
Xfi
X
XMUSIC=`/lib/cpp $1 | sed '1,/START/d'`
X
Xmt rewind
Xif [ $PLAY_ONLY -eq 0 ]; then
X	echo Creating Tape...
X	for i in $MUSIC
X	do
X	    echo -n "$i "
X	    dd if=/etc/termcap of=/dev/nrmt8 bs=$i count=$DURATION 2> /dev/null
X	done
X	echo ""
Xfi
X
XNOTES=`echo $MUSIC | wc -w`
Xmt rewind
X
Xecho $1 had $NOTES notes
Xecho Playing song...
X
Xmt fsf $NOTES
X
Xexit $NOTES
END_OF_FILE
if test 766 -ne `wc -c <'makesong/makesong'`; then
    echo shar: \"'makesong/makesong'\" unpacked with wrong size!
fi
chmod +x 'makesong/makesong'
# end of 'makesong/makesong'
fi
if test -f 'makesong/Songs/BACH' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'makesong/Songs/BACH'\"
else
echo shar: Extracting \"'makesong/Songs/BACH'\" \(761 characters\)
sed "s/^X//" >'makesong/Songs/BACH' <<'END_OF_FILE'
X/*
X	Apologies to J.S. Bach
X */
X
X#include "../NOTES"
X
XSTART
XC1 C1 E G E C1 B1 B1 A G G G B1 B1 D F D B1 C1 C1 A G G G
XC1 C1 E G E C1 B1 B1 A G G G A A G F E D C1 C1 C1 C1 C1 C1
XC1 C1 E G E C1 B1 B1 A G G G B1 B1 D F D B1 C1 C1 A G G G
XC1 C1 E G E C1 B1 B1 A G G G A A G F E D C1 C1 C1 C1 C1 C1
XC1 C1 E G E C1 B1 B1 A G G G B1 B1 D F D B1 C1 C1 A G G G
XC1 C1 E G E C1 B1 B1 A G G G A A G F E D C1 C1 C1 C1 C1 C1
XC1 C1 E G E C1 B1 B1 A G G G B1 B1 D F D B1 C1 C1 A G G G
XC1 C1 E G E C1 B1 B1 A G G G A A G F E D C1 C1 C1 C1 C1 C1
XC1 C1 E G E C1 B1 B1 A G G G B1 B1 D F D B1 C1 C1 A G G G
XC1 C1 E G E C1 B1 B1 A G G G A A G F E D C1 C1 C1 C1 C1 C1
XC1 C1 E G E C1 B1 B1 A G G G B1 B1 D F D B1 C1 C1 A G G G
XC1 C1 E G E C1 B1 B1 A G G G A A G F E D C1 C1 C1 C1 C1 C1
END_OF_FILE
if test 761 -ne `wc -c <'makesong/Songs/BACH'`; then
    echo shar: \"'makesong/Songs/BACH'\" unpacked with wrong size!
fi
# end of 'makesong/Songs/BACH'
fi
if test -f 'makesong/Songs/B_DAY' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'makesong/Songs/B_DAY'\"
else
echo shar: Extracting \"'makesong/Songs/B_DAY'\" \(159 characters\)
sed "s/^X//" >'makesong/Songs/B_DAY' <<'END_OF_FILE'
X
X/*
X	An interesting rendition of an old favorite...
X */
X
X#include "../NOTES"
X
XSTART
XC1 C1 D C1 F E REST C1 C1 D C1 G F REST C1 C1 C A F E D REST
XBb Bb A F G F
END_OF_FILE
if test 159 -ne `wc -c <'makesong/Songs/B_DAY'`; then
    echo shar: \"'makesong/Songs/B_DAY'\" unpacked with wrong size!
fi
# end of 'makesong/Songs/B_DAY'
fi
if test -f 'makesong/Songs/ENTERTAINER' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'makesong/Songs/ENTERTAINER'\"
else
echo shar: Extracting \"'makesong/Songs/ENTERTAINER'\" \(485 characters\)
sed "s/^X//" >'makesong/Songs/ENTERTAINER' <<'END_OF_FILE'
X
X/*
X	Joplin's THE ENTERTAINER
X */
X
X#include "../NOTES"
X
XSTART
X
X/*
XA1 B1b C1 G C1 G C1 G G A Bb B G A B Fs A G G G
X */
X
XB1b B1 C1 G C1 G C1 G G A Bb B G A B Fs A G G G
XB1b B1 C1 G C1 G C1 G E D C1s E G B A G E A
XB1b B1 C1 G C1 G C1 G G A Bb B G A B Fs A G
XG A B G A B G A G B G A B G A G B G A B Fs A G
XB1b B1 C1 G C1 G C1 G G A Bb B G A B Fs A G G G
XB1b B1 C1 G C1 G C1 G E D C1s E G B A G E A
XB1b B1 C1 G C1 G C1 G G A Bb B G A B Fs A G
XG A B G A B G A G B G A B G A G B G A B Fs A G
END_OF_FILE
if test 485 -ne `wc -c <'makesong/Songs/ENTERTAINER'`; then
    echo shar: \"'makesong/Songs/ENTERTAINER'\" unpacked with wrong size!
fi
# end of 'makesong/Songs/ENTERTAINER'
fi
if test -f 'makesong/Songs/REVILE' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'makesong/Songs/REVILE'\"
else
echo shar: Extracting \"'makesong/Songs/REVILE'\" \(188 characters\)
sed "s/^X//" >'makesong/Songs/REVILE' <<'END_OF_FILE'
X
X/*
X	Wake up!!
X */
X
X#include "../NOTES"
X
XSTART
XD G B G D B G B G D B G B G D G B G
XD G B G D B G B G D B G B G D D G
XD G B G D B G B G D B G B G D G B G
XD G B G D B G B G D B G B G D D G
X
END_OF_FILE
if test 188 -ne `wc -c <'makesong/Songs/REVILE'`; then
    echo shar: \"'makesong/Songs/REVILE'\" unpacked with wrong size!
fi
# end of 'makesong/Songs/REVILE'
fi
if test -f 'makesong/Songs/SCALE' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'makesong/Songs/SCALE'\"
else
echo shar: Extracting \"'makesong/Songs/SCALE'\" \(88 characters\)
sed "s/^X//" >'makesong/Songs/SCALE' <<'END_OF_FILE'
X/*
X	Be sure to practice your scales!
X */
X
X#include "../NOTES"
X
XSTART
XA B C# D E F# G# A
END_OF_FILE
if test 88 -ne `wc -c <'makesong/Songs/SCALE'`; then
    echo shar: \"'makesong/Songs/SCALE'\" unpacked with wrong size!
fi
# end of 'makesong/Songs/SCALE'
fi
if test -f 'makesong/Songs/SHORT' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'makesong/Songs/SHORT'\"
else
echo shar: Extracting \"'makesong/Songs/SHORT'\" \(76 characters\)
sed "s/^X//" >'makesong/Songs/SHORT' <<'END_OF_FILE'
X/*
X	Be sure to practice your scales!
X */
X
X#include "../NOTES"
X
XSTART
XC1 E G
END_OF_FILE
if test 76 -ne `wc -c <'makesong/Songs/SHORT'`; then
    echo shar: \"'makesong/Songs/SHORT'\" unpacked with wrong size!
fi
# end of 'makesong/Songs/SHORT'
fi
if test -f 'makesong/Songs/UMYAYA' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'makesong/Songs/UMYAYA'\"
else
echo shar: Extracting \"'makesong/Songs/UMYAYA'\" \(507 characters\)
sed "s/^X//" >'makesong/Songs/UMYAYA' <<'END_OF_FILE'
X
X/*
X	St. Olaf College School Song 
X
X
X	We come from St. Olaf, we sure are the real stuff,
X	Our team is the cream of the college is great.
X	We fight fast and furious, our teem is injurous,
X	Tonight Carleton College will soon meet its fate!
X
X	Um ya ya, um ya ya, um ya ya, um ya ya, um ya ya, um ya ya
X	Um Ya Ya Ya!
X */
X
X#include "../NOTES"
X
XSTART
XE A A A Cs A A D Fs Fs D Fs F E Gs Gs E Fs Gs B A A A
XE A A A Cs A A D Fs Fs D Fs F E Gs Gs E Fs Gs B A A A
XCs A A Cs A A D Fs Fs D Fs Fs E Gs Gs E Fs Gs B A A A
END_OF_FILE
if test 507 -ne `wc -c <'makesong/Songs/UMYAYA'`; then
    echo shar: \"'makesong/Songs/UMYAYA'\" unpacked with wrong size!
fi
# end of 'makesong/Songs/UMYAYA'
fi
echo shar: End of shell archive.
exit 0



More information about the Alt.sources mailing list