MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Using "/@" Effectively


You need to use Apply here instead of Map. To be precise, you need
Apply on level 1 for which @@@ is the shorthand notation. So you would
write:

Sound[melody[#1, #2] & @@@ {{0, 1}, {5, 0.5}, {7, 0.5}, {12, 1}}, {0,
  3}, SoundVolume -> .5]

Actually, melody @@@ works as good as melody[#1, #2] & @@@ .

Additionally, melody[p_Integer, d_Real] needs to rewritten as
melody[p_Integer, d_?NumberQ] so that d can be both reals and
integers.

BTW In your examples you should try higher midi values to hear
anything, or you should have a very good sound card. On my PC I need
at least more than 50.

Cheers -- Sjoerd

On Oct 26, 6:30 am, BenT <brt... at pdmusic.org> wrote:
> Given:
>
> $Version
> "7.0 for Microsoft Windows (32-bit) (January 30, 2009)"
>
> miditofreq[n_Integer] := (440./64) 2^((n + 3)/12);
>
> and
>
> melody[p_Integer, d_Real] :=
>  Play[Sin[miditofreq[p] 2 \[Pi] t], {t, 0, d}, SampleRate -> 44100,
>   SampleDepth -> 16]
>
> I want to be able to use a list of pitch and duration values for a
> melody, and use it like the following, but cannot determine the method
> to Map them properly, as in this (non-working) attempt:
>
> Sound[melody[#1, #2] & /@ {{0, 1}, {5, 0.5}, {7, 0.5}, {12, 1}}, {0,
>   3}, SoundVolume -> .5]
>
> Can anyone show me the correct (or even a better) way to do so?



  • Prev by Date: Re: Using "/@" Effectively
  • Next by Date: Re: Using "/@" Effectively
  • Previous by thread: Re: Using "/@" Effectively
  • Next by thread: Re: Using "/@" Effectively