Tv/-      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+, 2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone:- Coerce to .* and check if it's a null pointer, return /e if it is, otherwise return the given pointer unchanged. Needless to say that this thing is unsafe.0 A version of 1 that converts from any 2 type.3 A version of 4$ that is polymorphic in return type.5Peek 6& and decode it as UTF-8 encoded value.7 Convert a 8f value to null-terminated C string that will be freed automatically. Null bytes are removed from the 8 value first.9TA custom wrapper for creating temporary files in the same directory as given file. : is not opened, you only get ; in the callback.<=Perform specified action ignoring IO exceptions it may throw.-03579<-03579-03579< 2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone# Supported apodization functions.$The parameter is standard deviation STDDEV, 0 < STDDEV <= 0.5.<The parameter is the fraction of the window that is tapered P,  0 <= P <= 1. P == 0 corresponds to   and P = 1 corresponds to  .aThe parameters are a series of small windows (all treated separately). The three parameters are n, ov and P. n% is the number of functions to add, ov is the overlap of the windows. P is the fraction of the window that is tapered, like with a regular tukey window. The function can be specified with only a number, a number and an overlap, or a number, an overlap and a P. ov/ should be smaller than 1 and can be negative.The parameters are a series of windows that have a hole in them. In this way, the predictor is constructed with only a part of the block, which helps in case a block consists of dissimilar parts. All said about the parameters in the comment for ( applies here, with the exception that ov) is the overlap in the gaps in this case.=Exception that is thrown when encoding fails for some reason.xInput WAVE file had this sample format, which is not supported (usually happens with floating point samples right now).Encoder initialization failed.Encoder failed.Enumeration of encoder states.CThe encoder is in the normal OK state and samples can be processed.*The encoder is in the uninitialized state..An error occurred in the underlying Ogg layer.:An error occurred in the underlying verify stream decoder.gThe verify decoder detected a mismatch between the original audio signal and the decoded audio signal.,One of the callbacks returned a fatal error.;An I/O error occurred while opening/reading/writing a file.+An error occurred while writing the stream.Memory allocation failed. )Status of encoder initialization process.!Initialization was successful.""General failure to set up encoder.#JThe library was not compiled with support for the given container format.$%A required callback was not supplied.%>The encoder has an invalid setting for the number of channels.&The encoder has an invalid setting for the bits-per-sample. FLAC supports 4-32 bps but the reference encoder currently supports only up to 24 bps.'7The encoder has an invalid setting for the sample rate.(6The encoder has an invalid setting for the block size.)=The encoder has an invalid setting for the maximum LPC order.*eThe encoder has an invalid setting for the precision of the quantized linear predictor coefficients.+<The specified block size is less than the maximum LPC order.,AThe encoder is bound to the Subset but other settings violate it.-VThe metadata input to the encoder is invalid (should never happen with this binding)..<Initialization was attempted on already initialized encoder.=!An opaque newtype wrapper around . >8, serves to represent a pointer to an encoder instance.2  !"#$%&'()*+,-.=?@1  !"#$%&'()*+,-.=?   !"#$%&'()*+,-.=?@ 2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNoneA Encode given input file, return B in case of failure.CERender apodization functions specification as per description here:  ^https://xiph.org/flac/api/group__flac__stream__encoder.html#ga6598f09ac782a1f2a5743ddf247c81c8.DA= to useOffset of data chunkSize of data chunk#Location of input file (normalized)B in case of troubleCACDAC  2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNoneECreate and use an =G. The encoder is guaranteed to be freed even in the case of exception.>If memory for the encoder cannot be allocated, corresponding  is raised.FjCreate a new stream encoder instance with the default settings. In the case of memory allocation problem / is returned.GFree an encoder instance.H1Set the number of channels to be encoded. Return B$ if encoder is already initialized.I=Set the sample resolution of the input to be encoded. Return B$ if encoder is already initialized.J=Set the sample rate in Hz of the input to be encoded. Return B$ if encoder is already initialized.KSet the compression level. The argument can range from 0 (fastest, least compression) to 8 (slowest, most compression). A value higher than 8 will be treated as 8. Return B# if encoder is already initialized.L(Set the blocksize to use while encoding.MSet to N- to enable mid-side encoding on stereo input.OSet to N` to enable adaptive switching between mid-side and left-right encoding on stereo input. Set to B to use exhaustive searching.PaSet the apodization function(s) the encoder will use when windowing audio data for LPC analysis.QASet the maximum LPC order, or 0 to use only the fixed predictors.RSet the precision in bits, of the quantized linear predictor coefficients, or 0 to let the encoder select it based on the blocksize.SSet to BQ to use only the specified quantized linear predictor coefficient precision, or N> to search neighboring precision values and use the best one.TSet to B[ to let the encoder estimate the best model order based on the residual signal energy, or NH to force the encoder to evaluate all order models and select the best.UCSet the minimum partition order to search when coding the residual.VCSet the maximum partition order to search when coding the residual.W&Set an estimate of the total samples that will be encoded. This is merely an estimate and may be set to 0 if unknown. This value will be written to the STREAMINFO block before encoding, and can remove the need for the caller to rewrite the value later if the value is known before encoding.XSet the verify  flag. If N=, the encoder will verify it's own encoded output by feeding it through an internal decoder and comparing the original signal against the decoded signal. If a mismatch occurs, the process call will return false. Note that this will slow the encoding process by the extra time required for decoding and comparison.YGet the current encoder state.Z<Initialize the encoder instance to encode native FLAC files.[bFinish the encoding process and release resources (also resets encoder and its settings). Return B in case of trouble.+\]^_`abcdefghijklmnopEFGHIJKLMOPQRSTUVWXYZUninitialized encoder instanceName of file to encode to[EHIJKLMOPQRSTUVWXYZ[+\]^_`abcdefghijklmnopEFGHIJKLMOPQRSTUVWXYZ[ 2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone   2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone!"/0Parameters of the stream encoder. Note that the 1S parameter influences a number of other parameters on its own as specified here  ^https://xiph.org/flac/api/group__flac__stream__encoder.html#gae49cf32f5256cb47eecd33779493ac85<. The parameters that it sets automatically are wrapped in q>s, so you can choose whether to use the value that is set by 1 specifying /A (default), or use something specific by passing a value inside rZ. Thorough understanding of the FLAC format is necessary to achieve good results, though.1'Compression level [0..8], default is 5.2Block size, default is 0.3#Verify result (slower), default is B.4xEnable mid-side encoding on stereo input. The number of channels must be 2 for this to have any effect. Default value: /.5Set to N` to enable adaptive switching between mid-side and left-right encoding on stereo input. Set to B/ to use exhaustive searching. Setting this to N requires 4 to also be set to N. in order to have any effect. Default value: /.6Sets the apodization function(s) the encoder will use when windowing audio data for LPC analysis. Up to 32 functions are kept, the rest are dropped. Import *Codec.Audio.FLAC.StreamEncoder.Apodization: to bring apodization functions in scope. Default value: /.7ISet maximum LPC order, or 0 to use the fixed predictors. Default value: /.8Set the precision in bits of the quantized linear predictor coefficients, or 0 to let the encoder select it based on the blocksize. Default value: /.9Set to BQ to use only the specified quantized linear predictor coefficient precision, or NN to search neighboring precision values and use the best one. Default value: /.:Set to B[ to let the encoder estimate the best model order based on the residual signal energy, or NY to force the encoder to evaluate all order models and select the best. Default value: /.;Set the minimum and maximum partition order to search when coding the residual. The partition order determines the context size in the residual. The context size will be approximately blocksize / (2 ^ order). Set both min and max values to 0 to force a single context, whose Rice parameter is based on the residual signal variance. Otherwise, set a min and max order, and the encoder will search all orders, using the mean of each context for its Rice parameter, and use the best. Default: /.</Encode a WAVE file or RF64 file to native FLAC.,If the input file is not a valid WAVE file, s will be thrown. ; is thrown when underlying FLAC encoder reports a problem.Please note that there are a number of limitations on parameters of input audio stream (imposed by current reference FLAC implementation):-Number of channels may be only 1 8 inclusive.8Supported values for bits per sample are 4 24 inclusive.<Acceptable sample rate lies in the range 1 655350 inclusive.t,Execute an initializing action that returns BC on failure and take care of error reporting. In case of trouble,  . is thrown.uExecute an action that returns BE on failure into taking care of error reporting. In case of trouble ) with encoder status attached is thrown.vGet  from given = and throw it immediately./0123456789:;<Encoder settingsFile to encode%Where to save the resulting FLAC filetuv=+ !"#$%&'()*+,-./0123456789:;<+/0123456789:; !"#$%&'()*+,-.</ 0123456789:;<tuv=  2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableSafew4An enumeration of the available channel assignments.xIndependent channelsyLeft+side stereozRight+side stereo{Mid+side stereoB=Exception that is thrown when decoding fails for some reason.CDecoder initialization failed.DDecoder failed.EEnumeration of decoder states.F,The decoder is ready to search for metadata.GAThe decoder is ready to or is in the process of reading metadata.HSThe decoder is ready to or is in the process of searching for the frame sync code.I@The decoder is ready to or is in the process of reading a frame.J.The decoder has reached the end of the stream.K.An error occurred in the underlying Ogg layer.LdAn error occurred while seeking. The decoder must be flushed or reset before decoding can continue.M-The decoder was aborted by the read callback.NcAn error occurred allocating memory. The decoder is in an invalid state and can no longer be used.O*The decoder is in the uninitialized state.P)Status of decoder initialization process.QInitialization was successful.RJThe library was not compiled with support for the given container format.S%A required callback was not supplied.T$An error occurred allocating memory.Ufopen() failed.V<Initialization was attempted on already initialized decoder.|!An opaque newtype wrapper around . >1, serves to represent point to decoder instance.wxyz{BCDEFGHIJKLMNOPQRSTUV|}~wxyz{BCDEFGHIJKLMNOPQRSTUV|}wxyz{BCDE FGHIJKLMNOPQRSTUV|}~  2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNoneInitialize decoder to decode FLAC file and register buffer where decoded audio data will go (which must be big enough). Return P.| to useFLAC file to decode(Buffer where to write decoded audio data&Sample rate, bits per sample, channels  2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone Create and use a |G. The decoder is guaranteed to be freed even in the case of exception.>If memory for the encoder cannot be allocated, corresponding B is raised.jCreate a new stream decoder instance with the default settings. In the case of memory allocation problem / is returned.Free a decoder instance.Set MD5 signature checking. If N the decoder will compute the MD5 signature of the unencoded audio data while decoding and compare it to the signature from the stream info block.Get the current decoder state.KGet frame size as a number of inter-channel samples of last decoded frame. Process one audio frame. Return B on failure.ODecode until the end of the metadata. We use this to skip to the audio stream.bFinish the decoding process and release resources (also resets decoder and its settings). Return B in the case of trouble.  2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableSafeTW=Representation of picture contained in a FLAC metadata block.Y]The picture's MIME data. For best compatibility with players, use picture data of MIME type  image/jpeg or  image/png.ZPicture's description.[Picture's width in pixels.\Picture's height in pixels.](Picture's color depth in bits-per-pixel.^For indexed palettes (like GIF), picture's number of colors (the number of palette entries), or 0 for non-indexed (i.e. 2 ^ depth)._Binary picture data.`xType of picture FLAC metadata can contain. There may be several metadata blocks containing pictures of different types.aOtherb!3232 pixels file icon (PNG only)cOther file icond Cover (front)e Cover (back)f Leaflet pagegMedia (e.g. label side of CD)h"Lead artist/lead performer/soloistiArtist/performerj ConductorkBand/orchestralComposermLyricist/text writernRecording locationoDuring recordingpDuring performanceqMovie/video screen capturerA bright coloured fishs IllustrationtBand/artist logotypeuPublisher/studio logotypevSingle track in a CUE sheet.xTrack offset in samples, relative to the beginning of the FLAC audio stream. It is the offset to the first index point of the track. (Note how this differs from CD-DA, where the track's offset in the TOC is that of the track's INDEX 01 even if there is an INDEX 00.) For CD-DA, the offset must be evenly divisible by 588 samples (588 samples = 44100 samples/sec * 1/75th of a sec).yMTrack ISRC, empty if not present. This is a 12-digit alphanumeric code, the  cue-sheet} package has corresponding type with smart constructor and validation, but for now we don't want to depend on that package.zN for audio tracks, B for non-audio tracks.{B for no pre-emphasis, N for pre-emphasis.|INDEX 00 (pregap) offset, see } for more info about indices.}/Track's index points. Offset in samples, relative to the track offset, of the index point. For CD-DA, the offset must be evenly divisible by 588 samples (588 samples = 44100 samples/sec * 1/75th of a sec). Note that the offset is from the beginning of the track, not the beginning of the audio data.~mCUE sheet as stored in FLAC metadata. This differs from traditional CUE sheets stored in .cue  files (see  -https://hackage.haskell.org/package/cue-sheet to work with those).Media catalog number, in ASCII printable characters 0x20-0x7e. In general, the media catalog number may be 0 to 128 bytes long; any unused characters will be right-padded with NUL characters. For CD-DA, this is a thirteen digit number.QThe number of lead-in samples. This field has meaning only for CD-DA CUE sheets; for other uses it should be 0. For CD-DA, the lead-in is the TRACK 00 area where the table of contents is stored; more precisely, it is the number of samples from the first sample of the media to the first sample of the first index point of the first track. According to the Red Book, the lead-in must be silence and CD grabbing software does not usually store it; additionally, the lead-in must be at least two seconds but may be longer. For these reasons the lead-in length is stored here so that the absolute position of the first track can be computed. Note that the lead-in stored here is the number of samples up to the first index point of the first track, not necessarily to INDEX 01 of the first track; even the first track may have INDEX 00 data.N2 if CUE sheet corresponds to a Compact Disc, else B.2Collection of actual tracks in the CUE sheet, see v.BThe obligatory lead-out track, will be written with the index 170.,Single point in a seek table metadata block.%The sample number of the target frameUThe offset in bytes of the target frame with respect to beginning of the first frame)The number of samples in the target frameA normalizing wrapper around  that makes sure that the r inside is a valid FLAC application name. You can create values of this type using Haskell string literals with OverloadedStrings or with the ' smart constructor. Extract the inner  with .WThe exception that is thrown when manipulation of FLAC metadata fails for some reason."General failure, see the attached .,Invalid seek table was passed to be written.]Invalid CUE sheet was passed to be written. The reason why the data was invalid is attached.`Invalid picture data was passed to be written. The reason why the data was invalid is attached.#Enumeration of meta chain statuses.$The chain is in the normal OK state.HThe data passed into a function violated the function's usage criteria.)The chain could not open the target file.FThe chain could not find the FLAC signature at the start of the file.9The chain tried to write to a file that was not writable.VThe chain encountered input that does not conform to the FLAC metadata specification.;The chain encountered an error while reading the FLAC file.>The chain encountered an error while seeking in the FLAC file.;The chain encountered an error while writing the FLAC file.6The chain encountered an error renaming the FLAC file.;The chain encountered an error removing the temporary file.Memory allocation failed.AThe caller violated an assertion or an unexpected error occurred./One or more of the required callbacks was NULL.This error occurs when read and write methods do not match (i.e. when if you read with callbacks, you should also use function that writes with callbacks).1Should not ever happen when you use this binding.)Enumeration of all known metadata blocks.1Stream info block (general data like sample rate) Padding blockApplication blockSeek table block&Vorbis comment block, a.k.a. FLAC tagsCue sheet block Picture blockUndefined block The same as 6, this one for pointers to metadata structure itself. The same as 0, this one is for pointers to metadata iterator.!An opaque newtype wrapper around . >5, serves to represent a pointer to a metadata chain.Application id must be four bytes long. If it's too short, null bytes will be appended to it to make it four bytes long. If it's too long, it will be truncated.Get  from ._WXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~[WXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~WXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone ,Create a new metadata object given its type.Free a metadata object.6Resize the seekpoint array. In case of trouble return B.LCheck a seek table to see if it conforms to the FLAC specification. Return B if the seek table is illegal.Resize the track array.#Resize a track's index point array.zCheck a CUE sheet to see if it conforms to the FLAC specification. If something is wrong, the explanation is returned in r , otherwise / is returned.DCheck a picture and return description of what is wrong, otherwise /.+Set the MIME type of a given picture block.-Set the description of a given picture block..Set the picture data of a given picture block.  2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone!"LGet min block size.Get max block size.Get min frame size.Get max frame size.Get sample rate.Get number of channels.Get number of bits per sample.Get total number of samples.#Get MD5 sum of original audio data.Get application id from given  block./Get data from given application metadata block.,Set application id for given metadata block..Set application data for given metadata block.Get seek table as a  of s.&Set seek table represented by a given  of  s. Return B in case of trouble.Get Vorbis vendor.Set Vorbis vendor.Get vorbis comment by name.6Set (replace or insert if necessary) a vorbis comment.KDelete a vorbis comment by name. If it doesn't exist, nothing will happen.BDetermine a vorbis comment metadata block can be considered empty.Get CUE sheet from  block assuming that it's a .Peek a single  CueSheetTrack at given index.Set ~ in given  block of type .Poke a v at a specified index.(Get type of picture assuming that given  block is a .Get picture data from a given  block.Set ` to a given  block that should be a .Set W in given  block of type .,Execute a collection of actions that return BL on failure. As soon as failure is reported, stop the execution and return B . Return N in the case of success.UU 2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone: Create and use a ] (metadata chain). The chain is guaranteed to be freed even in the case of exception thrown.<If memory for the chain cannot be allocated, corresponding  is raised.  Create a new ,. In the case of memory allocation problem / is returned. Free a , instance. Delete the object pointed to by . Check status of a given J. This can be used to find out what went wrong. It also resets status to . :Read all metadata from a FLAC file into the chain. Return B if something went wrong.(Write all metadata out to the FLAC file.EMove all padding blocks to the end on the metadata, then merge them into a single block. Useful to get maximum padding to have better changes for re-writing only metadata blocks, not entire FLAC file. Any iterator on the current chain will become invalid after this call. You should delete the iterator and get a new one.QNOTE: this function does not write to the FLAC file, it only modifies the chain.>Traverse all metadata blocks from beginning to end collecting rr values and possibly performing some actions. This is the only way to traverse metadata chain and get access to  and by exporting only this, we eliminate a certain class of possible errors making finding and traversing metadata blocks always correct and safe.?If memory for the iterator cannot be allocated, corresponding  is raised.Create a new iterator. Return /0 if there was a problem with memory allocation.<Free an iterator instance. Delete the object pointed to by .QInitialize the iterator to point to the first metadata block in the given chain.8Move the iterator forward one metadata block, returning B if already at the end.WGet the type of the metadata block at the current position. Useful for fast searching.+Get metadata block at the current position. Write given & block at the position pointed to by  replacing an existing block.(Remove the current block from the chain.AInsert a new block after the current block. You cannot insert a  StreamInfo block as there can be only one, the one that already exists at the head when you read in a chain. The chain takes ownership of the new block and it will be deleted when the chain is deleted. The iterator will be left pointing to the new block.The function returns B if something went wrong.  !"#$%&'(     The chain to writeWhether to use paddingWhether to preserve file statsB if something went wrongMetadata chain to traverseAction to perform on each blockAccumulated resultsExisting iteratorExisting initialized chain%Iterator that determines the positionB if something went wrong      !"#$%&'(      2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableSafevwxyz{|}~~vwxyz{|} 2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone !",<DIRTPicture embedded in FLAC file. A FLAC file can have several pictures attached to it, you choose which one you want by specifying `). If you try to write an invalid picture  will be raised with  constructor which includes a 8? value with explanation why the picture was considered invalid.Note that the  flac-picture  0https://hackage.haskell.org/package/flac-picture package allows to work with W easier using the  Juicy-Pixels library.Writable% optional attribute represented as a q W.OA CUE sheet stored in FLAC metadata. If you try to write an invalid CUE sheet  will be raised with the  constructor which includes a 8J value with explanation why the CUE sheet was considered invalid. Import "Codec.Audio.FLAC.Metadata.CueSheet to manipulate ~ and vs.Writable% optional attribute represented as a q ~.JEnumeration of all supported filed names to index vorbis comment entries.Track/work name.The version field may be used to differentiate multiple versions of the same track title in a single collection (e.g. remix info).0The collection name to which this track belongs.QThe track number of this piece if part of a specific larger collection or album.@Total number of tracks in the collection this track belongs to.$Disc number in a multi-disc release..Total number of discs in a multi-disc release.The artist generally considered responsible for the work. In popular music this is usually the performing band or singer. For classical music it would be the composer. For an audio book it would be the author of the original text.The artist(s) who performed the work. In classical music this would be the conductor, orchestra, soloists. In an audio book it would be the actor who did the reading. In popular music this is typically the same as the  and is omitted.JCopyright attribution, e.g., 2001 Nobody's Band  or 1999 Jack Moffitt .License information, e.g., All Rights Reserved , Any Use Permitted , a URL to a license such as a Creative Commons license or the EFF Open Audio License, etc.HName of the organization producing the track (i.e. the record label ).)A short text description of the contents.'A short text indication of music genre.*Date the track was recorded, usually year."Location where track was recorded.Contact information for the creators or distributors of the track. This could be a URL, an email address, the physical address of the producing label. ISRC number for the track, see  http://isrc.ifpi.org/en.]Rating, usually mapped as 1 5 stars with actual values 20 , 40 , 60 , 80 , 100  stored.*Replay gain track peak, e.g. 0.99996948 .(Replay gain track gain, e.g. -7.89 dB .*Replay gain album peak, e.g. 0.99996948 .(Replay gain album gain, e.g. -7.89 dB .Various Vorbis comments, see H for available field names. The field names are mostly taken from here: .https://www.xiph.org/vorbis/doc/v-comment.html., , and c are popular de-facto standard fields. The library also supports the standard ReplayGain comments.Writable% optional attribute represented as a q 8.Vorbis vendor  comment. When Vorbis Comment  metadata block is present, the vendor  entry is always in there, so when you delete it (by   /), you really set it to an empty string (which is enough to trigger auto vacuum feature if no other entries are detected, see ).Writable% optional attribute represented as a q 8.Seek table as a  of s. Seek points within a table must be sorted in ascending order by sample number. If you try to write an invalid seek table,  will be raised using the  constructor.Writable% optional attribute represented as a q ( ).Application metadata. The  argument to A data constructor can be written using usual Haskell syntax for )) literals, just make sure to enable the OverloadedStrings extension.-For the list of defined application IDs, see: https://xiph.org/flac/id.html.Writable% optional attribute represented as a q .Duration in seconds. Read-only attribute represented as a *.MD5 signature of the unencoded audio data. This allows the decoder to determine if an error exists in the audio data even when the error does not result in an invalid bitstream. Read-only attribute represented as a  of length 16.(Bit rate in kilo-bits per second (kbps). Read-only attribute represented as a +.File size in bytes. Read-only attribute represented as a ,.Total number of samples in audio stream. Samples  means inter-channel sample, i.e. one second of 44.1 KHz audio will have 44100 samples regardless of the number of channels. A value of zero here means the number of total samples is unknown. Read-only attribute represented as a -.Bits per sample (sample depth). FLAC supports from 4 to 32 bits per sample. Currently the reference encoder and decoder only support up to 24 bits per sample. Read-only attribute represented as a +.Channel mask specifying which speaker positions are present. This is inferred from number of channels using channel assignment rules described in the FLAC specification. Read-only attribute represented as . /.7Number of channels. FLAC supports from 1 to 8 channels. Read-only attribute represented as a +.Sample rate in Hz. Read-only attribute represented as a +.ZMaximal frame size in bytes used in the stream. May be 0 to imply the value is not known. Read-only attribute represented as a +.ZMinimal frame size in bytes used in the stream. May be 0 to imply the value is not known. Read-only attribute represented as a +.Maximal block size in samples used in the stream. Equality of minimum block size and maximum block size implies a fixed-blocksize stream. Read-only attribute represented as a +.1Minimal block size in samples used in the stream. Read-only attribute represented as a +.A class for the types that specify which metadata attributes to read/write. It's not expected that users of the library will define new metadata attributes other than via combination of the existing ones, which is also useful. For example,  and [ are not read from FLAC file metadata directly, but defined in terms of other attributes.CType of data that corresponds to this metadata value. For example  is represented by + value in this library, and so   = +.Associated type of the kind 0J that controls whether a particular piece of metadata is writable or not.Given value that determines what to read, read it and return. Some metadata may be missing, in that case the function typically returns a value wrapped in q.Given a value that determines what to write and a value to write, add/replace a piece of metadata information. This is how you edit metadata. To delete something, set it to /% (well, it should be something that can be missing!, for example you cannot delete  attribute). If 2 is defined, this method must be defined as well.;Settings that control how metadata is written in FLAC file.VWhether to traverse all metadata blocks just before padding sorting (if enabled, see ) and writing data to a file, deleting all metadata blocks that appear to be empty, e.g. vorbis comment block without any comments (tags) in it. Default value: N.!Whether to attempt to sort and consolidate all padding at the end of metadata section. The main purpose of this is that the padding can be truncated if necessary to get more space so we can overwrite metadata blocks in place instead of overwriting the entire FLAC file. Default value: N.This setting enables truncation of last padding metadata block if it allows to overwrite metadata in place instead of overwriting the entire file. Default value: N.If N, the owner and modification time will be preserved even if a new FLAC file is written (this is for the cases when we need to write entire FLAC file and thus a copy of the file is written). Default value: N.1The context that 2 passes around.3Metadata chain4 Modified  flag5Size of target file23A non-public shortcut for the inner monad stack of .UAn opaque monad for reading and writing of FLAC metadata. The monad is the home for  and () functions and can be run with ..Run an action that manipulates FLAC metadata. M control subtle and rather low-level details of metadata editing, just pass 6& unless you know what you are doing. ;C specifies location of FLAC file to read/edit in the file system. S is a monadic action that describes what to do with the metadata. Compose it from  and ().The action will throw X if the text data like Vorbis Comment entries cannot be read as a UTF-8-encoded value.If a problem occurs,  is thrown with attached 0 that should help investigating what went wrong.,Delete all Vorbis comment  metadata blocks.)Delete all Application  metadata blocks.(Delete all Seek table  metadata blocks.'Delete all CUE sheet  metadata blocks.%Delete all Picture  metadata blocks.Return a list of all (s of metadata blocks detected in order.Return N if actions in current ~ context have modified FLAC metadata. If so, the FLAC file will be updated to reflect these changes on the way out from the  monad.7<A helper that takes a function that extracts something from  block. It finds the , gets < from it and applies given function to get the final value.8Given  (type of metadata block) and an action that uses an iterator which points to a block of the specified type, perform that action and return its result wrapped in r( if block of requested type was found, / otherwise. If there are several blocks of the given type, action will be performed for each of them, but only the first result will be returned.9 Just like 8S, but creates a new block of requested type if no block of such type can be found.: The same as 8& but it searches for a block of type # that has specified application id.; Just like :, but creates a new . with given id if no such block can be found.< The same as 8', but it searches for a block of type  that has specific `.= Just like <, but creates a new  with given ` if no such block can be found.>A generic building block for 8-like helpers.?A generic building block for 9-like helpers.@5Go through all metadata blocks and delete empty ones.ADetermine if a given  block is empty.BLift an action that may return / on failure into 2' monad taking care of error reporting.CLift an action that returns B on failure into 2' monad taking care of error reporting.DGet  and throw it immediately.E2Specify that the metadata chain has been modified.FMap $ to its ASCII name in the form of a .G Map the number of channels to a . of /s as per FLAC specification.H1I3452JKSettings to useFile to operate onActions to perform The result78Type of block to findWhat to do if such block found Result in r if block was found9Type of block to findWhat to do if such block foundResult:Application id to findWhat to do if such block found Result in r if block was found;Application id to findWhat to do if such block foundResult<Picture type to findWhat to do if such block found Result in r if block was found=Picture type to findWhat to do if such block found Result in r>Additional check on  blockType of block to findWhat to do if such block found Result in r if block was found?Additional check on  blockFSet parameters of newly created block before calling the main callbackType of block to find.What to do if such block found (main callback)@ABCDEFG     WXYZ[\]^_`abcdefghijklmnopqrstu`abcdefghijklmnopqrstuWXYZ[\]^_GH1I3452JK789:;<=>?@ABCDEFG     1 2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone!"#!Parameters of the stream decoder.%If N, the decoder will compute the MD5 signature of the unencoded audio data while decoding and compare it to the signature from the STREAMINFO block. Default value: B.&VThis specifies WAVE format in which to save the decoded file. You can choose between L and M^; choose the latter if uncompressed file is expected to be longer than 4 Gb. Default value: L.'Decode a FLAC file to WAVE.B; is thrown when underlying FLAC decoder reports a problem.N,Execute an initializing action that returns BG on failure and take care of error reporting. In the case of trouble, C V is thrown.OExecute an action that returns BI on failure into taking care of error reporting. In the case of trouble  EncoderFailed) with encoder status attached is thrown.PGet E from a given | and throw it immediately. #$%&'Decoder settingsFile to decode%Where to save the resulting WAVE fileNOP(BCDEFGHIJKLMNOPQRSTUV#$%&'#$%&BCDPQRSTUVEFGHIJKLMNO'#$%&'NOP(Q !"#$%&'()*+,-./0123456789:;<=>?@ABBCDEFGHIJKLMNOPQRS T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i i j k l m n o p q r s t u v w x y z { | } ~                                                     !"#$%&'()'*+,'-.'/01'-23'456789:';<'=>?@'AB@CDEFGHI J K L M N O P Q REFS T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u'*v'*wxyz{|} ~                                          !"#$%&'()*+,-.'*/EF0'12'34'15678xy9EF:;<=>?@ABCDEFGHIJKLMN|OPQRS;TxyUxyV{|}W!flac-0.1.2-HDzWTM6brNx6QNiYxFJDX9*Codec.Audio.FLAC.StreamEncoder.ApodizationCodec.Audio.FLAC.StreamEncoderCodec.Audio.FLAC.StreamDecoderCodec.Audio.FLAC.Metadata"Codec.Audio.FLAC.Metadata.CueSheetCodec.Audio.FLAC.Util-Codec.Audio.FLAC.StreamEncoder.Internal.Types/Codec.Audio.FLAC.StreamEncoder.Internal.Helpers'Codec.Audio.FLAC.StreamEncoder.Internal-Codec.Audio.FLAC.StreamDecoder.Internal.Types/Codec.Audio.FLAC.StreamDecoder.Internal.Helpers'Codec.Audio.FLAC.StreamDecoder.Internal(Codec.Audio.FLAC.Metadata.Internal.Types)Codec.Audio.FLAC.Metadata.Internal.Object:Codec.Audio.FLAC.Metadata.Internal.Level2Interface.Helpers2Codec.Audio.FLAC.Metadata.Internal.Level2InterfaceData.Text.Encoding.ErrorUnicodeExceptionApodizationFunctionBartlett BartlettHannBlackmanBlackmanHarris4Term92DbConnesFlattopGaussHammingHann KaiserBesselNuttall RectangleTriangleTukey PartialTukey PunchoutTukeyWelchEncoderExceptionEncoderInvalidSampleFormatEncoderInitFailed EncoderFailed EncoderStateEncoderStateOKEncoderStateUninitializedEncoderStateOggErrorEncoderStateVerifyDecoderError%EncoderStateVerifyMismatchInAudioDataEncoderStateClientErrorEncoderStateIOErrorEncoderStateFramingError!EncoderStateMemoryAllocationErrorEncoderInitStatusEncoderInitStatusOKEncoderInitStatusEncoderError&EncoderInitStatusUnsupportedCointainer!EncoderInitStatusInvalidCallbacks(EncoderInitStatusInvalidNumberOfChannels%EncoderInitStatusInvalidBitsPerSample"EncoderInitStatusInvalidSampleRate!EncoderInitStatusInvalidBlockSize#EncoderInitStatusInvalidMaxLpcOrder)EncoderInitStatusInvalidQlpCoeffPrecision-EncoderInitStatusBlockSizeTooSmallForLpcOrderEncoderInitStatusNotStreamable EncoderInitStatusInvalidMetadata#EncoderInitStatusAlreadyInitializedEncoderSettingsencoderCompressionencoderBlockSize encoderVerifyencoderDoMidSideStereoencoderLooseMidSideStereoencoderApodizationencoderMaxLpcOrderencoderQlpCoeffPrecision encoderDoQlpCoeffPrecisionSearchencoderDoExhaustiveModelSearchencoderResidualPartitionOrders encodeFlac$fDefaultEncoderSettings$fShowEncoderSettings$fReadEncoderSettings$fEqEncoderSettings$fOrdEncoderSettingsDecoderExceptionDecoderInitFailed DecoderFailed DecoderStateDecoderStateSearchForMetadataDecoderStateReadMetadataDecoderStateSearchForFrameSyncDecoderStateReadFrameDecoderStateEndOfStreamDecoderStateOggErrorDecoderStateSeekErrorDecoderStateAborted!DecoderStateMemoryAllocationErrorDecoderStateUnititializedDecoderInitStatusDecoderInitStatusOK%DecoderInitStatusUnsupportedContainer!DecoderInitStatusInvalidCallbacks&DecoderInitStatusMemoryAllocationError!DecoderInitStatusErrorOpeningFile#DecoderInitStatusAlreadyInitialized PictureDatapictureMimeTypepictureDescription pictureWidth pictureHeight pictureDepth pictureColors pictureData PictureType PictureOtherPictureFileIconStandardPictureFileIconPictureFrontCoverPictureBackCoverPictureLeafletPage PictureMediaPictureLeadArtist PictureArtistPictureConductor PictureBandPictureComposerPictureLyricistPictureRecordingLocationPictureDuringRecordingPictureDuringPerformancePictureVideoScreenCapture PictureFishPictureIllustrationPictureBandLogotypePicturePublisherLogotypeCueTrackcueTrackOffset cueTrackIsrc cueTrackAudiocueTrackPreEmphasiscueTrackPregapIndexcueTrackIndices CueSheetData cueCatalog cueLeadIncueIsCd cueTrackscueLeadOutTrack SeekPointseekPointSampleNumberseekPointStreamOffsetseekPointFrameSamples ApplicationId MetaExceptionMetaGeneralProblemMetaInvalidSeekTableMetaInvalidCueSheetMetaInvalidPictureMetaChainStatusMetaChainStatusOKMetaChainStatusIllegalInputMetaChainStatusErrorOpeningFileMetaChainStatusNotFlacFileMetaChainStatusNotWritableMetaChainStatusBadMetadataMetaChainStatusReadErrorMetaChainStatusSeekErrorMetaChainStatusWriteErrorMetaChainStatusRenameErrorMetaChainStatusUnlinkError$MetaChainStatusMemoryAllocationErrorMetaChainStatusInternalErrorMetaChainStatusInvalidCallbacks MetaChainStatusReadWriteMismatchMetaChainStatusWrongWriteCall MetadataTypeStreamInfoBlock PaddingBlockApplicationBlockSeekTableBlockVorbisCommentBlock CueSheetBlock PictureBlockUndefinedBlockmkApplicationIdunApplicationIdPictureCueSheet VorbisFieldTitleVersionAlbum TrackNumber TrackTotal DiscNumber DiscTotalArtist Performer CopyrightLicense Organization DescriptionGenreDateLocationContactISRCRating RGTrackPeak RGTrackGain RGAlbumPeak RGAlbumGain VorbisComment VorbisVendor SeekTable ApplicationDurationMD5SumBitRateFileSize TotalSamples BitsPerSample ChannelMaskChannels SampleRate MaxFrameSize MinFrameSize MaxBlockSize MinBlockSize MetaValueMetaType MetaWritableretrieve=-> MetaSettingsmetaAutoVacuummetaSortPaddingmetaUsePaddingmetaPreserveFileStatsFlacMeta runFlacMetawipeVorbisCommentwipeApplications wipeSeekTable wipeCueSheets wipePictures getMetaChainisMetaChainModified$fMetaValuePicture$fMetaValueCueSheet$fMetaValueVorbisComment$fMetaValueVorbisVendor$fMetaValueSeekTable$fMetaValueApplication$fMetaValueDuration$fMetaValueMD5Sum$fMetaValueBitRate$fMetaValueFileSize$fMetaValueTotalSamples$fMetaValueBitsPerSample$fMetaValueChannelMask$fMetaValueChannels$fMetaValueSampleRate$fMetaValueMaxFrameSize$fMetaValueMinFrameSize$fMetaValueMaxBlockSize$fMetaValueMinBlockSize$fDefaultMetaSettings$fFunctorFlacMeta$fApplicativeFlacMeta$fMonadFlacMeta$fMonadIOFlacMeta$fMonadThrowFlacMeta$fMonadCatchFlacMeta$fMonadMaskFlacMeta$fShowMetaSettings$fReadMetaSettings$fEqMetaSettings$fOrdMetaSettings$fShowVorbisField$fReadVorbisField$fEqVorbisField$fOrdVorbisField$fBoundedVorbisField$fEnumVorbisFieldDecoderSettingsdecoderMd5CheckingdecoderWaveFormat decodeFlac$fDefaultDecoderSettings$fShowDecoderSettings$fReadDecoderSettings$fEqDecoderSettings$fOrdDecoderSettingsmaybePtrbaseGHC.PtrPtrGHC.BaseNothingtoEnum'GHC.EnumtoEnumGHC.RealIntegral fromEnum'fromEnumpeekCStringTextForeign.C.StringCStringwithCStringText#text-1.2.2.2-9RlRQEEESJb1LT1TjepTtHData.Text.InternalText withTempFile'GHC.IO.Handle.TypesHandleGHC.IOFilePathignoringIOErrorsEncoder Data.VoidVoid$fExceptionEncoderExceptionencoderProcessHelperghc-prim GHC.TypesFalserenderApodizationSpecc_encoder_process_helper withEncoder encoderNew encoderDeleteencoderSetChannelsencoderSetBitsPerSampleencoderSetSampleRateencoderSetCompressionencoderSetBlockSizeencoderSetDoMidSideStereoTrueencoderSetLooseMidSideStereoencoderSetApodizationencoderSetMaxLpcOrderencoderSetQlpCoeffPrecision#encoderSetDoQlpCoeffPrecisionSearch!encoderSetDoExhaustiveModelSearch#encoderSetMinResidualPartitionOrder#encoderSetMaxResidualPartitionOrderencoderSetTotalSamplesEstimateencoderSetVerifyencoderGetStateencoderInitFile encoderFinishc_encoder_finishc_encoder_init_filec_encoder_get_statec_encoder_set_verify$c_encoder_set_total_samples_estimate*c_encoder_set_max_residual_partition_order*c_encoder_set_min_residual_partition_order(c_encoder_set_do_exhaustive_model_search#c_encoder_set_qlp_coeff_prec_search!c_encoder_set_qlp_coeff_precisionc_encoder_set_max_lpc_orderc_encoder_set_apodization#c_encoder_set_loose_mid_side_stereo c_encoder_set_do_mid_side_stereoc_encoder_set_blocksizec_encoder_set_compression_levelc_encoder_set_sample_ratec_encoder_set_bits_per_samplec_encoder_set_channelsc_encoder_delete c_encoder_newMaybeJust!wave-0.1.4-7Nd27S018lZHgcdHPo4Fq8Codec.Audio.Wave WaveExceptionliftInitliftBool throwStateChannelAssignmentChannelAssignmentIndependentChannelAssignmentLeftSideChannelAssignmentRightSideChannelAssignmentMidSideDecoder$fExceptionDecoderExceptiondecoderInitHelperc_decoder_init_helper withDecoder decoderNew decoderDeletedecoderSetMd5CheckingdecoderGetStatedecoderGetBlockSizedecoderProcessSingle decoderProcessUntilEndOfMetadata decoderFinishc_decoder_finish'c_decoder_process_until_end_of_metadatac_decoder_process_singlec_decoder_get_blocksizec_decoder_get_statec_decoder_set_md5_checkingc_decoder_delete c_decoder_newbytestring-0.10.8.1Data.ByteString.Internal ByteStringMetadata MetaChain MetaIterator$fIsStringApplicationId$fShowApplicationId$fExceptionMetaException objectNew objectDeleteobjectSeektableResizePointsobjectSeektableIsLegalobjectCueSheetResizeTracks objectCueSheetTrackResizeIndicesobjectCueSheetIsLegalobjectPictureIsLegalobjectPictureSetMimeTypeobjectPictureSetDescriptionobjectPictureSetDatac_object_picture_set_data c_object_picture_set_descriptionc_object_picture_set_mime_typec_object_picture_is_legalc_object_cuesheet_is_legal&c_object_cuesheet_track_resize_indicesc_object_cuesheet_resize_tracksc_object_seektable_is_legal c_object_seektable_resize_pointsc_object_delete c_object_newgetMinBlockSizegetMaxBlockSizegetMinFrameSizegetMaxFrameSize getSampleRate getChannelsgetBitsPerSamplegetTotalSamples getMd5SumgetApplicationIdgetApplicationDatasetApplicationIdsetApplicationData getSeekPoints&vector-0.12.0.1-JOtbAphig5lG2Gp1CUS1Dj Data.VectorVector setSeekPointsgetVorbisVendorsetVorbisVendorgetVorbisCommentsetVorbisCommentdeleteVorbisCommentisVorbisCommentEmptygetCueSheetDatagetCueSheetTracksetCueSheetDatasetCueSheetTrackgetPictureTypegetPictureDatasetPictureTypesetPictureData shortcutFalsec_set_picture_colorsc_set_picture_depthc_set_picture_heightc_set_picture_widthc_set_picture_typec_get_picture_datac_get_picture_colorsc_get_picture_depthc_get_picture_heightc_get_picture_widthc_get_picture_descriptionc_get_picture_mime_typec_get_picture_typec_set_cue_sheet_track_index"c_set_cue_sheet_track_pre_emphasisc_set_cue_sheet_track_audioc_set_cue_sheet_track_isrcc_set_cue_sheet_track_numberc_set_cue_sheet_track_offsetc_set_cue_sheet_is_cdc_set_cue_sheet_lead_inc_set_cue_sheet_mcnc_get_cue_sheet_track_index&c_get_cue_sheet_track_has_pregap_index!c_get_cue_sheet_track_num_indices!c_get_cue_sheet_track_preemphasisc_get_cue_sheet_track_audioc_get_cue_sheet_track_isrcc_get_cue_sheet_track_offsetc_get_cue_sheet_num_tracksc_get_cue_sheet_is_cdc_get_cue_sheet_lead_inc_get_cue_sheet_mcnc_is_vorbis_comment_emptyc_delete_vorbis_commentc_set_vorbis_commentc_get_vorbis_commentc_set_vorbis_vendorc_get_vorbis_vendorc_set_seek_pointc_get_seek_pointc_get_seek_points_numc_set_application_datac_set_application_idc_get_application_datac_get_application_id c_get_md5sumc_get_total_samplesc_get_bits_per_samplec_get_channelsc_get_sample_ratec_get_max_framesizec_get_min_framesizec_get_max_blocksizec_get_min_blocksize withChainchainNew chainDelete chainStatus chainRead chainWritechainSortPadding withIterator iteratorNewiteratorDelete iteratorInit iteratorNextiteratorGetBlockTypeiteratorGetBlockiteratorSetBlockiteratorDeleteBlockiteratorInsertBlockAfterc_iterator_insert_block_afterc_iterator_delete_blockc_iterator_set_blockc_iterator_get_blockc_iterator_get_block_typec_iterator_nextc_iterator_initc_iterator_deletec_iterator_newc_chain_sort_padding c_chain_write c_chain_readc_chain_statusc_chain_delete c_chain_newStringDoubleGHC.WordWord32 GHC.NaturalNaturalWord64containers-0.5.7.1 Data.Set.BaseSetSpeakerPosition ConstraintContextInner metaChain metaModified metaFileSize1data-default-class-0.1.2.0-FYQpjIylblBDctdkHAFeXAData.Default.Classdef inStreamInfo withMetaBlockwithMetaBlock'withApplicationBlockwithApplicationBlock'withPictureBlockwithPictureBlock'withMetaBlockGenwithMetaBlockGen' applyVacuumisMetaBlockEmpty liftMaybe throwStatus setModifiedvorbisFieldName toChannelMask NotWritable unFlacMeta WaveVanillaWaveRF64