SC上で下記を実行して、ユーザーコンフィグディレクトリを調べてください。
Platform.userConfigDir
下記の場所にファイルを置いておくと、SC起動時に読み込まれます。(サブディレクトリも探索されます。)
<ユーザーコンフィグディレクトリ>/Extensions
import Combine | |
import SwiftUI | |
func run1() -> Future<String, Never>{ | |
return Future{ promise in | |
promise(.success("OK1: \(Thread.isMainThread)")) | |
} | |
} | |
func run2() -> Future<String, Never>{ |
<table> | |
<tbody> | |
<tr> | |
<td>13:10</td> | |
<td colspan="4"><b>挨拶</b></td> | |
</tr> | |
<tr> | |
<td>13:12〜13:30</td> | |
<td colspan="4"><b>忍者発表会</b></td> | |
</tr> |
* 音のブロックを作る + ユーティリティクラス定義 | |
[| last soundColor controlColor | | |
Smalltalk garbageCollect. | |
stage _ ScratchStageMorph allInstances first. | |
soundColor _ (stage class blockColorFor: 'sound'). | |
controlColor _ (stage class blockColorFor: 'control'). | |
last _ nil. | |
#( | |
(1.0 |
| master numbersTable numbersPosition commonParts toShowParts toHideParts | | |
"assume there are sprites named 'master' and 'separator', then run inside ScratchStageMorph" | |
(self sprites | |
reject: [:x| {'master' asUTF8. 'separator' asUTF8} includes: x objName]) do: [:x | x delete]. | |
master _ self sprites detect: [:x| x objName = 'master']. | |
numbersTable := #( |
Lemma exo0 : forall P : Prop, P -> P. | |
Proof. | |
move=> P. | |
move=> P2. | |
apply P2. | |
Qed. |
somCodePath := (FileSystem disk workingDirectory path parent parent parent parent / 'som-code') asFileReference asString. | |
SOMTools setClassPathBase: somCodePath; recompile. |
(global-set-key (kbd "s-f") (lambda () (interactive) (sclang-eval-string "s.freqscope"))) | |
(global-set-key (kbd "s-C-s") (lambda () (interactive) (sclang-eval-string "Server.local.makeGui;Server.internal.makeGui"))) | |
(global-set-key (kbd "s-y") (lambda () (interactive) | |
(sc-eval-paragraph) | |
(lap-stopwatch))) | |
(global-set-key (kbd "C-s-y") 'clear-stopwatch) | |
(global-set-key (kbd "s-w") 'show-stopwatch) | |
(global-set-key (kbd "s-e") 'replace-with-twice) | |
(global-set-key (kbd "C-s-e") 'replace-with-half) | |
(global-set-key (kbd "s-h") 'sclang-eval-line) |
(defun delete-outer-char (&optional b e) | |
(interactive "r") | |
(delete-region (- e 1) e) | |
(delete-region b (+ b 1))) |
// ・Resonzのノイズは、各音の始まりだけに混じるようにする | |
// ・音が長いところは、後半にビブラートかける(音量に揺れができる) | |
// ・息継ぎがないので、どこかのタイミングで(1フレーズごと?)に音を切る | |
( | |
SynthDef(\main, { |out=0, note=81, next=81, dur=1, gate = 1, tempo=1, breath=0| | |
var freq = [note, note+Rand(-0.02,0.02)!3, next].midicps; | |
var d = dur / tempo; | |
var t = d / 4.0; | |
var freqEnv = EnvGen.ar(Env(freq, [t * 3, t], \exp)); | |
var cross = d / 32.0; |