open Undertone open Undertone.Waves let bpm = 90. let crotchet = Time.noteValue bpm Time.crotchet let quaver = Time.noteValue bpm Time.quaver let tune = "C C G G A A AA G F F E E D D C F F F E E D D D C F F F E E E E D D D C C C G G A A AA G F F E E D D C " let aNote octave length note = Creation.makeNote Creation.sine length note octave let (|Crotchet'|Quaver'|) (str : string) = if str.[1] = ' ' then Quaver' else Crotchet' let LetterToNote (letter : char) = printfn "%A" letter Note.Parse(typeof, string letter) :?> Note let rec tuneToSeq octave str = seq { match str with | Crotchet' -> yield! aNote octave crotchet (LetterToNote str.[0]) let rest = str.[3..] if String.length rest > 0 then yield! tuneToSeq octave rest | Quaver' -> yield! aNote 4 quaver (LetterToNote str.[0]) let rest = str.[2..] if String.length rest > 0 then yield! tuneToSeq octave rest } tuneToSeq 4 tune |> Player.Play