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.
Files changed (39) hide show
  1. {pycodedj-0.5.1 → pycodedj-0.6.1}/.gitignore +1 -0
  2. {pycodedj-0.5.1 → pycodedj-0.6.1}/CHANGELOG.md +22 -0
  3. {pycodedj-0.5.1 → pycodedj-0.6.1}/PKG-INFO +9 -2
  4. {pycodedj-0.5.1 → pycodedj-0.6.1}/README.ja.md +8 -2
  5. {pycodedj-0.5.1 → pycodedj-0.6.1}/README.md +7 -1
  6. pycodedj-0.6.1/docs/favicon.svg +17 -0
  7. {pycodedj-0.5.1 → pycodedj-0.6.1}/docs/index.html +16 -4
  8. pycodedj-0.6.1/docs/manual.html +1678 -0
  9. pycodedj-0.5.1/docs/manual.html → pycodedj-0.6.1/docs/manual.ja.html +27 -8
  10. {pycodedj-0.5.1 → pycodedj-0.6.1}/docs/manual.ja.md +17 -4
  11. {pycodedj-0.5.1 → pycodedj-0.6.1}/docs/manual.md +18 -5
  12. {pycodedj-0.5.1 → pycodedj-0.6.1}/pyproject.toml +2 -1
  13. {pycodedj-0.5.1 → pycodedj-0.6.1}/src/pycodedj/__init__.py +1 -1
  14. {pycodedj-0.5.1 → pycodedj-0.6.1}/src/pycodedj/__main__.py +21 -1
  15. {pycodedj-0.5.1 → pycodedj-0.6.1}/src/pycodedj/osc_bridge.py +6 -0
  16. {pycodedj-0.5.1 → pycodedj-0.6.1}/src/pycodedj/watcher.py +12 -5
  17. pycodedj-0.6.1/tests/test_cli.py +34 -0
  18. {pycodedj-0.5.1 → pycodedj-0.6.1}/tests/test_osc_bridge.py +25 -0
  19. {pycodedj-0.5.1 → pycodedj-0.6.1}/tests/test_watcher.py +36 -0
  20. {pycodedj-0.5.1 → pycodedj-0.6.1}/.github/workflows/workflow.yml +0 -0
  21. {pycodedj-0.5.1 → pycodedj-0.6.1}/LICENSE +0 -0
  22. {pycodedj-0.5.1 → pycodedj-0.6.1}/docs/CNAME +0 -0
  23. {pycodedj-0.5.1 → pycodedj-0.6.1}/examples/club_set.py +0 -0
  24. {pycodedj-0.5.1 → pycodedj-0.6.1}/examples/demo.py +0 -0
  25. {pycodedj-0.5.1 → pycodedj-0.6.1}/examples/hello_sc.py +0 -0
  26. {pycodedj-0.5.1 → pycodedj-0.6.1}/examples/sound_showcase.py +0 -0
  27. {pycodedj-0.5.1 → pycodedj-0.6.1}/sc/synths.scd +0 -0
  28. {pycodedj-0.5.1 → pycodedj-0.6.1}/src/pycodedj/_loop.py +0 -0
  29. {pycodedj-0.5.1 → pycodedj-0.6.1}/src/pycodedj/analyzer.py +0 -0
  30. {pycodedj-0.5.1 → pycodedj-0.6.1}/src/pycodedj/block_parser.py +0 -0
  31. {pycodedj-0.5.1 → pycodedj-0.6.1}/src/pycodedj/engine.py +0 -0
  32. {pycodedj-0.5.1 → pycodedj-0.6.1}/src/pycodedj/mapper.py +0 -0
  33. {pycodedj-0.5.1 → pycodedj-0.6.1}/src/pycodedj/pattern.py +0 -0
  34. {pycodedj-0.5.1 → pycodedj-0.6.1}/tests/__init__.py +0 -0
  35. {pycodedj-0.5.1 → pycodedj-0.6.1}/tests/test_analyzer.py +0 -0
  36. {pycodedj-0.5.1 → pycodedj-0.6.1}/tests/test_block_parser.py +0 -0
  37. {pycodedj-0.5.1 → pycodedj-0.6.1}/tests/test_engine.py +0 -0
  38. {pycodedj-0.5.1 → pycodedj-0.6.1}/tests/test_mapper.py +0 -0
  39. {pycodedj-0.5.1 → pycodedj-0.6.1}/tests/test_pattern.py +0 -0
@@ -32,6 +32,7 @@ env/
32
32
  dist/
33
33
  build/
34
34
  .pytest_cache/
35
+ .coverage
35
36
  .mypy_cache/
36
37
  .ruff_cache/
37
38
 
@@ -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.5.1
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. Mute / unmute**
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. Mute / unmute**
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="https://github.com/kanekoyuichi/pycodedj/blob/main/docs/manual.md" target="_blank">Docs</a>
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.1.1 — now on PyPI</div>
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="https://github.com/kanekoyuichi/pycodedj/blob/main/docs/manual.md" target="_blank">Manual (EN)</a>
774
- <a href="https://github.com/kanekoyuichi/pycodedj/blob/main/docs/manual.ja.md" target="_blank">マニュアル (JA)</a>
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>