From b94a9b7112b7c8eee4ad123317d0fe0171c81b17 Mon Sep 17 00:00:00 2001 From: lambda Date: Sat, 13 Sep 2025 23:14:08 +0300 Subject: [PATCH] Add code for creating project in emacs --- projects/make-scd.el | 50 ++++++++++++++++++++++++++++++++++++++++++++ readme.org | 3 ++- 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 projects/make-scd.el diff --git a/projects/make-scd.el b/projects/make-scd.el new file mode 100644 index 0000000..0f49a1d --- /dev/null +++ b/projects/make-scd.el @@ -0,0 +1,50 @@ +(defun create-scd-project () + "Create a new project directory with a samples subdirectory and a main.scd file containing SuperCollider code." + (interactive) + (let* ((project-path (read-directory-name "Project path: " default-directory)) + (project-name (read-string "Project name: ")) + (full-path (expand-file-name project-name project-path)) + (samples-path (expand-file-name "samples" full-path)) + (main-file (expand-file-name "main.scd" full-path)) + (supercollider-code (format + "( + s.options.memSize_(2.pow(20)); + s.waitForBoot({ + ~makeBuffers = { |path, event, mono = false| + var dir = PathName.new(path); + var contents = dir.entries; + if (contents.select({ |n| n.isFile }).size > 0) + { + var files, bufArray; + files = contents.select({ |n| n.isFile }); + files = files.select({ |n| + [\"aif\", \"aiff\", \"wav\"].includesEqual(n.extension) + }); + if (event[dir.folderName.asSymbol] != nil) + { \"duplicate subfolder name ignored\".warn; } + { + bufArray = files.collect({ |n| + if(mono) + { Buffer.readChannel(s, n.fullPath, channels:[0]) } + { Buffer.read(s, n.fullPath) }; + }); + event[dir.folderName.asSymbol] = bufArray; + }; + }; + if (contents.select({ |n| n.isFolder }).size > 0) + { + var folders = contents.select({ |n| n.isFolder }); + folders.do({ |n| ~makeBuffers.(n.fullPath, event, mono) }); + }; + event; + }; + ~samples = ~makeBuffers.(\"%s\", ()); + }); + )" + samples-path))) + (make-directory full-path t) + (make-directory samples-path t) + (with-temp-file main-file + (insert supercollider-code)) + (find-file main-file) + (save-buffer))) diff --git a/readme.org b/readme.org index 2eab3ee..8859122 100644 --- a/readme.org +++ b/readme.org @@ -8,4 +8,5 @@ between my SuperCollider projects nodes from declarative definitions - quarks Quarks and Extentions I usally use for projects - +- projects + code for SuperCollider projects maintaining