view compal/iMelody @ 405:f7df0f4d7d4f

tfo/find-is-hdr.c: print found offset in hex
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 18 Mar 2023 05:57:23 +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.