Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kopiro/siriwave
The Apple® Siri wave-form replicated in a JS library.
https://github.com/kopiro/siriwave
animation apple apple-siri canvas gcx ios javascript siriwave
Last synced: 4 days ago
JSON representation
The Apple® Siri wave-form replicated in a JS library.
- Host: GitHub
- URL: https://github.com/kopiro/siriwave
- Owner: kopiro
- License: mit
- Created: 2014-05-16T21:46:38.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2024-06-18T10:26:24.000Z (7 months ago)
- Last Synced: 2024-10-29T15:48:32.452Z (2 months ago)
- Topics: animation, apple, apple-siri, canvas, gcx, ios, javascript, siriwave
- Language: JavaScript
- Homepage: http://kopiro.github.io/siriwave/
- Size: 7.73 MB
- Stars: 1,621
- Watchers: 41
- Forks: 169
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome - kopiro/siriwave - The Apple® Siri wave-form replicated in a JS library. (JavaScript)
- awesome-frontend - siriwave - Apple® Siri wave-form. ![](https://img.shields.io/github/stars/kopiro/siriwave?style=social) (Repository / Animation)
- awesome-canvas - siriwave - The Apple® Siri wave-form replicated in a JS library. ![](https://img.shields.io/github/stars/kopiro/siriwave?style=social) ![](https://img.shields.io/github/forks/kopiro/siriwave?style=social) (Libraries / Waveforms animation)
- my-awesome-list - siriwave - form replicated in a JS library. | kopiro | 1632 | (JavaScript)
README
# SiriWave
The "Apple Siri" wave replicated in pure Javascript using the Canvas API. To learn more about the project, [read the blog post here](https://dev.to/kopiro/how-i-built-the-siriwavejs-library-a-look-at-the-math-and-the-code-l0o), [check the demo](http://kopiro.github.io/siriwave) or [codepen](https://codepen.io/kopiro/pen/oNYepEb).
[![npm version](https://badge.fury.io/js/siriwave.svg)](https://badge.fury.io/js/siriwave)
### iOS (classic) style
The classic, pre-iOS9 style.
### iOS9 style
The new fluorescent wave introduced in iOS9.
### iOS13 style
_work in progress_
The wave reinvented as a bubble.
## Usage
### Browser (via CDN) usage
Import the UMD package via the unpkg CDN and it's ready to use.
```html
```
### ES module
Install it through `npm install siriwave` or `npm add siriwave` first:
```js
import SiriWave from "siriwave";
```## Initialize
Create a div container and instantiate a new SiriWave object:
```html
var siriWave = new SiriWave({
container: document.getElementById("siri-container"),
width: 640,
height: 200,
});```
## Constructor options
| Key | Type | Description | Default | Required |
| -------------------------- | ------------------------ | ---------------------------------------------------------------------- | ---------- | -------- |
| `container` | DOMElement | The DOM container where the DOM canvas element will be added. | null | yes |
| `style` | "ios", "ios9" | The style of the wave. | "ios" | no |
| `ratio` | Number | Ratio of the display to use. Calculated by default. | calculated | no |
| `speed` | Number | The speed of the animation. | 0.2 | no |
| `amplitude` | Number | The amplitude of the complete wave-form. | 1 | no |
| `frequency` | Number | The frequency of the complete wave-form. Only available in style "ios" | 6 | no |
| `color` | String | Color of the wave. Only available in style "ios" | "#fff" | no |
| `cover` | Bool | The `canvas` covers the entire width or height of the container | false | no |
| `autostart` | Bool | Decide wether start the animation on boot. | false | no |
| `pixelDepth` | Number | Number of step (in pixels) used when drawed on canvas. | 0.02 | no |
| `lerpSpeed` | Number | Lerp speed to interpolate properties. | 0.01 | no |
| `curveDefinition` | ICurveDefinition[] | Override definition of the curves, check above for more details. | null | no |
| `ranges` | IiOS9Ranges | Override the default random ranges of the curves. | null | no |
| `globalCompositeOperation` | GlobalCompositeOperation | globalCompositeOperation of the canvas, controls wave overlap design. | "lighter" | no |### Ranges
Each wave chooses a random parameter for each of these ranges that factors into their creation. You can override these ranges by passing a `ranges` object to the constructor.
Here is the type of the ranges object:
```ts
export type IiOS9Ranges = {
noOfCurves?: [number, number];
amplitude?: [number, number];
offset?: [number, number];
width?: [number, number];
speed?: [number, number];
despawnTimeout?: [number, number];
};
```## API
#### `new SiriWave`
#### `curveDefinition`
By passing this argument, you're overriding the default curve definition resulting in a completely different style.
The default definition for the `ios` classic style is:
```js
[
{ attenuation: -2, lineWidth: 1, opacity: 0.1 },
{ attenuation: -6, lineWidth: 1, opacity: 0.2 },
{ attenuation: 4, lineWidth: 1, opacity: 0.4 },
{ attenuation: 2, lineWidth: 1, opacity: 0.6 },
{ attenuation: 1, lineWidth: 1.5, opacity: 1 },
];
```and it results in 5 different sin-waves with different parameters and amplitude.
You can set 4 attributes for each curve:
- `attenuation`: the power factor determining the attenuation
- `lineWidth`: the line width
- `opacity`: the opacity
- `color`: the color, default to `SiriWave.color`; optionalThe `ios9` style definition is instead:
```js
[
{ color: "255,255,255", supportLine: true },
{ color: "15, 82, 169" }, // blue
{ color: "173, 57, 76" }, // red
{ color: "48, 220, 155" }, // green
];
```and it results in 3 different colored waves + 1 support wave that needs to be there.
Here you set:
- `supportLine`: only one of these curves must have this to `true`, it will be used to draw the support line
- `color`: the color of the wave#### `start()`
Start the animation
#### `stop()`
Stop the animation.
#### `setSpeed(newValue)`
Set the new value of speed (animated)
#### `setAmplitude(value)`
Set the new value of amplitude (animated)
#### `dispose()`
Stop the animation and destroy the canvas, by removing it from the DOM.
Subsequent `start()` calls on this SiriWave instance will fail with an exception.## Grapher plots
- [GCX default](etc/gcx/default.gcx)
- [GCX iOS 9](etc/gcx/ios9.gcx)## Build and development
If you wanna make some modifications in your local environment, use:
```sh
npm dev
```this will create a watchable build with RollupJS and automatically create a server to see your changes in the browser.
To finally build all targets:
```sh
npm build
```## QA
#### How do I integrate this library with a microphone user input?
You can find an excellent demo [here](https://jsitor.com/PPQtOp9Yp) by @semmel