@allyhub/sdk 0.1.0-alpha.8 → 0.2.0-next.1
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.md +241 -0
- package/NOTICE +85 -0
- package/client.d.ts +45 -1
- package/dist/anim.js +2 -75
- package/dist/define.d.ts +10 -4
- package/dist/define.js +2 -95
- package/dist/dom.d.ts +1 -1
- package/dist/dom.js +2 -457
- package/dist/fit.js +2 -60
- package/dist/free.d.ts +18 -0
- package/dist/free.js +2 -0
- package/dist/index.d.ts +28 -13
- package/dist/index.js +2 -11
- package/dist/input.d.ts +306 -0
- package/dist/input.js +2 -0
- package/dist/media.d.ts +3 -6
- package/dist/media.js +2 -27
- package/dist/messages.d.ts +3 -2
- package/dist/messages.js +2 -2
- package/dist/module.d.ts +24 -0
- package/dist/module.js +2 -0
- package/dist/noise.js +2 -233
- package/dist/parts.d.ts +98 -22
- package/dist/parts.js +2 -414
- package/dist/paths.d.ts +1 -1
- package/dist/paths.js +2 -720
- package/dist/phone.d.ts +26 -0
- package/dist/phone.js +2 -0
- package/dist/piece.d.ts +106 -35
- package/dist/piece.js +2 -38
- package/dist/props.d.ts +1 -1
- package/dist/props.js +2 -35
- package/dist/scenery.d.ts +2 -0
- package/dist/scenery.js +2 -0
- package/dist/text.js +2 -38
- package/dist/written.d.ts +12 -0
- package/dist/written.js +2 -0
- package/docs/README.md +18 -0
- package/docs/batches.md +148 -0
- package/docs/contract.md +51 -0
- package/docs/defaults.md +703 -0
- package/docs/docs.md +148 -0
- package/docs/footage.md +249 -0
- package/docs/layers.md +317 -0
- package/docs/modeling.md +143 -0
- package/docs/project.md +265 -0
- package/docs/scenery.md +308 -0
- package/docs/sheets.md +119 -0
- package/docs/slides.md +111 -0
- package/docs/sound.md +170 -0
- package/docs/speech.md +289 -0
- package/docs/video.md +265 -0
- package/node_modules/@allyhub-next/audio/LICENSE +241 -0
- package/node_modules/@allyhub-next/audio/dist/at-cut.d.ts +52 -0
- package/node_modules/@allyhub-next/audio/dist/at-cut.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/decode.d.ts +33 -0
- package/node_modules/@allyhub-next/audio/dist/decode.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/envelope.d.ts +37 -0
- package/node_modules/@allyhub-next/audio/dist/envelope.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/index.d.ts +17 -0
- package/node_modules/@allyhub-next/audio/dist/index.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/levels.d.ts +97 -0
- package/node_modules/@allyhub-next/audio/dist/levels.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/master.d.ts +29 -0
- package/node_modules/@allyhub-next/audio/dist/master.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/music.d.ts +11 -0
- package/node_modules/@allyhub-next/audio/dist/music.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/node/decode.d.ts +39 -0
- package/node_modules/@allyhub-next/audio/dist/node/decode.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/node/ebur128.d.ts +25 -0
- package/node_modules/@allyhub-next/audio/dist/node/ebur128.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/node/ffmpeg.d.ts +31 -0
- package/node_modules/@allyhub-next/audio/dist/node/ffmpeg.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/node/index.d.ts +8 -0
- package/node_modules/@allyhub-next/audio/dist/node/index.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/node/loudness.d.ts +18 -0
- package/node_modules/@allyhub-next/audio/dist/node/loudness.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/node/master.d.ts +42 -0
- package/node_modules/@allyhub-next/audio/dist/node/master.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/node/measure.d.ts +60 -0
- package/node_modules/@allyhub-next/audio/dist/node/measure.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/node/mix.d.ts +31 -0
- package/node_modules/@allyhub-next/audio/dist/node/mix.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/plan.d.ts +143 -0
- package/node_modules/@allyhub-next/audio/dist/plan.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recorded.d.ts +26 -0
- package/node_modules/@allyhub-next/audio/dist/recorded.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/bandwidth.d.ts +47 -0
- package/node_modules/@allyhub-next/audio/dist/recording/bandwidth.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/chain.d.ts +89 -0
- package/node_modules/@allyhub-next/audio/dist/recording/chain.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/dynamics.d.ts +64 -0
- package/node_modules/@allyhub-next/audio/dist/recording/dynamics.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/fft.d.ts +26 -0
- package/node_modules/@allyhub-next/audio/dist/recording/fft.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/filters.d.ts +42 -0
- package/node_modules/@allyhub-next/audio/dist/recording/filters.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/fit.d.ts +56 -0
- package/node_modules/@allyhub-next/audio/dist/recording/fit.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/index.d.ts +10 -0
- package/node_modules/@allyhub-next/audio/dist/recording/index.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/loudness.d.ts +12 -0
- package/node_modules/@allyhub-next/audio/dist/recording/loudness.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/measure.d.ts +67 -0
- package/node_modules/@allyhub-next/audio/dist/recording/measure.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/mic.d.ts +32 -0
- package/node_modules/@allyhub-next/audio/dist/recording/mic.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/noise.d.ts +27 -0
- package/node_modules/@allyhub-next/audio/dist/recording/noise.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/presets.d.ts +64 -0
- package/node_modules/@allyhub-next/audio/dist/recording/presets.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/room.d.ts +78 -0
- package/node_modules/@allyhub-next/audio/dist/recording/room.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/setup.d.ts +111 -0
- package/node_modules/@allyhub-next/audio/dist/recording/setup.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/vec.d.ts +3 -0
- package/node_modules/@allyhub-next/audio/dist/recording/vec.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/render.d.ts +26 -0
- package/node_modules/@allyhub-next/audio/dist/render.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/sfx.d.ts +10 -0
- package/node_modules/@allyhub-next/audio/dist/sfx.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/shape.d.ts +118 -0
- package/node_modules/@allyhub-next/audio/dist/shape.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/voice.d.ts +45 -0
- package/node_modules/@allyhub-next/audio/dist/voice.js +2 -0
- package/node_modules/@allyhub-next/audio/package.json +17 -0
- package/node_modules/@allyhub-next/formats/LICENSE +241 -0
- package/node_modules/@allyhub-next/formats/dist/data/comments.d.ts +94 -0
- package/node_modules/@allyhub-next/formats/dist/data/comments.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/config.d.ts +10 -0
- package/node_modules/@allyhub-next/formats/dist/data/config.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/edits.d.ts +28 -0
- package/node_modules/@allyhub-next/formats/dist/data/edits.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/elements.d.ts +6 -0
- package/node_modules/@allyhub-next/formats/dist/data/elements.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/faces.d.ts +38 -0
- package/node_modules/@allyhub-next/formats/dist/data/faces.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/file.d.ts +11 -0
- package/node_modules/@allyhub-next/formats/dist/data/file.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/gen.d.ts +31 -0
- package/node_modules/@allyhub-next/formats/dist/data/gen.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/messages.d.ts +34 -0
- package/node_modules/@allyhub-next/formats/dist/data/messages.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/reference.d.ts +676 -0
- package/node_modules/@allyhub-next/formats/dist/data/reference.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/script.d.ts +37 -0
- package/node_modules/@allyhub-next/formats/dist/data/script.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/sheet.d.ts +214 -0
- package/node_modules/@allyhub-next/formats/dist/data/sheet.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/words.d.ts +25 -0
- package/node_modules/@allyhub-next/formats/dist/data/words.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/index.d.ts +16 -0
- package/node_modules/@allyhub-next/formats/dist/index.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/items.d.ts +94 -0
- package/node_modules/@allyhub-next/formats/dist/items.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/layout.d.ts +50 -0
- package/node_modules/@allyhub-next/formats/dist/layout.js +5 -0
- package/node_modules/@allyhub-next/formats/dist/schemas.d.ts +301 -0
- package/node_modules/@allyhub-next/formats/dist/schemas.js +2 -0
- package/node_modules/@allyhub-next/formats/package.json +14 -0
- package/node_modules/@allyhub-next/protocol/LICENSE +241 -0
- package/node_modules/@allyhub-next/protocol/dist/app.d.ts +98 -0
- package/node_modules/@allyhub-next/protocol/dist/app.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/auth.d.ts +116 -0
- package/node_modules/@allyhub-next/protocol/dist/auth.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/cli.d.ts +59 -0
- package/node_modules/@allyhub-next/protocol/dist/cli.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/cloud.d.ts +274 -0
- package/node_modules/@allyhub-next/protocol/dist/cloud.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/editor.d.ts +405 -0
- package/node_modules/@allyhub-next/protocol/dist/editor.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/files.d.ts +101 -0
- package/node_modules/@allyhub-next/protocol/dist/files.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/index.d.ts +12 -0
- package/node_modules/@allyhub-next/protocol/dist/index.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/jsonrpc.d.ts +83 -0
- package/node_modules/@allyhub-next/protocol/dist/jsonrpc.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/registry.d.ts +53 -0
- package/node_modules/@allyhub-next/protocol/dist/registry.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/runtimes.d.ts +93 -0
- package/node_modules/@allyhub-next/protocol/dist/runtimes.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/teams.d.ts +67 -0
- package/node_modules/@allyhub-next/protocol/dist/teams.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/tools.d.ts +345 -0
- package/node_modules/@allyhub-next/protocol/dist/tools.js +2 -0
- package/node_modules/@allyhub-next/protocol/package.json +13 -0
- package/node_modules/@allyhub-next/runtimes/LICENSE +241 -0
- package/node_modules/@allyhub-next/runtimes/dist/bundled.d.ts +10 -0
- package/node_modules/@allyhub-next/runtimes/dist/bundled.js +2 -0
- package/node_modules/@allyhub-next/runtimes/dist/download.d.ts +15 -0
- package/node_modules/@allyhub-next/runtimes/dist/download.js +2 -0
- package/node_modules/@allyhub-next/runtimes/dist/errors.d.ts +16 -0
- package/node_modules/@allyhub-next/runtimes/dist/errors.js +2 -0
- package/node_modules/@allyhub-next/runtimes/dist/home.d.ts +2 -0
- package/node_modules/@allyhub-next/runtimes/dist/home.js +2 -0
- package/node_modules/@allyhub-next/runtimes/dist/index.d.ts +9 -0
- package/node_modules/@allyhub-next/runtimes/dist/index.js +2 -0
- package/node_modules/@allyhub-next/runtimes/dist/lock.d.ts +6 -0
- package/node_modules/@allyhub-next/runtimes/dist/lock.js +2 -0
- package/node_modules/@allyhub-next/runtimes/dist/manifest.d.ts +3 -0
- package/node_modules/@allyhub-next/runtimes/dist/manifest.js +2 -0
- package/node_modules/@allyhub-next/runtimes/dist/runtimes.d.ts +63 -0
- package/node_modules/@allyhub-next/runtimes/dist/runtimes.js +3 -0
- package/node_modules/@allyhub-next/runtimes/dist/unpack.d.ts +7 -0
- package/node_modules/@allyhub-next/runtimes/dist/unpack.js +2 -0
- package/node_modules/@allyhub-next/runtimes/manifest.json +395 -0
- package/node_modules/@allyhub-next/runtimes/package.json +14 -0
- package/node_modules/@allyhub-next/runtimes/schemas/runtimes.schema.json +153 -0
- package/node_modules/@allyhub-next/scenery/LICENSE +241 -0
- package/node_modules/@allyhub-next/scenery/NOTICE +42 -0
- package/node_modules/@allyhub-next/scenery/dist/aim.d.ts +55 -0
- package/node_modules/@allyhub-next/scenery/dist/aim.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/bake.d.ts +203 -0
- package/node_modules/@allyhub-next/scenery/dist/bake.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/camera.d.ts +150 -0
- package/node_modules/@allyhub-next/scenery/dist/camera.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/curve.d.ts +40 -0
- package/node_modules/@allyhub-next/scenery/dist/curve.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/define.d.ts +164 -0
- package/node_modules/@allyhub-next/scenery/dist/define.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/fit.d.ts +64 -0
- package/node_modules/@allyhub-next/scenery/dist/fit.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/glass.d.ts +34 -0
- package/node_modules/@allyhub-next/scenery/dist/glass.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/handheld.d.ts +184 -0
- package/node_modules/@allyhub-next/scenery/dist/handheld.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/hull.d.ts +23 -0
- package/node_modules/@allyhub-next/scenery/dist/hull.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/index.d.ts +22 -0
- package/node_modules/@allyhub-next/scenery/dist/index.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/lens.d.ts +48 -0
- package/node_modules/@allyhub-next/scenery/dist/lens.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/moire.d.ts +136 -0
- package/node_modules/@allyhub-next/scenery/dist/moire.js +93 -0
- package/node_modules/@allyhub-next/scenery/dist/motion.d.ts +48 -0
- package/node_modules/@allyhub-next/scenery/dist/motion.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/move.d.ts +260 -0
- package/node_modules/@allyhub-next/scenery/dist/move.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/noise.d.ts +41 -0
- package/node_modules/@allyhub-next/scenery/dist/noise.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/phone.d.ts +34 -0
- package/node_modules/@allyhub-next/scenery/dist/phone.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/report.d.ts +677 -0
- package/node_modules/@allyhub-next/scenery/dist/report.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/screen-focus.d.ts +55 -0
- package/node_modules/@allyhub-next/scenery/dist/screen-focus.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/screen.d.ts +71 -0
- package/node_modules/@allyhub-next/scenery/dist/screen.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/solve.d.ts +82 -0
- package/node_modules/@allyhub-next/scenery/dist/solve.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/timing.d.ts +26 -0
- package/node_modules/@allyhub-next/scenery/dist/timing.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/vec.d.ts +19 -0
- package/node_modules/@allyhub-next/scenery/dist/vec.js +2 -0
- package/node_modules/@allyhub-next/scenery/package.json +13 -0
- package/node_modules/@allyhub-next/video-core/LICENSE +241 -0
- package/node_modules/@allyhub-next/video-core/dist/anchors.d.ts +164 -0
- package/node_modules/@allyhub-next/video-core/dist/anchors.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/audio-types.d.ts +148 -0
- package/node_modules/@allyhub-next/video-core/dist/audio-types.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/backdrop.d.ts +87 -0
- package/node_modules/@allyhub-next/video-core/dist/backdrop.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/captions.d.ts +122 -0
- package/node_modules/@allyhub-next/video-core/dist/captions.js +11 -0
- package/node_modules/@allyhub-next/video-core/dist/console.d.ts +91 -0
- package/node_modules/@allyhub-next/video-core/dist/console.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/contrast.d.ts +98 -0
- package/node_modules/@allyhub-next/video-core/dist/contrast.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/cut-report.d.ts +77 -0
- package/node_modules/@allyhub-next/video-core/dist/cut-report.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/edit.d.ts +77 -0
- package/node_modules/@allyhub-next/video-core/dist/edit.js +13 -0
- package/node_modules/@allyhub-next/video-core/dist/edits.d.ts +163 -0
- package/node_modules/@allyhub-next/video-core/dist/edits.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/export.d.ts +96 -0
- package/node_modules/@allyhub-next/video-core/dist/export.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/fact.d.ts +965 -0
- package/node_modules/@allyhub-next/video-core/dist/fact.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/footage-motion.d.ts +168 -0
- package/node_modules/@allyhub-next/video-core/dist/footage-motion.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/formats.d.ts +240 -0
- package/node_modules/@allyhub-next/video-core/dist/formats.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/gen.d.ts +37 -0
- package/node_modules/@allyhub-next/video-core/dist/gen.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/index.d.ts +40 -0
- package/node_modules/@allyhub-next/video-core/dist/index.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/look.d.ts +66 -0
- package/node_modules/@allyhub-next/video-core/dist/look.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/marks.d.ts +34 -0
- package/node_modules/@allyhub-next/video-core/dist/marks.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/matrix.d.ts +289 -0
- package/node_modules/@allyhub-next/video-core/dist/matrix.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/measure.d.ts +465 -0
- package/node_modules/@allyhub-next/video-core/dist/measure.js +5 -0
- package/node_modules/@allyhub-next/video-core/dist/media.d.ts +226 -0
- package/node_modules/@allyhub-next/video-core/dist/media.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/messages.d.ts +88 -0
- package/node_modules/@allyhub-next/video-core/dist/messages.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/motion.d.ts +56 -0
- package/node_modules/@allyhub-next/video-core/dist/motion.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/music.d.ts +110 -0
- package/node_modules/@allyhub-next/video-core/dist/music.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/piece.d.ts +1146 -0
- package/node_modules/@allyhub-next/video-core/dist/piece.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/placement.d.ts +37 -0
- package/node_modules/@allyhub-next/video-core/dist/placement.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/problem.d.ts +262 -0
- package/node_modules/@allyhub-next/video-core/dist/problem.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/render-types.d.ts +49 -0
- package/node_modules/@allyhub-next/video-core/dist/render-types.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/schema.d.ts +352 -0
- package/node_modules/@allyhub-next/video-core/dist/schema.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/script-edit.d.ts +176 -0
- package/node_modules/@allyhub-next/video-core/dist/script-edit.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/script.d.ts +67 -0
- package/node_modules/@allyhub-next/video-core/dist/script.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/seams.d.ts +214 -0
- package/node_modules/@allyhub-next/video-core/dist/seams.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/slides.d.ts +37 -0
- package/node_modules/@allyhub-next/video-core/dist/slides.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/sound-under.d.ts +72 -0
- package/node_modules/@allyhub-next/video-core/dist/sound-under.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/speech.d.ts +83 -0
- package/node_modules/@allyhub-next/video-core/dist/speech.js +5 -0
- package/node_modules/@allyhub-next/video-core/dist/timeline.d.ts +616 -0
- package/node_modules/@allyhub-next/video-core/dist/timeline.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/timing.d.ts +88 -0
- package/node_modules/@allyhub-next/video-core/dist/timing.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/transcript.d.ts +288 -0
- package/node_modules/@allyhub-next/video-core/dist/transcript.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/transition.d.ts +289 -0
- package/node_modules/@allyhub-next/video-core/dist/transition.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/voice.d.ts +175 -0
- package/node_modules/@allyhub-next/video-core/dist/voice.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/words.d.ts +128 -0
- package/node_modules/@allyhub-next/video-core/dist/words.js +2 -0
- package/node_modules/@allyhub-next/video-core/package.json +14 -0
- package/package.json +52 -41
- package/README.md +0 -17
- package/dist/anim.d.ts.map +0 -1
- package/dist/anim.js.map +0 -1
- package/dist/define.d.ts.map +0 -1
- package/dist/define.js.map +0 -1
- package/dist/dom.d.ts.map +0 -1
- package/dist/dom.js.map +0 -1
- package/dist/fit.d.ts.map +0 -1
- package/dist/fit.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/media.d.ts.map +0 -1
- package/dist/media.js.map +0 -1
- package/dist/messages.d.ts.map +0 -1
- package/dist/messages.js.map +0 -1
- package/dist/noise.d.ts.map +0 -1
- package/dist/noise.js.map +0 -1
- package/dist/parts.d.ts.map +0 -1
- package/dist/parts.js.map +0 -1
- package/dist/paths.d.ts.map +0 -1
- package/dist/paths.js.map +0 -1
- package/dist/piece.d.ts.map +0 -1
- package/dist/piece.js.map +0 -1
- package/dist/props.d.ts.map +0 -1
- package/dist/props.js.map +0 -1
- package/dist/text.d.ts.map +0 -1
- package/dist/text.js.map +0 -1
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import type { CompressorOptions, DeesserOptions } from "./dynamics.js";
|
|
2
|
+
import type { FilterSpec } from "./filters.js";
|
|
3
|
+
import type { Pattern } from "./mic.js";
|
|
4
|
+
import type { NoiseShape } from "./noise.js";
|
|
5
|
+
import type { Vec3 } from "./vec.js";
|
|
6
|
+
/** The setups a voice can be recorded with, by name. */
|
|
7
|
+
export declare const VOICE_SETUPS: readonly ["studio", "phone", "lav"];
|
|
8
|
+
export type VoiceSetup = (typeof VOICE_SETUPS)[number];
|
|
9
|
+
/** The rooms, by name. */
|
|
10
|
+
export declare const ROOMS: readonly ["bedroom", "living-room", "office", "kitchen", "treated", "car", "outdoor"];
|
|
11
|
+
export type RoomName = (typeof ROOMS)[number];
|
|
12
|
+
/** The finishing chains, by name. */
|
|
13
|
+
export declare const POSTS: readonly ["finish", "phone-app"];
|
|
14
|
+
export type PostName = (typeof POSTS)[number];
|
|
15
|
+
/** A surface's absorption by octave band (125 Hz to 8 kHz), or a material's name. */
|
|
16
|
+
export type Surface = string | readonly number[];
|
|
17
|
+
/** A room: a box, its surfaces, and where the talker stands in it. */
|
|
18
|
+
export interface RoomOptions {
|
|
19
|
+
/** A named room whose values fill what is not given. */
|
|
20
|
+
preset?: RoomName;
|
|
21
|
+
/** Width, height and depth, m. */
|
|
22
|
+
size?: Vec3;
|
|
23
|
+
/** The walls', the floor's and the ceiling's absorption. */
|
|
24
|
+
walls?: Surface;
|
|
25
|
+
floor?: Surface;
|
|
26
|
+
ceiling?: Surface;
|
|
27
|
+
/**
|
|
28
|
+
* The reverberation time at 500 Hz–1 kHz, s: the surfaces' absorption
|
|
29
|
+
* is scaled until the room has it (Eyring), keeping their shape over
|
|
30
|
+
* the bands.
|
|
31
|
+
*/
|
|
32
|
+
rt60?: number;
|
|
33
|
+
/** The talker's mouth in the room, m from its corner (x across, y up, z along); they face +z. */
|
|
34
|
+
talker?: Vec3;
|
|
35
|
+
}
|
|
36
|
+
/** The room's own sound under the voice. */
|
|
37
|
+
export interface NoiseOptions extends Partial<NoiseShape> {
|
|
38
|
+
/** Its loudness under the voice's, LU. */
|
|
39
|
+
below?: number;
|
|
40
|
+
}
|
|
41
|
+
/** The finishing after the recording. */
|
|
42
|
+
export interface PostOptions {
|
|
43
|
+
/** A named chain whose values fill what is not given. */
|
|
44
|
+
preset?: PostName;
|
|
45
|
+
/** A high-pass, Hz; false: none. */
|
|
46
|
+
highpass?: number | false;
|
|
47
|
+
/** Equalizer bands, after the high-pass. */
|
|
48
|
+
eq?: readonly FilterSpec[];
|
|
49
|
+
/** A de-esser; its threshold is dB over the voice's loudness. */
|
|
50
|
+
deess?: Partial<DeesserOptions> | false;
|
|
51
|
+
/** A compressor; its threshold is dB over the voice's loudness. */
|
|
52
|
+
compress?: Partial<CompressorOptions> | false;
|
|
53
|
+
}
|
|
54
|
+
/** A phone's automatic gain: its target is dB over the voice's loudness. */
|
|
55
|
+
export interface AgcSettings {
|
|
56
|
+
target?: number;
|
|
57
|
+
most?: number;
|
|
58
|
+
attack?: number;
|
|
59
|
+
release?: number;
|
|
60
|
+
/** The speech's level it follows is over this many seconds. */
|
|
61
|
+
window?: number;
|
|
62
|
+
/** Under this (dB under the voice's loudness) the gain holds: a pause is not lifted. */
|
|
63
|
+
gate?: number;
|
|
64
|
+
}
|
|
65
|
+
/** `voice`: a setup's name, or one with changes; false: the voice as it is. */
|
|
66
|
+
export interface VoiceOptions {
|
|
67
|
+
/** The setup whose values fill what is not given; default studio. */
|
|
68
|
+
setup?: VoiceSetup;
|
|
69
|
+
/**
|
|
70
|
+
* What recorded the dry voice already: its microphone's pattern and its
|
|
71
|
+
* distance (a TTS voice: a studio's cardioid 0.2 m away). Proximity is
|
|
72
|
+
* what this setup adds over that one's.
|
|
73
|
+
*/
|
|
74
|
+
source?: {
|
|
75
|
+
pattern?: Pattern;
|
|
76
|
+
distance?: number;
|
|
77
|
+
};
|
|
78
|
+
/** The microphone's pattern. */
|
|
79
|
+
pattern?: Pattern;
|
|
80
|
+
/** Mouth to microphone, m. */
|
|
81
|
+
distance?: number;
|
|
82
|
+
/** How far the microphone is round from where the talker faces, degrees. */
|
|
83
|
+
angle?: number;
|
|
84
|
+
/** How far below the mouth it is, degrees. */
|
|
85
|
+
below?: number;
|
|
86
|
+
/** The microphone's own response: [Hz, dB] points, linear in log frequency. */
|
|
87
|
+
response?: readonly (readonly [number, number])[];
|
|
88
|
+
/** The band it records, Hz: under the first and over the second it falls away. */
|
|
89
|
+
band?: readonly [number, number];
|
|
90
|
+
/** Two microphones this far apart, m (a phone's), each its own room; false: one. */
|
|
91
|
+
stereo?: number | false;
|
|
92
|
+
/** The room; false: none (as a studio's dry voice). */
|
|
93
|
+
room?: RoomName | RoomOptions | false;
|
|
94
|
+
/** The room's own sound; false: none. */
|
|
95
|
+
noise?: NoiseOptions | false;
|
|
96
|
+
/** The device's automatic gain; false: none. */
|
|
97
|
+
agc?: AgcSettings | false;
|
|
98
|
+
/** The finishing; false: none. */
|
|
99
|
+
post?: PostName | PostOptions | false;
|
|
100
|
+
/**
|
|
101
|
+
* More microphones that heard the same voice, mixed in at `gain` dB (a
|
|
102
|
+
* phone left recording beside a desk microphone). The finishing is the
|
|
103
|
+
* first's, on the sum.
|
|
104
|
+
*/
|
|
105
|
+
also?: readonly (Omit<VoiceOptions, "also" | "post"> & {
|
|
106
|
+
gain?: number;
|
|
107
|
+
})[];
|
|
108
|
+
}
|
|
109
|
+
/** What a piece or a part says: a setup, its changes, or false. */
|
|
110
|
+
export type VoiceSetting = VoiceSetup | VoiceOptions | false;
|
|
111
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type SoundOf } from "./decode.js";
|
|
2
|
+
import type { MixPlan, SfxPlay, Stereo } from "./plan.js";
|
|
3
|
+
/**
|
|
4
|
+
* A sound effect's samples as it plays: its file's (or the built-in
|
|
5
|
+
* sound's), shaped and levelled. A shaped file sits at the mix's sfx
|
|
6
|
+
* level by its loudness as shaped; a shaped built-in sound keeps the
|
|
7
|
+
* level it had.
|
|
8
|
+
*/
|
|
9
|
+
export declare function playSfx(x: SfxPlay, src: Stereo, rate: number): {
|
|
10
|
+
src: Stereo;
|
|
11
|
+
gainDb: number;
|
|
12
|
+
};
|
|
13
|
+
export interface RenderOptions {
|
|
14
|
+
/** The speech alone, as recorded, for measuring it. */
|
|
15
|
+
only?: "voice";
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Renders a plan to a stereo mix at `rate`, before mastering: each
|
|
19
|
+
* recording group's speech summed and recorded through its setting, then
|
|
20
|
+
* turned by the parts' speech gains; speech played as it is and footage
|
|
21
|
+
* sound, each a stretch of its file at its place with 10 ms fades at each
|
|
22
|
+
* cut; the music as the film plays it; the sound effects. A file `sound`
|
|
23
|
+
* does not have is left out.
|
|
24
|
+
*/
|
|
25
|
+
export declare function renderMix(plan: MixPlan, sound: SoundOf, rate: number, o?: RenderOptions): Stereo;
|
|
26
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
|
|
2
|
+
import{clipSource as x}from"./decode.js";import{equalPower as z,gainAt as A}from"./envelope.js";import{playMusic as B}from"./music.js";import{shapes as C,shapeSound as H,soundLevel as q}from"./shape.js";import{synthSfx as J}from"./sfx.js";import{playVoice as K,voiceGroups as N}from"./voice.js";function Q(o,r,n){if(r.length===0)return;const s=o[0].length;for(let i=0;i<s;i++){const t=10**(A(r,i/n)/20);t!==1&&(o[0][i]=(o[0][i]??0)*t,o[1][i]=(o[1][i]??0)*t)}}function E(o,r,n,s,i,t){const m=Math.round(n.dur*s),y=Math.round(n.at*s),v=10**(n.gainDb/20),p=Math.min(Math.round(.01*s),Math.floor(m/4)),e=l=>l===void 0||l<=0?0:Math.min(Math.round(l*s),Math.floor(m/2)),f=e(n.fadeIn),a=e(n.fadeOut),c=(l,g)=>g>0?z(l/g):p>0&&l<p?l/p:1,u=[...n.envelope??[]],b=o[0].length,h=r[0].length,d=i===void 0?n.speed??1:1,S=i===void 0?n.from*s:n.from/i*s;for(let l=0;l<m;l++){const g=y+l;if(g<0||g>=b)continue;const F=d===1?Math.round(S)+l:S+l*d,M=Math.floor(F);if(M<0||M>=h)continue;const I=F-M,O=Math.min(M+1,h-1),w=g/s,V=u.length>0||t.length>0?10**((A(u,w)+A(t,w))/20):1,j=v*V*c(l,f)*c(m-1-l,a);for(let D=0;D<2;D++){const G=r[D]??r[0],L=G[M]??0,k=G[O]??0,P=o[D]??o[0];P[g]=(P[g]??0)+(L+(k-L)*I)*j}}}export function playSfx(o,r,n){if(!o.shape||!(C(o.shape)||o.shape.filter!==void 0))return{src:r,gainDb:o.gainDb};const s=q(r,n)?.lufs,i=[Float32Array.from(r[0]),Float32Array.from(r[1])];H(i,o.shape,n,0);const t=q(i,n)?.lufs;return t===void 0?{src:i,gainDb:o.gainDb}:o.level?{src:i,gainDb:o.level.target-t+o.level.gainDb}:{src:i,gainDb:o.gainDb+(s===void 0?0:s-t)}}function R(o,r,n){const s=J(o,r,n);return[s,s]}export function renderMix(o,r,n,s={}){const i=Math.round(o.duration*n),t=[new Float32Array(i),new Float32Array(i)],m=o.speechGain??[],y=x(r),{groups:v,dry:p}=N(o);for(const e of v){const[f,a]=K(e,o.duration,n,y);Q([f,a],m,n);for(let c=0;c<i;c++)t[0][c]=(t[0][c]??0)+(f[c]??0),t[1][c]=(t[1][c]??0)+(a[c]??0)}for(const e of p){const f=y(e);f&&E(t,f.src,e,n,f.stretched,m)}if(s.only==="voice")return t;for(const e of o.footage){const f=r(e.file,{});f&&E(t,f.src,e,n,void 0,[])}if(o.music){const e=o.music,f=r(e.file,e.shape?.filter?{filter:e.shape.filter}:{});if(f){const[a,c]=B(e,f.src,o.duration,n);for(let u=0;u<i;u++)t[0][u]=(t[0][u]??0)+(a[u]??0),t[1][u]=(t[1][u]??0)+(c[u]??0)}}for(const e of o.sfx){let f;if(e.file!==void 0?f=r(e.file,e.shape?.filter?{filter:e.shape.filter}:{})?.src:f=R(e.sound,n,e.seed),!f)continue;const a=playSfx(e,f,n),c=10**(a.gainDb/20),u=Math.round(e.at*n),b=a.src[0].length;for(let h=0;h<b;h++){const d=u+h;d<0||d>=i||(t[0][d]=(t[0][d]??0)+(a.src[0][h]??0)*c,t[1][d]=(t[1][d]??0)+(a.src[1][h]??0)*c)}}return t}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Where the transient of each built-in sound is, so it lands on the cue. */
|
|
2
|
+
export declare const SFX_HIT: Record<string, number>;
|
|
3
|
+
/** FNV-1a: a stable 32-bit seed from text. */
|
|
4
|
+
export declare function hashSeed(text: string): number;
|
|
5
|
+
/**
|
|
6
|
+
* A built-in sound as mono samples at `rate`, peak about −14 dBFS (so the
|
|
7
|
+
* sum stays under the voice). Deterministic for a seed.
|
|
8
|
+
*/
|
|
9
|
+
export declare function synthSfx(sound: string, rate: number, seed: number): Float32Array<ArrayBuffer>;
|
|
10
|
+
//# sourceMappingURL=sfx.d.ts.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
|
|
2
|
+
export const SFX_HIT={whoosh:.18,tick:.004,pop:.01};export function hashSeed(o){let n=2166136261;for(let t=0;t<o.length;t++)n^=o.charCodeAt(t),n=Math.imul(n,16777619)>>>0;return n}function v(o){let n=o>>>0;return()=>{n=n+1831565813>>>0;let t=n;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}}export function synthSfx(o,n,t){const r=v(t),p=()=>r()*2-1,u=.2;if(o==="tick"){const e=Math.round(n*.06),h=new Float32Array(e);for(let s=0;s<e;s++){const c=s/n,a=Math.exp(-c*90);h[s]=(Math.sin(2*Math.PI*3200*c)*.8+p()*.2)*a}return f(h,u*.7)}if(o==="pop"){const e=Math.round(n*.12),h=new Float32Array(e);let s=0;for(let c=0;c<e;c++){const a=c/n,M=300+600*Math.exp(-a*40);s+=2*Math.PI*M/n;const g=Math.min(1,a/.002)*Math.exp(-a*35);h[c]=Math.sin(s)*g}return f(h,u)}const d=.55,x=Math.round(n*d),m=new Float32Array(x),i=SFX_HIT.whoosh??.18;let w=0,l=0;for(let e=0;e<x;e++){const h=e/n,s=400+2600*Math.exp(-(((h-i)/.12)**2)),c=2*Math.sin(Math.PI*s/n),a=p()-w-.7*l;l+=c*a,w+=c*l;const M=h<i?(h/i)**2:Math.exp(-((h-i)/(d-i))*4);m[e]=l*M}return f(m,u)}function f(o,n){let t=0;for(const r of o)t=Math.max(t,Math.abs(r));if(t>0)for(let r=0;r<o.length;r++)o[r]=(o[r]??0)/t*n;return o}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { type FilterSpec } from "./recording/filters.js";
|
|
2
|
+
/** The kinds of band an equalizer has, as the cookbook names them. */
|
|
3
|
+
export declare const BAND_TYPES: readonly ["highpass", "lowpass", "bandpass", "peak", "lowshelf", "highshelf"];
|
|
4
|
+
export type BandType = (typeof BAND_TYPES)[number];
|
|
5
|
+
/**
|
|
6
|
+
* A band's values from a moment of the film on: `at` is the moment (the
|
|
7
|
+
* music's own reference: film seconds, an anchor, a part or a word in a
|
|
8
|
+
* part), and what it leaves out is the band's own value.
|
|
9
|
+
*/
|
|
10
|
+
export interface BandKey<T = SoundMoment> {
|
|
11
|
+
at: T;
|
|
12
|
+
hz?: number;
|
|
13
|
+
db?: number;
|
|
14
|
+
q?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* One band of an equalizer: a pass (`highpass`, `lowpass`, `bandpass`,
|
|
18
|
+
* with its `q`, default a Butterworth's 0.707), a `peak` (`db` at `hz`,
|
|
19
|
+
* `q` default 1) or a shelf (`lowshelf`, `highshelf`: `db` under or over
|
|
20
|
+
* `hz`, `q` the shelf's slope, default 1). `keys` move its values over
|
|
21
|
+
* the film's clock (music only).
|
|
22
|
+
*/
|
|
23
|
+
export interface EqBand<T = SoundMoment> {
|
|
24
|
+
type: BandType;
|
|
25
|
+
hz: number;
|
|
26
|
+
db?: number;
|
|
27
|
+
q?: number;
|
|
28
|
+
keys?: BandKey<T>[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* A compressor: from `threshold` dB over the stem's loudness (its
|
|
32
|
+
* integrated loudness as shaped so far: 0 is at it, -6 six dB under), the
|
|
33
|
+
* level over it is divided by `ratio`.
|
|
34
|
+
*/
|
|
35
|
+
export interface SoundCompressor {
|
|
36
|
+
threshold: number;
|
|
37
|
+
/** Input dB over the threshold per output dB; default 2. */
|
|
38
|
+
ratio?: number;
|
|
39
|
+
/** The knee's width, dB; default 6. */
|
|
40
|
+
knee?: number;
|
|
41
|
+
/** Seconds to go down, and to come back up; defaults 0.01 and 0.15. */
|
|
42
|
+
attack?: number;
|
|
43
|
+
release?: number;
|
|
44
|
+
/** The detector's window, seconds (0: the peak); default 0.01. */
|
|
45
|
+
window?: number;
|
|
46
|
+
}
|
|
47
|
+
/** A compressor's defaults: a gentle glue on a whole stem. */
|
|
48
|
+
export declare const COMPRESS_DEFAULTS: {
|
|
49
|
+
readonly ratio: 2;
|
|
50
|
+
readonly knee: 6;
|
|
51
|
+
readonly attack: 0.01;
|
|
52
|
+
readonly release: 0.15;
|
|
53
|
+
readonly window: 0.01;
|
|
54
|
+
};
|
|
55
|
+
/** How a stem is shaped (`music: { filter, eq, compress }`, a sound's own). */
|
|
56
|
+
export interface SoundShape<T = SoundMoment> {
|
|
57
|
+
/**
|
|
58
|
+
* An ffmpeg audio filter chain run on the file as it is decoded, on the
|
|
59
|
+
* file's own clock ("acompressor=ratio=3,deesser"): one chain, nothing
|
|
60
|
+
* that reads files, makes sound of its own or changes the timing.
|
|
61
|
+
*/
|
|
62
|
+
filter?: string;
|
|
63
|
+
/** Equalizer bands, in order. */
|
|
64
|
+
eq?: EqBand<T>[];
|
|
65
|
+
/** A compressor after the bands. */
|
|
66
|
+
compress?: SoundCompressor;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* A moment of the film a video-level option names: film seconds, an
|
|
70
|
+
* anchor of any part ("@drop", "@drop+0.2", "@/drop") or a part's key
|
|
71
|
+
* (its start), or a word reference in a part (`{ part, at }`: `at` as a
|
|
72
|
+
* layer's at, from that part's start).
|
|
73
|
+
*/
|
|
74
|
+
export type SoundMoment = number | string | {
|
|
75
|
+
part: string;
|
|
76
|
+
at: number | string;
|
|
77
|
+
};
|
|
78
|
+
/** A shape whose bands do not move (a sound effect's). */
|
|
79
|
+
export type FixedShape = Omit<SoundShape, "eq"> & {
|
|
80
|
+
eq?: Omit<EqBand, "keys">[];
|
|
81
|
+
};
|
|
82
|
+
/** A shape resolved for the mix: its keys at film seconds. */
|
|
83
|
+
export type ResolvedShape = SoundShape<number>;
|
|
84
|
+
/**
|
|
85
|
+
* Why a sound's filter chain cannot be used, or undefined when it can: one
|
|
86
|
+
* linear chain of audio filters, none that reads or names files, listens,
|
|
87
|
+
* loads plugins, makes sound of its own (a random source would differ from
|
|
88
|
+
* render to render) or changes the timing (the music's beat and the
|
|
89
|
+
* film's clock would part).
|
|
90
|
+
*/
|
|
91
|
+
export declare function soundFilterProblem(chain: string): string | undefined;
|
|
92
|
+
/**
|
|
93
|
+
* What is wrong with a shape, or nothing. `keyed`: its bands may move
|
|
94
|
+
* over time (the music's; a sound effect's are fixed).
|
|
95
|
+
*/
|
|
96
|
+
export declare function shapeProblem(shape: unknown, keyed?: boolean): string | undefined;
|
|
97
|
+
/** A band's values at film time t: its own, moved by its keys (frequency on a log scale). */
|
|
98
|
+
export declare function bandAt(band: EqBand<number>, t: number): FilterSpec;
|
|
99
|
+
/**
|
|
100
|
+
* Shapes a sound's channels in place with its bands and compressor (its
|
|
101
|
+
* `filter` was run when it was decoded). `start` is the film second of
|
|
102
|
+
* the first sample, for bands that move. Deterministic: the same samples
|
|
103
|
+
* every time, here and in the player.
|
|
104
|
+
*/
|
|
105
|
+
export declare function shapeSound(channels: readonly Float32Array[], shape: ResolvedShape | undefined, rate: number, start?: number): void;
|
|
106
|
+
/**
|
|
107
|
+
* How loud a sound is, LUFS, and how it was measured: its integrated
|
|
108
|
+
* loudness (BS.1770, gated), or, where that cannot be measured (shorter
|
|
109
|
+
* than one 0.4 s block, or all under the gate), its K-weighted level over
|
|
110
|
+
* its whole length ("level"). Undefined for digital silence.
|
|
111
|
+
*/
|
|
112
|
+
export declare function soundLevel(channels: readonly Float32Array[], rate: number): {
|
|
113
|
+
lufs: number;
|
|
114
|
+
by: "integrated" | "level";
|
|
115
|
+
} | undefined;
|
|
116
|
+
/** Whether a shape does anything in JavaScript (bands or a compressor). */
|
|
117
|
+
export declare const shapes: (s: SoundShape<unknown> | undefined) => boolean;
|
|
118
|
+
//# sourceMappingURL=shape.d.ts.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
|
|
2
|
+
import{compress as z}from"./recording/dynamics.js";import{biquad as k,runBiquads as $}from"./recording/filters.js";import{integratedLoudness as v,steadyLoudness as S}from"./recording/loudness.js";export const BAND_TYPES=["highpass","lowpass","bandpass","peak","lowshelf","highshelf"],COMPRESS_DEFAULTS={ratio:2,knee:6,attack:.01,release:.15,window:.01};const j={movie:"reads files",amovie:"reads files",sendcmd:"reads files",asendcmd:"reads files",zmq:"listens on the network",azmq:"listens on the network",ladspa:"loads plugins",lv2:"loads plugins",lrc:"reads files",arnndn:"reads files (its model)",sofalizer:"reads files",afir:"takes a second input",amix:"takes several inputs",amerge:"takes several inputs",join:"takes several inputs",asplit:"makes several outputs",anoisesrc:"makes sound of its own",aevalsrc:"makes sound of its own",sine:"makes sound of its own",atempo:"changes the timing (a take's speed is take().speed())",asetrate:"changes the timing",asetpts:"changes the timing",atrim:"changes the timing (play stretches with music.play)",areverse:"changes the timing",aloop:"changes the timing (loop with music.loop)",apad:"changes the timing",adelay:"changes the timing",apulsator:"changes the timing",silenceremove:"changes the timing",loudnorm:"rides the level over time with a window of its own (level the stem with mix, compress with compress)"};export function soundFilterProblem(e){if(typeof e!="string"||e.trim()==="")return'A filter is an ffmpeg audio filter chain, such as "highpass=f=80,acompressor=ratio=3"';const i=e.replace(/'[^']*'/g,"''").replace(/\\./g,"");if(/[;[\]]/.test(i))return"A sound's filter is one chain of filters separated by commas: no ; and no [labels]";for(const t of i.split(",")){const o=/^\s*([A-Za-z0-9_]+)/.exec(t)?.[1];if(!o)return`"${t.trim()}" is not a filter`;const n=j[o.toLowerCase()];if(n)return`The filter ${o} cannot be used on a sound: it ${n}`}if(/(?:^|[:=@])\s*\w*file(?:name)?\s*=/i.test(i))return"A sound's filter cannot name files (…file= options)"}const A=e=>typeof e=="number"&&Number.isFinite(e)||typeof e=="string"&&e.trim()!==""||typeof e=="object"&&e!==null&&typeof e.part=="string"&&(typeof e.at=="number"||typeof e.at=="string"),p=(e,i,t)=>typeof e=="number"&&Number.isFinite(e)&&e>=i&&e<=t;function x(e,i){if(typeof e!="object"||e===null)return"a band is { type, hz, db?, q? }";const t=e,o=Object.keys(t).filter(r=>!["type","hz","db","q","keys"].includes(r));if(o.length>0)return`a band has no ${o.join(", ")}`;if(!BAND_TYPES.includes(t.type))return`a band's type is one of ${BAND_TYPES.join(", ")}, not ${JSON.stringify(t.type)}`;const n=(r,l)=>{if(r.hz!==void 0&&!p(r.hz,10,24e3))return`${l}hz is a frequency from 10 to 24000 Hz, not ${JSON.stringify(r.hz)}`;if(r.db!==void 0&&!p(r.db,-60,24))return`${l}db is dB from -60 to 24, not ${JSON.stringify(r.db)}`;if(r.q!==void 0&&!p(r.q,.05,40))return`${l}q is from 0.05 to 40, not ${JSON.stringify(r.q)}`};if(t.hz===void 0)return"a band has a frequency, hz";const a=n(t,"");if(a)return a;const s=t.type;if((s==="peak"||s==="lowshelf"||s==="highshelf")&&t.db===void 0)return`a ${s} band has its gain, db`;const f=t.keys;if(f!==void 0){if(!i)return"only the music's bands move over time (keys)";if(!Array.isArray(f)||f.length===0)return"keys is a list of { at, hz?, db?, q? }";for(const[r,l]of f.entries()){if(typeof l!="object"||l===null)return`keys[${String(r)}] is { at, hz?, db?, q? }`;const c=l,h=Object.keys(c).filter(u=>!["at","hz","db","q"].includes(u));if(h.length>0)return`keys[${String(r)}] has no ${h.join(", ")}`;if(!A(c.at))return`keys[${String(r)}].at is a moment: film seconds, an anchor ("@drop"), a part's key, or { part, at }`;const d=n(c,`keys[${String(r)}].`);if(d)return d}}}export function shapeProblem(e,i=!1){if(typeof e!="object"||e===null||Array.isArray(e))return"a shape is { filter?, eq?, compress? }";const t=e;if(t.filter!==void 0){const n=soundFilterProblem(t.filter);if(n)return n}if(t.eq!==void 0){if(!Array.isArray(t.eq))return"eq is a list of bands, { type, hz, db?, q? }";for(const[n,a]of t.eq.entries()){const s=x(a,i);if(s)return`eq[${String(n)}]: ${s}`}}const o=t.compress;if(o!==void 0){if(typeof o!="object"||o===null)return"compress is { threshold, ratio?, knee?, attack?, release?, window? }";const n=o,a=Object.keys(n).filter(s=>!["threshold","ratio","knee","attack","release","window"].includes(s));if(a.length>0)return`compress has no ${a.join(", ")}`;if(!p(n.threshold,-60,24))return"compress.threshold is dB over the stem's loudness, from -60 to 24";if(n.ratio!==void 0&&!p(n.ratio,1,100))return"compress.ratio is from 1 to 100";if(n.knee!==void 0&&!p(n.knee,0,40))return"compress.knee is dB from 0 to 40";for(const s of["attack","release","window"])if(n[s]!==void 0&&!p(n[s],0,10))return`compress.${s} is seconds from 0 to 10`}}export function bandAt(e,i){const t=e.keys??[];let o=e.hz,n=e.db??0,a=e.q;if(t.length>0){const s=[...t].sort((d,u)=>d.at-u.at),f=(d,u)=>d[u]??(u==="hz"?e.hz:u==="db"?e.db??0:e.q),r=s[0],l=s.at(-1);let c=r,h=r;if(r&&i<=r.at)c=r,h=r;else if(l&&i>=l.at)c=l,h=l;else for(let d=1;d<s.length;d++){const u=s[d];if(u&&i<u.at){c=s[d-1],h=u;break}}if(c&&h){const d=h.at===c.at?1:(i-c.at)/(h.at-c.at),u=f(c,"hz")??e.hz,y=f(h,"hz")??e.hz;o=u===y||d<=0?u:d>=1?y:Math.exp(Math.log(u)+(Math.log(y)-Math.log(u))*d);const b=f(c,"db")??0,q=f(h,"db")??0;n=b+(q-b)*d;const m=f(c,"q"),g=f(h,"q");a=m===void 0||g===void 0?m??g:m+(g-m)*d}}switch(e.type){case"peak":return{type:"peak",hz:o,db:n,...a===void 0?{}:{q:a}};case"lowshelf":case"highshelf":return{type:e.type,hz:o,db:n,...a===void 0?{}:{slope:a}};default:return{type:e.type,hz:o,...a===void 0?{}:{q:a}}}}const w=32;function O(e,i,t,o){if(!i.keys||i.keys.length===0){$(e,[k(bandAt(i,0),t)]);return}let n=0,a=0,s=k(bandAt(i,o),t);for(let f=0;f<e.length;f++){f%w===0&&(s=k(bandAt(i,o+(f+w/2)/t),t));const r=e[f]??0,l=s.b0*r+n;n=s.b1*r-s.a1*l+a,a=s.b2*r-s.a2*l,e[f]=l}}export function shapeSound(e,i,t,o=0){if(!i)return;for(const a of i.eq??[])for(const s of e)O(s,a,t,o);const n=i.compress;if(n){const a=soundLevel(e,t)?.lufs;if(a===void 0)return;const s={threshold:a+n.threshold,ratio:n.ratio??COMPRESS_DEFAULTS.ratio,knee:n.knee??COMPRESS_DEFAULTS.knee,attack:n.attack??COMPRESS_DEFAULTS.attack,release:n.release??COMPRESS_DEFAULTS.release,window:n.window??COMPRESS_DEFAULTS.window};z(e,s,t)}}export function soundLevel(e,i){const t=v(e,i);if(t!==void 0&&t>-70)return{lufs:t,by:"integrated"};const o=S(e,i);return o===void 0?void 0:{lufs:o,by:"level"}}export const shapes=e=>(e?.eq?.length??0)>0||e?.compress!==void 0;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { MixPlan, SpeechClip, Stereo } from "./plan.js";
|
|
2
|
+
import { type ResolvedVoice, type VoiceSpan } from "./recording/chain.js";
|
|
3
|
+
/** Speech recorded alike: its clips, where its parts play, and its seed. */
|
|
4
|
+
export interface VoiceGroup {
|
|
5
|
+
voice: ResolvedVoice;
|
|
6
|
+
clips: SpeechClip[];
|
|
7
|
+
spans: VoiceSpan[];
|
|
8
|
+
/** The parts recorded so, in film order. */
|
|
9
|
+
parts: string[];
|
|
10
|
+
seed: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The plan's speech by how it was recorded (the part's own setting, else
|
|
14
|
+
* the video's): one group per setting, and the clips played as they are
|
|
15
|
+
* (a setting of false, or a plan without one).
|
|
16
|
+
*/
|
|
17
|
+
export declare function voiceGroups(plan: MixPlan): {
|
|
18
|
+
groups: VoiceGroup[];
|
|
19
|
+
dry: SpeechClip[];
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* A clip's source: its two channels, and the speed it was already made at
|
|
23
|
+
* (its second s at s / speed), when it was.
|
|
24
|
+
*/
|
|
25
|
+
export interface ClipSource {
|
|
26
|
+
src: Stereo;
|
|
27
|
+
stretched?: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Adds a speech clip into a voice's two channels at `rate`, as the mix
|
|
31
|
+
* places it: its stretch of the file at its place and gain, faded 10 ms at
|
|
32
|
+
* each cut or over the plan's equal-power cross-fade. `stretched` is the
|
|
33
|
+
* speed the source was already made at (its second s at s / speed); else
|
|
34
|
+
* a clip with a speed is resampled from the source as recorded.
|
|
35
|
+
*/
|
|
36
|
+
export declare function addSpeech(bus: Stereo, src: Stereo, c: SpeechClip, rate: number, stretched?: number): void;
|
|
37
|
+
/** Speech clips summed as the mix places them, before any recording. */
|
|
38
|
+
export declare function sumSpeech(clips: readonly SpeechClip[], duration: number, rate: number, sourceOf: (c: SpeechClip) => ClipSource | undefined): Stereo;
|
|
39
|
+
/**
|
|
40
|
+
* A voice group's sound: its clips summed (each from `sourceOf`, with the
|
|
41
|
+
* speed it was made at, or undefined to leave it out), then played
|
|
42
|
+
* through its setting. What the render's mix and the player both add.
|
|
43
|
+
*/
|
|
44
|
+
export declare function playVoice(g: VoiceGroup, duration: number, rate: number, sourceOf: (c: SpeechClip) => ClipSource | undefined): Stereo;
|
|
45
|
+
//# sourceMappingURL=voice.d.ts.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
|
|
2
|
+
import{equalPower as q}from"./envelope.js";import{recordVoice as D}from"./recording/chain.js";import{hashSeed as G}from"./sfx.js";export function voiceGroups(e){const c=e.voice;if(!c)return{groups:[],dry:[...e.speech]};const n=o=>(o===void 0?void 0:c.parts?.[o])??c.video,r=new Map,f=[],u=o=>{const t=JSON.stringify(o);let i=r.get(t);return i||(i={voice:o,clips:[],spans:[],parts:[],seed:G(`${c.seed}:voice:${t}`)},r.set(t,i)),i};for(const o of e.speech){const t=n(o.part);t===!1?f.push(o):u(t).clips.push(o)}for(const o of c.spans){const t=n(o.part);if(t===!1)continue;const i=u(t);i.spans.push({start:o.start,end:o.end}),i.parts.push(o.part)}return{groups:[...r.values()],dry:f}}export function addSpeech(e,c,n,r,f){const u=Math.round(n.dur*r),o=Math.round(n.at*r),t=10**(n.gainDb/20),i=Math.min(Math.round(.01*r),Math.floor(u/4)),h=s=>s===void 0||s<=0?0:Math.min(Math.round(s*r),Math.floor(u/2)),O=h(n.fadeIn),S=h(n.fadeOut),l=(s,a)=>a>0?q(s/a):i>0&&s<i?s/i:1,b=e[0].length,m=c[0].length,M=f===void 0?n.speed??1:1,g=f===void 0?n.from*r:n.from/f*r;for(let s=0;s<u;s++){const a=o+s;if(a<0||a>=b)continue;const v=M===1?Math.round(g)+s:g+s*M,p=Math.floor(v);if(p<0||p>=m)continue;const A=v-p,F=Math.min(p+1,m-1),V=t*l(s,O)*l(u-1-s,S);for(let d=0;d<2;d++){const y=c[d]??c[0],w=y[p]??0,$=y[F]??0,x=e[d]??e[0];x[a]=(x[a]??0)+(w+($-w)*A)*V}}}export function sumSpeech(e,c,n,r){const f=Math.round(c*n),u=[new Float32Array(f),new Float32Array(f)];for(const o of e){const t=r(o);t&&addSpeech(u,t.src,o,n,t.stretched)}return u}export function playVoice(e,c,n,r){const f=sumSpeech(e.clips,c,n,r);return D(f,e.voice,n,e.seed,e.spans),f}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@allyhub-next/audio",
|
|
3
|
+
"version": "0.2.0-next.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": {
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"default": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"./node": {
|
|
11
|
+
"types": "./dist/node/index.d.ts",
|
|
12
|
+
"default": "./dist/node/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"private": true,
|
|
16
|
+
"license": "SEE LICENSE IN LICENSE.md"
|
|
17
|
+
}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
AllyHub Software License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 AllyHub, Inc. ("AllyHub"). All rights reserved.
|
|
4
|
+
|
|
5
|
+
This software (the AllyHub command-line tool, its SDK, runtime and the
|
|
6
|
+
packages they depend on) is proprietary. It is not open source.
|
|
7
|
+
|
|
8
|
+
1. Permitted use. You may install and run the software, unmodified, to make,
|
|
9
|
+
check, preview and render videos and decks, including for commercial
|
|
10
|
+
purposes. What you make with it is yours.
|
|
11
|
+
|
|
12
|
+
2. Restrictions. Except as this license permits or applicable law requires,
|
|
13
|
+
you may not copy, modify, adapt, translate, sublicense, sell, rent, lease,
|
|
14
|
+
publish or otherwise distribute the software, create derivative works of
|
|
15
|
+
it, or reverse engineer, decompile or disassemble it.
|
|
16
|
+
|
|
17
|
+
3. Cloud services. AllyHub's cloud tools (sign-in, research, images, voice,
|
|
18
|
+
video) are separate services governed by AllyHub's terms of service.
|
|
19
|
+
|
|
20
|
+
4. Trademarks. This license grants no right to use the name "AllyHub" or its
|
|
21
|
+
logos.
|
|
22
|
+
|
|
23
|
+
5. No warranty. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
|
|
24
|
+
KIND, EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY,
|
|
25
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
|
26
|
+
ALLYHUB BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY ARISING FROM,
|
|
27
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR ITS USE.
|
|
28
|
+
|
|
29
|
+
6. Third-party code. Parts of the software are adapted from HyperFrames,
|
|
30
|
+
licensed under the Apache License, Version 2.0 (see NOTICE). Those parts
|
|
31
|
+
remain under that license, reproduced below, and nothing in this license
|
|
32
|
+
limits your rights under it.
|
|
33
|
+
|
|
34
|
+
7. Starter components. The starter components in the "components" folder,
|
|
35
|
+
which "allyhub add" copies into your workspace, are licensed under the MIT
|
|
36
|
+
License (see components/LICENSE): once copied, you may change, use and
|
|
37
|
+
share them freely.
|
|
38
|
+
|
|
39
|
+
--------------------------------------------------------------------------------
|
|
40
|
+
|
|
41
|
+
Apache License
|
|
42
|
+
Version 2.0, January 2004
|
|
43
|
+
http://www.apache.org/licenses/
|
|
44
|
+
|
|
45
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
46
|
+
|
|
47
|
+
1. Definitions.
|
|
48
|
+
|
|
49
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
50
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
51
|
+
|
|
52
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
53
|
+
the copyright owner that is granting the License.
|
|
54
|
+
|
|
55
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
56
|
+
other entities that control, are controlled by, or are under common
|
|
57
|
+
control with that entity. For the purposes of this definition,
|
|
58
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
59
|
+
direction or management of such entity, whether by contract or
|
|
60
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
61
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
62
|
+
|
|
63
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
64
|
+
exercising permissions granted by this License.
|
|
65
|
+
|
|
66
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
67
|
+
including but not limited to software source code, documentation
|
|
68
|
+
source, and configuration files.
|
|
69
|
+
|
|
70
|
+
"Object" form shall mean any form resulting from mechanical
|
|
71
|
+
transformation or translation of a Source form, including but
|
|
72
|
+
not limited to compiled object code, generated documentation,
|
|
73
|
+
and conversions to other media types.
|
|
74
|
+
|
|
75
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
76
|
+
Object form, made available under the License, as indicated by a
|
|
77
|
+
copyright notice that is included in or attached to the work
|
|
78
|
+
(an example is provided in the Appendix below).
|
|
79
|
+
|
|
80
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
81
|
+
form, that is based on (or derived from) the Work and for which the
|
|
82
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
83
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
84
|
+
of this License, Derivative Works shall not include works that remain
|
|
85
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
86
|
+
the Work and Derivative Works thereof.
|
|
87
|
+
|
|
88
|
+
"Contribution" shall mean any work of authorship, including
|
|
89
|
+
the original version of the Work and any modifications or additions
|
|
90
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
91
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
92
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
93
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
94
|
+
means any form of electronic, verbal, or written communication sent
|
|
95
|
+
to the Licensor or its representatives, including but not limited to
|
|
96
|
+
communication on electronic mailing lists, source code control systems,
|
|
97
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
98
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
99
|
+
excluding communication that is conspicuously marked or otherwise
|
|
100
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
101
|
+
|
|
102
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
103
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
104
|
+
subsequently incorporated within the Work.
|
|
105
|
+
|
|
106
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
107
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
108
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
109
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
110
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
111
|
+
Work and such Derivative Works in Source or Object form.
|
|
112
|
+
|
|
113
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
114
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
115
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
116
|
+
(except as stated in this section) patent license to make, have made,
|
|
117
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
118
|
+
where such license applies only to those patent claims licensable
|
|
119
|
+
by such Contributor that are necessarily infringed by their
|
|
120
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
121
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
122
|
+
institute patent litigation against any entity (including a
|
|
123
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
124
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
125
|
+
or contributory patent infringement, then any patent licenses
|
|
126
|
+
granted to You under this License for that Work shall terminate
|
|
127
|
+
as of the date such litigation is filed.
|
|
128
|
+
|
|
129
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
130
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
131
|
+
modifications, and in Source or Object form, provided that You
|
|
132
|
+
meet the following conditions:
|
|
133
|
+
|
|
134
|
+
(a) You must give any other recipients of the Work or
|
|
135
|
+
Derivative Works a copy of this License; and
|
|
136
|
+
|
|
137
|
+
(b) You must cause any modified files to carry prominent notices
|
|
138
|
+
stating that You changed the files; and
|
|
139
|
+
|
|
140
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
141
|
+
that You distribute, all copyright, patent, trademark, and
|
|
142
|
+
attribution notices from the Source form of the Work,
|
|
143
|
+
excluding those notices that do not pertain to any part of
|
|
144
|
+
the Derivative Works; and
|
|
145
|
+
|
|
146
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
147
|
+
distribution, then any Derivative Works that You distribute must
|
|
148
|
+
include a readable copy of the attribution notices contained
|
|
149
|
+
within such NOTICE file, excluding those notices that do not
|
|
150
|
+
pertain to any part of the Derivative Works, in at least one
|
|
151
|
+
of the following places: within a NOTICE text file distributed
|
|
152
|
+
as part of the Derivative Works; within the Source form or
|
|
153
|
+
documentation, if provided along with the Derivative Works; or,
|
|
154
|
+
within a display generated by the Derivative Works, if and
|
|
155
|
+
wherever such third-party notices normally appear. The contents
|
|
156
|
+
of the NOTICE file are for informational purposes only and
|
|
157
|
+
do not modify the License. You may add Your own attribution
|
|
158
|
+
notices within Derivative Works that You distribute, alongside
|
|
159
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
160
|
+
that such additional attribution notices cannot be construed
|
|
161
|
+
as modifying the License.
|
|
162
|
+
|
|
163
|
+
You may add Your own copyright statement to Your modifications and
|
|
164
|
+
may provide additional or different license terms and conditions
|
|
165
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
166
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
167
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
168
|
+
the conditions stated in this License.
|
|
169
|
+
|
|
170
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
171
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
172
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
173
|
+
this License, without any additional terms or conditions.
|
|
174
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
175
|
+
the terms of any separate license agreement you may have executed
|
|
176
|
+
with Licensor regarding such Contributions.
|
|
177
|
+
|
|
178
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
179
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
180
|
+
except as required for reasonable and customary use in describing the
|
|
181
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
182
|
+
|
|
183
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
184
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
185
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
186
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
187
|
+
implied, including, without limitation, any warranties or conditions
|
|
188
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
189
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
190
|
+
appropriateness of using or redistributing the Work and assume any
|
|
191
|
+
risks associated with Your exercise of permissions under this License.
|
|
192
|
+
|
|
193
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
194
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
195
|
+
unless required by applicable law (such as deliberate and grossly
|
|
196
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
197
|
+
liable to You for damages, including any direct, indirect, special,
|
|
198
|
+
incidental, or consequential damages of any character arising as a
|
|
199
|
+
result of this License or out of the use or inability to use the
|
|
200
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
201
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
202
|
+
other commercial damages or losses), even if such Contributor
|
|
203
|
+
has been advised of the possibility of such damages.
|
|
204
|
+
|
|
205
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
206
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
207
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
208
|
+
or other liability obligations and/or rights consistent with this
|
|
209
|
+
License. However, in accepting such obligations, You may act only
|
|
210
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
211
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
212
|
+
defend, and hold each Contributor harmless for any liability
|
|
213
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
214
|
+
of your accepting any such warranty or additional liability.
|
|
215
|
+
|
|
216
|
+
END OF TERMS AND CONDITIONS
|
|
217
|
+
|
|
218
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
219
|
+
|
|
220
|
+
To apply the Apache License to your work, attach the following
|
|
221
|
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
222
|
+
replaced with your own identifying information. (Don't include
|
|
223
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
224
|
+
comment syntax for the file format. We also recommend that a
|
|
225
|
+
file or class name and description of purpose be included on the
|
|
226
|
+
same "printed page" as the copyright notice for easier
|
|
227
|
+
identification within third-party archives.
|
|
228
|
+
|
|
229
|
+
Copyright [yyyy] [name of copyright owner]
|
|
230
|
+
|
|
231
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
232
|
+
you may not use this file except in compliance with the License.
|
|
233
|
+
You may obtain a copy of the License at
|
|
234
|
+
|
|
235
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
236
|
+
|
|
237
|
+
Unless required by applicable law or agreed to in writing, software
|
|
238
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
239
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
240
|
+
See the License for the specific language governing permissions and
|
|
241
|
+
limitations under the License.
|