Playing music with note names
Last updated at 7:28 pm UTC on 24 July 2022
(AbstractSound noteSequenceOn: PluckedSound default from: #(
(c4 1 500)
(d4 1 500)
(e4 1 500)
(g4 1 500)
(a4 1 250)
(a4 1 250)
(c5 1 500))
) play
Elements of the array are (pitch, duration, loudness) triples.
See method comment of
noteSequenceOn: aSound from: anArray
The pitch may be given by a note name; then
pitchForName: aString
is used to get the number value.
Purpose:
Anybody remember the old PLAY command in early BASICs, where you could enter a tune encoded in a string and it would play it through the scratchy speaker? This is similar. namedNoteSequenceFrom: expects an array of either:
- Triplets of note (a-g, optionally b or s for flat or sharp, and a number indicating octave), duration, and loudness. The loudness range is 0..1000; 100 is too soft to hear on my PowerMac
- Or a double of #rest and a duration.
Sending this to a subclass of AbstractSound will create the sound. Tell the sound to play to hear it.
Why this is interesting:
Squeak has some powerful music capabilities: sound synthesis, stereo sound, etc. This is a starting point into them. If you look at the class method examples in AbstractSound, you'll find a lot more. – Mark Guzdial
Remark: #( () () () ) is the syntax for building an array of literals. Here it is an array of arrays. The notes are defined as symbols.
See also
Musical objects for Squeak, a system which builds on this.