FreeCalypso > hg > freecalypso-reveng
view compal/iMelody @ 400:5377f91aea97
compal/boot/c123-boot.disasm: annotate with symbols
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 14 Jan 2023 09:47:46 +0000 |
parents | 623316d1ece7 |
children |
line wrap: on
line source
The user-accessible ringtone melody composer feature on Mot C1xx phones (tested on C139, probably the same on C11x/12x) is based on iMelody, or more precisely, a subset of the full iMelody spec. When you go into the main menu, select "Ring Styles", then "My Tones", and then go to edit any of the "Empty Ring" entries, you get dropped into a text string entry screen, similar to SMS text or phonebook name entry, and the string you get to enter in there is an iMelody character string! Up and down arrow keys bring up a wizard that cycles through the 48 notes which Calypso PWT is capable of playing (F4 through E8 in the scientific pitch notation, but in iMelody they are called *3f through *7e instead), and as this up/down arrow key wizard cycles through the notes and plays them, the corresponding iMelody syntax gets inserted into the melody string being composed. But you can also bypass the wizard and enter the melody string manually using the numeric keys similarly to standard alphanumeric entry screens; when you operate the numeric keys in this melody entry screen, the set of symbols available on each numeric key is different from standard text entry, instead it's been changed to the set of valid symbols for iMelody. There is also help text accessible from the center key menu, and this help text instructs the user on entering notes, octaves, rests, 0-5 duration choices and even '.' and ':' duration modifiers in iMelody notation. Further experimentation shows which iMelody spec features are implemented and which ones aren't: * There is no mechanism to enter overall or initial melody volume akin to the VOLUME: header in IMY files, nor is there any way to enter 'V' characters into the melody string. Therefore, we have to conclude that this implementation of iMelody omits the notion of adjustable per-note volumes, and probably plays each melody at whatever "global" volume is set for the ringer. * There is no beats-per-minute setting, instead it appears that this iMelody implementation is fixed at 120 bpm only. Experimentation shows that '0' duration notes play for about 2 s, '1' duration notes play for about 1 s, and '2' duration (default) notes play for about 0.5 s - and in my reading of the iMelody spec (different from imyplay author's reading), '2' duration notes correspond to "beats" as in bpm. * There is no "style" setting as in S0, S1 or S2 as given in the iMelody spec. Because my wetware auditory processor is not capable of measuring milliseconds, I don't have any easy way to tell if this C139 iMelody player inserts any short rest or not between adjacent notes, and if it does, whether or not this short rest equals 1/20 of the preceding note, as my reading of the iMelody spec suggests for S0 mode. * The editor screen allows all 3 duration modifier characters '.', ':' and ';' to be entered. However, it is not clear if all of these duration options are actually implemented (back to the problem of wetware auditory processing not being able to measure milliseconds), and the help text only mentions '.' and ':' for 1+1/2 and 1+3/4. * The editor allows entry of characters forming repeat blocks ('(', ')' and '@'), but experimentation shows that these repeat instructions are ignored, with the content of the repeat block played only once. * There is no way to enter vibrator or LED control instructions, and the phone's built-in ringtones don't exhibit any ring-vibrator synchronization (other than the single "vibe then ring" global mode) or backlight manipulation either. The remaining questions to be answered are: * What is the exact tone play duration for every combination of iMelody duration [0-5] and duration modifier as in none or [.:;], and * How much rest time is automatically inserted between notes, if any. My (Mother Mychaela's) current thinking is that the only way to answer these questions would be to take a suitable-model C1xx phone apart (specifically, remove the plastics, but keep all electronics intact and functional) and put an oscilloscope probe on some accessible point in the buzzer circuit, with the most likely accessible point being on the magnetic buzzer itself. Looking at the photos taken by OBB people, the magnetic buzzer is an SMT component, but its solder pads extend out from under the part, hopefully far enough to allow a needle-type probe to be applied there, or maybe one can solder a little wire to whichever buzzer terminal is the driven one. If one can put an o'scope probe on the buzzer, the scope would need to be configured to trigger at the beginning of buzzer activity, and the time scale on the scope would need to be set slow enough to allow a capture lasting perhaps as long as 2 s. The first experiment would be to enter a melody consisting of just one note, and use the o'scope to measure the actual millisecond duration of the tone sent to the buzzer. First try different "base" durations from 0 to 5 in iMelody entry, and confirm that they produce physical tone durations from 2 s down to 62.5 ms. Then try adding '.', ':' and ';' duration modifiers in the iMelody entry, and see if they do anything. After this first series of o'scope experiments confirming the duration of individual notes, the next series of experiments would be to compose melodies of several adjacent notes, preferably with different individual note durations, and see how much rest time (if any) is inserted between notes, and how this inserted rest time correlates with preceding or following note durations.