Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2013

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

Search the Archive

Re: Programming Fail

  • To: mathgroup at smc.vnet.net
  • Subject: [mg132026] Re: Programming Fail
  • From: Bill Rowe <readnews at sbcglobal.net>
  • Date: Tue, 19 Nov 2013 02:56:55 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • Delivered-to: l-mathgroup@wolfram.com
  • Delivered-to: mathgroup-outx@smc.vnet.net
  • Delivered-to: mathgroup-newsendx@smc.vnet.net

On 11/17/13 at 6:22 PM, deanrosenthal at gmail.com (Dean Rosenthal)
wrote:

>If you do this

>pitchMap = {1 -> {"C4", "D4"}, 2 -> "D4", 3 -> "E4", 4 -> "F4", 5 ->
>"G4"};

>Sound[Thread[SoundNote[Flatten[IntegerPartitions[5]] /. pitchMap]]]

>You get a music player and can play the result.

>If you do this:

>A = NestList[
>StringReplace[#, {"0" -> "2", "2" -> "12", "1" -> "23", "3" -> "45",
>"4" -> "56"}] &, "0", 7]

>pitchMap = {0 -> "B4", 1 -> "C4", 2 -> "D4", 3 -> "E4", 4 -> "F4", 5
>-> "G4",
>6 -> "A4"};

>Sound[Thread[SoundNote[Flatten[A]] /. pitchMap]]]

>You get nothing, just output.  See what I did there?  I substituted,
>because that's what you do if you don't know how to program!  On the
>face of things, I can't see why it wouldn't work, but I've wasted at
>least an hour going through documentation and Googling and trying
>different approaches.

In both cases pitchMap is a list of rules that replace an
integer with a string representing a note.

In the example that works, you are working with a list of
integers. That is

Flatten[IntegerPartitions[5]]

returns a flat list of integers.

But you have defined A above to be a list of strings. You need
to either convert A to a list of integers or you need to change
pitchMap to work on strings rather than integers.

You could convert A to a list of integers as follows

b=ToExpression[Characters[StringJoin@@A]];

the StringJoin@@ part converts A to one long string.
Characters creates a list of single character strings from the
long string and finally, ToExpression converts the characters to integers.

Now with b you can do

Thread[SoundNote[b/.pitchMap]]

to get the desired result.

The alternative would be to redefine pitchMap to work on strings
rather than integers, i.e.,

pitchMap = {"0" -> "B4", "1" -> "C4", "2" -> "D4", "3" -> "E4",
"4" -> "F4", "5" ->"G4", "6" -> "A4"};

and convert A to a list of character strings:

b=Characters[StringJoin@@A];

then obtain the sound with

Thread[SoundNote[b/.pitchMap]]




  • Prev by Date: Re: Animate cannot be combined?
  • Next by Date: Re: Programming Fail
  • Previous by thread: Re: Programming Fail
  • Next by thread: Re: Programming Fail