diff --git a/frontend/package.json.md5 b/frontend/package.json.md5 index fef5c03..1b05967 100755 --- a/frontend/package.json.md5 +++ b/frontend/package.json.md5 @@ -1 +1 @@ -c44a339d910658f51f3335fc3acef6bf \ No newline at end of file +320e1f1ff03eab1e1f33df45866c8ecf \ No newline at end of file diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index abead10..2bfdfba 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -101,6 +101,8 @@ function App() { {/* */} + {/* horizontal line */} +
diff --git a/frontend/src/components/Docs/index.jsx b/frontend/src/components/Docs/index.jsx index 2b068be..cfc9f8b 100644 --- a/frontend/src/components/Docs/index.jsx +++ b/frontend/src/components/Docs/index.jsx @@ -138,7 +138,7 @@ export default () => { return ( // outer div has fixed height, inner divs scroll -
+

Documentation

{/* each child scrolls separately */} diff --git a/pkg/mrat/script.go b/pkg/mrat/script.go index 4452ddc..03fa5b6 100644 --- a/pkg/mrat/script.go +++ b/pkg/mrat/script.go @@ -1,6 +1,7 @@ package mrat import ( + "encoding/json" "fmt" "os" "path/filepath" @@ -55,6 +56,35 @@ type ( } ) +// MarshalJSON implements the json.Marshaler interface for the Symbol type. +func (s Symbol) MarshalJSON() ([]byte, error) { + m := map[string]any{ + "name": s.Name, + "group": s.Group, + "doc": s.Doc, + } + if len(s.Arglists) > 0 { + arglists := make([]string, len(s.Arglists)) + for i, a := range s.Arglists { + arglists[i] = fmt.Sprint(a) + } + m["arglists"] = arglists + } + if len(s.UGenArgs) > 0 { + ugenargs := make([]map[string]any, len(s.UGenArgs)) + for i, a := range s.UGenArgs { + ugenargs[i] = map[string]any{ + "name": a.Name, + "default": fmt.Sprint(a.Default), + "doc": a.Doc, + } + } + m["ugenargs"] = ugenargs + } + + return json.Marshal(m) +} + func (cw *consoleWriter) Write(p []byte) (n int, err error) { // write each line to the console for _, char := range p { diff --git a/pkg/stdlib/mrat/core.glj b/pkg/stdlib/mrat/core.glj index 55eed1a..9fbd32a 100644 --- a/pkg/stdlib/mrat/core.glj +++ b/pkg/stdlib/mrat/core.glj @@ -734,12 +734,12 @@ (def envelope env) (defn env-asr - [gate [a s r]] - (env gate [0 s 0] [a r] :release-node 1)) + [gate [a s r] & {:keys [curve]}] + (env gate [0 s 0] [a r] :release-node 1 :curve (or curve :lin))) (defn env-adsr - [gate [a d s r]] - (env gate [0 1 s 0] [a d r] :release-node 2)) + [gate [a d s r] & {:keys [curve]}] + (env gate [0 1 s 0] [a d r] :release-node 2 :curve (or curve :lin))) (defn env-perc [gate [a d] & {:keys [curve]}] @@ -1268,6 +1268,12 @@ (mapv #(if (> %1 %2) 1 0) tbl (rest tbl))))))) +(defugen impulse-pattern + [impulse 1 "The impulse signal to trigger the pattern." + ^:noexpand pattern (euclid 3 8) "The pattern to trigger on the impulse signal."] + (let [pat-seq (step impulse pattern)] + (* impulse pat-seq))) + (docgroup "Patterns") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;