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")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;