New Order’s Blue Monday synthesized in Praat (sorta)

praat
silly
Published

June 16, 2013

Let’s say that you, like me, love New Order’s song Blue Monday. For some reason, let’s imagine that you have a computer and Praat but no access to your music collection, youtube, spotify, or, um, any other part of the internet but somehow still have access to this blog. Okay, no, that’s silly. Here is a Praat script that will sort of play part of this great song.

# plays Blue Monday by New Order, sort of.
# 16 July 2013, Kevin B. McGowan <kbmcgowan@stanford.edu>

song$ = "349.23, 261.63, 293.66, 293.66, 392.00, 261.63, 293.66, 293.66"

for reps from 1 to 2
     @split( ",", song$ )

     for note from 1 to split.length
         @playPairs( number( split.array$[note] ))
     endfor
endfor

procedure playPairs( .note )
    # first generate one octave below our note
    .octaveID = do( "Create Sound as pure tone...", "note", 1, 0, 0.05,
            ...10000, .note / 2, 0.7, 0.01, 0.09 )

    .noteID = do ( "Create Sound as pure tone...", "note", 1, 0, 0.05,
            ...10000, .note, 0.7, 0.01, 0.09 )

    for i from 1 to 2
        # play each octave pair twice
        selectObject( .octaveID )
        do( "Play" )

        selectObject( .noteID )
        do( "Play" )
    endfor

    removeObject( .octaveID )
    removeObject( .noteID )
endproc

# split proc written by Jose J. Atria (28 February 2012)
procedure split( .sep$, .str$ )
    .length = 0
    repeat
        .strlen = length( .str$ )
        .sep = index( .str$, .sep$ )
        if .sep > 0
            .part$ = left$( .str$, .sep - 1 )
            .str$ = mid$( .str$, .sep + 1, .strlen )
        else
            .part$ = .str$
        endif

        .length = .length+1
        .array$[.length] = .part$
    until .sep = 0
endproc