Arpeggio: 1 frame or 2?

This is an archive of a topic from NESdev BBS, taken in mid-October 2019 before a server upgrade.
View original topic
Arpeggio: 1 frame or 2?
by on (#204897)
Arpeggio is rapid alternation among three pitches on one channel to form a warbly chord. Historically, it tends to be associated with European composers. But how often to change the pitch?

The 0xy effect in FamiTracker 0.4.6 and the analogous ENxy effect in Pently 0.05wip6 support changing the pitch only once every frame. 0CC-FamiTracker instruments' arpeggio envelopes have a feature called "arpeggio schemes", which allow (among other things) an arpeggio effect that ticks more slowly than every frame. One Famicompo Pico 3 voter docked points from cover 101 "Reptile Medley" and cover 206 "Movin' Out", which were made with FT 0.4.6, for using an arpeggio effect that changes the pitch every frame, which sounds noisier than an arpeggio that changes every 2 frames.

So that night, I decided to add 2-frame arpeggio to Pently. Slow arp was the last change to make it into Pently 0.05wip7, after chord notation improvements and portamento. To demonstrate, I transcribed the end of "Reptile Medley" into Pently. Tracks 1 and 2 of the attached NSF are identical except that track 2 uses 2-frame arpeggio.

Is it that much of an improvement?

Code:
# Comic Bakery Theme, the last section of Reptile Medley
# (Famicompo Pico 3 cv101)
# Demonstrates difference between 1- and 2-frame arpeggio
# For Pently 0.05wip7
# Original by Martin Galway, cover by Damian Yerrick

durations stick
notenames english

sfx kick on noise
  volume 13 11 9 7 6 5 4 3 3 2 2 1 1 1 0
  pitch 10 0
  timbre 0

sfx tkick on triangle
  pitch e' c' a f#
  volume 15 15 15 1
  timbre 2

sfx snare on noise
  volume 13 11 9 7 6 5 4 3 3 2 2 1 1 1 0
  pitch 4 10
  timbre 0

sfx tsnare on triangle
  pitch b' a' g#'
  volume 15 15 1
  timbre 2

sfx hat on noise
  volume 6 4 3 2 2 1 1 1
  pitch 12
  timbre | 0 1

sfx ohat on noise
  volume           7 6 5 5 4 4 4 3 3 3 2 2 2 1 1
  pitch 12
  timbre | 0 1

sfx kickhat on noise
  volume 13 10 9 8 7 6 5 5 4 4 4 3 3 3 2 2 2 1 1
  pitch 10 0 0 12
  timbre | 0 1

sfx basnare4_ on noise
  pitch 4
  volume 9 6 4 2 1

sfx basnareA_ on noise
  pitch 10
  volume 9 6 4 2 1

drum kick kick tkick
drum kickhat kickhat tkick
drum snare snare tsnare
drum hat hat
drum ohat ohat
drum basnare4_ basnare4_
drum basnareA_ basnareA_

instrument sq2
  volume 8
  timbre 2

instrument tom
  volume 8 8 8 8 8 8 0
  pitch 3 2 1 1 0 0
  timbre 2

instrument sq8
  volume 8
  timbre 0

instrument sq8end
  volume 15
  decay 1
  timbre 0

# Shared patterns

pattern cbmaindrum
  time 4/4
  scale 16
  kickhat16 hat hat hat  snare hat kick hat
    hat hat ohat hat  snare hat kick hat
  ohat hat kick hat  snare hat kick hat
    kick hat hat hat  snare hat hat hat

pattern cbenddrum
  time 4/4
  scale 16
  kick1
  kick
  kick
  kick4 basnare4_ basnareA_8 basnare4_4.

pattern cbmainbass with sq2 on triangle
  time 4/4
  scale 16
  relative
  @sq2
  eb8 r4 eb8 r4. eb8
  r eb8 r eb8 eb8 r4.
  gb8 r4 gb8 r4. gb8
  r gb8 r gb8 gb8 r4.
  db8 r4 db8 r4. db8
  r db8 r db8 db8 r4.
  eb8 r4 eb8 r4. eb8
  r eb8 r eb8 eb16 @tom a' r g f r d b

pattern cbendbass with sq2 on triangle
  time 4/4
  scale 16
  relative
  eb2 r w1 w w

pattern cbchordsP1 with sq8 on pulse1
  time 4/4
  scale 16
  relative
  ENP1 mp
  eb'1:M w1
  db:M/2 w1
  db:M w1
  bb:M/2 w1

pattern cbchordsP2 with sq8 on pulse1
  time 4/4
  scale 16
  relative
  ENP2 mp
  eb'1:M w1
  db:M/2 w1
  db:M w1
  bb:M/2 w1

pattern cbendchords with sq8 on pulse1
  time 4/4
  scale 16
  relative
  ENM ff b4. mp w8 ff bb4. mp w8
  ENM/1 @sq8end g1 w1

pattern cbmel1 with sq2 on pulse2
  time 4/4
  scale 16
  relative
  ff eb,4 EP14 eb'2.
  w1 EP00
  db1
  w2 w8 bb db eb
  f1
  w4 w8. gb16 ab8 gb f gb
  eb1
  w2. pp w4

pattern cbmel2 with sq2 on pulse2
  time 4/4
  scale 16
  relative
  ff eb'1
  w2 w8 f gb ab
  bb8. ab gb8 a16 bb8. w4
  w2. w16 b bb gb
  ab1
  w4 w8. bb16 ab8 gb f db
  d16 eb8. w2.
  w2. pp w4

song comicbakery_p1
  time 4/4
  scale 16
  tempo 135
 
  at 1
  play cbmaindrum
  play cbmainbass
  play cbchordsP1
  play cbmel1

  at 9
  play cbmel2

  at 17
  play cbenddrum
  play cbendbass
 
  at 24
  play cbendchords

  at 25
  stop drum pulse2 triangle

  at 27
  fine

song comicbakery_p2
  time 4/4
  scale 16
  tempo 135

  at 1
  play cbmaindrum
  play cbmainbass
  play cbchordsP2
  play cbmel1

  at 9
  play cbmel2

  at 17
  play cbenddrum
  play cbendbass
 
  at 24
  play cbendchords

  at 25
  stop drum pulse2 triangle

  at 27
  fine
Re: Arpeggio: 1 frame or 2?
by on (#204898)
From a purely taste point of view, I'd say that constant, unchanging, three note, constant-direction arpeggios are lazy and rarely sound good, regardless of whether they're effectively a 32nd note triplet or a 64th note triplet.

The 0xy (using protracker notation) has never sounded particularly good; but I think there's an additional phonic difference loosely between a 50Hz system (tempo 125; causing a 17Hz repeat frequency) and a 60Hz system (tempo 150; 20Hz) that causes the latter to be that much more objectionable.

It's worth pointing out that the Galway tune that you're imitating uses arpeggios more like grace notes than a constant chord.


TL;DR - "yes, 2 frame arpeggios sound less bad than 1 frame ones but neither sounds all that good in the first place. There are better techniques to make an arpeggio sound not-bad than slowing it down by a factor of two"
Re: Arpeggio: 1 frame or 2?
by on (#204901)
lidnariq wrote:
From a purely taste point of view, I'd say that constant, unchanging, three note, constant-direction arpeggios are lazy and rarely sound good, regardless of whether they're effectively a 32nd note triplet or a 64th note triplet.

Then what imitation of a synth pad does sound good, without having to resort to Japan-only expansions?

lidnariq wrote:
It's worth pointing out that the Galway tune that you're imitating uses arpeggios more like grace notes than a constant chord.

In the context of "Reptile Medley", I was also imitating "What's On Your Mind" by Information Society.
Re: Arpeggio: 1 frame or 2?
by on (#204902)
tepples wrote:
Then what imitation of a synth pad does sound good, without having to resort to Japan-only expansions?

It can't make every sound. If the best imitation of something you can think of doesn't sound good, don't imitate that thing. Find a different substitute instead. There are many ways to express the function of harmony. (As a direct answer to that question, I've seen DPCM put to good use like this, though.)

FWIW I think arps work in certain contexts, but I try to be sparing with them. Almost never would I use them without a volume envelope, and I try not to make their presence prominent for more than a short burst (drop to very low volume quickly, or even silence). Otherwise I tend to find them rather overbearing on the sound.

Similarly, I think the 0xy/Jxy style triads are one of the least useful ways to do it. Arpeggios with 5 or 10 or 50 notes break that monolithic block sound into a more rhythmic cycle. Duty envelopes, volume envelopes, etc. give a ton of possibilities there to relieve the ear by having a contour on the sound.

Like I'd say 2 frame per note triads are probably less offensive than 1 frame ones, in general, but the real problem is leaving this static ugly sound hanging around in our ears. Similar problem as just playing a flat square wave for 2 seconds. Make that sound move and change before it becomes unwelcome.

If you like the sound though, go ahead and use it. You don't have to please me, or anybody else. I just personally think arpeggio envelopes are a far better solution than trying to automate it. This limited effect is a size optimization which probably only pays off in the case where you're already using the effect too much. :P
Re: Arpeggio: 1 frame or 2?
by on (#204903)
tepples wrote:
Then what imitation of a synth pad does sound good, without having to resort to Japan-only expansions?
"How do I get my barbershop quartet to sing five different notes?"

Less flippantly, most of the instances of arpeggios that I can find looking throw my random mod collection do one of the following:
1- explicitly as spelled out notes, not using the arpeggio effect at all, or
2- use arpeggios briefly (a few rows)
3- combine the arpeggio with a sharp envelope so that it's only briefly audible.

There's also the classical music answer, like (most famously) in the Moonlight Sonata. Or listen to the synth arpeggio in the 80s synthpop you linked.
Re: Arpeggio: 1 frame or 2?
by on (#204904)
tepples wrote:
Synth pad

You can bake a chord into one sample that repeats seamlessly. Basically, you want a slice of constant-volume sustain and make sure the edge of the waves matches good enough to not cause abrupt ticking/popping. I suspect that more complex chords will get pretty noisy, given the low bit depth.

Or, if you want do get really sneaky, you record samples of the pulse channel, play them in the DPCM channel et voila - three pulse tracks, sort of. Since the tone is so similar, the listener might not even notice the DPCM being in use if used moderately.

Thirdly, settling for less, you can get much of a chords' flavour with just a duophonic setup, by means of contrapuntal movements. I think depeche mode were exceedingly good at this in their early years, if you want a pop music reference.

lidnariq wrote:
How do I get my barbershop quartet to sing five different notes?

Teach one of them throat singing - but then it's not really barbershop any more. ;)
Re: Arpeggio: 1 frame or 2?
by on (#205050)
I think you could implement what ppMCK does; you can define a custom arpeggio envelope and then the speed can be whatever you want to be.
Re: Arpeggio: 1 frame or 2?
by on (#205069)
In my stuff there's an effect to change arpeggio speed from 1 to 256 frames.

Code:
14xy - Arpeggio with note on/off. Alternates current note with current
       note + "x" semitones and current note + "y" semitones. Usual stuff.
       This effect does a note off before changing note.

15xy - Arpeggio without note on/off. Same as previous but it does not do a
       note off/on sequence on note change, it only changes frequency.

16xx - Set Arpeggio speed. Sets arpeggio effect to do its business
       every "xx" frames.