module Examples
where
import Language.Instrument
import Language.Modulators
import Language.MusicPiece
import Language.Notes
import Notes.Default
import Synthesizer.Converters.Language (convertMusicPieceToSynthesizer)
import Synthesizer.Encoders.Wav
import Synthesizer.Modifiers
import Synthesizer.Oscillator
import Synthesizer.Structure
defaultVolume :: Amplitude
defaultVolume :: Amplitude
defaultVolume = Amplitude
25000
musicPiece :: MusicPiece
musicPiece :: MusicPiece
musicPiece = [Instrument] -> MusicPiece
MusicPiece [
Amplitude
-> Amplitude -> NoteStrike -> [InstrumentEvent] -> Instrument
Instrument Amplitude
440 Amplitude
defaultVolume (Amplitude -> Amplitude -> Amplitude -> Amplitude -> NoteStrike
noteStrike Amplitude
0.2 Amplitude
0.2 Amplitude
0.5 Amplitude
0.1) [
Amplitude -> Amplitude -> Amplitude -> Note -> InstrumentEvent
NoteEvent Amplitude
0 Amplitude
0.5 Amplitude
1 (Tone
C Tone -> Octave -> Note
forall a b. ModulateOctave a b => a -> Octave -> b
^= Octave
Four),
Amplitude -> Amplitude -> Amplitude -> Note -> InstrumentEvent
NoteEvent Amplitude
0.5 Amplitude
0.5 Amplitude
1 (Tone
D Tone -> Octave -> Note
forall a b. ModulateOctave a b => a -> Octave -> b
^= Octave
Four),
Amplitude -> Amplitude -> Amplitude -> Note -> InstrumentEvent
NoteEvent Amplitude
1 Amplitude
0.5 Amplitude
1 (Tone
E Tone -> Octave -> Note
forall a b. ModulateOctave a b => a -> Octave -> b
^= Octave
Four),
Amplitude -> Amplitude -> Amplitude -> Note -> InstrumentEvent
NoteEvent Amplitude
1.5 Amplitude
0.5 Amplitude
1 (Tone
C Tone -> Octave -> Note
forall a b. ModulateOctave a b => a -> Octave -> b
^= Octave
Four),
Amplitude -> Amplitude -> Amplitude -> Note -> InstrumentEvent
NoteEvent Amplitude
2 Amplitude
0.5 Amplitude
1 (Tone
C Tone -> Octave -> Note
forall a b. ModulateOctave a b => a -> Octave -> b
^= Octave
Four),
Amplitude -> Amplitude -> Amplitude -> Note -> InstrumentEvent
NoteEvent Amplitude
2.5 Amplitude
0.5 Amplitude
1 (Tone
D Tone -> Octave -> Note
forall a b. ModulateOctave a b => a -> Octave -> b
^= Octave
Four),
Amplitude -> Amplitude -> Amplitude -> Note -> InstrumentEvent
NoteEvent Amplitude
3 Amplitude
0.5 Amplitude
1 (Tone
E Tone -> Octave -> Note
forall a b. ModulateOctave a b => a -> Octave -> b
^= Octave
Four),
Amplitude -> Amplitude -> Amplitude -> Note -> InstrumentEvent
NoteEvent Amplitude
3.5 Amplitude
0.5 Amplitude
1 (Tone
C Tone -> Octave -> Note
forall a b. ModulateOctave a b => a -> Octave -> b
^= Octave
Four),
Amplitude -> Amplitude -> Amplitude -> Note -> InstrumentEvent
NoteEvent Amplitude
4 Amplitude
0.5 Amplitude
1.3 (Tone
E Tone -> Octave -> Note
forall a b. ModulateOctave a b => a -> Octave -> b
^= Octave
Four),
Amplitude -> Amplitude -> Amplitude -> Note -> InstrumentEvent
NoteEvent Amplitude
4.5 Amplitude
0.5 Amplitude
1 (Tone
F Tone -> Octave -> Note
forall a b. ModulateOctave a b => a -> Octave -> b
^= Octave
Four),
Amplitude -> Amplitude -> Amplitude -> Note -> InstrumentEvent
NoteEvent Amplitude
5 Amplitude
0.5 Amplitude
1.3 (Tone
G Tone -> Octave -> Note
forall a b. ModulateOctave a b => a -> Octave -> b
^= Octave
Four)
]
]
synthesizerStructure :: SynSound
synthesizerStructure :: SynSound
synthesizerStructure = MusicPiece -> SynSound
convertMusicPieceToSynthesizer MusicPiece
musicPiece
channel :: Channel
channel = [SoundEvent] -> Channel
Channel [
Amplitude
-> Amplitude -> (SamplingRate -> [Amplitude]) -> SoundEvent
SoundEvent Amplitude
0 Amplitude
4 (Amplitude -> [Amplitude] -> [Amplitude]
applyAmplitude Amplitude
1000 ([Amplitude] -> [Amplitude])
-> (SamplingRate -> [Amplitude]) -> SamplingRate -> [Amplitude]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Amplitude -> SamplingRate -> [Amplitude]
sineOscillator Amplitude
500)
]
doubleChannel :: Channel
doubleChannel = Channel
channel Channel -> Channel -> Channel
forall a. Semigroup a => a -> a -> a
<> Channel
channel
newStructure :: SynSound
newStructure = SynSound -> Channel -> SynSound
addChannel SynSound
synthesizerStructure Channel
channel
gen :: SamplingRate -> [Sample]
gen :: SamplingRate -> [Amplitude]
gen SamplingRate
rate = [Amplitude
0, Amplitude
timeStep..]
where timeStep :: Amplitude
timeStep = Amplitude
1 Amplitude -> Amplitude -> Amplitude
forall a. Fractional a => a -> a -> a
/ SamplingRate -> Amplitude
forall a b. (Integral a, Num b) => a -> b
fromIntegral SamplingRate
rate
eventWithCustomGen :: SoundEvent
eventWithCustomGen = Amplitude
-> Amplitude -> (SamplingRate -> [Amplitude]) -> SoundEvent
SoundEvent Amplitude
0 Amplitude
10 (Amplitude -> [Amplitude] -> [Amplitude]
applyAmplitude Amplitude
1000 ([Amplitude] -> [Amplitude])
-> (SamplingRate -> [Amplitude]) -> SamplingRate -> [Amplitude]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SamplingRate -> [Amplitude]
gen)
newStructureWithCustomGen :: SynSound
newStructureWithCustomGen = SynSound -> [SoundEvent] -> SynSound
addToNewChannel SynSound
synthesizerStructure [SoundEvent
eventWithCustomGen]
saveFiles :: IO ()
saveFiles :: IO ()
saveFiles = do
FilePath -> SynSound -> IO ()
saveSignal FilePath
"dsl_only" SynSound
synthesizerStructure
FilePath -> SynSound -> IO ()
saveSignal FilePath
"with_added_sine" SynSound
newStructure
FilePath -> SynSound -> IO ()
saveSignal FilePath
"with_custom_gen" SynSound
newStructureWithCustomGen