feat: note transcription convention

This commit is contained in:
2023-06-05 01:27:44 +04:00
parent 9aba6c1855
commit 07cb8f8003
2 changed files with 29 additions and 126 deletions

View File

@@ -4,135 +4,36 @@ open PCMWave
open Fx
open SoundGen.Fx
open Synth
open System
type Note = { Name: string; Length: int }
let parseNotes (input: string) =
let gluedString = input.Replace ('\n', ' ')
gluedString.Split([| ' ' |], StringSplitOptions.RemoveEmptyEntries)
|> Seq.map (fun noteStr ->
let noteSigns = noteStr.Split([| '-' |])
let name = noteSigns[0].Trim()
let length = noteSigns[1].Trim() |> int
{ Name = name.Trim(); Length = length })
|> List.ofSeq
let getNoteSound (input: Note) =
let length = 1.0 / float input.Length
let semitoneShift = getSemitoneShift "A4" input.Name
note semitoneShift length
let input = "A4-4 A4-4 A4-4 A4-4 A4-2 A4-4 A4-4 A4-4 A4-4 A4-4 A4-2 D5-4 D5-4 D5-4 D5-4 D5-4 D5-4 D5-2 C5-4 C5-4 C5-4 C5-4 C5-4 C5-4 C5-2 G4-2 "
let notes =
String.replicate 2 input
|> parseNotes
let song =
[ //
note 0 0.25;
note 0 0.25;
note 0 0.25;
note 0 0.25;
note 0 0.5
note 0 0.25;
note 0 0.25;
note 0 0.25;
note 0 0.25;
note 0 0.25
note 0 0.25;
note 0 0.5;
note 5 0.25;
note 5 0.25;
note 5 0.25;
note 5 0.25;
note 5 0.25
note 5 0.25;
note 5 0.5;
note 3 0.25;
note 3 0.25;
note 3 0.25;
note 3 0.25;
note 3 0.25
note 3 0.25;
note 3 0.5
note (-2) 0.5
//
//
note 0 0.25;
note 0 0.25;
note 0 0.25;
note 0 0.25;
note 0 0.5
note 0 0.25;
note 0 0.25;
note 0 0.25;
note 0 0.25;
note 0 0.25
note 0 0.25;
note 0 0.5;
note 5 0.25;
note 5 0.25;
note 5 0.25;
note 5 0.25;
note 5 0.25
note 5 0.25;
note 5 0.5;
note 3 0.25;
note 3 0.25;
note 3 0.25;
note 3 0.25;
note 3 0.25
note 3 0.25;
note 3 0.5
note (-2) 0.5
//
//
note 0 0.25;
note 0 0.25;
note 0 0.25;
note 0 0.25;
note 0 0.5
note 0 0.25;
note 0 0.25;
note 0 0.25;
note 0 0.25;
note 0 0.25
note 0 0.25;
note 0 0.5;
note 5 0.25;
note 5 0.25;
note 5 0.25;
note 5 0.25;
note 5 0.25
note 5 0.25;
note 5 0.5;
note 3 0.25;
note 3 0.25;
note 3 0.25;
note 3 0.25;
note 3 0.25
note 3 0.25;
note 3 0.5
note (-2) 0.5
//
//
note 0 0.25;
note 0 0.25;
note 0 0.25;
note 0 0.25;
note 0 0.5
note 0 0.25;
note 0 0.25;
note 0 0.25;
note 0 0.25;
note 0 0.25
note 0 0.25;
note 0 0.5;
note 5 0.25;
note 5 0.25;
note 5 0.25;
note 5 0.25;
note 5 0.25
note 5 0.25;
note 5 0.5;
note 3 0.25;
note 3 0.25;
note 3 0.25;
note 3 0.25;
note 3 0.25
note 3 0.25;
note 3 0.5
note (-2) 0.5
]
notes
|> Seq.map getNoteSound
|> Seq.concat
let writeToFile (ms: MemoryStream) =
use fs =
new FileStream(Path.Combine(__SOURCE_DIRECTORY__, "test.wav"), FileMode.Create)