śĪ}¢tėc      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab© 2015 Mark Karpov BSD 3 clause"Mark Karpov <markkarpov@opmbx.org> experimentalportableSafe#'Number of channels in the audio stream.Convert  to c.Sample rate in Hz.Convert  to c.Bit rate in kb/s.Convert  to c.Duration in seconds.Convert  to c.Track number tag. Convert  to c.  Year tag. Convert   to c.  Genre tag. Convert   to d. Comment tag.Convert  to d. Album tag.Convert  to d. Artist tag.Convert  to d. Title tag.Convert  to d.Construction of * type, null bytes are converted to spaces.Construction of * type, null bytes are converted to spaces.Construction of * type, null bytes are converted to spaces.Construction of * type, null bytes are converted to spaces.Construction of  * type, null bytes are converted to spaces.Construction of  % type, non-positive values result in e.Construction of & type, non-positive values result in e.Construction of # values, negative values result in e.Construction of $ values, negative values result in e.Construction of ( values, non-positive values result in e. Construction of ( values, non-positive values result in e.fReplace null bytes with spaces.g atLeast a b returns Just b is b is greater or equal to a, otherwise result is Nothing.3hijkl m n opqr fgstuvw!  ,      hijkl m n opqr fgstuvw© 2015 Mark Karpov BSD 3 clause"Mark Karpov <markkarpov@opmbx.org> experimentalportableSafe+!eThe data type represents exceptions specific to the library. The following constructors are defined: OpeningFailedD means that attempt to open audio file to read its tags failed. InvalidFiles means that file can be opened, but it doesn't contain any information that can be interpreted by the library. SavingFailed$ is thrown when well & saving failed.%3Encoding for ID3v2 frames that are written to tags.*ŖTypes of files TagLib can work with. This may be used to explicitly specify type of file rather than relying on TagLib ability to guess type of file from its extension.5qThis is an abstraction representing opened file. Other modules can pass it around and treat it like a black box.xjOpen audio file and return its ID (abstraction that rest of library can pass around). In case of trouble y is thrown.z<Free file given its ID. Every time you open a file, free it.6KOpen audio file located at specified path, execute some actions given its 5 and then free the file.7Save file given its ID. Given {| just tells what to put into exception if the action fails, it doesn't specify where to save the file (it's determined by 5).8#Get title tag associated with file.9$Get artist tag associated with file.:#Get album tag associated with file.;%Get comment tag associated with file.<#Get genre tag associated with file.="Get year tag associated with file.>&Get track number associated with file.?(Set title of track associated with file.@)Set artist of track associated with file.A(Set album of track associated with file.B*Set comment of track associated with file.C(Set genre of track associated with file.D'Set year of track associated with file.E/Set track number of track associated with file.F+Get duration of track associated with file.G+Get bit rate of track associated with file.H.Get sample rate of track associated with file.I5Get number of channels in track associated with file.JCSet the default encoding for ID3v2 frames that are written to tags.|:Convert Haskell enumeration to C enumeration (an integer).R!"#$%&'()*+,-./012345}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›xPath to audio file$Type of file (or it will be guessed)Id to pass aroundz6Path to audio file$Type of file (or it will be guessed)Computation depending of 5 Result value7File name to use in exceptionsFile identifier89:;<=>?@ABCDEFGHIJœ#How to get string from the resourceFile ID String result"How to get value from the resourceFile ID Result valuežSetting routineNew string valueFile IDŸSetting routine New valueFile ID "How to get value from the resourceFile IDResult|”*!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ*5*+,-./01234%&'()!"#$6789:;<=>?@ABCDEFGHIJ@!"#$%&'()* +,-./012345}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›xz6789:;<=>?@ABCDEFGHIJœžŸ |”© 2015 Mark Karpov BSD 3 clause"Mark Karpov <markkarpov@opmbx.org> experimentalportableSafe K1Composable entity that can be used together with L or M" to write meta data to audio file.L.Set tags in specified file using given setter.In case of trouble ! will be thrown.M Similar to Lg, but you can also specify type of audio file explicitly (otherwise it's guessed from file extension).¢'The most general way to set meta data. L and M) are just wrappers around this function.NSetter for track title.OSetter for track artist.PSetter for track album.QSetter for track comment.RSetter for track genre.SSetter for year tag, use e to clear the field.TSetter for track number, use e to clear the field.K£¤LPath to audio fileEncoding for ID3v2 framesSetterMPath to audio fileEncoding for ID3v2 framesType of audio fileSetter¢Path to audio fileEncoding for ID3v2 framesType of audio file (if known)SetterNOPQRST„ KLMNOPQRST KLMNOPQRST K£¤LM¢NOPQRST„© 2015 Mark Karpov BSD 3 clause"Mark Karpov <markkarpov@opmbx.org> experimentalportableSafeU=This type represents composable entity that can be used with V or W, functions to read batch of meta parameters.VgetTags path g" will try to read file located at path. and read meta data of the file using getter gƒ. Type of file will be guessed from its extension. If this is not satisfactory and you want to explicitly specify file type, see W variation of this function.In case of trouble ! will be thrown.W This is essentially the same as V2, but allows to explicitly choose file type (see *).¦:This is the most general way to read meta data from file. V and W' are just wrappers around the function.XGetter to retrieve track title.Y Getter to retrieve track artist.ZGetter to retrieve track album.[!Getter to retrieve track comment.\&Getter to retrieve genre of the track.].Getter to retrieve year to the track (returns e if the data is missing).^)Getter to retrieve track number (returns e if the data is missing)._'Getter to retrieve duration in seconds.`Getter to retrieve bit rate.aGetter to retrieve sample rate.b4Getter to retrieve number of channels in audio data.U§ØVPath to audio fileGetterExtracted dataWPath to audio fileType of audio fileGetterExtracted data¦Path to audio fileType of audio file (if known)GetterExtracted dataXYZ[\]^_`ab©ŖUVWXYZ[\]^_`abUVWXYZ[\]^_`abU§ØVW¦XYZ[\]^_`ab©Ŗ© 2015 Mark Karpov BSD 3 clause"Mark Karpov <markkarpov@opmbx.org> experimentalportableSafeM  !"#$%&'()*+,-./01234KLMNOPQRSTUVWXYZ[\]^_`abX      *+,-./01234%&'()!"#$UVWXYZ[\]^_`abKLMNOPQRST«      !"#$%&'()*+,-./0123456789:;<=>?@ABCD   EFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcabdef  ghijklamnoapqr;stuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—F˜™šP›œžhtagl_6z1vASBpCJz8a3fZVqWzTaSound.HTagLib.TypeSound.HTagLib.InternalSound.HTagLib.SetterSound.HTagLib.Getter Sound.HTagLibChannels getChannels SampleRate getSampleRateBitRate getBitRateDuration getDuration TrackNumbergetTrackNumberYeargetYearGenregetGenreComment getCommentAlbumgetAlbumArtist getArtistTitlegetTitlemkTitlemkArtistmkAlbum mkCommentmkGenremkYear mkTrackNumber mkDuration mkBitRate mkSampleRate mkChannelsHTagLibException OpeningFailed InvalidFile SavingFailed ID3v2Encoding ID3v2Latin1 ID3v2UTF16 ID3v2UTF16BE ID3v2UTF8FileTypeMPEG OggVorbisFLACMPCOggFlacWavPackSpeex TrueAudioMP4ASFFileIdwithFilesaveFilesetTitle setArtistsetAlbum setCommentsetGenresetYearsetTrackNumberid3v2SetEncoding TagSettersetTagssetTags' titleSetter artistSetter albumSetter commentSetter genreSetter yearSettertrackNumberSetter TagGettergetTagsgetTags' titleGetter artistGetter albumGetter commentGetter genreGetter yearGettertrackNumberGetterdurationGetter bitRateGettersampleRateGetterchannelsGetterghc-prim GHC.TypesIntbaseGHC.BaseStringNothing avoidNullsatLeast$fIsStringGenre$fIsStringComment$fIsStringAlbum$fIsStringArtist$fIsStringTitlenewFileGHC.IO.Exception IOExceptionfreeFileGHC.IOFilePath enumToCIntTagLibProperties TagLibTag TagLibFile(c_taglib_id3v2_set_default_text_encodingc_taglib_properties_channelsc_taglib_properties_sampleratec_taglib_properties_bitratec_taglib_properties_lengthc_taglib_tag_set_trackc_taglib_tag_set_yearc_taglib_tag_set_genrec_taglib_tag_set_commentc_taglib_tag_set_albumc_taglib_tag_set_artistc_taglib_tag_set_titlec_taglib_tag_trackc_taglib_tag_yearc_taglib_tag_genrec_taglib_tag_commentc_taglib_tag_albumc_taglib_tag_artistc_taglib_tag_titlec_taglib_file_savec_taglib_file_propertiesc_taglib_file_tagc_taglib_file_is_validc_taglib_file_freec_taglib_file_new_typec_taglib_file_new&c_taglib_set_string_management_enabled getStrValue getIntValue setStrValue setIntValuegetIntProperty$fExceptionHTagLibException execSetter runSetter$fMonoidTagSetter execGetter runGetter$fApplicativeTagGetter$fFunctorTagGetter