úÎ6-0'<      !"#$%&'()*+,-./01234567 8 9 : ;  Safe<=>?@ABCDEFGHI <=>?@ABCDEFG <=>?@ABCDEFGHISafe J KL      J KLNone MNOMNOSafe SafePQPQPQSafe !"#$%& !"#$%& !"#$%& !"#$%& SafeRSTUVWXRSTUVWRSTUVWXSafe'"You can combine options using the Y functions Z and [V. When the same option is given multiple times, only the first occurence is respected.'\]^(_'\]^('\]^(_Safe) N:load Sound.Sox.Convert simple Option.none "test.aiff" Option.none "test.wav")source options source file name target options target file name )))Safe*+,-./'(*+,-./*+,-./'(*+,-./Safe`¹Disable sigPIPE for a local action. If we don't call this, GHCi quits, when the playing command is aborted with CTRL-C. Unfortunately there doesn't seem to be another way of doing this.`a`a`aSafebÿ The floating point instances are dangerous, because Storable Float may not use IEEE format that sox uses according to its man page. This is strange since sox uses the host's endianess for multi-byte values. So, why does it not use the machine's floating point format? 01cdebfghijk0101 01cdebfghijkSafe37Unfortunately we cannot retrieve the sample rate using sox. However there is soxi2 for this purpose, which we may support in future. ÿÿ:load Sound.Sox.Read Sound.Sox.Signal.List :module + Control.Exception bracket (open Option.none "test.aiff") close $ \h -> withHandle2 Sound.Sox.Signal.List.getContents h >>= \x -> print (Control.Monad.Exception.Asynchronous.result x :: [Data.Int.Int16]) 2lmnop3q45623456234562lmnop3q456 Safe7ESox determines the output format from the filename extension or from /). Make sure that you provide one of them. œ:load Sound.Sox.Write Sound.Sox.Signal.List simple Sound.Sox.Signal.List.put Option.none "test.aiff" 11025 (take 100 $ iterate (1000+) (0::Data.Int.Int16))9The traversable functor f might be rr or '[]'. It allows you to write to many files simultaneously and returns the exit codes of all writing processes.s7!Writer routine - e.g.  or   sample rate 8!Writer routine - e.g.  or  source options, usually none target options  sample rate 9!Writer routine - e.g.  or  source options, usually none target options  sample rate tsource options, usually none target options  sample rate u789789s789tu Safe: „:load Sound.Sox.Play Sound.Sox.Signal.List simple Sound.Sox.Signal.List.put Option.none 11025 (iterate (1000+) (0::Data.Int.Int16)):!Writer routine - e.g.  or   sample rate ;!Writer routine - e.g.  or  source options, usually none target options  sample rate :;:;:;v !"#$%&'() *+,-./0123456789:;!<=>?@A  B C  B     D   ! " # $ E FDEFGHI  J   J 9 K L MNOPNOQNORJSMTUVWXYZ[\]^_=`abcdNOe = > ?fsox_D3hijamfwjL7ibuWUJVf3bSound.Sox.Frame.StereoSound.Sox.FrameSound.Sox.InformationSound.Sox.Signal.ListSound.Sox.FormatSound.Sox.Option.FormatSound.Sox.ConvertSound.Sox.ReadSound.Sox.WriteSound.Sox.PlaySound.Sox.Private.InformationSound.Sox.Private.FormatSound.Sox.Private.ArgumentsSound.Sox.Private.OptionSound.Sox.SystemputData.StorableVectorhPutsampl_1XH2kVPiuW45tCClvoTNyJSound.Frame.StereoconsrightleftT Sound.Frame withSignalnumberOfChannelsConssimpleformat sampleRatelength bitsPerSampleget exampleMulti exampleSingleIOReadException ReadException writeFile withReadFile getContentscustomaiffwaveoggmp3iff8svxmuLaw signedByte unsignedByte signedWord unsignedWord signedLong unsignedLongieeeSinglePrecisionieeeDoublePrecisionsinglenonenumberOfChannelsAutoCHandleopenclose withHandle1 withHandle2extended manyExtended simpleRead$fApplicativeT $fFunctorT BrokenFrameputFramegetFramedeconsfileNamepipe $fMonoidTbaseGHC.BaseMonoidmappendmconcat toArguments catchCtrlC ignoreCtrlC$fCFloat$fCT$fCT0 $fCDouble$fCInt32 $fCWord32$fCInt16 $fCWord16$fCInt8$fCWord8 pipeInput pipeOutput pipeError processIdopenAuxMaybe