Audio is an HCodecs record that packages a sample rate, channel count, and SampleData for writing uncompressed WAV files. section 10.1.2
Construct an Audio value by:
- Converting a Signal into SampleData with listArray and fromSample. section 10.1.2
- Clamping signal values before conversion so samples remain within the required range. section 10.1.2
- Setting the sample rate and channel number, then passing the record to Codec.Wav.exportFile. section 10.1.2
Listing 10.6 Functions to write audio data to WAV files
import Util.Types
import qualified Codec.Wav #1
import Data.Audio #1
writeWav :: FilePath -> Signal -> IO ()
writeWav filePath signal = do
putStrLn $
"Writing " ++ show (length signal) ++ " samples to " ++ filePath
let sampleData = signalToSampleData $ limit signal #2
audio =
Audio #3
{ Data.Audio.sampleRate = round Util.Types.sampleRate,
channelNumber = 1,
sampleData = sampleData
}
Codec.Wav.exportFile filePath audio #4
Inspect the complete writeWav implementation, including limiting, Audio construction, and WAV export. section 10.1.2
Exporting generated tones
Combining four generated waveforms with tone and concatMap produces a signal that writeWav can save as 4waves.wav. section 10.1.2
