pycodedj 0.5.1__tar.gz → 0.6.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pycodedj-0.5.1 → pycodedj-0.6.1}/.gitignore +1 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/CHANGELOG.md +22 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/PKG-INFO +9 -2
- {pycodedj-0.5.1 → pycodedj-0.6.1}/README.ja.md +8 -2
- {pycodedj-0.5.1 → pycodedj-0.6.1}/README.md +7 -1
- pycodedj-0.6.1/docs/favicon.svg +17 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/docs/index.html +16 -4
- pycodedj-0.6.1/docs/manual.html +1678 -0
- pycodedj-0.5.1/docs/manual.html → pycodedj-0.6.1/docs/manual.ja.html +27 -8
- {pycodedj-0.5.1 → pycodedj-0.6.1}/docs/manual.ja.md +17 -4
- {pycodedj-0.5.1 → pycodedj-0.6.1}/docs/manual.md +18 -5
- {pycodedj-0.5.1 → pycodedj-0.6.1}/pyproject.toml +2 -1
- {pycodedj-0.5.1 → pycodedj-0.6.1}/src/pycodedj/__init__.py +1 -1
- {pycodedj-0.5.1 → pycodedj-0.6.1}/src/pycodedj/__main__.py +21 -1
- {pycodedj-0.5.1 → pycodedj-0.6.1}/src/pycodedj/osc_bridge.py +6 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/src/pycodedj/watcher.py +12 -5
- pycodedj-0.6.1/tests/test_cli.py +34 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/tests/test_osc_bridge.py +25 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/tests/test_watcher.py +36 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/.github/workflows/workflow.yml +0 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/LICENSE +0 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/docs/CNAME +0 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/examples/club_set.py +0 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/examples/demo.py +0 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/examples/hello_sc.py +0 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/examples/sound_showcase.py +0 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/sc/synths.scd +0 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/src/pycodedj/_loop.py +0 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/src/pycodedj/analyzer.py +0 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/src/pycodedj/block_parser.py +0 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/src/pycodedj/engine.py +0 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/src/pycodedj/mapper.py +0 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/src/pycodedj/pattern.py +0 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/tests/__init__.py +0 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/tests/test_analyzer.py +0 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/tests/test_block_parser.py +0 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/tests/test_engine.py +0 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/tests/test_mapper.py +0 -0
- {pycodedj-0.5.1 → pycodedj-0.6.1}/tests/test_pattern.py +0 -0
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.6.1] - 2026-05-09
|
|
4
|
+
|
|
5
|
+
### Improvements
|
|
6
|
+
|
|
7
|
+
- `pycodedj watch` が保存時に変更されたループだけを再評価するように変更。未変更のループは OSC 再送信されず、パターンの不要な再起動感を抑える
|
|
8
|
+
|
|
9
|
+
### Docs
|
|
10
|
+
|
|
11
|
+
- watch モードの説明を、起動時は全ループ評価・保存時は変更ループのみ再評価する仕様に更新
|
|
12
|
+
|
|
13
|
+
## [0.6.0] - 2026-05-08
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
- `pycodedj stop NAME` を追加。指定したループだけを停止し、通常ループの `voice_count=0` と `pattern()` ループの `pattern_stop` を同時に送信する
|
|
18
|
+
|
|
19
|
+
### Docs
|
|
20
|
+
|
|
21
|
+
- README とマニュアルに `pycodedj stop` の使い方を追加
|
|
22
|
+
- `docs/manual.html` を英語版HTMLに変更し、日本語版HTMLを `docs/manual.ja.html` として分離
|
|
23
|
+
- `pyproject.toml` に PyPI 用の `description` を追加
|
|
24
|
+
|
|
3
25
|
## [0.5.1] - 2026-05-08
|
|
4
26
|
|
|
5
27
|
### Improvements
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pycodedj
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.1
|
|
4
|
+
Summary: A live-coding performance tool that turns Python code structure into music via SuperCollider.
|
|
4
5
|
License: MIT License with Commons Clause
|
|
5
6
|
|
|
6
7
|
"Commons Clause" License Condition v1.0
|
|
@@ -188,7 +189,13 @@ From here, just write code and save. Every save re-evaluates all loops.
|
|
|
188
189
|
pycodedj panic
|
|
189
190
|
```
|
|
190
191
|
|
|
191
|
-
**5.
|
|
192
|
+
**5. Stop one loop**
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
pycodedj stop bass
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**6. Mute / unmute**
|
|
192
199
|
|
|
193
200
|
```bash
|
|
194
201
|
pycodedj mute bass
|
|
@@ -118,7 +118,7 @@ def pad(volume=0.1):
|
|
|
118
118
|
pycodedj watch demo.py
|
|
119
119
|
```
|
|
120
120
|
|
|
121
|
-
|
|
121
|
+
あとはエディタでコードを書いて保存するだけです。保存のたびに変更されたループだけが再評価されます。
|
|
122
122
|
|
|
123
123
|
**4. 緊急停止**
|
|
124
124
|
|
|
@@ -126,7 +126,13 @@ pycodedj watch demo.py
|
|
|
126
126
|
pycodedj panic
|
|
127
127
|
```
|
|
128
128
|
|
|
129
|
-
**5.
|
|
129
|
+
**5. 1 つのループを停止**
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
pycodedj stop bass
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**6. ミュート / アンミュート**
|
|
130
136
|
|
|
131
137
|
```bash
|
|
132
138
|
pycodedj mute bass
|
|
@@ -126,7 +126,13 @@ From here, just write code and save. Every save re-evaluates all loops.
|
|
|
126
126
|
pycodedj panic
|
|
127
127
|
```
|
|
128
128
|
|
|
129
|
-
**5.
|
|
129
|
+
**5. Stop one loop**
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
pycodedj stop bass
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**6. Mute / unmute**
|
|
130
136
|
|
|
131
137
|
```bash
|
|
132
138
|
pycodedj mute bass
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="PyCodeDJ">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg" x1="10" y1="8" x2="54" y2="58" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop stop-color="#16161f"/>
|
|
5
|
+
<stop offset="1" stop-color="#08080e"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="wave" x1="14" y1="32" x2="50" y2="32" gradientUnits="userSpaceOnUse">
|
|
8
|
+
<stop stop-color="#a6e3a1"/>
|
|
9
|
+
<stop offset="0.52" stop-color="#89b4fa"/>
|
|
10
|
+
<stop offset="1" stop-color="#cba6f7"/>
|
|
11
|
+
</linearGradient>
|
|
12
|
+
</defs>
|
|
13
|
+
<rect width="64" height="64" rx="14" fill="url(#bg)"/>
|
|
14
|
+
<rect x="8" y="8" width="48" height="48" rx="10" fill="none" stroke="#1e1e2e" stroke-width="2"/>
|
|
15
|
+
<path d="M15 32c4-12 8-12 12 0s8 12 12 0 8-12 12 0" fill="none" stroke="url(#wave)" stroke-width="5" stroke-linecap="round"/>
|
|
16
|
+
<circle cx="48" cy="18" r="4" fill="#f38ba8"/>
|
|
17
|
+
</svg>
|
|
@@ -4,6 +4,16 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>PyCodeDJ — Code is the Instrument</title>
|
|
7
|
+
<link rel="icon" href="favicon.svg" type="image/svg+xml">
|
|
8
|
+
<!-- Google tag (gtag.js) -->
|
|
9
|
+
<script async src="https://www.googletagmanager.com/gtag/js?id=G-J87606964E"></script>
|
|
10
|
+
<script>
|
|
11
|
+
window.dataLayer = window.dataLayer || [];
|
|
12
|
+
function gtag(){dataLayer.push(arguments);}
|
|
13
|
+
gtag('js', new Date());
|
|
14
|
+
|
|
15
|
+
gtag('config', 'G-J87606964E');
|
|
16
|
+
</script>
|
|
7
17
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
8
18
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
9
19
|
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,300;0,400;0,600;1,400&family=Inter:wght@300;400;600;700&display=swap" rel="stylesheet">
|
|
@@ -525,14 +535,15 @@
|
|
|
525
535
|
<div class="nav-links">
|
|
526
536
|
<a href="#how">How it works</a>
|
|
527
537
|
<a href="#install">Install</a>
|
|
528
|
-
<a href="
|
|
538
|
+
<a href="manual.html">Manual</a>
|
|
539
|
+
<a href="manual.ja.html">日本語</a>
|
|
529
540
|
<a href="https://github.com/kanekoyuichi/pycodedj" target="_blank">GitHub</a>
|
|
530
541
|
</div>
|
|
531
542
|
</nav>
|
|
532
543
|
|
|
533
544
|
<!-- Hero -->
|
|
534
545
|
<section class="hero">
|
|
535
|
-
<div class="hero-badge">v0.
|
|
546
|
+
<div class="hero-badge">v0.6.0 — now on PyPI</div>
|
|
536
547
|
<h1>
|
|
537
548
|
<span class="accent-green">Code</span> is<br>
|
|
538
549
|
the <span class="accent-mauve">instrument</span>
|
|
@@ -543,6 +554,7 @@
|
|
|
543
554
|
</p>
|
|
544
555
|
<div class="hero-ctas">
|
|
545
556
|
<a href="#install" class="btn btn-primary">Get started</a>
|
|
557
|
+
<a href="manual.html" class="btn btn-ghost">Read manual</a>
|
|
546
558
|
<a href="https://github.com/kanekoyuichi/pycodedj" target="_blank" class="btn btn-ghost">GitHub</a>
|
|
547
559
|
</div>
|
|
548
560
|
|
|
@@ -770,8 +782,8 @@
|
|
|
770
782
|
<div class="footer-links">
|
|
771
783
|
<a href="https://github.com/kanekoyuichi/pycodedj" target="_blank">GitHub</a>
|
|
772
784
|
<a href="https://pypi.org/project/pycodedj/" target="_blank">PyPI</a>
|
|
773
|
-
<a href="
|
|
774
|
-
<a href="
|
|
785
|
+
<a href="manual.html">Manual (EN)</a>
|
|
786
|
+
<a href="manual.ja.html">マニュアル (JA)</a>
|
|
775
787
|
<a href="https://github.com/kanekoyuichi/pycodedj/blob/main/README.ja.md" target="_blank">README (JA)</a>
|
|
776
788
|
</div>
|
|
777
789
|
<p class="footer-copy">MIT + Commons Clause · Yuichi Kaneko</p>
|