#-      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+, 2016 present Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableSafevTflac=Representation of picture contained in a FLAC metadata block.flac]The picture's MIME data. For best compatibility with players, use picture data of MIME type  image/jpeg or  image/png.flacPicture's description.flacPicture's width in pixels.flacPicture's height in pixels.flac(Picture's color depth in bits-per-pixel.flacFor indexed palettes (like GIF), picture's number of colors (the number of palette entries), or 0 for non-indexed (i.e. 2 ^ depth).flacBinary picture data. flacxType of picture FLAC metadata can contain. There may be several metadata blocks containing pictures of different types. flacOther flac!3232 pixels file icon (PNG only) flacOther file icon flac Cover (front)flac Cover (back)flac Leaflet pageflacMedia (e.g. label side of CD)flac"Lead artist/lead performer/soloistflacArtist/performerflac ConductorflacBand/orchestraflacComposerflacLyricist/text writerflacRecording locationflacDuring recordingflacDuring performanceflacMovie/video screen captureflacA bright coloured fishflac IllustrationflacBand/artist logotypeflacPublisher/studio logotypeflacSingle track in a CUE sheet.!flacTrack 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)."flacMTrack 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.#flac- for audio tracks, . for non-audio tracks.$flac. for no pre-emphasis, - for pre-emphasis.%flacINDEX 00 (pregap) offset, see & for more info about indices.&flac/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.'flacmCUE 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).)flacMedia 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.*flacQThe 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.+flac-2 if CUE sheet corresponds to a Compact Disc, else ..,flac2Collection of actual tracks in the CUE sheet, see .-flacBThe obligatory lead-out track, will be written with the index 170..flac,Single point in a seek table metadata block.0flac%The sample number of the target frame1flacUThe offset in bytes of the target frame with respect to beginning of the first frame2flac)The number of samples in the target frame3flacA 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 S' smart constructor. Extract the inner / with T.4flacWThe exception that is thrown when manipulation of FLAC metadata fails for some reason.5flac"General failure, see the attached 9.6flac,Invalid seek table was passed to be written.7flac]Invalid CUE sheet was passed to be written. The reason why the data was invalid is attached.8flac`Invalid picture data was passed to be written. The reason why the data was invalid is attached.9flac#Enumeration of meta chain statuses.:flac$The chain is in the normal OK state.;flacHThe data passed into a function violated the function's usage criteria.<flac)The chain could not open the target file.=flacFThe chain could not find the FLAC signature at the start of the file.>flac9The chain tried to write to a file that was not writable.?flacVThe chain encountered input that does not conform to the FLAC metadata specification.@flac;The chain encountered an error while reading the FLAC file.Aflac>The chain encountered an error while seeking in the FLAC file.Bflac;The chain encountered an error while writing the FLAC file.Cflac6The chain encountered an error renaming the FLAC file.Dflac;The chain encountered an error removing the temporary file.EflacMemory allocation failed.FflacAThe caller violated an assertion or an unexpected error occurred.Gflac/One or more of the required callbacks was NULL.HflacThis 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).Iflac1Should not ever happen when you use this binding.Jflac)Enumeration of all known metadata blocks.Kflac1Stream info block (general data like sample rate)Lflac Padding blockMflacApplication blockNflacSeek table blockOflac&Vorbis comment block, a.k.a. FLAC tagsPflacCue sheet blockQflac Picture blockRflacUndefined block0flac The same as 16, this one for pointers to metadata structure itself.2flac The same as 10, this one is for pointers to metadata iterator.1flac!An opaque newtype wrapper around 3 45, serves to represent a pointer to a metadata chain.SflacApplication 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.TflacGet / from 3.[  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR052617ST 2016 present Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableSafey !"#$%&'()*+,-'()*+,- !"#$%& 2016 present Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableSafee8flac4An enumeration of the available channel assignments.9flacIndependent channels:flacLeft+side stereo;flacRight+side stereo<flacMid+side stereoUflac=Exception that is thrown when decoding fails for some reason.VflacDecoder initialization failed.WflacDecoder failed.XflacEnumeration of decoder states.Yflac,The decoder is ready to search for metadata.ZflacAThe decoder is ready to or is in the process of reading metadata.[flacSThe decoder is ready to or is in the process of searching for the frame sync code.\flac@The decoder is ready to or is in the process of reading a frame.]flac.The decoder has reached the end of the stream.^flac.An error occurred in the underlying Ogg layer._flacdAn error occurred while seeking. The decoder must be flushed or reset before decoding can continue.`flac-The decoder was aborted by the read callback.aflaccAn error occurred allocating memory. The decoder is in an invalid state and can no longer be used.bflac*The decoder is in the uninitialized state.cflac)Status of decoder initialization process.dflacInitialization was successful.eflacJThe library was not compiled with support for the given container format.fflac%A required callback was not supplied.gflac$An error occurred allocating memory.hflacfopen() failed.iflac<Initialization was attempted on already initialized decoder.=flac!An opaque newtype wrapper around 3 41, serves to represent point to decoder instance.89:;<UVWXYZ[\]^_`abcdefghi=> 2016 present Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone#jflac Supported apodization functions.qflac$The parameter is standard deviation STDDEV, 0 < STDDEV <= 0.5.xflac<The parameter is the fraction of the window that is tapered P,  0 <= P <= 1. P == 0 corresponds to v and P = 1 corresponds to s.yflacaThe 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.zflacThe 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 y( applies here, with the exception that ov) is the overlap in the gaps in this case.|flac=Exception that is thrown when encoding fails for some reason.}flacxInput WAVE file had this sample format, which is not supported (usually happens with floating point samples right now).~flacEncoder initialization failed.flacEncoder failed.flacEnumeration of encoder states.flacCThe encoder is in the normal OK state and samples can be processed.flac*The encoder is in the uninitialized state.flac.An error occurred in the underlying Ogg layer.flac:An error occurred in the underlying verify stream decoder.flacgThe verify decoder detected a mismatch between the original audio signal and the decoded audio signal.flac,One of the callbacks returned a fatal error.flac;An I/O error occurred while opening/reading/writing a file.flac+An error occurred while writing the stream.flacMemory allocation failed.flac)Status of encoder initialization process.flacInitialization was successful.flac"General failure to set up encoder.flacJThe library was not compiled with support for the given container format.flac%A required callback was not supplied.flac>The encoder has an invalid setting for the number of channels.flacThe 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.flac7The encoder has an invalid setting for the sample rate.flac6The encoder has an invalid setting for the block size.flac=The encoder has an invalid setting for the maximum LPC order.flaceThe encoder has an invalid setting for the precision of the quantized linear predictor coefficients.flac<The specified block size is less than the maximum LPC order.flacAThe encoder is bound to the Subset but other settings violate it.flacVThe metadata input to the encoder is invalid (should never happen with this binding).flac<Initialization was attempted on already initialized encoder.?flac!An opaque newtype wrapper around 3 48, serves to represent a pointer to an encoder instance.1jklmnopqrstuvwxyz{|}~?@  2016 present Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone}Aflac Encode given input file, return . in case of failure.BflacERender apodization functions specification as per description here:  ^https://xiph.org/flac/api/group__flac__stream__encoder.html#ga6598f09ac782a1f2a5743ddf247c81c8.Aflac? to useflacOffset of data chunkflacSize of data chunkflac#Location of input file (normalized)flac. in case of troubleAB 2016 present Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone9jklmnopqrstuvwxyz{jklmnopqrstuvwxyz{  2016 present Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone>Cflac Coerce to 3* and check if it's a null pointer, return De if it is, otherwise return the given pointer unchanged. Needless to say that this thing is unsafe.Eflac A version of F that converts from any G type.Hflac A version of I$ that is polymorphic in return type.JflacPeek K& and decode it as UTF-8 encoded value.Lflac Convert a Mf value to null-terminated C string that will be freed automatically. Null bytes are removed from the M value first.NflacTA custom wrapper for creating temporary files in the same directory as given file. O is not opened, you only get P in the callback.Qflac=Perform specified action ignoring IO exceptions it may throw.CEHJLN  2016 present Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone_ RflacCreate 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.SflacjCreate a new stream encoder instance with the default settings. In the case of memory allocation problem D is returned.TflacFree an encoder instance.Uflac1Set the number of channels to be encoded. Return .$ if encoder is already initialized.Vflac=Set the sample resolution of the input to be encoded. Return .$ if encoder is already initialized.Wflac=Set the sample rate in Hz of the input to be encoded. Return .$ if encoder is already initialized.XflacSet 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 .# if encoder is already initialized.Yflac(Set the blocksize to use while encoding.ZflacSet to -- to enable mid-side encoding on stereo input.[flacSet to -` to enable adaptive switching between mid-side and left-right encoding on stereo input. Set to . to use exhaustive searching.\flacaSet the apodization function(s) the encoder will use when windowing audio data for LPC analysis.]flacASet the maximum LPC order, or 0 to use only the fixed predictors.^flacSet the precision in bits, of the quantized linear predictor coefficients, or 0 to let the encoder select it based on the blocksize._flacSet to .Q to use only the specified quantized linear predictor coefficient precision, or -> to search neighboring precision values and use the best one.`flacSet to .[ to let the encoder estimate the best model order based on the residual signal energy, or -H to force the encoder to evaluate all order models and select the best.aflacCSet the minimum partition order to search when coding the residual.bflacCSet the maximum partition order to search when coding the residual.cflac&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.dflacSet the verify  flag. If -=, 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.eflacGet the current encoder state.fflac<Initialize the encoder instance to encode native FLAC files.gflacbFinish the encoding process and release resources (also resets encoder and its settings). Return . in case of trouble.fflacUninitialized encoder instanceflacName of file to encode toRUVWXYZ[\]^_`abcdefg 2016 present Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone"#@flac0Parameters of the stream encoder. Note that the S 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 h>s, so you can choose whether to use the value that is set by  specifying DA (default), or use something specific by passing a value inside iZ. Thorough understanding of the FLAC format is necessary to achieve good results, though.flac'Compression level [0..8], default is 5.flacBlock size, default is 0.flac#Verify result (slower), default is ..flacxEnable mid-side encoding on stereo input. The number of channels must be 2 for this to have any effect. Default value: D.flacSet to -` to enable adaptive switching between mid-side and left-right encoding on stereo input. Set to ./ to use exhaustive searching. Setting this to - requires  to also be set to -. in order to have any effect. Default value: D.flacSets 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: D.flacISet maximum LPC order, or 0 to use the fixed predictors. Default value: D.flacSet the precision in bits of the quantized linear predictor coefficients, or 0 to let the encoder select it based on the blocksize. Default value: D.flacSet to .Q to use only the specified quantized linear predictor coefficient precision, or -N to search neighboring precision values and use the best one. Default value: D.flacSet to .[ to let the encoder estimate the best model order based on the residual signal energy, or -Y to force the encoder to evaluate all order models and select the best. Default value: D.flacSet 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: D.flacDefault .flac/Encode a WAVE file or RF64 file to native FLAC.,If the input file is not a valid WAVE file, j 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.kflac,Execute an initializing action that returns .C on failure and take care of error reporting. In case of trouble, ~  is thrown.lflacExecute an action that returns .E on failure into taking care of error reporting. In case of trouble ) with encoder status attached is thrown.mflacGet  from given ? and throw it immediately.flacEncoder settingsflacFile to encodeflac%Where to save the resulting FLAC file,|}~,|}~  2016 present Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNoneHnflacInitialize decoder to decode FLAC file and register buffer where decoded audio data will go (which must be big enough). Return c.nflac= to useflacFLAC file to decodeflac(Buffer where to write decoded audio dataflac&Sample rate, bits per sample, channelsn  2016 present Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone_X oflacCreate 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 U is raised.pflacjCreate a new stream decoder instance with the default settings. In the case of memory allocation problem D is returned.qflacFree a decoder instance.rflacSet MD5 signature checking. If - 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.sflacGet the current decoder state.tflacKGet frame size as a number of inter-channel samples of last decoded frame.uflac Process one audio frame. Return . on failure.vflacODecode until the end of the metadata. We use this to skip to the audio stream.wflacbFinish the decoding process and release resources (also resets decoder and its settings). Return . in the case of trouble.orstuvw 2016 present Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNonee xflac,Create a new metadata object given its type.yflacFree a metadata object.zflac6Resize the seekpoint array. In case of trouble return ..{flacLCheck a seek table to see if it conforms to the FLAC specification. Return . if the seek table is illegal.|flacResize the track array.}flac#Resize a track's index point array.~flaczCheck a CUE sheet to see if it conforms to the FLAC specification. If something is wrong, the explanation is returned in i , otherwise D is returned.flacDCheck a picture and return description of what is wrong, otherwise D.flac+Set the MIME type of a given picture block.flac-Set the description of a given picture block.flac.Set the picture data of a given picture block. xyz{|}~ 2016 present Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone"#P~flacGet min block size.flacGet max block size.flacGet min frame size.flacGet max frame size.flacGet sample rate.flacGet number of channels.flacGet number of bits per sample.flacGet total number of samples.flac#Get MD5 sum of original audio data.flacGet application id from given 0 block.flac/Get data from given application metadata block.flac,Set application id for given metadata block.flac.Set application data for given metadata block.flacGet seek table as a  of .s.flac&Set seek table represented by a given  of . s. Return . in case of trouble.flacGet Vorbis vendor.flacSet Vorbis vendor.flacGet vorbis comment by name.flac6Set (replace or insert if necessary) a vorbis comment.flacKDelete a vorbis comment by name. If it doesn't exist, nothing will happen.flacBDetermine a vorbis comment metadata block can be considered empty.flacGet CUE sheet from 0 block assuming that it's a P.flacPeek a single  CueSheetTrack at given index.flacSet ' in given 0 block of type P.flacPoke a  at a specified index.flac(Get type of picture assuming that given 0 block is a Q.flacGet picture data from a given 0 block.flacSet   to a given 0 block that should be a Q.flacSet  in given 0 block of type Q.flac,Execute a collection of actions that return .L on failure. As soon as failure is reported, stop the execution and return . . Return - in the case of success. 2016 present Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone>_flacCreate and use a 1] (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 4 is raised.flac Create a new 1,. In the case of memory allocation problem D is returned.flacFree a 1, instance. Delete the object pointed to by 1.flacCheck status of a given 1J. This can be used to find out what went wrong. It also resets status to :.flac:Read all metadata from a FLAC file into the chain. Return . if something went wrong.flac(Write all metadata out to the FLAC file.flacEMove 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.flac>Traverse all metadata blocks from beginning to end collecting ir values and possibly performing some actions. This is the only way to traverse metadata chain and get access to 2 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 4 is raised.flacCreate a new iterator. Return D0 if there was a problem with memory allocation.flac<Free an iterator instance. Delete the object pointed to by 2.flacQInitialize the iterator to point to the first metadata block in the given chain.flac8Move the iterator forward one metadata block, returning . if already at the end.flacWGet the type of the metadata block at the current position. Useful for fast searching.flac+Get metadata block at the current position.flac Write given 0& block at the position pointed to by 2 replacing an existing block.flac(Remove the current block from the chain.flacAInsert 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 . if something went wrong.flacThe chain to writeflacWhether to use paddingflacWhether to preserve file statsflac. if something went wrongflacMetadata chain to traverseflacAction to perform on each blockflacAccumulated resultsflacExisting iteratorflacExisting initialized chainflac%Iterator that determines the positionflac. if something went wrong  2016 present Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone "#.@HMVlUflacPicture 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 4 will be raised with 8 constructor which includes a M? 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  easier using the  Juicy-Pixels library.Writable% optional attribute represented as a h .flacOA CUE sheet stored in FLAC metadata. If you try to write an invalid CUE sheet 4 will be raised with the 7 constructor which includes a MJ value with explanation why the CUE sheet was considered invalid. Import "Codec.Audio.FLAC.Metadata.CueSheet to manipulate ' and s.Writable% optional attribute represented as a h '.flacJEnumeration of all supported filed names to index vorbis comment entries.flacTrack/work name.flacThe version field may be used to differentiate multiple versions of the same track title in a single collection (e.g. remix info).flac0The collection name to which this track belongs.flacQThe track number of this piece if part of a specific larger collection or album.flac@Total number of tracks in the collection this track belongs to.flac$Disc number in a multi-disc release.flac.Total number of discs in a multi-disc release.flacThe 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.flacThe 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.flacJCopyright attribution, e.g., 2001 Nobody's Band  or 1999 Jack Moffitt .flacLicense 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.flacHName of the organization producing the track (i.e. the record label ).flac)A short text description of the contents.flac'A short text indication of music genre.flac*Date the track was recorded, usually year.flac"Location where track was recorded.flacContact information for the creators or distributors of the track. This could be a URL, an email address, the physical address of the producing label.flac ISRC number for the track, see  http://isrc.ifpi.org/en.flac]Rating, usually mapped as 1 5 stars with actual values 20 , 40 , 60 , 80 , 100  stored.flac*Replay gain track peak, e.g. 0.99996948 .flac(Replay gain track gain, e.g. -7.89 dB .flac*Replay gain album peak, e.g. 0.99996948 .flac(Replay gain album gain, e.g. -7.89 dB .flacVarious 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 h M.flacVorbis vendor  comment. When Vorbis Comment  metadata block is present, the vendor  entry is always in there, so when you delete it (by   D), 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 h M.flacSeek 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, 4 will be raised using the 6 constructor.Writable% optional attribute represented as a h ( .).flacApplication metadata. The 3 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 h /.flacDuration in seconds. Read-only attribute represented as a .flacMD5 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.flac(Bit rate in kilo-bits per second (kbps). Read-only attribute represented as a .flacFile size in bytes. Read-only attribute represented as a .flacTotal 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 .flacBits 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 .flacChannel 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  .flac7Number of channels. FLAC supports from 1 to 8 channels. Read-only attribute represented as a .flacSample rate in Hz. Read-only attribute represented as a .flacZMaximal frame size in bytes used in the stream. May be 0 to imply the value is not known. Read-only attribute represented as a .flacZMinimal frame size in bytes used in the stream. May be 0 to imply the value is not known. Read-only attribute represented as a .flacMaximal 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 .flac1Minimal block size in samples used in the stream. Read-only attribute represented as a .flacA 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.flacCType of data that corresponds to this metadata value. For example  is represented by  value in this library, and so   ~ .flacAssociated type of the kind J that controls whether a particular piece of metadata is writable or not.flacGiven 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 h.flacGiven 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 D% (well, it should be something that can be missing%, for example you cannot delete the  attribute). If 2 is defined, this method must be defined as well.flac;Settings that control how metadata is written in FLAC file.flacVWhether 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: -.flac!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: -.flacThis setting enables truncation of last padding metadata block if it allows to overwrite metadata in place instead of overwriting the entire file. Default value: -.flacIf -, 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: -.flacThe context that  passes around.flacMetadata chainflac Modified  flagflacSize of target fileflac3A non-public shortcut for the inner monad stack of .flacUAn opaque monad for reading and writing of FLAC metadata. The monad is the home for  and () functions and can be run with .flacDefault .flac.Run an action that manipulates FLAC metadata. M control subtle and rather low-level details of metadata editing, just pass def& unless you know what you are doing. PC 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, 4 is thrown with attached 90 that should help investigating what went wrong.flac,Delete all Vorbis comment  metadata blocks.flac)Delete all Application  metadata blocks.flac(Delete all Seek table  metadata blocks.flac'Delete all CUE sheet  metadata blocks.flac%Delete all Picture  metadata blocks.flacReturn a list of all J(s of metadata blocks detected in order.flacReturn - 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.flac<A helper that takes a function that extracts something from 0 block. It finds the K, gets 0< from it and applies given function to get the final value.flacGiven J (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 i( if block of requested type was found, D 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.flac Just like S, but creates a new block of requested type if no block of such type can be found.flac The same as & but it searches for a block of type M# that has specified application id.flac Just like , but creates a new M. with given id if no such block can be found.flac The same as ', but it searches for a block of type Q that has specific  .flac Just like , but creates a new Q with given   if no such block can be found.flacA generic building block for -like helpers.flacA generic building block for -like helpers.flac5Go through all metadata blocks and delete empty ones.flacDetermine if a given 0 block is empty.flacLift an action that may return D on failure into ' monad taking care of error reporting.flacLift an action that returns . on failure into ' monad taking care of error reporting.flacGet 9 and throw it immediately.flac2Specify that the metadata chain has been modified.flacMap $ to its ASCII name in the form of a /.flac Map the number of channels to a  of s as per FLAC specification. flacSettings to useflacFile to operate onflacActions to performflac The resultflacType of block to findflacWhat to do if such block foundflac Result in i if block was foundflacType of block to findflacWhat to do if such block foundflacResultflacApplication id to findflacWhat to do if such block foundflac Result in i if block was foundflacApplication id to findflacWhat to do if such block foundflacResultflacPicture type to findflacWhat to do if such block foundflac Result in i if block was foundflacPicture type to findflacWhat to do if such block foundflac Result in iflacAdditional check on 0 blockflacType of block to findflacWhat to do if such block foundflac Result in i if block was foundflacAdditional check on 0 blockflacFSet parameters of newly created block before calling the main callbackflacType of block to findflac.What to do if such block found (main callback) ./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST456789:;<=>?@ABCDEFGHI3ST./012 JKLMNOPQR1 2016 present Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone"##flac!Parameters of the stream decoder.%flacIf -, 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: ..&flacVThis specifies WAVE format in which to save the decoded file. You can choose between  and ^; choose the latter if uncompressed file is expected to be longer than 4 Gb. Default value: .'flacDefault #.(flacDecode a FLAC file to WAVE.U; is thrown when underlying FLAC decoder reports a problem.flac,Execute an initializing action that returns .G on failure and take care of error reporting. In the case of trouble, V i is thrown.flacExecute an action that returns .I on failure into taking care of error reporting. In the case of trouble  EncoderFailed) with encoder status attached is thrown.flacGet X from a given = and throw it immediately.(flacDecoder settingsflacFile to decodeflac%Where to save the resulting WAVE fileUVWXYZ[\]^_`abcdefghi#$%&'(#$%&'UVWcdefghiXYZ[\]^_`ab( !"#$%&'()*+,-./011234567889:;<=>>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'(&')*+,-./012034-/.56789::;; < = >0?@ A0BC0DE F0BG H0IJ KLMN O0PQ0RS T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j0?k0?lmnopqr s t u v w x y z { |}~0&'000mn&'qmnmnpqrflac-0.2.0-inplaceCodec.Audio.FLAC.Metadata"Codec.Audio.FLAC.Metadata.CueSheetCodec.Audio.FLAC.StreamDecoder*Codec.Audio.FLAC.StreamEncoder.ApodizationCodec.Audio.FLAC.StreamEncoder(Codec.Audio.FLAC.Metadata.Internal.Types-Codec.Audio.FLAC.StreamDecoder.Internal.Types-Codec.Audio.FLAC.StreamEncoder.Internal.Types/Codec.Audio.FLAC.StreamEncoder.Internal.HelpersCodec.Audio.FLAC.Util'Codec.Audio.FLAC.StreamEncoder.Internal/Codec.Audio.FLAC.StreamDecoder.Internal.Helpers'Codec.Audio.FLAC.StreamDecoder.Internal)Codec.Audio.FLAC.Metadata.Internal.Object:Codec.Audio.FLAC.Metadata.Internal.Level2Interface.Helpers2Codec.Audio.FLAC.Metadata.Internal.Level2InterfaceData.Text.Encoding.ErrorUnicodeException 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 PictureBlockUndefinedBlockmkApplicationIdunApplicationIdDecoderExceptionDecoderInitFailed DecoderFailed DecoderStateDecoderStateSearchForMetadataDecoderStateReadMetadataDecoderStateSearchForFrameSyncDecoderStateReadFrameDecoderStateEndOfStreamDecoderStateOggErrorDecoderStateSeekErrorDecoderStateAborted!DecoderStateMemoryAllocationErrorDecoderStateUnititializedDecoderInitStatusDecoderInitStatusOK%DecoderInitStatusUnsupportedContainer!DecoderInitStatusInvalidCallbacks&DecoderInitStatusMemoryAllocationError!DecoderInitStatusErrorOpeningFile#DecoderInitStatusAlreadyInitializedApodizationFunctionBartlett BartlettHannBlackmanBlackmanHarris4Term92DbConnesFlattopGaussHammingHann KaiserBesselNuttall RectangleTriangleTukey PartialTukey PunchoutTukeyWelchEncoderExceptionEncoderInvalidSampleFormatEncoderInitFailed EncoderFailed EncoderStateEncoderStateOKEncoderStateUninitializedEncoderStateOggErrorEncoderStateVerifyDecoderError%EncoderStateVerifyMismatchInAudioDataEncoderStateClientErrorEncoderStateIOErrorEncoderStateFramingError!EncoderStateMemoryAllocationErrorEncoderInitStatusEncoderInitStatusOKEncoderInitStatusEncoderError&EncoderInitStatusUnsupportedCointainer!EncoderInitStatusInvalidCallbacks(EncoderInitStatusInvalidNumberOfChannels%EncoderInitStatusInvalidBitsPerSample"EncoderInitStatusInvalidSampleRate!EncoderInitStatusInvalidBlockSize#EncoderInitStatusInvalidMaxLpcOrder)EncoderInitStatusInvalidQlpCoeffPrecision-EncoderInitStatusBlockSizeTooSmallForLpcOrderEncoderInitStatusNotStreamable EncoderInitStatusInvalidMetadata#EncoderInitStatusAlreadyInitializedEncoderSettingsencoderCompressionencoderBlockSize encoderVerifyencoderDoMidSideStereoencoderLooseMidSideStereoencoderApodizationencoderMaxLpcOrderencoderQlpCoeffPrecision encoderDoQlpCoeffPrecisionSearchencoderDoExhaustiveModelSearchencoderResidualPartitionOrdersdefaultEncoderSettings encodeFlac$fShowEncoderSettings$fReadEncoderSettings$fEqEncoderSettings$fOrdEncoderSettingsPictureCueSheet 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=-> MetaSettingsmetaAutoVacuummetaSortPaddingmetaUsePaddingmetaPreserveFileStatsFlacMetadefaultMetaSettings runFlacMetawipeVorbisCommentwipeApplications wipeSeekTable wipeCueSheets wipePictures getMetaChainisMetaChainModified$fMetaValueMinBlockSize$fMetaValueMaxBlockSize$fMetaValueMinFrameSize$fMetaValueMaxFrameSize$fMetaValueSampleRate$fMetaValueChannels$fMetaValueChannelMask$fMetaValueBitsPerSample$fMetaValueTotalSamples$fMetaValueFileSize$fMetaValueMD5Sum$fMetaValueDuration$fMetaValueBitRate$fMetaValueApplication$fMetaValueSeekTable$fMetaValueVorbisVendor$fMetaValueVorbisComment$fMetaValueCueSheet$fMetaValuePicture$fFunctorFlacMeta$fApplicativeFlacMeta$fMonadFlacMeta$fMonadIOFlacMeta$fMonadThrowFlacMeta$fMonadCatchFlacMeta$fMonadMaskFlacMeta$fShowMetaSettings$fReadMetaSettings$fEqMetaSettings$fOrdMetaSettings$fShowVorbisField$fReadVorbisField$fEqVorbisField$fOrdVorbisField$fBoundedVorbisField$fEnumVorbisFieldDecoderSettingsdecoderMd5CheckingdecoderWaveFormatdefaultDecoderSettings decodeFlac$fShowDecoderSettings$fReadDecoderSettings$fEqDecoderSettings$fOrdDecoderSettingsghc-prim GHC.TypesTrueFalsebytestring-0.10.10.0Data.ByteString.Internal ByteStringMetadata MetaChain MetaIteratorbaseGHC.PtrPtr Data.VoidVoidChannelAssignmentChannelAssignmentIndependentChannelAssignmentLeftSideChannelAssignmentRightSideChannelAssignmentMidSideDecoderEncoderencoderProcessHelperrenderApodizationSpecmaybePtr GHC.MaybeNothingtoEnum'GHC.EnumtoEnumGHC.RealIntegral fromEnum'fromEnumpeekCStringTextForeign.C.StringCStringwithCStringText text-1.2.4.0Data.Text.InternalText withTempFile'GHC.IO.Handle.TypesHandleGHC.IOFilePathignoringIOErrors withEncoder encoderNew encoderDeleteencoderSetChannelsencoderSetBitsPerSampleencoderSetSampleRateencoderSetCompressionencoderSetBlockSizeencoderSetDoMidSideStereoencoderSetLooseMidSideStereoencoderSetApodizationencoderSetMaxLpcOrderencoderSetQlpCoeffPrecision#encoderSetDoQlpCoeffPrecisionSearch!encoderSetDoExhaustiveModelSearch#encoderSetMinResidualPartitionOrder#encoderSetMaxResidualPartitionOrderencoderSetTotalSamplesEstimateencoderSetVerifyencoderGetStateencoderInitFile encoderFinishMaybeJustKwave-0.2.0-5ee34ad4a4bd9129593fe53a58e6f91aa9f898d6059e42446ed7965a4d49539aCodec.Audio.Wave WaveExceptionliftInitliftBool throwStatedecoderInitHelper withDecoder decoderNew decoderDeletedecoderSetMd5CheckingdecoderGetStatedecoderGetBlockSizedecoderProcessSingle decoderProcessUntilEndOfMetadata decoderFinish objectNew objectDeleteobjectSeektableResizePointsobjectSeektableIsLegalobjectCueSheetResizeTracks objectCueSheetTrackResizeIndicesobjectCueSheetIsLegalobjectPictureIsLegalobjectPictureSetMimeTypeobjectPictureSetDescriptionobjectPictureSetDatagetMinBlockSizegetMaxBlockSizegetMinFrameSizegetMaxFrameSize getSampleRate getChannelsgetBitsPerSamplegetTotalSamples getMd5SumgetApplicationIdgetApplicationDatasetApplicationIdsetApplicationData getSeekPointsPvector-0.12.1.2-3911006fce9a9358ef3f90173940601a59f3d3b695d1c3d389b5cf016713c8b9 Data.VectorVector setSeekPointsgetVorbisVendorsetVorbisVendorgetVorbisCommentsetVorbisCommentdeleteVorbisCommentisVorbisCommentEmptygetCueSheetDatagetCueSheetTracksetCueSheetDatasetCueSheetTrackgetPictureTypegetPictureDatasetPictureTypesetPictureData shortcutFalse withChainchainNew chainDelete chainStatus chainRead chainWritechainSortPadding withIterator iteratorNewiteratorDelete iteratorInit iteratorNextiteratorGetBlockTypeiteratorGetBlockiteratorSetBlockiteratorDeleteBlockiteratorInsertBlockAfterGHC.BaseStringDoubleGHC.WordWord32 GHC.NaturalNaturalWord64containers-0.6.2.1Data.Set.InternalSetSpeakerPosition ConstraintContextInner metaChain metaModified metaFileSize inStreamInfo withMetaBlockwithMetaBlock'withApplicationBlockwithApplicationBlock'withPictureBlockwithPictureBlock'withMetaBlockGenwithMetaBlockGen' applyVacuumisMetaBlockEmpty liftMaybe throwStatus setModifiedvorbisFieldName toChannelMask WaveVanillaWaveRF64