úÎ7„1˜<      !"#$%&'()*+,-./01234567 8 9 : ;   Safe-Inferred <=>?@ABCDEFGH <=>?@ABCDEF <=>?@ABCDEFGH Safe-Inferred  IJ      IJNone KLMKLMNone  Safe-InferredNONONO Safe-Inferred !"#$%& !"#$%& !"#$%& !"#$%&  Safe-InferredPQRSTUVPQRSTUPQRSTUV Safe-Inferred'"You can combine options using the W functions X and Y. .When the same option is given multiple times, 'only the first occurence is respected. 'Z[\(]'Z[\('Z[\(] Safe-Inferred)  :load Sound.Sox.Convert  7 simple Option.none "test.aiff" Option.none "test.wav" )source options source file name target options target file name ))) Safe-Inferred*+,-./'(*+,-./*+,-./'(*+,-./ Safe-Inferred^$Disable sigPIPE for a local action.  If we don't call this, GHCi quits, 1when the playing command is aborted with CTRL-C. Unfortunately there doesn'(t seem to be another way of doing this. ^_^_^_None`,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? 01abc`defghi0101 01abc`defghiNone37Unfortunately we cannot retrieve the sample rate using sox. However there is soxi3 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]) 2jklmn3o45623456234562jklmn3o456 None7!Sox 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  q 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 p or '[]'. 4It allows you to write to many files simultaneously 5and returns the exit codes of all writing processes. q7Writer routine -  e.g.   or   sample rate 8Writer routine -  e.g.   or  source options, usually none target options  sample rate 9Writer routine -  e.g.   or  source options, usually none target options  sample rate rsource options, usually none target options  sample rate s789789q789rs None: , :load Sound.Sox.Play Sound.Sox.Signal.List  Z 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 :;:;:;t !"#$%&'() *+,-./0123456789:;!<=>?@A  B C  B       ! " # $ D EDEFGH  I   I 9 J K LMNOMNPMNQIRLSTUVWXYZ[\]^=_`abcMde = > ?f sox-0.2.2.2Sound.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.StorableVectorhPutsample-frame-0.0.2Sound.Frame.StereoconsrightleftT Sound.Frame withSignalnumberOfChannelsConssimpleformat sampleRatelength bitsPerSampleget exampleMulti exampleSingleIOReadException ReadException writeFile withReadFile getContentscustomaiffwaveoggmp3iff8svxmuLaw signedByte unsignedByte signedWord unsignedWord signedLong unsignedLongieeeSinglePrecisionieeeDoublePrecisionsinglenonenumberOfChannelsAutoCHandleopenclose withHandle1 withHandle2extended manyExtended$fApplicativeT $fFunctorT BrokenFrameputFramegetFramedeconsfileNamepipe $fMonoidTbase Data.MonoidMonoidmappendmconcat toArguments catchCtrlC ignoreCtrlC$fCFloat$fCT$fCT0 $fCDouble$fCInt32 $fCWord32$fCInt16 $fCWord16$fCInt8$fCWord8 pipeInput pipeOutput pipeError processIdopenAux Data.MaybeMaybe