-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Haskell SuperCollider Plotting -- @package hsc3-plot @version 0.15 module Sound.SC3.Plot.Histogram data Histogram x Histogram :: [x] -> [x] -> Histogram x -- | Calculate Histogram for number of bins n and sample data -- x. histogram :: Int -> [Double] -> Histogram Double instance Eq x => Eq (Histogram x) instance Show x => Show (Histogram x) -- | Simple-minded plotters for Sound.SC3. module Sound.SC3.Plot -- | minimum and maximum. minmax :: Ord t => [t] -> (t, t) linlin'' :: Fractional a => (a, a) -> (a, a) -> a -> a -- | linlin of z. normalise_seq :: (Fractional b, Ord b) => (b, b) -> (b, b) -> [b] -> [b] -- | Variant that derives domain from minmax of z. normalise_seq' :: (Fractional b, Ord b) => (b, b) -> [b] -> [b] -- | n * n. square :: Num a => a -> a -- | Root mean square. rms :: Floating a => [a] -> a -- | rms of chunksOf. resample_rms :: Floating b => Int -> [b] -> [b] -- | Class of plottable numbers. This is necessary to allow -- Rational, the show instance of which cannot be read by -- gnuplot. class Num n => PNum n pshow :: PNum n => n -> String ratio_to_double :: Integral n => Ratio n -> Double -- | Attibutes are generated given (i,j) where i is the data set -- (one indexed) and j is the number of data sets. type Attr = (Int, Int) -> String attr_frac :: String -> Double -> Attr attr_frac_lines :: Double -> Attr -- | List of y values, at (implicit) equal x increments. type Table t = [t] -- | Plot Table data. -- --
-- plotTable [[0,2..12],[0..6],[0,4..12]] -- plotTable [map (\x -> x * cos (x / 20)) [-400 .. 800]] --plotTable :: PNum t => [Table t] -> IO () -- | Variant to plot singular Table. plotTable1 :: PNum t => Table t -> IO () -- | Variant of plotTable where each value is drawn as an impulse. -- --
-- plotImpulses [[0,2..12],[0..6],[0,4..12]] -- plotImpulses [map (\x -> x * cos (x / 20)) [-400 .. 800]] --plotImpulses :: PNum t => [[t]] -> IO () -- | Variant that scales each plot lie within (0,1) and displaces them. -- --
-- plot_table_displace [[0,2..12],[0..6],[0,4..12]] --plot_table_displace :: (Enum t, Fractional t, Ord t, PNum t) => [[t]] -> IO () -- | Variant that normalises each table separately. -- --
-- plot_table_displace_nrm [[0,2..12],[0..6],[0,4..12]] --plot_table_displace_nrm :: (Enum t, Fractional t, Ord t, PNum t) => [[t]] -> IO () -- | Cartesian (x,y) pair. type P2 t = (t, t) -- | List of P2. type Coord t = [P2 t] -- | Plot set of Coord. -- --
-- let {x = [-pi,-pi + 0.01 .. pi]
-- ;f r t = (r t * cos t,r t * sin t)}
-- in plot_p2 (attr_frac_lines 0.5)
-- [zip (map cos x) (map sin x)
-- ,zip (map cos x) (map (sin . (* 3)) x)
-- ,map (f ((/ (2 * pi)) . (+ pi))) x]
--
plot_p2 :: PNum t => Attr -> [Coord t] -> IO ()
-- | plot_p2 of with lines.
plot_p2_ln :: PNum t => [Coord t] -> IO ()
-- | plot_p2 of with points.
--
-- -- let f a b c d (x,y) = -- (x ** 2 - y ** 2 + a * x + b * y -- ,2 * x * y + c * x + d * y) -- in plot_p2_pt [take 5000 (iterate (f 0.9 (-0.6013) 2.0 0.5) (0.1,0.0))] --plot_p2_pt :: PNum t => [Coord t] -> IO () -- | plot_p2 of with steps. -- --
-- plot_p2_stp [[(0,0),(1,1),(2,0.5),(4,6),(5,1),(6,0.25)]] --plot_p2_stp :: PNum t => [Coord t] -> IO () -- | Cartesian (x,y,z) triple. type P3 t = (t, t, t) -- | List of P3. type Path t = [P3 t] -- | Three-dimensional variant of plot_p2. -- --
-- let {t' = [-pi,-pi + 0.01 .. pi]
-- ;f0 n d = sin . (+) d . (*) n
-- ;f1 t = (f0 1 (pi/2) t,f0 3 0 t,f0 5 0 t)
-- ;e' = [0,0.005 .. pi]
-- ;f2 a b r e t = ((a * t + r * sin e) * cos t
-- ,(a * t + r * sin e) * sin t
-- ,b * t + r * (1 - cos e))}
-- in plot_p3 (const "with lines")
-- [map f1 t'
-- ,zipWith (f2 0.25 0.25 0.25) e' t']
--
plot_p3 :: PNum t => Attr -> [Path t] -> IO ()
-- | plot_p3 of with lines.
plot_p3_ln :: PNum t => [Path t] -> IO ()
-- | plot_p3 of with points pt 0.
plot_p3_pt :: PNum t => [Path t] -> IO ()
-- | List of (P2,P2) vectors.
type Vc t = [(P2 t, P2 t)]
-- | Plot vectors given as (p,q).
--
--
-- let {p = [((0,0),(2,1)),((2,2),(3,2)),((3,4),(4,1))]
-- ;d = [1,2,3,2,3,2,1]
-- ;x = 0 : scanl1 (+) d
-- ;y = [6,4,5,3,7,2,8]
-- ;f x y d = ((x,y),(x+d,y))}
-- in plotVectors [p,zipWith3 f x y d]
--
plotVectors :: (PNum t, Num t) => [Vc t] -> IO ()
-- | Plot regular matrix data.
--
-- -- plotMatrix ["set palette grey","unset colorbox"] [[1,3,2],[6,4,5],[8,9,7]] ---- --
-- let d = [[1.00000000,1.00000000,1.00000000,0.73961496] -- ,[1.00000000,1.00000000,1.00000000,0.39490538] -- ,[0.53443549,0.31331112,0.90917979,0.58216201] -- ,[0.35888692,0.7361968,0.95389629,0.94283073] -- ,[0.85763543,0.1405479,0.78166569,0.43739318] -- ,[0.18519824,0.31907815,0.18394244,0.01633875] -- ,[0.0442339,0.33393132,0.77247883,0.79683943] -- ,[0.8472137,0.42471225,0.94257581,0.70417117]] -- in plotMatrix ["set palette color"] d --plotMatrix :: (PNum t, Num t) => [String] -> [[t]] -> IO () -- | Plot Envelope data. -- --
-- import Sound.SC3 ---- --
-- plotEnvelope [envPerc 0.2 1 -- ,envSine 1 0.75 -- ,envADSR 0.4 0.4 0.8 0.9 1 (EnvNum (-4)) 0] --plotEnvelope :: (PNum t, Ord t, Floating t, Enum t) => [Envelope t] -> IO () -- | plotTable1 of b_fetch. -- --
-- withSC3 (plot_buffer1 0) --plot_buffer1 :: (MonadIO m, DuplexOSC m) => Int -> m () -- | plotTable1 of resample_rms of b_fetch. -- --
-- withSC3 (plot_buffer1_rms 512 0) --plot_buffer1_rms :: (MonadIO m, DuplexOSC m) => Int -> Int -> m () -- | plot_table1_resamp1 of b_fetch. -- --
-- withSC3 (plot_buffer1_resamp1 512 0) --plot_buffer1_resamp1 :: (MonadIO m, DuplexOSC m) => Int -> Int -> m () -- | plot_table_displace of mapM of b_fetch. plot_buffer :: (MonadIO m, DuplexOSC m) => [Int] -> m () -- | plot_table_displace_nrm of mapM of b_fetch. plot_buffer_nrm :: (MonadIO m, DuplexOSC m) => [Int] -> m () -- | Plot Histogram data. -- --
-- plotHistogram [histogram 3 [0,0,1,2,2,2] -- ,histogram 9 [1,2,2,3,3,3,4,4,4,4]] --plotHistogram :: PNum t => [Histogram t] -> IO () -- | plotTable1 of toList. plot_table1_vector :: PNum t => Vector t -> IO () -- | plot_table1_vector of resamp1. -- --
-- d <- withSC3 (b_fetch 512 0) -- plot_table1_resamp1 1024 (V.fromList d) --plot_table1_resamp1 :: (Enum t, RealFrac t, PNum t) => Int -> Vector t -> IO () -- | plot_p2_ln plotCoord :: PNum t => [Coord t] -> IO () -- | plot_p2_pt plotPoints :: PNum t => [Coord t] -> IO () -- | plot_p2_stp plotCoord_steps :: PNum t => [Coord t] -> IO () -- | plot_p3_ln plotPath :: PNum t => [Path t] -> IO () -- | Plot size (width,height). type PlotSize = (Double, Double) -- | Plot options. data PlotOpt PlotOpt :: Maybe PlotSize -> Maybe (Double, Double) -> Maybe (Double, Double) -> FilePath -> String -> String -> [String] -> PlotOpt plotSize :: PlotOpt -> Maybe PlotSize plotXRange :: PlotOpt -> Maybe (Double, Double) plotYRange :: PlotOpt -> Maybe (Double, Double) plotDir :: PlotOpt -> FilePath plotName :: PlotOpt -> String plotTerminal :: PlotOpt -> String plotGnuplotOpt :: PlotOpt -> [String] -- | Default options for X11. plotOptX11 :: PlotOpt -- | Default options for WXT. plotOptWXT :: PlotOpt -- | Default options for SVG. plotOptSVG :: PlotSize -> PlotOpt -- | Names for SVG terminal have character restrictions. plotNameEnc :: PlotOpt -> String -- | Plot parameters, (pre,cmd,attr) type PlotParam = ([String], String, Attr) plotDataFile :: PlotOpt -> Int -> FilePath plotRCFile :: PlotOpt -> FilePath plotOutputFile :: PlotOpt -> FilePath writePlotRC :: PlotOpt -> PlotParam -> Int -> IO () writePlotData :: (PNum t, Num t) => PlotOpt -> [[[t]]] -> IO () -- | Plotter given PlotOpt and PlotParam. mkPlotOpt :: (PNum t, Num t) => PlotOpt -> PlotParam -> [[[t]]] -> IO () -- | mkPlotOpt with plotOptX11. mkPlotX11 :: (PNum t, Num t) => PlotParam -> [[[t]]] -> IO () -- | mkPlotOpt with plotOptSVG. mkPlotSVG :: (Num t, PNum t) => PlotSize -> PlotParam -> [[[t]]] -> IO () -- | WXT and SVG. mkPlot :: (PNum t, Num t) => PlotParam -> [[[t]]] -> IO () instance Integral n => PNum (Ratio n) instance PNum Double instance PNum Float instance PNum Integer instance PNum Int