refactor: format code

This commit is contained in:
HiveBeats
2022-10-30 23:33:06 +04:00
parent 8ebd6e8c8a
commit 365797dc36

View File

@@ -10,39 +10,70 @@ let attackMs = 100.
let getHzBySemitones semi = let getHzBySemitones semi =
pitchStandard * (2. ** (1. / 12.)) ** semi pitchStandard * (2. ** (1. / 12.)) ** semi
let getSemitonesByNote (str:string) =
let getSemitonesByNote (str: string) =
let defaultOctave = 4 let defaultOctave = 4
let notes = ["A"; "A#"; "B"; "C"; "C#"; "D"; "D#"; "E"; "F"; "F#"; "G"; "G#" ] |> List.toArray
let octave = str.Substring(str.Length - 1) |> int let notes =
let noteShift = Array.findIndex (fun e -> e = str.Substring(0, str.Length - 1)) notes [ "A"
"A#"
"B"
"C"
"C#"
"D"
"D#"
"E"
"F"
"F#"
"G"
"G#" ]
|> List.toArray
let octave =
str.Substring(str.Length - 1) |> int
let noteShift =
Array.findIndex (fun e -> e = str.Substring(0, str.Length - 1)) notes
(octave - defaultOctave - 1) * 12 + noteShift (octave - defaultOctave - 1) * 12 + noteShift
let toInt16Sample sample = sample |> (*) 32767. |> int16 let toInt16Sample sample = sample |> (*) 32767. |> int16
let freq hz duration = let freq hz duration =
let samples = seq { 0.0..(duration * sampleRate) } let samples =
seq { 0.0 .. (duration * sampleRate) }
let attack = let attack =
let samplesToRise = (sampleRate * (0.001 * attackMs)); let samplesToRise =
(sampleRate * (0.001 * attackMs))
let risingDelta = 1. / samplesToRise let risingDelta = 1. / samplesToRise
let mutable i = 0. let mutable i = 0.
seq { while true do
seq {
while true do
i <- i + risingDelta i <- i + risingDelta
yield min i 1. yield min i 1.
} }
let output = Seq.map let output =
(fun x -> x Seq.map
(fun x ->
x
|> (*) (2. * System.Math.PI * hz / sampleRate) |> (*) (2. * System.Math.PI * hz / sampleRate)
|> sin |> sin
|> (*) volume |> (*) volume)
)
samples samples
let adsrLength = Seq.length output let adsrLength = Seq.length output
let attackArray = attack |> Seq.take adsrLength
let attackArray =
attack |> Seq.take adsrLength
let release = Seq.rev attackArray let release = Seq.rev attackArray
Seq.zip3 release attackArray output Seq.zip3 release attackArray output
|> Seq.map (fun (x, y, z) -> (x * y * z) |> toInt16Sample) |> Seq.map (fun (x, y, z) -> (x * y * z))
let note semitone beats = let note semitone beats =
@@ -50,9 +81,7 @@ let note semitone beats =
freq hz (beats * beatDuration) freq hz (beats * beatDuration)
let song = let song =
[ [ note 3 0.5
//
note 3 0.5
note 3 0.5 note 3 0.5
note 15 0.5 note 15 0.5
note 15 0.5 note 15 0.5
@@ -90,13 +119,15 @@ let song =
note (-2) 0.5 note (-2) 0.5
note (-2) 0.5 note (-2) 0.5
note 10 0.5 note 10 0.5
note 15 0.5 note 15 0.5 ]
// |> Seq.concat
] |> Seq.concat
let pack (d: int16 []) =
let stream = new MemoryStream()
let writer =
new BinaryWriter(stream, System.Text.Encoding.ASCII)
let pack (d:int16[]) =
let stream = new MemoryStream();
let writer = new BinaryWriter(stream, System.Text.Encoding.ASCII);
let dataLength = Array.length d * 2 let dataLength = Array.length d * 2
// RIFF // RIFF
@@ -118,24 +149,20 @@ let pack (d:int16[]) =
// data // data
writer.Write(System.Text.Encoding.ASCII.GetBytes("data")) writer.Write(System.Text.Encoding.ASCII.GetBytes("data"))
writer.Write(dataLength) writer.Write(dataLength)
let data:byte[] = Array.zeroCreate dataLength
let data: byte [] =
Array.zeroCreate dataLength
System.Buffer.BlockCopy(d, 0, data, 0, dataLength) System.Buffer.BlockCopy(d, 0, data, 0, dataLength)
writer.Write(data) writer.Write(data)
stream stream
let write (ms:MemoryStream) = let write (ms: MemoryStream) =
use fs = new FileStream(Path.Combine(__SOURCE_DIRECTORY__,"test.wav"), FileMode.Create) use fs =
new FileStream(Path.Combine(__SOURCE_DIRECTORY__, "test.wav"), FileMode.Create)
ms.WriteTo(fs) ms.WriteTo(fs)
song |> Seq.toArray |> pack |> write song |> Seq.map (fun x -> x |> toInt16Sample) |> Seq.toArray |> pack |> write
// let drawWave(freq, duration) =
// Chart.Line(seq { 1. .. (duration * sampleRate) }, sound)
// |> Chart.saveHtml("chart.html")
// drawWave(440., 1.)