Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
[![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-111997.svg)](#build--distribution)
[![Electron](https://img.shields.io/badge/Electron-43-47848F.svg)](https://www.electronjs.org/)
[![Downloads](https://img.shields.io/github/downloads/CaYatur/SoundVisualizer/total?label=downloads)](https://github.com/CaYatur/SoundVisualizer/releases)
[![Tests](https://img.shields.io/badge/tests-2147%20passing-2ea043.svg)](#tests)
[![Tests](https://img.shields.io/badge/tests-2167%20passing-2ea043.svg)](#tests)
[![cayadev.com](https://img.shields.io/badge/cayadev.com-e11d2a.svg)](https://cayadev.com)

</div>
Expand Down Expand Up @@ -380,6 +380,16 @@ that asserts the bar profile has no step in it.
used. Measured on 200 generated presets with silence, the demo sound and a loud bass line: every
shader compiled, and none went black, washed out to white, flashed more than twice a second or
froze.
- **Mash-ups from your library.** The same card builds a preset out of pieces of the presets you
already have: the look (decay, echo, gamma, the main wave), the motion equations, the custom
waves, the custom shapes, the warp shader and the composite shader — each taken whole from one
preset and copied line for line. *New Mash-up* draws every part at random from the presets the
MilkDrop panel's list shows, so its search and filter apply, and only from presets that have that
part. A single part can be drawn again, or all six can start from the preset on screen; ◀ ▶ step
back through earlier mash-ups, and *Save to Library* keeps one. A mash-up inherits its donors'
looks, so it can come out brighter or darker than any of them. Checked on a 10,332-preset corpus:
a mash-up of one preset is that preset again, and in 5,000 random mash-ups every part was
exactly its donor's. 300 random mash-ups ran in the engine without a single shader failure.
- **Sprites from `milk_img.ini`.** MilkDrop 2 draws images of your own over the picture during a
show: each one is defined in `milk_img.ini` with an image, code that runs once and code that
runs every frame, and launched by number. Choose the file in the MilkDrop panel and launch from
Expand Down Expand Up @@ -1279,7 +1289,7 @@ npm test
npm start -- --smoke
```

**2147 unit tests, all passing.** They are written to check answers, not to exercise lines:
**2167 unit tests, all passing.** They are written to check answers, not to exercise lines:

- **Formulas** are checked against values derived by hand from their definitions — Viviani's curve
staying on its sphere, the torus tube radius, Chladni's m↔n antisymmetry, every attractor
Expand Down
15 changes: 13 additions & 2 deletions README.tr.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
[![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-111997.svg)](#paketleme--dağıtım)
[![Electron](https://img.shields.io/badge/Electron-43-47848F.svg)](https://www.electronjs.org/)
[![İndirme](https://img.shields.io/github/downloads/CaYatur/SoundVisualizer/total?label=indirme)](https://github.com/CaYatur/SoundVisualizer/releases)
[![Test](https://img.shields.io/badge/test-2147%20geçiyor-2ea043.svg)](#testler)
[![Test](https://img.shields.io/badge/test-2167%20geçiyor-2ea043.svg)](#testler)
[![cayadev.com](https://img.shields.io/badge/cayadev.com-e11d2a.svg)](https://cayadev.com)

</div>
Expand Down Expand Up @@ -373,6 +373,17 @@ profilinde basamak olmadığını doğruluyor.
parlatma hiç kullanılmıyor. 200 üretilmiş presette sessizlik, örnek ses ve yüksek bir bas
çizgisiyle ölçüldü: bütün shader'lar derlendi; hiçbiri siyah kalmadı, beyaza doymadı, saniyede
ikiden çok yanıp sönmedi ya da donmadı.
- **Kütüphaneden karışım.** Aynı kart zaten sahip olduğunuz presetlerin parçalarından bir preset
kuruyor: görünüm (sönme, yankı, gama, ana dalga), hareket denklemleri, özel dalgalar, özel
şekiller, warp shader'ı ve birleştirme shader'ı — her biri bütünüyle tek bir presetten, satır
satır kopyalanarak. *Yeni Karışım* her parçayı MilkDrop panelinin listesinde görünen
presetlerden rastgele çekiyor, yani oradaki arama ve süzgeç burada da geçerli, ve yalnız o
parçası olan presetlerden. Tek bir parça yeniden çekilebiliyor ya da altısı birden ekrandaki
presetten başlayabiliyor; ◀ ▶ önceki karışımlara dönüyor, *Kütüphaneye Kaydet* birini saklıyor.
Karışım parçalarını veren presetlerin görünüşünü taşıyor, yani onlardan daha parlak ya da daha
karanlık çıkabilir. 10.332 presetlik bir korpusta denetlendi: tek presetten kurulan karışım
presetin kendisi, 5.000 rastgele karışımda da her parça onu veren presetinkiyle birebir aynı.
300 rastgele karışım motorda koşturuldu; hiçbir shader aşaması düşmedi.
- **`milk_img.ini`'den sprite'lar.** MilkDrop 2 gösteri sırasında kendi resimlerinizi görüntünün
üstüne çiziyor: her biri `milk_img.ini`de bir resim, bir kez çalışan ve her kare çalışan koduyla
tanımlı ve numarasıyla başlatılıyor. Dosyayı MilkDrop panelinde seçin; panelin listesinden, bir
Expand Down Expand Up @@ -1276,7 +1287,7 @@ npm test
npm start -- --smoke
```

**2147 birim testi, hepsi geçiyor.** Satır çalıştırmak için değil, cevap denetlemek için yazıldılar:
**2167 birim testi, hepsi geçiyor.** Satır çalıştırmak için değil, cevap denetlemek için yazıldılar:

- **Formüller**, tanımlarından elle türetilmiş değerlerle sınanıyor — Viviani eğrisinin küre
üzerinde kalması, simidin boru yarıçapı, Chladni'nin m↔n antisimetrisi, her çekicinin sınırlı
Expand Down
94 changes: 87 additions & 7 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,9 @@ npm test
npm start -- --smoke
```

- **2147 unit tests, all passing** on `main`. 703 of those shipped in v3.1.0;
- **2167 unit tests, all passing** on `main`. 703 of those shipped in v3.1.0;
105 came with v3.1.1; 163 came with v3.1.2; 157 came with v3.1.3 — 1128 at
that tag — 469 more with v3.1.4, most of them from the MilkDrop work, and 550
that tag — 469 more with v3.1.4, most of them from the MilkDrop work, and 570
on `main` since.
Formulas are checked against values derived
by hand from their definitions — Viviani's curve staying on its sphere, the
Expand Down Expand Up @@ -1858,8 +1858,8 @@ rest after. No version number yet.
automation flag. 57 of 58 mutations are caught; the survivor removes
the "no context" check, which the frame counter already makes (without
a context no frame is drawn).
- **A preset generator of our own (#579)** · the generator is done; mash-ups
are next.
- **A preset generator of our own, and mash-ups (#579)** · done. The
generator came first; the mash-ups are described after it.
- **What it does.** *Studio → MilkDrop Preset Generator* writes an
original `.milk` from four sliders and a seed. Energy sets how strongly
zoom, rotation, warp and the size and brightness of shapes and waves
Expand Down Expand Up @@ -1934,8 +1934,70 @@ rest after. No version number yet.
looked frozen in silence: both now change over time. An edge-sharpening
composite made a fast Lissajous figure flash three times a second in
one part of the screen: its gains are lower.
- **Not done:** mash-ups (the second half of #579); a MIDI/OSC action and
a web-remote button that generate.
- **Not done:** a MIDI/OSC action and a web-remote button that generate
or mix.
- **Mash-ups.** The same card builds a preset out of six parts of the
presets in the library: the look (decay, gamma, echo, the four flags,
the main wave, borders, motion vectors, the rating), the motion
(`per_frame_init`, `per_frame`, `per_pixel` and zoom, rot, cx, cy, dx,
dy, warp, sx, sy, `fWarpAnimSpeed`, `fWarpScale`, `fZoomExponent`), the
custom waves, the custom shapes, the warp shader, and the composite
shader with the blur ranges (`b1n`…`b3x`, `b1ed`) — `GetBlur`'s scale
comes from them and the composite shader reads the blur most. Every
key belongs to exactly one part; the list was counted from the corpus
(86 header keys), and an unknown key goes to the look. A part comes
whole from one preset and its lines are copied as they are, numbers
included. The version lines are written anew from the presets that give
the shaders, since MilkDrop 2 reads a shader only when its version is
above zero. Written from a description of the behaviour in our own
words; MilkDrop 2's mash-up code was not opened.
- *New Mash-up* draws each part from the presets the MilkDrop panel's
list shows — its search and filter apply — and only from presets that
have the part. Warp and composite come out "none" 12% of the time:
in a library of mostly MilkDrop 2 presets every mash-up would
otherwise get both shaders, and the look's fixed pipeline (echo,
gamma, flags) would never run. A single part can be drawn again, or
all six can start from the preset on screen; an unsaved preview (a
generated preset or a mash-up) is never in the list, so it never
gives a part. ◀ ▶ step through a history of recipes (part → preset);
a recipe whose preset was deleted is skipped. The id comes from the
recipe (`md_mix1_` and two 32-bit hashes), so the same mash-up saved
twice leaves one file, and the version in it keeps later rule changes
from overwriting earlier saves.
- *Part tests* decide which presets can give a part without parsing
them (13.5 µs a test): a non-comment equation line, an enabled wave
or shape block, a non-empty shader line.
- **Mash-ups measured** on the whole 10,332-preset corpus. The part tests
agree with the parser for every preset and part. A mash-up whose six
parts come from one preset is that preset again for all 10,332 —
equations, waves, shapes, shaders and every parameter; only 5 files
get different version lines, all malformed or old headers (three with
`MILKDROP_PRESET_VERSION` but no `PSVERSION`, one declaring a composite
shader that is empty, one version-200 file). In 5,000 random mash-ups
(warp and composite "none" one time in ten) every part equals its
donor's, parameters split by part, and the version lines match the
shaders. 300 random mash-ups ran in the engine (214 with a warp shader,
221 with a composite one): no shader stage or equation failed that did
not fail in its own preset, and there were none of those either. In an
isolated copy with 40 corpus presets: a search in the MilkDrop panel
left 20 in the list and six mash-ups drew 14 different presets, all
from those 20; the visualizer window drew the mash-up; drawing one part
again changed only that part; ◀ went back; saving twice left one file;
the English UI had no Turkish left.
- **Found by the mash-up measurement.** The composite part's blur ranges
were first taken for a shader, and 308 MilkDrop 1 presets that have
them got version lines for a composite shader they do not have; only
`comp_N` lines count now. One corpus file writes the same key twice
(`shapecode_2_enabled=1`, later `=0`): our parser keeps the last value
and the part test follows it. Which one MilkDrop 2 keeps was not
checked here (#580). A check of the English interface found two names
that did not stay names: the interface splits text at " · " and
translates the pieces, so a mash-up saved as "Karışım · …" read
"Blend · …", and one generated word pair, "Dingin Halkalar" ("Still
Rings"), is a builtin preset's name. Mash-up names now use ": ", the
ring nouns are "Çemberler" and "Circles", and a test runs every
generated word pair and a mash-up name through the English
translation.
- **Tests.** 37 tests. 24 for the generator: the code and id (round trip,
one spelling, invalid codes, one file in the real store), determinism
and golden hashes, 512 presets on an axis grid compiled block by block
Expand All @@ -1947,7 +2009,25 @@ rest after. No version number yet.
directly. 13 for the panel with a fake DOM: an unsaved preview leaves
rating, favorite and tags alone, ◀ skips it, saving writes the last
result under the same id and the list takes it at once, the code field,
the sliders, 🎲 and the wiring. 26 of 26 mutations are caught.
the sliders, 🎲 and the wiring. 26 of 26 mutations are caught. The
mash-ups add 19: 10 for the module — every key's part, one-preset round
trip, mixed presets part by part, lines copied as they are, version
lines (MilkDrop 1 look with MilkDrop 2 shaders, none, composite only,
version 3 kept, a shaderless MilkDrop 2 file kept), "none" taking the
blur ranges with it, the part tests against the parser on edge cases
from the corpus, id and name, and candidate picking — and 9 for the
panel with a fake DOM, the search typed into the MilkDrop panel's real
search box: parts only from the visible list and only from presets
with the part, the mash-up's text from its donors, one part drawn again
leaving the others, starting from the preset on screen (and never from
an unsaved preview), a "none" part drawn again always giving a preset,
the history skipping a deleted preset, saving the mash-up and not the
generated preset, and the rows. One more checks the names against the
English translation, and the card's wiring test now also requires the
mash-up module before the panel. 23 of 23 mutations are caught; a 24th
was equivalent, and the branch it changed was removed. Putting back
the old ring nouns, the " · " in mash-up names or removing the
module's script tag each fails a test.

## v3.1.6 — Comprehensive video export

Expand Down
2 changes: 1 addition & 1 deletion src/admin/admin.js
Original file line number Diff line number Diff line change
Expand Up @@ -2831,7 +2831,7 @@
category: 'studio',
icon: '🧬',
title: 'MilkDrop Preset Üretici',
desc: 'Enerji, sıcaklık, yoğunluk ve hareketten özgün bir MilkDrop preseti yazar. Tamamen çevrimdışı; beğendiğinizi kütüphaneye kaydedin.',
desc: 'Enerji, sıcaklık, yoğunluk ve hareketten özgün bir MilkDrop preseti yazar ya da kütüphanenizdeki presetlerin parçalarını karıştırır. Tamamen çevrimdışı; beğendiğinizi kütüphaneye kaydedin.',
controls: [{ type: 'mdgenpanel' }],
},
{
Expand Down
1 change: 1 addition & 0 deletions src/admin/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,7 @@ <h2 id="settingsTitle">Ayarlar</h2>
<script src="../shared/milkdrop-cycle.js"></script>
<script src="../shared/milkdrop-library.js"></script>
<script src="../shared/milkdrop-generator.js"></script>
<script src="../shared/milkdrop-mashup.js"></script>
<script src="../shared/demo-audio.js"></script>
<script src="../shared/recorder.js"></script>
<script src="../shared/templates.js"></script>
Expand Down
Loading
Loading