dobutokO2-0.26.0.0: A program and a library to create experimental music from a mono audio and a Ukrainian text

Copyright(c) OleksandrZhabenko 2020
LicenseMIT
StabilityExperimental
Safe HaskellNone
LanguageHaskell2010

DobutokO.Sound

Contents

Description

Maintainer : olexandr543@yahoo.com

A program and a library to create experimental music from a mono audio and a Ukrainian text.

Synopsis

Library and executable functions

For the fixed timbre

overSoXSynthN :: Int -> Double -> Double -> String -> Vector Double -> IO () Source #

Function to create a melody for the given arguments. String is used to provide a rhythm. The main component of the sound includes the lower pure quint, which can be in the same octave or in the one with the number lower by one. The first Double argument from the range [0.01..1.0] is used as a maximum amplitude for Overtones. If it is set to 1.0 the overTones amplitudes are just the maximum ones, otherwise they are multiplied by the parameter and this results in their becoming more silent ones. The second Double argument is a basic sound duration. The default one is 0.5 (second). Please, check before executing whether there is no "x.wav", "test*", "result*" files in the current directory, because they can be overwritten.

For the fixed timbre with different signs for harmonics coefficients

overTones2 :: Double -> String -> OvertonesO Source #

For the given frequency of the note and a Ukrainian text it generates a Vector of the tuples, each one of which contains the harmonics' frequency and amplitude. The String is used to produce the signs for harmonics coefficients.

overSoXSynth2 :: Double -> String -> IO () Source #

For the given frequency it generates a musical sound with a timbre. The main component of the sound includes the lower pure quint, which can be in the same octave or in the one with the number lower by one. Please, check before executing whether there is no "x.wav", "test*", "result*" files in the current directory, because they can be overwritten. The String argument is used to define signs of the harmonics coefficients for Overtones.

overSoXSynthN2 :: Int -> Double -> Double -> String -> String -> Vector Double -> IO () Source #

Function to create a melody for the given arguments. String is used to provide a rhythm. The main component of the sound includes the lower pure quint, which can be in the same octave or in the one with the number lower by one. The first Double argument from the range [0.01..1.0] is used as a maximum amplitude for Overtones. If it is set to 1.0 the overTones amplitudes are just the maximum ones, otherwise they are multiplied by the parameter and this results in their becoming more silent ones. The second Double argument is a basic sound duration. The default one is 0.5 (second). Please, check before executing whether there is no "x.wav", "test*", "result*" files in the current directory, because they can be overwritten.

overSoXSynthN3 :: Int -> Double -> Double -> Double -> String -> String -> String -> Vector Double -> IO () Source #

Function to create a melody for the given arguments. String is used to provide a rhythm. The main component of the sound includes the lower pure quint, which can be in the same octave or in the one with the number lower by one. The first Double argument from the range [0.01..1.0] is used as a maximum amplitude for Overtones. If it is set to 1.0 the overTones amplitudes are just the maximum ones, otherwise they are multiplied by the parameter and this results in their becoming more silent ones. The second Double argument is a basic sound duration. The default one is 0.5 (second). Please, check before executing whether there is no "x.wav", "test*", "result*" files in the current directory, because they can be overwritten. The third String argument is used to define the intervals for the notes if any. The third Double parameter basically is used to define in how many times the volume for the second lower note is less than the volume of the main note. If it is rather great, it can signal that the volume for the second note overTones are greater than for the main note obetones. The last one is experimental feature.

Use additional parameters

overSoXSynthDN :: Double -> String -> IO () Source #

Similar to overSoXSynth except that takes not necessarily pure lower quint note as the second one, but the one specified by the String parameter as an argument to dNote. If you begin the String with space characters, or "сь", or "ць", or dash, or apostrophe, or soft sign, than there will be no interval and the sound will be solely one with its Overtones.

overSoXSynth2DN :: Double -> Double -> String -> IO () Source #

Similar to overSoXSynthDN except that the resulting duration is specified by the second Double parameter in seconds. For overSoXSynthDN it is equal to 0.5.

Use a file for information

overSoXSynthNGen :: FilePath -> Int -> Double -> Double -> String -> IO () Source #

Similar to overSoXSynthN, but uses a sound file to obtain the information analogous to Vector in the latter one. Besides, the function lifts the frequencies to the octave with the given by Int parameter number (better to use from the range [1..8]). The first Double argument from the range [0.01..1.0] is used as a maximum amplitude for Overtones. If it is set to 1.0 the overTones amplitudes are just maximum ones, otherwise they are multiplied by the parameter and this results in their becoming more silent ones. The second Double argument is a basic sound duration. The default one is 0.5 (second). Please, check before executing whether there is no "x.wav", "test*", "result*" and "end.wav" files in the current directory, because they can be overwritten.

For better usage the FilePath should be a filepath for the .wav file.

overSoXSynthNGen2 :: FilePath -> Int -> Double -> Double -> String -> String -> IO () Source #

Similar to overSoXSynthN2, but uses a sound file to obtain the information analogous to Vector in the latter one. Besides, the function lifts the frequencies to the octave with the given by Int parameter number (better to use from the range [1..8]). The first Double argument from the range [0.01..1.0] is used as a maximum amplitude for Overtones. If it is set to 1.0 the overTones amplitudes are just maximum ones, otherwise they are multiplied by the parameter and this results in their becoming more silent ones. The second Double argument is a basic sound duration. The default one is 0.5 (second). Please, check before executing whether there is no "x.wav", "test*", "result*" and "end.wav" files in the current directory, because they can be overwritten.

For better usage the FilePath should be a filepath for the .wav file. The second String argument is used to define signs of the harmonics coefficients in the generated sounds.

overSoXSynthNGen3 :: FilePath -> Int -> Double -> Double -> Double -> String -> String -> String -> IO () Source #

Similar to overSoXSynthN2, but uses a sound file to obtain the information analogous to Vector in the latter one. Besides, the function lifts the frequencies to the octave with the given by Int parameter number (better to use from the range [1..8]). The first Double argument from the range [0.01..1.0] is used as a maximum amplitude for Overtones. If it is set to 1.0 the overTones amplitudes are just maximum ones, otherwise they are multiplied by the parameter and this results in their becoming more silent ones. The second Double argument is a basic sound duration. The default one is 0.5 (second). Please, check before executing whether there is no "x.wav", "test*", "result*" and "end.wav" files in the current directory, because they can be overwritten.

For better usage the FilePath should be a filepath for the .wav file. The second String argument is used to define signs of the harmonics coefficients in the generated sounds. The third String argument is used to define the intervals for the notes if any. The third Double parameter basically is used to define in how many times the volume for the second lower note is less than the volume of the main note. If it is rather great, it can signal that the volume for the second note overTones are greater than for the main note obetones. The last one is experimental feature.

For the unique for the String structure timbre

uniqOvertonesV :: Double -> String -> OvertonesO Source #

For the given frequency of the note it generates a Vector of the tuples, each one of which contains the harmonics' frequency and amplitude. For every given String structure of the uniqueness (see the documentation for mmsyn7s package and its Syllable module) it produces the unique timbre.

uniqOverSoXSynth :: Double -> String -> IO () Source #

For the given frequency and a Ukrainian text it generates a musical sound with the timbre obtained from the Ukrainian text (see the documentation for mmsyn7s package). The timbre for another given text usually differs, but can be the same. The last one is only if the uniqueness structure and length are the same for both String. Otherwise, they differs. This gives an opportunity to practically and quickly synthesize differently sounding intervals. The main component of the sound includes the lower pure quint, which can be in the same octave or in the one with the number lower by one. Please, check before executing whether there is no "x.wav", "test*", "result*" files in the current directory, because they can be overwritten.

uniqOverSoXSynthN :: Int -> Double -> Double -> String -> String -> Vector Double -> IO () Source #

Function to create a melody for the given arguments. The first String is used to provide a rhythm. The second one -- to provide a timbre. The timbre for another given text usually differs, but can be the same. This gives an opportunity to practically and quickly synthesize differently sounding intervals. The first Double argument from the range [0.01..1.0] is used as a maximum amplitude for Overtones. If it is set to 1.0 the overTones amplitudes are just maximum ones, otherwise they are multiplied by the parameter and this results in their becoming more silent ones. The main component of the sound is in the given octave with a number given by Int parameter. Besides, another main component of the sound includes the lower pure quint, which can be in the same octave or in the one with the number lower by one. The second Double argument is a basic sound duration. The default one is 0.5 (second). Please, check before executing whether there is no "x.wav", "test*", "result*" files in the current directory, because they can be overwritten.

For the unique for the String structure timbre with different signs for harmonics coefficients

uniqOvertonesV2 :: Double -> String -> String -> OvertonesO Source #

For the given frequency of the note it generates a Vector of the tuples, each one of which contains the harmonics' frequency and amplitude. For every given first String argument structure of the uniqueness (see the documentation for mmsyn7s package and its Syllable module) it produces the unique timbre. The second String is used to produce the signs for harmonics coefficients.

uniqOverSoXSynth2 :: Double -> String -> String -> IO () Source #

For the given frequency and a Ukrainian text it generates a musical sound with the timbre obtained from the Ukrainian text (see the documentation for mmsyn7s package). The timbre for another given text usually differs, but can be the same. The last one is only if the uniqueness structure and length are the same for both String. Otherwise, they differs. This gives an opportunity to practically and quickly synthesize differently sounding intervals. The main component of the sound includes the lower pure quint, which can be in the same octave or in the one with the number lower by one. Please, check before executing whether there is no "x.wav", "test*", "result*" files in the current directory, because they can be overwritten. The second String argument is used to define signs for the harmonics coefficients for Overtones.

uniqOverSoXSynthN3 :: Int -> Double -> Double -> String -> String -> String -> Vector Double -> IO () Source #

Function to create a melody for the given arguments. The first String is used to provide a rhythm. The second one -- to provide a timbre. The timbre for another given text usually differs, but can be the same. This gives an opportunity to practically and quickly synthesize differently sounding intervals. The first Double argument from the range [0.01..1.0] is used as a maximum amplitude for Overtones. If it is set to 1.0 the overTones amplitudes are just maximum ones, otherwise they are multiplied by the parameter and this results in their becoming more silent ones. The main component of the sound is in the given octave with a number given by Int parameter. Besides, another main component of the sound includes the lower pure quint, which can be in the same octave or in the one with the number lower by one. The second Double argument is a basic sound duration. The default one is 0.5 (second). Please, check before executing whether there is no "x.wav", "test*", "result*" files in the current directory, because they can be overwritten. The third String argument is used to define signs of the harmonics coefficients in the generated sounds.

uniqOverSoXSynthN4 :: Int -> Double -> Double -> Double -> String -> String -> String -> String -> Vector Double -> IO () Source #

Function to create a melody for the given arguments. The first String is used to provide a rhythm. The second one -- to provide a timbre. The timbre for another given text usually differs, but can be the same. This gives an opportunity to practically and quickly synthesize differently sounding intervals. The first Double argument from the range [0.01..1.0] is used as a maximum amplitude for Overtones. If it is set to 1.0 the overTones amplitudes are just maximum ones, otherwise they are multiplied by the parameter and this results in their becoming more silent ones. The main component of the sound is in the given octave with a number given by Int parameter. Besides, another main component of the sound includes the lower pure quint, which can be in the same octave or in the one with the number lower by one. The second Double argument is a basic sound duration. The default one is 0.5 (second). Please, check before executing whether there is no "x.wav", "test*", "result*" files in the current directory, because they can be overwritten. The third String argument is used to define signs of the harmonics coefficients in the generated sounds. The fourth String argument is used to define the intervals for the notes if any. The third Double parameter basically is used to define in how many times the volume for the second lower note is less than the volume of the main note. If it is rather great, it can signal that the volume for the second note overTones are greater than for the main note obetones. The last one is experimental feature.

Use a file for information

uniqOverSoXSynthNGen :: FilePath -> Int -> Double -> Double -> String -> String -> IO () Source #

Similar to uniqOverSoXSynthN, but uses a sound file to obtain the information analogous to Vector in the latter one. Besides, the function lifts the frequencies to the octave with the given by Int parameter number (better to use from the range [1..8]). The first Double argument from the range [0.01..1.0] is used as a maximum amplitude for Overtones. If it is set to 1.0 the overTones amplitudes are just the maximum ones, otherwise they are multiplied by the parameter and this results in their becoming more silent ones. The second Double argument is a basic sound duration. The default one is 0.5 (second). Please, check before executing whether there is no "x.wav", "test*", "result*" and "end.wav" files in the current directory, because they can be overwritten.

For better usage the FilePath should be a filepath for the .wav file.

uniqOverSoXSynthNGen3 :: FilePath -> Int -> Double -> Double -> String -> String -> String -> IO () Source #

Similar to uniqOverSoXSynthN, but uses a sound file to obtain the information analogous to Vector in the latter one. Besides, the function lifts the frequencies to the octave with the given by Int parameter number (better to use from the range [1..8]). The first Double argument from the range [0.01..1.0] is used as a maximum amplitude for Overtones. If it is set to 1.0 the overTones amplitudes are just the maximum ones, otherwise they are multiplied by the parameter and this results in their becoming more silent ones. The second Double argument is a basic sound duration. The default one is 0.5 (second). Please, check before executing whether there is no "x.wav", "test*", "result*" and "end.wav" files in the current directory, because they can be overwritten.

For better usage the FilePath should be a filepath for the .wav file. The third String argument is used to define signs of the harmonics coefficients in the generated sounds.

uniqOverSoXSynthNGen4 :: FilePath -> Int -> Double -> Double -> Double -> String -> String -> String -> String -> IO () Source #

Similar to uniqOverSoXSynthN, but uses a sound file to obtain the information analogous to Vector in the latter one. Besides, the function lifts the frequencies to the octave with the given by Int parameter number (better to use from the range [1..8]). The first Double argument from the range [0.01..1.0] is used as a maximum amplitude for Overtones. If it is set to 1.0 the overTones amplitudes are just the maximum ones, otherwise they are multiplied by the parameter and this results in their becoming more silent ones. The second Double argument is a basic sound duration. The default one is 0.5 (second). Please, check before executing whether there is no "x.wav", "test*", "result*" and "end.wav" files in the current directory, because they can be overwritten.

For better usage the FilePath should be a filepath for the .wav file. The third String argument is used to define signs of the harmonics coefficients in the generated sounds. The fourth String argument is used to define the intervals for the notes if any. The third Double parameter basically is used to define in how many times the volume for the second lower note is less than the volume of the main note. If it is rather great, it can signal that the volume for the second note overTones are greater than for the main note obetones. The last one is an experimental feature.

Work with octaves

octaveUp :: Double -> Double Source #

Returns an analogous note in the higher octave (its frequency in Hz).

octaveDown :: Double -> Double Source #

Returns an analogous note in the lower octave (its frequency in Hz).

whichOctave :: Double -> Maybe Int Source #

Function can be used to determine to which octave (in the American notation for the notes, this is a number in the note written form, e. g. for C4 this is 4) the frequency belongs (to be more exact, the closest note for the given frequency -- see closestNote taking into account its lower pure quint, which can lay in the lower by 1 octave). If it is not practical to determine the number, then the function returns Nothing.

liftInOctave :: Int -> Double -> Maybe Double Source #

Function lifts the given frequency to the given number of the octave (in American notation, from 0 to 8). This number is an Int parameter. The function also takes into account the lower pure quint for the closest note. If it is not practical to determine the number, then the function returns Nothing.

liftInOctaveV :: Int -> Vector Double -> Vector Double Source #

Function lifts the Vector of Double representing frequencies to the given octave with the Int number. Better to use numbers in the range [1..8]. The function also takes into account the lower pure quint for the obtained note behaviour. If it is not practical to determine the octave, the resulting frequency is omitted from the resulting Vector.

Even more extended

Extended generation using enky functionality

With somewhat fixed timbre

overSoXSynthNGenE :: FilePath -> Int -> Int -> Double -> Double -> String -> IO () Source #

Similar to overSoXSynthNGen, but uses additional second Int parameter. It defines, to which n-th elements set (see nkyT) belongs the obtained higher notes in the intervals. If that parameter equals to 12, then the function is practically equivalent to overSoXSynthNGen. To obtain its modifications, please, use 2, 3, 4, 6, or 9.

overSoXSynthNGen2E :: FilePath -> Int -> Int -> Double -> Double -> String -> String -> IO () Source #

Similar to overSoXSynthNGen2, but uses additional second Int parameter. It defines, to which n-th elements set (see nkyT) belongs the obtained higher notes in the intervals. If that parameter equals to 12, then the function is practically equivalent to overSoXSynthNGen2. To obtain its modifications, please, use 2, 3, 4, 6, or 9.

overSoXSynthNGen3E :: FilePath -> Int -> Int -> Double -> Double -> Double -> String -> String -> String -> IO () Source #

Similar to overSoXSynthNGen3, but uses additional second Int parameter. It defines, to which n-th elements set (see nkyT) belongs the obtained higher notes in the intervals. If that parameter equals to 12, then the function is practically equivalent to overSoXSynthNGen3. To obtain its modifications, please, use 2, 3, 4, 6, or 9.

With usage of additional information in the Ukrainian text

uniqOverSoXSynthNGenE :: FilePath -> Int -> Int -> Double -> Double -> String -> String -> IO () Source #

Similar to uniqOverSoXSynthNGen, but uses additional second Int parameter. It defines, to which n-th elements set (see nkyT) belongs the obtained higher notes in the intervals. If that parameter equals to 12, then the function is practically equivalent to uniqOverSoXSynthNGen. To obtain its modifications, please, use 2, 3, 4, 6, or 9.

uniqOverSoXSynthNGen3E :: FilePath -> Int -> Int -> Double -> Double -> String -> String -> String -> IO () Source #

Similar to uniqOverSoXSynthNGen3, but uses additional second Int parameter. It defines, to which n-th elements set (see nkyT) belongs the obtained higher notes in the intervals. If that parameter equals to 12, then the function is practically equivalent to uniqOverSoXSynthNGen3. To obtain its modifications, please, use 2, 3, 4, 6, or 9.

uniqOverSoXSynthNGen4E :: FilePath -> Int -> Int -> Double -> Double -> Double -> String -> String -> String -> String -> IO () Source #

Similar to uniqOverSoXSynthNGen4, but uses additional second Int parameter. It defines, to which n-th elements set (see nkyT) belongs the obtained higher notes in the intervals. If that parameter equals to 12, then the function is practically equivalent to uniqOverSoXSynthNGen4. To obtain its modifications, please, use 2, 3, 4, 6, or 9.

Auxiliary functions

signsFromString :: Int -> String -> Vector Int Source #

Additional function to produce signs from the given String of the Ukrainian text. Ukrainian vowels and voiced consonants gives "+" sign (+1), voiceless and sonorous consonants gives "-" sign (-1). Voiceless2 gives "0". Other symbols are not taken into account.