úÎ4j/Ã<      !"#$%&'()*+,-./01234567 8 9 : ;  Safe-Infered  <=      <= Safe-Infered Safe-Infered  Safe-Infered>?>?>? Safe-Infered !"#$%& !"#$%& !"#$%& !"#$%&  Safe-Infered@ABCDEF@ABCDE@ABCDEF  Safe-Infered'"You can combine options using the G functions H and I. .When the same option is given multiple times, 'only the first occurence is respected. 'JKL(M'JKL('JKL(M Safe-Infered)  :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-Infered*+,-./'(*+,-./*+,-./'(*+,-./ Safe-InferedN$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. NONONO Safe-InferedP,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? 01QRSPTUVWXY0101 01QRSPTUVWXY Safe-Infered37Unfortunately 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]) 23456234562345623456  Safe-Infered7!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 Z or '[]'. 4It allows you to write to many files simultaneously 5and returns the exit codes of all writing processes. 7Writer 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 789789789  Safe-Infered: , :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 :;:;:;[ !"#$%&'( )*+,-./01234567  89: ;<=>?@  A B  ACD  E   E 8 F G HIJKIJLIJM  E N HOPQRSTUVWXYZI[\] sox-0.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.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 $fFunctorTdeconsfileNamepipe $fMonoidTbase Data.MonoidMonoidmappendmconcat toArguments catchCtrlC ignoreCtrlC$fCFloat$fCT$fCT0 $fCDouble$fCInt32 $fCWord32$fCInt16 $fCWord16$fCInt8$fCWord8 Data.MaybeMaybe