@rosetears/aili-pi 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +109 -0
- package/THIRD_PARTY_NOTICES.md +64 -0
- package/extensions/index.ts +6 -0
- package/install.sh +5 -0
- package/manifests/adapter-evidence.json +45 -0
- package/manifests/capabilities.json +124 -0
- package/manifests/live-verification.json +26 -0
- package/manifests/provenance.json +71 -0
- package/manifests/roles.json +474 -0
- package/manifests/sbom.json +7797 -0
- package/manifests/skill-compatibility.json +8100 -0
- package/manifests/subagent-provenance.json +37 -0
- package/package.json +91 -0
- package/prompts/build.md +8 -0
- package/prompts/define.md +8 -0
- package/prompts/ideate.md +8 -0
- package/prompts/local-review.md +8 -0
- package/prompts/ship.md +8 -0
- package/roles/agent-evaluator.md +47 -0
- package/roles/ai-regression-scout.md +47 -0
- package/roles/browser-qa-runner.md +47 -0
- package/roles/code-reviewer.md +47 -0
- package/roles/code-scout.md +47 -0
- package/roles/convergence-reviewer.md +55 -0
- package/roles/doc-researcher.md +47 -0
- package/roles/e2e-artifact-runner.md +47 -0
- package/roles/implementer.md +47 -0
- package/roles/opensource-sanitizer.md +47 -0
- package/roles/plan-auditor.md +47 -0
- package/roles/pr-test-analyzer.md +47 -0
- package/roles/security-auditor.md +47 -0
- package/roles/silent-failure-reviewer.md +47 -0
- package/roles/spec-miner.md +47 -0
- package/roles/test-coverage-reviewer.md +47 -0
- package/roles/test-engineer.md +48 -0
- package/roles/web-performance-auditor.md +47 -0
- package/roles/web-researcher.md +47 -0
- package/scripts/apply-adapter-evidence.ts +73 -0
- package/scripts/bootstrap.sh +180 -0
- package/scripts/generate-provenance.ts +143 -0
- package/scripts/local-package-e2e.ts +51 -0
- package/scripts/sync-roles.ts +213 -0
- package/scripts/sync-skills.ts +356 -0
- package/scripts/validate-runtime.ts +11 -0
- package/skills/academic-paper-review/SKILL.md +81 -0
- package/skills/agents-md-initialization/SKILL.md +121 -0
- package/skills/agents-md-initialization/references/agents-template.md +83 -0
- package/skills/agents-md-initialization/references/agents_md.py +215 -0
- package/skills/ai-regression-scout/SKILL.md +24 -0
- package/skills/aili-delivery-flow/SKILL.md +125 -0
- package/skills/aili-delivery-flow/references/artifact-contracts.md +138 -0
- package/skills/aili-delivery-flow/references/backend-routing.md +40 -0
- package/skills/aili-delivery-flow/references/build-execution-loop.md +113 -0
- package/skills/aili-delivery-flow/references/build-goal-mode.md +3 -0
- package/skills/aili-delivery-flow/references/direct-vs-delegated-work.md +38 -0
- package/skills/aili-delivery-flow/references/implementation-packages.md +54 -0
- package/skills/aili-delivery-flow/references/lifecycle.md +127 -0
- package/skills/aili-delivery-flow/references/protocols/acceptance-test-plan.md +18 -0
- package/skills/aili-delivery-flow/references/protocols/alignment-questionnaire.md +10 -0
- package/skills/aili-delivery-flow/references/protocols/closeout-report.md +101 -0
- package/skills/aili-delivery-flow/references/protocols/compact-evidence-pack.md +46 -0
- package/skills/aili-delivery-flow/references/protocols/idea-brief.md +10 -0
- package/skills/aili-delivery-flow/references/protocols/implementation-package.md +53 -0
- package/skills/aili-delivery-flow/references/protocols/research-evidence-pack.md +19 -0
- package/skills/aili-delivery-flow/references/protocols/review-report.md +7 -0
- package/skills/aili-delivery-flow/references/protocols/spec-draft.md +12 -0
- package/skills/aili-delivery-flow/references/protocols/subagent-result.md +60 -0
- package/skills/aili-delivery-flow/references/protocols/subagent-task-packet.md +29 -0
- package/skills/aili-delivery-flow/references/protocols/worktree-context.md +109 -0
- package/skills/aili-delivery-flow/references/questionnaire-policy.md +62 -0
- package/skills/aili-delivery-flow/references/review-repair-loop.md +16 -0
- package/skills/aili-delivery-flow/references/test-document-policy.md +35 -0
- package/skills/android-native-dev/SKILL.md +722 -0
- package/skills/android-native-dev/references/accessibility.md +209 -0
- package/skills/android-native-dev/references/adaptive-screens.md +231 -0
- package/skills/android-native-dev/references/design-style-guide.md +365 -0
- package/skills/android-native-dev/references/functional-requirements.md +229 -0
- package/skills/android-native-dev/references/motion-system.md +203 -0
- package/skills/android-native-dev/references/performance-stability.md +223 -0
- package/skills/android-native-dev/references/privacy-security.md +244 -0
- package/skills/android-native-dev/references/testing.md +554 -0
- package/skills/android-native-dev/references/visual-design.md +246 -0
- package/skills/api-and-interface-design/SKILL.md +318 -0
- package/skills/browser-qa/SKILL.md +32 -0
- package/skills/browser-testing-with-devtools/SKILL.md +323 -0
- package/skills/build-failure-repair/SKILL.md +49 -0
- package/skills/chart-visualization/SKILL.md +73 -0
- package/skills/ci-cd-and-automation/SKILL.md +353 -0
- package/skills/code-review-and-quality/SKILL.md +375 -0
- package/skills/code-review-quality-gates/SKILL.md +132 -0
- package/skills/code-simplification/SKILL.md +371 -0
- package/skills/comment-accuracy-review/SKILL.md +37 -0
- package/skills/consulting-analysis/SKILL.md +69 -0
- package/skills/context-engineering/SKILL.md +375 -0
- package/skills/coverage-review/SKILL.md +24 -0
- package/skills/data-analysis/SKILL.md +74 -0
- package/skills/deprecation-and-migration/SKILL.md +222 -0
- package/skills/documentation-and-adrs/SKILL.md +330 -0
- package/skills/e2e-artifact-handling/SKILL.md +30 -0
- package/skills/evidence-scoped-retrospective/SKILL.md +156 -0
- package/skills/explain-by-allegory/SKILL.md +99 -0
- package/skills/flutter-dev/SKILL.md +162 -0
- package/skills/flutter-dev/references/animations.md +497 -0
- package/skills/flutter-dev/references/bloc-state.md +281 -0
- package/skills/flutter-dev/references/forms.md +656 -0
- package/skills/flutter-dev/references/gorouter-navigation.md +257 -0
- package/skills/flutter-dev/references/localization.md +510 -0
- package/skills/flutter-dev/references/networking.md +566 -0
- package/skills/flutter-dev/references/performance.md +305 -0
- package/skills/flutter-dev/references/platform-specific.md +417 -0
- package/skills/flutter-dev/references/project-structure.md +273 -0
- package/skills/flutter-dev/references/riverpod-state.md +232 -0
- package/skills/flutter-dev/references/testing.md +364 -0
- package/skills/flutter-dev/references/widget-patterns.md +233 -0
- package/skills/frontend-dev/SKILL.md +468 -0
- package/skills/frontend-dev/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/frontend-dev/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/references/asset-prompt-guide.md +43 -0
- package/skills/frontend-dev/references/env-setup.md +33 -0
- package/skills/frontend-dev/references/minimax-cli-reference.md +133 -0
- package/skills/frontend-dev/references/minimax-image-guide.md +65 -0
- package/skills/frontend-dev/references/minimax-music-guide.md +216 -0
- package/skills/frontend-dev/references/minimax-tts-guide.md +78 -0
- package/skills/frontend-dev/references/minimax-video-guide.md +82 -0
- package/skills/frontend-dev/references/minimax-voice-catalog.md +685 -0
- package/skills/frontend-dev/references/motion-recipes.md +407 -0
- package/skills/frontend-dev/references/troubleshooting.md +85 -0
- package/skills/frontend-dev/scripts/minimax_image.py +137 -0
- package/skills/frontend-dev/scripts/minimax_music.py +157 -0
- package/skills/frontend-dev/scripts/minimax_tts.py +127 -0
- package/skills/frontend-dev/scripts/minimax_video.py +187 -0
- package/skills/frontend-dev/templates/generator_template.js +223 -0
- package/skills/frontend-dev/templates/viewer.html +599 -0
- package/skills/frontend-ui-engineering/SKILL.md +367 -0
- package/skills/fullstack-dev/SKILL.md +819 -0
- package/skills/fullstack-dev/references/api-design.md +444 -0
- package/skills/fullstack-dev/references/auth-flow.md +165 -0
- package/skills/fullstack-dev/references/db-schema.md +706 -0
- package/skills/fullstack-dev/references/django-best-practices.md +466 -0
- package/skills/fullstack-dev/references/environment-management.md +78 -0
- package/skills/fullstack-dev/references/release-checklist.md +278 -0
- package/skills/fullstack-dev/references/technology-selection.md +254 -0
- package/skills/fullstack-dev/references/testing-strategy.md +404 -0
- package/skills/git-workflow-and-versioning/SKILL.md +446 -0
- package/skills/github-evidence-triage/SKILL.md +115 -0
- package/skills/harness-evolution/SKILL.md +59 -0
- package/skills/harness-evolution/references/activation-matrix.md +13 -0
- package/skills/harness-evolution/references/approval-policy.md +20 -0
- package/skills/harness-evolution/references/change-report-template.md +33 -0
- package/skills/harness-evolution/references/component-taxonomy.md +19 -0
- package/skills/harness-evolution/references/verdict-policy.md +13 -0
- package/skills/harness-issue-triage/SKILL.md +72 -0
- package/skills/harness-issue-triage/references/component-diagnosis.md +25 -0
- package/skills/harness-issue-triage/references/triage-report-template.md +34 -0
- package/skills/harness-optimization-audit/SKILL.md +125 -0
- package/skills/idea-refine/SKILL.md +191 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/SKILL.upstream.md +178 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/examples.md +238 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/frameworks.md +99 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/refinement-criteria.md +113 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/scripts/idea-refine.upstream.sh +15 -0
- package/skills/incremental-implementation/SKILL.md +252 -0
- package/skills/ios-application-dev/SKILL.md +212 -0
- package/skills/ios-application-dev/references/accessibility.md +259 -0
- package/skills/ios-application-dev/references/graphics-animation.md +350 -0
- package/skills/ios-application-dev/references/layout-system.md +199 -0
- package/skills/ios-application-dev/references/metal-shader.md +178 -0
- package/skills/ios-application-dev/references/navigation-patterns.md +175 -0
- package/skills/ios-application-dev/references/swift-coding-standards.md +757 -0
- package/skills/ios-application-dev/references/swiftui-design-guidelines.md +1167 -0
- package/skills/ios-application-dev/references/system-integration.md +401 -0
- package/skills/ios-application-dev/references/uikit-components.md +297 -0
- package/skills/local-review-gate/SKILL.md +207 -0
- package/skills/local-review-gate/references/addyosmani-code-review-rubric.md +33 -0
- package/skills/local-review-gate/references/codex-github-compatibility.md +26 -0
- package/skills/local-review-gate/references/ecc-code-review-adaptation.md +40 -0
- package/skills/local-review-gate/references/graphify-local-review.md +33 -0
- package/skills/local-review-gate/references/orchestration-adaptation.md +51 -0
- package/skills/local-review-gate/references/review-repair-lane-adaptation.md +46 -0
- package/skills/local-review-gate/references/upstream-provenance.md +61 -0
- package/skills/mature-project-pattern-research/SKILL.md +155 -0
- package/skills/mature-project-pattern-research/references/research-rubric.md +45 -0
- package/skills/minimax-docx/LICENSE +21 -0
- package/skills/minimax-docx/SKILL.md +273 -0
- package/skills/minimax-docx/assets/styles/academic_styles.xml +250 -0
- package/skills/minimax-docx/assets/styles/corporate_styles.xml +284 -0
- package/skills/minimax-docx/assets/styles/default_styles.xml +449 -0
- package/skills/minimax-docx/assets/xsd/aesthetic-rules.xsd +470 -0
- package/skills/minimax-docx/assets/xsd/business-rules.xsd +130 -0
- package/skills/minimax-docx/assets/xsd/common-types.xsd +159 -0
- package/skills/minimax-docx/assets/xsd/wml-subset.xsd +589 -0
- package/skills/minimax-docx/references/cjk_typography.md +357 -0
- package/skills/minimax-docx/references/cjk_university_template_guide.md +184 -0
- package/skills/minimax-docx/references/comments_guide.md +191 -0
- package/skills/minimax-docx/references/design_good_bad_examples.md +829 -0
- package/skills/minimax-docx/references/design_principles.md +819 -0
- package/skills/minimax-docx/references/openxml_element_order.md +308 -0
- package/skills/minimax-docx/references/openxml_encyclopedia_part1.md +4061 -0
- package/skills/minimax-docx/references/openxml_encyclopedia_part2.md +2820 -0
- package/skills/minimax-docx/references/openxml_encyclopedia_part3.md +3381 -0
- package/skills/minimax-docx/references/openxml_namespaces.md +82 -0
- package/skills/minimax-docx/references/openxml_units.md +72 -0
- package/skills/minimax-docx/references/scenario_a_create.md +284 -0
- package/skills/minimax-docx/references/scenario_b_edit_content.md +295 -0
- package/skills/minimax-docx/references/scenario_c_apply_template.md +456 -0
- package/skills/minimax-docx/references/track_changes_guide.md +200 -0
- package/skills/minimax-docx/references/troubleshooting.md +506 -0
- package/skills/minimax-docx/references/typography_guide.md +294 -0
- package/skills/minimax-docx/references/xsd_validation_guide.md +158 -0
- package/skills/minimax-docx/scripts/doc_to_docx.sh +40 -0
- package/skills/minimax-docx/scripts/docx_preview.sh +37 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/MiniMaxAIDocx.Cli.csproj +19 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/Program.cs +18 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/AnalyzeCommand.cs +147 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ApplyTemplateCommand.cs +322 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/CreateCommand.cs +324 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/DiffCommand.cs +155 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/EditContentCommand.cs +487 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/FixOrderCommand.cs +108 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/MergeRunsCommand.cs +122 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ValidateCommand.cs +107 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/MiniMaxAIDocx.Core.csproj +15 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/CommentSynchronizer.cs +169 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/ElementOrder.cs +80 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/NamespaceConstants.cs +42 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/RunMerger.cs +81 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/StyleAnalyzer.cs +81 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/TrackChangesHelper.cs +99 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/UnitConverter.cs +23 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples.cs +1832 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch1.cs +910 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch2.cs +999 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch3.cs +1048 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch4.cs +1038 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/CharacterFormattingSamples.cs +1020 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/DocumentCreationSamples.cs +1121 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FieldAndTocSamples.cs +624 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FootnoteAndCommentSamples.cs +675 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/HeaderFooterSamples.cs +838 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ImageSamples.cs +917 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ListAndNumberingSamples.cs +826 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ParagraphFormattingSamples.cs +1199 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/StyleSystemSamples.cs +1487 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TableSamples.cs +1163 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TrackChangesSamples.cs +595 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/CjkHelper.cs +39 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/FontDefaults.cs +24 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/PageSizes.cs +20 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/BusinessRuleValidator.cs +224 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/GateCheckValidator.cs +148 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/ValidationResult.cs +23 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/XsdValidator.cs +69 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.slnx +4 -0
- package/skills/minimax-docx/scripts/env_check.sh +196 -0
- package/skills/minimax-docx/scripts/setup.ps1 +274 -0
- package/skills/minimax-docx/scripts/setup.sh +504 -0
- package/skills/minimax-pdf/README.md +222 -0
- package/skills/minimax-pdf/SKILL.md +218 -0
- package/skills/minimax-pdf/design/design.md +381 -0
- package/skills/minimax-pdf/scripts/cover.py +1579 -0
- package/skills/minimax-pdf/scripts/fill_inspect.py +200 -0
- package/skills/minimax-pdf/scripts/fill_write.py +242 -0
- package/skills/minimax-pdf/scripts/make.sh +491 -0
- package/skills/minimax-pdf/scripts/merge.py +112 -0
- package/skills/minimax-pdf/scripts/palette.py +521 -0
- package/skills/minimax-pdf/scripts/reformat_parse.py +374 -0
- package/skills/minimax-pdf/scripts/render_body.py +1052 -0
- package/skills/minimax-pdf/scripts/render_cover.js +111 -0
- package/skills/minimax-xlsx/SKILL.md +156 -0
- package/skills/minimax-xlsx/references/create.md +691 -0
- package/skills/minimax-xlsx/references/edit.md +684 -0
- package/skills/minimax-xlsx/references/fix.md +37 -0
- package/skills/minimax-xlsx/references/format.md +768 -0
- package/skills/minimax-xlsx/references/ooxml-cheatsheet.md +231 -0
- package/skills/minimax-xlsx/references/read-analyze.md +97 -0
- package/skills/minimax-xlsx/references/validate.md +772 -0
- package/skills/minimax-xlsx/scripts/formula_check.py +422 -0
- package/skills/minimax-xlsx/scripts/libreoffice_recalc.py +248 -0
- package/skills/minimax-xlsx/scripts/shared_strings_builder.py +163 -0
- package/skills/minimax-xlsx/scripts/style_audit.py +575 -0
- package/skills/minimax-xlsx/scripts/xlsx_add_column.py +395 -0
- package/skills/minimax-xlsx/scripts/xlsx_insert_row.py +274 -0
- package/skills/minimax-xlsx/scripts/xlsx_pack.py +87 -0
- package/skills/minimax-xlsx/scripts/xlsx_reader.py +362 -0
- package/skills/minimax-xlsx/scripts/xlsx_shift_rows.py +396 -0
- package/skills/minimax-xlsx/scripts/xlsx_unpack.py +130 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/[Content_Types].xml +9 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/_rels/.rels +6 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/_rels/workbook.xml.rels +19 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/sharedStrings.xml +33 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/styles.xml +160 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/workbook.xml +30 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/worksheets/sheet1.xml +70 -0
- package/skills/newsletter-generation/SKILL.md +71 -0
- package/skills/oss-release-readiness/SKILL.md +47 -0
- package/skills/parallel-subagent-dispatch/SKILL.md +58 -0
- package/skills/performance-optimization/SKILL.md +364 -0
- package/skills/planning-and-task-breakdown/SKILL.md +290 -0
- package/skills/pptx-generator/SKILL.md +275 -0
- package/skills/pptx-generator/references/design-system.md +392 -0
- package/skills/pptx-generator/references/editing.md +162 -0
- package/skills/pptx-generator/references/pitfalls.md +112 -0
- package/skills/pptx-generator/references/pptxgenjs.md +420 -0
- package/skills/pptx-generator/references/slide-types.md +413 -0
- package/skills/pr-test-analysis/SKILL.md +24 -0
- package/skills/react-native-dev/SKILL.md +180 -0
- package/skills/react-native-dev/references/animations.md +254 -0
- package/skills/react-native-dev/references/components.md +124 -0
- package/skills/react-native-dev/references/engineering.md +527 -0
- package/skills/react-native-dev/references/forms.md +300 -0
- package/skills/react-native-dev/references/native-capabilities.md +163 -0
- package/skills/react-native-dev/references/navigation.md +271 -0
- package/skills/react-native-dev/references/networking.md +346 -0
- package/skills/react-native-dev/references/performance.md +215 -0
- package/skills/react-native-dev/references/state-management.md +230 -0
- package/skills/react-native-dev/references/styling.md +117 -0
- package/skills/react-native-dev/references/testing.md +341 -0
- package/skills/requirements-grilling/SKILL.md +447 -0
- package/skills/requirements-grilling/references/ADR-FORMAT.md +46 -0
- package/skills/requirements-grilling/references/CONTEXT-FORMAT.md +41 -0
- package/skills/requirements-grilling/references/INTERVIEW-PACKET-FORMAT.md +62 -0
- package/skills/requirements-grilling/references/MIT-LICENSE-MATT-POCOCK.md +25 -0
- package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
- package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
- package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/interview-me/SKILL.upstream.md +225 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/LICENSE +21 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/NOTICE.md +12 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/batch-grill-me/SKILL.upstream.md +15 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/grill-me/SKILL.upstream.md +7 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/grilling/SKILL.upstream.md +12 -0
- package/skills/review-pipeline/SKILL.md +38 -0
- package/skills/rose-memory/SKILL.md +210 -0
- package/skills/rose-memory/references/README.md +48 -0
- package/skills/rose-memory/references/memory_cli.py +2384 -0
- package/skills/rose-memory/references/schema.sql +315 -0
- package/skills/security-and-hardening/SKILL.md +369 -0
- package/skills/session-handoff/SKILL.md +88 -0
- package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/LICENSE +21 -0
- package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/NOTICE.md +9 -0
- package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/handoff/SKILL.upstream.md +16 -0
- package/skills/session-handoff/scripts/session_handoff.py +764 -0
- package/skills/shader-dev/SKILL.md +316 -0
- package/skills/shader-dev/reference/ambient-occlusion.md +382 -0
- package/skills/shader-dev/reference/analytic-ray-tracing.md +651 -0
- package/skills/shader-dev/reference/anti-aliasing.md +71 -0
- package/skills/shader-dev/reference/atmospheric-scattering.md +571 -0
- package/skills/shader-dev/reference/camera-effects.md +80 -0
- package/skills/shader-dev/reference/cellular-automata.md +635 -0
- package/skills/shader-dev/reference/color-palette.md +481 -0
- package/skills/shader-dev/reference/csg-boolean-operations.md +466 -0
- package/skills/shader-dev/reference/domain-repetition.md +436 -0
- package/skills/shader-dev/reference/domain-warping.md +419 -0
- package/skills/shader-dev/reference/fluid-simulation.md +425 -0
- package/skills/shader-dev/reference/fractal-rendering.md +525 -0
- package/skills/shader-dev/reference/lighting-model.md +639 -0
- package/skills/shader-dev/reference/matrix-transform.md +535 -0
- package/skills/shader-dev/reference/multipass-buffer.md +571 -0
- package/skills/shader-dev/reference/normal-estimation.md +418 -0
- package/skills/shader-dev/reference/particle-system.md +589 -0
- package/skills/shader-dev/reference/path-tracing-gi.md +602 -0
- package/skills/shader-dev/reference/polar-uv-manipulation.md +521 -0
- package/skills/shader-dev/reference/post-processing.md +375 -0
- package/skills/shader-dev/reference/procedural-2d-pattern.md +439 -0
- package/skills/shader-dev/reference/procedural-noise.md +551 -0
- package/skills/shader-dev/reference/ray-marching.md +396 -0
- package/skills/shader-dev/reference/sdf-2d.md +724 -0
- package/skills/shader-dev/reference/sdf-3d.md +805 -0
- package/skills/shader-dev/reference/sdf-tricks.md +63 -0
- package/skills/shader-dev/reference/shadow-techniques.md +476 -0
- package/skills/shader-dev/reference/simulation-physics.md +644 -0
- package/skills/shader-dev/reference/sound-synthesis.md +578 -0
- package/skills/shader-dev/reference/terrain-rendering.md +839 -0
- package/skills/shader-dev/reference/texture-mapping-advanced.md +87 -0
- package/skills/shader-dev/reference/texture-sampling.md +553 -0
- package/skills/shader-dev/reference/volumetric-rendering.md +608 -0
- package/skills/shader-dev/reference/voronoi-cellular-noise.md +486 -0
- package/skills/shader-dev/reference/voxel-rendering.md +701 -0
- package/skills/shader-dev/reference/water-ocean.md +445 -0
- package/skills/shader-dev/reference/webgl-pitfalls.md +41 -0
- package/skills/shader-dev/techniques/ambient-occlusion.md +364 -0
- package/skills/shader-dev/techniques/analytic-ray-tracing.md +542 -0
- package/skills/shader-dev/techniques/anti-aliasing.md +124 -0
- package/skills/shader-dev/techniques/atmospheric-scattering.md +522 -0
- package/skills/shader-dev/techniques/camera-effects.md +115 -0
- package/skills/shader-dev/techniques/cellular-automata.md +531 -0
- package/skills/shader-dev/techniques/color-palette.md +380 -0
- package/skills/shader-dev/techniques/csg-boolean-operations.md +491 -0
- package/skills/shader-dev/techniques/domain-repetition.md +333 -0
- package/skills/shader-dev/techniques/domain-warping.md +414 -0
- package/skills/shader-dev/techniques/fluid-simulation.md +1175 -0
- package/skills/shader-dev/techniques/fractal-rendering.md +436 -0
- package/skills/shader-dev/techniques/lighting-model.md +527 -0
- package/skills/shader-dev/techniques/matrix-transform.md +455 -0
- package/skills/shader-dev/techniques/multipass-buffer.md +922 -0
- package/skills/shader-dev/techniques/normal-estimation.md +318 -0
- package/skills/shader-dev/techniques/particle-system.md +1203 -0
- package/skills/shader-dev/techniques/path-tracing-gi.md +623 -0
- package/skills/shader-dev/techniques/polar-uv-manipulation.md +373 -0
- package/skills/shader-dev/techniques/post-processing.md +788 -0
- package/skills/shader-dev/techniques/procedural-2d-pattern.md +346 -0
- package/skills/shader-dev/techniques/procedural-noise.md +554 -0
- package/skills/shader-dev/techniques/ray-marching.md +467 -0
- package/skills/shader-dev/techniques/sdf-2d.md +631 -0
- package/skills/shader-dev/techniques/sdf-3d.md +589 -0
- package/skills/shader-dev/techniques/sdf-tricks.md +100 -0
- package/skills/shader-dev/techniques/shadow-techniques.md +776 -0
- package/skills/shader-dev/techniques/simulation-physics.md +1542 -0
- package/skills/shader-dev/techniques/sound-synthesis.md +490 -0
- package/skills/shader-dev/techniques/terrain-rendering.md +408 -0
- package/skills/shader-dev/techniques/texture-mapping-advanced.md +121 -0
- package/skills/shader-dev/techniques/texture-sampling.md +382 -0
- package/skills/shader-dev/techniques/volumetric-rendering.md +375 -0
- package/skills/shader-dev/techniques/voronoi-cellular-noise.md +458 -0
- package/skills/shader-dev/techniques/voxel-rendering.md +985 -0
- package/skills/shader-dev/techniques/water-ocean.md +490 -0
- package/skills/shader-dev/techniques/webgl-pitfalls.md +170 -0
- package/skills/shipping-and-launch/SKILL.md +334 -0
- package/skills/silent-failure-hunting/SKILL.md +24 -0
- package/skills/source-driven-development/SKILL.md +223 -0
- package/skills/spec-driven-development/SKILL.md +235 -0
- package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
- package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
- package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/spec-driven-development/SKILL.upstream.md +206 -0
- package/skills/strategy-stress-test/SKILL.md +185 -0
- package/skills/systematic-literature-review/SKILL.md +77 -0
- package/skills/test-document-generator/SKILL.md +152 -0
- package/skills/test-document-generator/references/test-document-template.md +45 -0
- package/skills/test-driven-development/SKILL.md +399 -0
- package/skills/write-skills/GLOSSARY.md +113 -0
- package/skills/write-skills/SKILL.md +133 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/LICENSE +21 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/NOTICE.md +9 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/writing-great-skills/GLOSSARY.md +201 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/writing-great-skills/SKILL.upstream.md +83 -0
- package/src/runtime/child-guard.ts +70 -0
- package/src/runtime/conflicts.ts +25 -0
- package/src/runtime/contracts.ts +9 -0
- package/src/runtime/doctor.ts +134 -0
- package/src/runtime/global-resources.ts +152 -0
- package/src/runtime/index.ts +23 -0
- package/src/runtime/lifecycle.ts +19 -0
- package/src/runtime/native-integrations.ts +44 -0
- package/src/runtime/path-boundaries.ts +69 -0
- package/src/runtime/registry.ts +213 -0
- package/src/runtime/roles.ts +64 -0
- package/src/runtime/rose-context.ts +24 -0
- package/src/runtime/subagents.ts +426 -0
- package/templates/APPEND_SYSTEM.md +12 -0
- package/upstream/aili-workflows.lock.json +3226 -0
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
**IMPORTANT - GLSL ES 3.00 Critical Rules**:
|
|
2
|
+
1. **Type strictness**: `int` and `float` cannot be mixed directly; array indices must be of `int` type
|
|
3
|
+
2. **Reserved words**: `sample` is a reserved word in GLSL ES 3.00; it cannot be used as a variable name
|
|
4
|
+
3. **Constant arrays**: Must explicitly specify size when declaring, e.g., `const float ARR[4] = float[4](1.,2.,3.,4.);`
|
|
5
|
+
4. **Integer division**: In GLSL ES 3.00, `1/2` evaluates to 0 (integer division); must use `1.0/2.0` or `float(1)/float(2)`
|
|
6
|
+
|
|
7
|
+
# Sound Synthesis (Procedural Audio)
|
|
8
|
+
|
|
9
|
+
## Use Cases
|
|
10
|
+
- Generate procedural audio using `mainSound()` in ShaderToy
|
|
11
|
+
- Synthesize melodies, chords, rhythm patterns, and complete music
|
|
12
|
+
- Synthesize instrument timbres: piano, bass, acid synth, percussion
|
|
13
|
+
- Implement audio effects: delay, reverb, distortion, filters
|
|
14
|
+
- Pure mathematical audio generation without external samples
|
|
15
|
+
|
|
16
|
+
## Core Principles
|
|
17
|
+
|
|
18
|
+
ShaderToy sound shader four-layer architecture:
|
|
19
|
+
|
|
20
|
+
1. **Oscillator layer**: `sin(2π·f·t)`, layering harmonics or FM modulation to build timbre
|
|
21
|
+
2. **Envelope layer**: `exp(-rate·t)` + `smoothstep` attack, simulating strike→decay
|
|
22
|
+
3. **Sequencer layer**: Macro definitions / array lookup / hash pseudo-random for arranging melodies
|
|
23
|
+
4. **Effects layer**: Reverb, delay, distortion, filters, and other post-processing
|
|
24
|
+
|
|
25
|
+
Key formulas:
|
|
26
|
+
- MIDI → frequency: `f = 440.0 × 2^((n - 69) / 12)`
|
|
27
|
+
- Sine oscillator: `y = sin(2π × freq × time)`
|
|
28
|
+
- Exponential decay: `env = exp(-decay_rate × time)`
|
|
29
|
+
- FM modulation: `y = sin(2π × f_c × t + depth × sin(2π × f_m × t))`
|
|
30
|
+
|
|
31
|
+
## Implementation Steps
|
|
32
|
+
|
|
33
|
+
### Step 1: mainSound Entry Framework
|
|
34
|
+
```glsl
|
|
35
|
+
#define TAU 6.28318530718
|
|
36
|
+
#define BPM 120.0
|
|
37
|
+
#define SPB (60.0 / BPM)
|
|
38
|
+
|
|
39
|
+
vec2 mainSound(int samp, float time) {
|
|
40
|
+
vec2 audio = vec2(0.0);
|
|
41
|
+
// Layer each instrument/track
|
|
42
|
+
audio *= 0.5 * smoothstep(0.0, 0.5, time); // Master volume + pop prevention
|
|
43
|
+
return clamp(audio, -1.0, 1.0);
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Step 2: MIDI Note to Frequency
|
|
48
|
+
```glsl
|
|
49
|
+
float noteFreq(float note) {
|
|
50
|
+
return 440.0 * pow(2.0, (note - 69.0) / 12.0);
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Step 3: Basic Oscillators
|
|
55
|
+
```glsl
|
|
56
|
+
float osc_sin(float t) { return sin(TAU * t); }
|
|
57
|
+
float osc_saw(float t) { return fract(t) * 2.0 - 1.0; }
|
|
58
|
+
float osc_sqr(float t) { return step(fract(t), 0.5) * 2.0 - 1.0; }
|
|
59
|
+
float osc_tri(float t) { return abs(fract(t) - 0.5) * 4.0 - 1.0; }
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Step 4: Additive Synthesis Instrument
|
|
63
|
+
```glsl
|
|
64
|
+
// Layer harmonics to build timbre; higher harmonics decay faster
|
|
65
|
+
float instrument_additive(float freq, float t) {
|
|
66
|
+
float y = 0.0;
|
|
67
|
+
y += 0.50 * sin(TAU * 1.00 * freq * t) * exp(-0.0015 * 1.0 * freq * t);
|
|
68
|
+
y += 0.30 * sin(TAU * 2.01 * freq * t) * exp(-0.0015 * 2.0 * freq * t);
|
|
69
|
+
y += 0.20 * sin(TAU * 4.01 * freq * t) * exp(-0.0015 * 4.0 * freq * t);
|
|
70
|
+
y += 0.1 * y * y * y; // Nonlinear waveshaping
|
|
71
|
+
y *= 0.9 + 0.1 * cos(40.0 * t); // Tremolo
|
|
72
|
+
y *= smoothstep(0.0, 0.01, t); // Smooth attack
|
|
73
|
+
return y;
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Step 5: FM Synthesis Instrument
|
|
78
|
+
```glsl
|
|
79
|
+
// FM electric piano (stereo)
|
|
80
|
+
vec2 fm_epiano(float freq, float t) {
|
|
81
|
+
vec2 f0 = vec2(freq * 0.998, freq * 1.002); // Stereo micro-detuning
|
|
82
|
+
// "Glass" layer - high-frequency FM, metallic attack
|
|
83
|
+
vec2 glass = sin(TAU * (f0 + 3.0) * t
|
|
84
|
+
+ sin(TAU * 14.0 * f0 * t) * exp(-30.0 * t)
|
|
85
|
+
) * exp(-4.0 * t);
|
|
86
|
+
glass = sin(glass);
|
|
87
|
+
// "Body" layer - low-frequency FM, warm sustained tone
|
|
88
|
+
vec2 body = sin(TAU * f0 * t
|
|
89
|
+
+ sin(TAU * f0 * t) * exp(-0.5 * t) * pow(440.0 / f0.x, 0.5)
|
|
90
|
+
) * exp(-t);
|
|
91
|
+
return (glass + body) * smoothstep(0.0, 0.001, t) * 0.1;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// FM generic instrument (struct parameterized)
|
|
95
|
+
struct Instr {
|
|
96
|
+
float att, fo, vibe, vphas, phas, dtun;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
float fm_instrument(float freq, float t, float beatTime, Instr ins) {
|
|
100
|
+
float f = freq - beatTime * ins.dtun;
|
|
101
|
+
float phase = f * t * TAU;
|
|
102
|
+
float vibrato = cos(beatTime * ins.vibe * 3.14159 / 8.0 + ins.vphas * 1.5708);
|
|
103
|
+
float fm = sin(phase + vibrato * sin(phase * ins.phas));
|
|
104
|
+
float env = exp(-beatTime * ins.fo) * (1.0 - exp(-beatTime * ins.att));
|
|
105
|
+
return fm * env * (1.0 - beatTime * 0.125);
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Step 6: Percussion Synthesis
|
|
110
|
+
```glsl
|
|
111
|
+
float hash(float p) {
|
|
112
|
+
p = fract(p * 0.1031); p *= p + 33.33; p *= p + p; return fract(p);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// 909 kick drum: frequency sweep + noise click
|
|
116
|
+
float kick(float t) {
|
|
117
|
+
float phase = TAU * (60.0 * t - 512.0 * 0.01 * exp(-t / 0.01));
|
|
118
|
+
float body = sin(phase) * smoothstep(0.3, 0.0, t) * 1.5;
|
|
119
|
+
float click = sin(TAU * 8000.0 * fract(t)) * hash(t * 2000.0)
|
|
120
|
+
* smoothstep(0.007, 0.0, t);
|
|
121
|
+
return body + click;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Hi-hat: noise + exponential decay. decay: 5.0=open, 15.0=closed
|
|
125
|
+
float hihat(float t, float decay) {
|
|
126
|
+
float noise = hash(floor(t * 44100.0)) * 2.0 - 1.0;
|
|
127
|
+
return noise * exp(-decay * t) * smoothstep(0.0, 0.02, t);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Clap/snare
|
|
131
|
+
float clap(float t) {
|
|
132
|
+
float noise = hash(floor(t * 44100.0)) * 2.0 - 1.0;
|
|
133
|
+
return noise * smoothstep(0.1, 0.0, t);
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Step 7: Note Sequence Arrangement
|
|
138
|
+
```glsl
|
|
139
|
+
// === Method A: D() macro accumulation (good for handwritten melodies) ===
|
|
140
|
+
#define D(duration, note) b += float(duration); if(t > b) { x = b; n = float(note); }
|
|
141
|
+
|
|
142
|
+
float melody_macro(float time) {
|
|
143
|
+
float t = time / 0.18;
|
|
144
|
+
float n = 0.0, b = 0.0, x = 0.0;
|
|
145
|
+
D(10,71) D(2,76) D(3,79) D(1,78) D(2,76) D(4,83) D(2,81) D(6,78)
|
|
146
|
+
float freq = noteFreq(n);
|
|
147
|
+
float noteTime = 0.18 * (t - x);
|
|
148
|
+
return instrument_additive(freq, noteTime);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// === Method B: Array lookup (good for complex arrangements) ===
|
|
152
|
+
// NOTE: Array indices must be int type in GLSL ES 3.00
|
|
153
|
+
const float NOTES[16] = float[16](
|
|
154
|
+
60., 62., 64., 65., 67., 69., 71., 72.,
|
|
155
|
+
60., 64., 67., 72., 65., 69., 64., 60.
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
float melody_array(float time, float bpm) {
|
|
159
|
+
float beat = time * bpm / 60.0;
|
|
160
|
+
int idx = int(mod(beat, 16.0)); // IMPORTANT: Must use int() conversion
|
|
161
|
+
float noteTime = fract(beat);
|
|
162
|
+
float freq = noteFreq(NOTES[idx]);
|
|
163
|
+
return instrument_additive(freq, noteTime * 60.0 / bpm);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// === Method C: Hash pseudo-random (good for algorithmic composition) ===
|
|
167
|
+
float nse(float x) { return fract(sin(x * 110.082) * 19871.8972); }
|
|
168
|
+
|
|
169
|
+
float scale_filter(float note) {
|
|
170
|
+
float n2 = mod(note, 12.0);
|
|
171
|
+
if (n2==1.||n2==3.||n2==6.||n2==8.||n2==10.) return -100.0;
|
|
172
|
+
return note;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
float melody_random(float time, float bpm) {
|
|
176
|
+
float beat = time * bpm / 60.0;
|
|
177
|
+
float note = 48.0 + floor(nse(floor(beat)) * 24.0);
|
|
178
|
+
note = scale_filter(note);
|
|
179
|
+
return instrument_additive(noteFreq(note), fract(beat) * 60.0 / bpm);
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Step 8: Chord Construction
|
|
184
|
+
```glsl
|
|
185
|
+
vec2 chord(float time, float root, float isMinor) {
|
|
186
|
+
vec2 result = vec2(0.0);
|
|
187
|
+
float bass = root - 24.0;
|
|
188
|
+
result += fm_epiano(noteFreq(bass), time, 2.0);
|
|
189
|
+
result += fm_epiano(noteFreq(root), time - SPB * 0.5, 1.25);
|
|
190
|
+
result += fm_epiano(noteFreq(root + 4.0 - isMinor), time - SPB, 1.5); // Third
|
|
191
|
+
result += fm_epiano(noteFreq(root + 7.0), time - SPB * 0.5, 1.25); // Fifth
|
|
192
|
+
result += fm_epiano(noteFreq(root + 11.0 - isMinor), time - SPB, 1.5); // Seventh
|
|
193
|
+
result += fm_epiano(noteFreq(root + 14.0), time - SPB, 1.5); // Ninth
|
|
194
|
+
return result;
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Step 9: Delay and Reverb
|
|
199
|
+
```glsl
|
|
200
|
+
// Multi-tap echo
|
|
201
|
+
// NOTE: "sample" is a reserved word in GLSL ES 3.00; use "samp" instead
|
|
202
|
+
vec2 echo_reverb(float time) {
|
|
203
|
+
vec2 tot = vec2(0.0);
|
|
204
|
+
float hh = 1.0;
|
|
205
|
+
for (int i = 0; i < 6; i++) {
|
|
206
|
+
float h = float(i) / 5.0;
|
|
207
|
+
float samp = get_instrument_sample(time - 0.7 * h);
|
|
208
|
+
tot += samp * vec2(0.5 + 0.1 * h, 0.5 - 0.1 * h) * hh;
|
|
209
|
+
hh *= 0.5;
|
|
210
|
+
}
|
|
211
|
+
return tot;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// Ping-pong stereo delay
|
|
215
|
+
vec2 pingpong_delay(float time) {
|
|
216
|
+
vec2 mx = get_stereo_sample(time) * 0.5;
|
|
217
|
+
float ec = 0.4, fb = 0.6, dt = 0.222;
|
|
218
|
+
float et = dt;
|
|
219
|
+
mx += get_stereo_sample(time - et) * ec * vec2(1.0, 0.5); ec *= fb; et += dt;
|
|
220
|
+
mx += get_stereo_sample(time - et) * ec * vec2(0.5, 1.0); ec *= fb; et += dt;
|
|
221
|
+
mx += get_stereo_sample(time - et) * ec * vec2(1.0, 0.5); ec *= fb; et += dt;
|
|
222
|
+
mx += get_stereo_sample(time - et) * ec * vec2(0.5, 1.0); ec *= fb; et += dt;
|
|
223
|
+
return mx;
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Step 10: Beat and Arrangement Structure
|
|
228
|
+
```glsl
|
|
229
|
+
vec2 mainSound(int samp, float time) {
|
|
230
|
+
vec2 audio = vec2(0.0);
|
|
231
|
+
float beat = time * BPM / 60.0;
|
|
232
|
+
float bar = beat / 4.0;
|
|
233
|
+
|
|
234
|
+
// Kick (every beat) + hi-hat (every half beat) + melody
|
|
235
|
+
float kickTime = mod(time, SPB);
|
|
236
|
+
audio += vec2(kick(kickTime) * 0.5);
|
|
237
|
+
float hatTime = mod(time, SPB * 0.5);
|
|
238
|
+
audio += vec2(hihat(hatTime, 15.0) * 0.15);
|
|
239
|
+
audio += vec2(melody_array(time, BPM)) * 0.3;
|
|
240
|
+
|
|
241
|
+
// Arrangement: smoothstep controls intro/outro
|
|
242
|
+
audio *= smoothstep(0.0, 4.0, bar); // Fade in over first 4 bars
|
|
243
|
+
audio *= 0.35 * smoothstep(0.0, 0.5, time);
|
|
244
|
+
// IMPORTANT: Array indices must be int type
|
|
245
|
+
// float idx = mod(beat, 16.0); // WRONG: float cannot be used as index
|
|
246
|
+
int idx = int(mod(beat, 16.0)); // CORRECT: int(mod(...)) conversion
|
|
247
|
+
return clamp(audio, -1.0, 1.0);
|
|
248
|
+
}
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## Complete Code Template
|
|
252
|
+
|
|
253
|
+
Can be pasted directly into the ShaderToy Sound tab to run. Includes FM piano melody, kick drum rhythm, and ping-pong delay.
|
|
254
|
+
|
|
255
|
+
```glsl
|
|
256
|
+
// === Sound Synthesis Complete Template ===
|
|
257
|
+
#define TAU 6.28318530718
|
|
258
|
+
#define BPM 130.0
|
|
259
|
+
#define SPB (60.0 / BPM)
|
|
260
|
+
#define NUM_HARMONICS 4
|
|
261
|
+
#define ECHO_TAPS 4
|
|
262
|
+
#define ECHO_DELAY 0.18
|
|
263
|
+
#define ECHO_DECAY 0.45
|
|
264
|
+
|
|
265
|
+
float noteFreq(float note) {
|
|
266
|
+
return 440.0 * pow(2.0, (note - 69.0) / 12.0);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
float hash11(float p) {
|
|
270
|
+
p = fract(p * 0.1031); p *= p + 33.33; p *= p + p; return fract(p);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
float osc_tri(float t) { return abs(fract(t) - 0.5) * 4.0 - 1.0; }
|
|
274
|
+
|
|
275
|
+
float instrument(float freq, float t) {
|
|
276
|
+
float y = 0.0;
|
|
277
|
+
for (int i = 1; i <= NUM_HARMONICS; i++) {
|
|
278
|
+
float h = float(i);
|
|
279
|
+
float amp = 0.6 / h;
|
|
280
|
+
float decay = 0.002 * h * freq;
|
|
281
|
+
y += amp * sin(TAU * h * 1.003 * freq * t) * exp(-decay * t);
|
|
282
|
+
}
|
|
283
|
+
y += 0.15 * y * y * y;
|
|
284
|
+
y *= 0.9 + 0.1 * cos(35.0 * t);
|
|
285
|
+
y *= smoothstep(0.0, 0.008, t);
|
|
286
|
+
return y;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
vec2 epiano(float freq, float t) {
|
|
290
|
+
vec2 f0 = vec2(freq * 0.998, freq * 1.002);
|
|
291
|
+
vec2 glass = sin(TAU * (f0 + 3.0) * t
|
|
292
|
+
+ sin(TAU * 14.0 * f0 * t) * exp(-30.0 * t)
|
|
293
|
+
) * exp(-4.0 * t);
|
|
294
|
+
glass = sin(glass);
|
|
295
|
+
vec2 body = sin(TAU * f0 * t
|
|
296
|
+
+ sin(TAU * f0 * t) * exp(-0.5 * t) * pow(440.0 / max(f0.x, 1.0), 0.5)
|
|
297
|
+
) * exp(-t);
|
|
298
|
+
return (glass + body) * smoothstep(0.0, 0.001, t) * 0.12;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
float kick(float t) {
|
|
302
|
+
float df = 512.0, dftime = 0.01, freq = 60.0;
|
|
303
|
+
float phase = TAU * (freq * t - df * dftime * exp(-t / dftime));
|
|
304
|
+
float body = sin(phase) * smoothstep(0.3, 0.0, t) * 1.5;
|
|
305
|
+
float click = sin(TAU * 8000.0 * fract(t)) * hash11(t * 2048.0)
|
|
306
|
+
* smoothstep(0.007, 0.0, t);
|
|
307
|
+
return body + click;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
float hihat(float t) {
|
|
311
|
+
float noise = hash11(floor(t * 44100.0)) * 2.0 - 1.0;
|
|
312
|
+
return noise * exp(-15.0 * t) * smoothstep(0.0, 0.002, t);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
const float MELODY[16] = float[16](
|
|
316
|
+
67., 67., 72., 71., 69., 67., 64., 64.,
|
|
317
|
+
65., 65., 69., 67., 67., 65., 64., 62.
|
|
318
|
+
);
|
|
319
|
+
|
|
320
|
+
const float BASS[4] = float[4](43., 48., 45., 41.);
|
|
321
|
+
|
|
322
|
+
vec2 mainSound(int samp, float time) {
|
|
323
|
+
time = mod(time, 32.0 * SPB * 4.0);
|
|
324
|
+
vec2 audio = vec2(0.0);
|
|
325
|
+
float beat = time / SPB;
|
|
326
|
+
float bar = beat / 4.0;
|
|
327
|
+
|
|
328
|
+
// Melody
|
|
329
|
+
{ int idx = int(mod(beat, 16.0));
|
|
330
|
+
float noteTime = fract(beat) * SPB;
|
|
331
|
+
audio += vec2(instrument(noteFreq(MELODY[idx]), noteTime) * 0.25); }
|
|
332
|
+
|
|
333
|
+
// Bass
|
|
334
|
+
{ int idx = int(mod(bar, 4.0));
|
|
335
|
+
float noteTime = fract(bar) * SPB * 4.0;
|
|
336
|
+
float freq = noteFreq(BASS[idx]);
|
|
337
|
+
audio += vec2(osc_tri(freq * noteTime) * exp(-1.5 * noteTime)
|
|
338
|
+
* smoothstep(0.0, 0.01, noteTime) * 0.3); }
|
|
339
|
+
|
|
340
|
+
// Kick (every beat) + sidechain compression
|
|
341
|
+
{ float kt = mod(time, SPB);
|
|
342
|
+
float k = kick(kt) * 0.4;
|
|
343
|
+
audio *= min(1.0, kt * 6.0 / SPB);
|
|
344
|
+
audio += vec2(k); }
|
|
345
|
+
|
|
346
|
+
// Hi-hat (every half beat, panned right)
|
|
347
|
+
{ float ht = mod(time, SPB * 0.5);
|
|
348
|
+
audio += vec2(0.4, 0.6) * hihat(ht) * 0.12; }
|
|
349
|
+
|
|
350
|
+
// Ping-pong delay (melody)
|
|
351
|
+
{ float ec = 0.3;
|
|
352
|
+
for (int i = 1; i <= ECHO_TAPS; i++) {
|
|
353
|
+
float dt = ECHO_DELAY * float(i);
|
|
354
|
+
int idx = int(mod((time - dt) / SPB, 16.0));
|
|
355
|
+
float nt = fract((time - dt) / SPB) * SPB;
|
|
356
|
+
float echoed = instrument(noteFreq(MELODY[idx]), nt) * 0.25 * ec;
|
|
357
|
+
if (i % 2 == 0) audio += vec2(0.3, 1.0) * echoed;
|
|
358
|
+
else audio += vec2(1.0, 0.3) * echoed;
|
|
359
|
+
ec *= ECHO_DECAY;
|
|
360
|
+
} }
|
|
361
|
+
|
|
362
|
+
audio *= 0.4 * smoothstep(0.0, 2.0, time);
|
|
363
|
+
return clamp(audio, -1.0, 1.0);
|
|
364
|
+
}
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
## Common Variants
|
|
368
|
+
|
|
369
|
+
### Variant 1: Subtractive Synthesis / TB-303 Acid Synth
|
|
370
|
+
Sawtooth wave through resonant low-pass filter, cutoff frequency modulated by envelope to produce the "wow" sound.
|
|
371
|
+
```glsl
|
|
372
|
+
#define NSPC 128
|
|
373
|
+
float lpf_response(float h, float cutoff, float reso) {
|
|
374
|
+
cutoff -= 20.0;
|
|
375
|
+
float df = max(h - cutoff, 0.0);
|
|
376
|
+
float df2 = abs(h - cutoff);
|
|
377
|
+
return exp(-0.005 * df * df) * 0.5 + exp(df2 * df2 * -0.1) * reso;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
vec2 acid_synth(float freq, float noteTime) {
|
|
381
|
+
vec2 v = vec2(0.0);
|
|
382
|
+
float cutoff = exp(noteTime * -1.5) * 50.0 + 10.0;
|
|
383
|
+
float sqr = step(0.5, fract(noteTime * 4.5));
|
|
384
|
+
for (int i = 0; i < NSPC; i++) {
|
|
385
|
+
float h = float(i + 1);
|
|
386
|
+
float inten = 1.0 / h;
|
|
387
|
+
inten = mix(inten, inten * mod(h, 2.0), sqr);
|
|
388
|
+
inten *= lpf_response(h, cutoff, 2.2);
|
|
389
|
+
v.x += inten * sin((TAU + 0.01) * noteTime * freq * h);
|
|
390
|
+
v.y += inten * sin(TAU * noteTime * freq * h);
|
|
391
|
+
}
|
|
392
|
+
float amp = smoothstep(0.05, 0.0, abs(noteTime - 0.31) - 0.26) * exp(noteTime * -1.0);
|
|
393
|
+
return clamp(v * amp * 2.0, -1.0, 1.0);
|
|
394
|
+
}
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
### Variant 2: IIR Biquad Filter
|
|
398
|
+
Time-domain IIR filter based on the Audio EQ Cookbook, supporting 7 types including low-pass/high-pass/band-pass.
|
|
399
|
+
```glsl
|
|
400
|
+
float waveSaw(float freq, int samp) {
|
|
401
|
+
return fract(freq * float(samp) / iSampleRate) * 2.0 - 1.0;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
vec2 widerSaw(float freq, int samp) {
|
|
405
|
+
int offset = int(freq) * 64;
|
|
406
|
+
return vec2(waveSaw(freq, samp - offset), waveSaw(freq, samp + offset));
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
void biquadLPF(float freq, float Q, float sr,
|
|
410
|
+
out float b0, out float b1, out float b2,
|
|
411
|
+
out float a0, out float a1, out float a2) {
|
|
412
|
+
float omega = TAU * freq / sr;
|
|
413
|
+
float sn = sin(omega), cs = cos(omega);
|
|
414
|
+
float alpha = sn / (2.0 * Q);
|
|
415
|
+
b0 = (1.0 - cs) * 0.5; b1 = 1.0 - cs; b2 = (1.0 - cs) * 0.5;
|
|
416
|
+
a0 = 1.0 + alpha; a1 = -2.0 * cs; a2 = 1.0 - alpha;
|
|
417
|
+
}
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
### Variant 3: Vocal / Formant Synthesis
|
|
421
|
+
Vocal tract model simulating human voice by synthesizing vowels through formant frequencies and bandwidths.
|
|
422
|
+
```glsl
|
|
423
|
+
float tract(float x, float formantFreq, float bandwidth) {
|
|
424
|
+
return sin(TAU * formantFreq * x) * exp(-bandwidth * 3.14159 * x);
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
float vowel_aah(float t, float pitch) {
|
|
428
|
+
float x = mod(t, 1.0 / pitch);
|
|
429
|
+
float aud = tract(x, 710.0, 70.0) * 0.5 // F1
|
|
430
|
+
+ tract(x, 1000.0, 90.0) * 0.6 // F2
|
|
431
|
+
+ tract(x, 2450.0, 140.0) * 0.4; // F3
|
|
432
|
+
return aud;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
float fricative(float t, float formantFreq) {
|
|
436
|
+
return (hash11(floor(formantFreq * t) * 20.0) - 0.5) * 3.0;
|
|
437
|
+
}
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
### Variant 4: Algorithmic Composition
|
|
441
|
+
Hash pseudo-random melody + scale quantization, multi-layer rhythmic subdivision producing fractal music structures.
|
|
442
|
+
```glsl
|
|
443
|
+
vec2 noteRing(float n) {
|
|
444
|
+
float r = 0.5 + 0.5 * fract(sin(mod(floor(n), 32.123) * 32.123) * 41.123);
|
|
445
|
+
n = mod(n, 8.0);
|
|
446
|
+
float note = n<1.?0. : n<2.?5. : n<3.?-2. : n<4.?4. : n<5.?7. : n<6.?4. : n<7.?2. : 0.;
|
|
447
|
+
return vec2(note, r);
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
vec2 generativeNote(float beat) {
|
|
451
|
+
float b2 = floor(beat * 0.25);
|
|
452
|
+
return noteRing(b2 * 0.0625) + noteRing(b2 * 0.25) + noteRing(b2);
|
|
453
|
+
}
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
### Variant 5: Circle of Fifths Chord Progressions
|
|
457
|
+
Automatically generates harmony based on the circle of fifths, advancing +7 semitones every 4 beats, alternating major/minor chords.
|
|
458
|
+
```glsl
|
|
459
|
+
vec2 mainSound(int samp, float time) {
|
|
460
|
+
float id = floor(time / SPB / 4.0);
|
|
461
|
+
float offset = id * 7.0;
|
|
462
|
+
float minor = mod(id, 4.0) >= 3.0 ? 1.0 : 0.0;
|
|
463
|
+
float t = mod(time, SPB * 4.0);
|
|
464
|
+
float root = 57.0 + mod(offset, 12.0);
|
|
465
|
+
vec2 result = chord(t, root, minor);
|
|
466
|
+
result += vec2(0.5, 0.2) * chord(t - SPB * 0.5, root, minor);
|
|
467
|
+
result += vec2(0.05, 0.1) * chord(t - SPB, root, minor);
|
|
468
|
+
return result;
|
|
469
|
+
}
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
## Performance & Composition
|
|
473
|
+
|
|
474
|
+
**Performance Tips:**
|
|
475
|
+
- Harmonic count (`NUM_HARMONICS` / `NSPC`) is the biggest bottleneck; start with 4-8, stop when sufficient
|
|
476
|
+
- IIR filters require looping through sample history per output sample; prefer frequency-domain methods
|
|
477
|
+
- Each delay tap requires recomputing the full signal chain; 4 taps = 5x computation
|
|
478
|
+
- `fract(x)` is faster than `mod(x, 1.0)`; hoist constants out of loops
|
|
479
|
+
- Use Common Pass to share constants; avoid redundant computation between Sound and Image
|
|
480
|
+
|
|
481
|
+
**Composition Tips:**
|
|
482
|
+
- **Audio visualization**: Sound output is read via `iChannel0` in the Image shader for spectrum display
|
|
483
|
+
- **Raymarching sync**: Common Pass defines shared timeline; Sound/Image reference it synchronously
|
|
484
|
+
- **Particle systems**: Use kick triggers to drive particle emission; share BPM/SPB for beat position calculation
|
|
485
|
+
- **Post-processing linkage**: Sidechain compression coefficients drive bloom/chromatic aberration/dithering via Common Pass
|
|
486
|
+
- **Text overlay**: `message()` in Image shader renders parameter display or interaction instructions
|
|
487
|
+
|
|
488
|
+
## Further Reading
|
|
489
|
+
|
|
490
|
+
For complete step-by-step tutorials, mathematical derivations, and advanced usage, see [reference](../reference/sound-synthesis.md)
|