• Stars
    star
    1,385
  • Rank 33,928 (Top 0.7 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 10 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The Apple® Siri wave-form replicated in a JS library.

SiriWave

The "Apple Siri" wave replicated in pure Javascript using the Canvas API. To learn more about the project, read the blog post here, check the demo or codepen.

npm version

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.

<script src="https://unpkg.com/siriwave/dist/siriwave.umd.min.js"></script>

ES module

Install it through npm install siriwave or yarn add siriwave first:

import SiriWave from "siriwave";

Initialize

Create a div container and instantiate a new SiriWave object:

<div id="siri-container"></div>
<script>
  var siriWave = new SiriWave({
    container: document.getElementById("siri-container"),
    width: 640,
    height: 200,
  });
</script>

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

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:

[
  { 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; optional

The ios9 style definition is instead:

[
  { 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

Build and development

If you wanna make some modifications in your local environment, use:

yarn 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:

yarn build

QA

How do I integrate this library with a microphone user input?

You can find an excellent demo here by @semmel

More Repositories

1

homebridge-tapo-camera

Homebridge plugin for TP-Link TAPO security cameras
TypeScript
131
star
2

homebridge-playstation

Playstation integration for Homebridge / HOOBS.
TypeScript
100
star
3

eslint-plugin-ssr-friendly

ESLint plugin to detect inappropriate use of DOM globals properties
JavaScript
53
star
4

tommy

Web assets optimverter
JavaScript
21
star
5

google-cache-crawler

PHP script to recover sites using Google Cache.
PHP
10
star
6

vscode-project-manager-for-alfred

Python
10
star
7

whatever2telegram

Allows forwarding whatever you want to a Telegram handle.
JavaScript
9
star
8

kopdo

PDO wrapper in PHP
PHP
7
star
9

xscreensaver-apple-aerial

Apple TV screensaver for Linux
Shell
6
star
10

ulala

Show the right things when you scroll
JavaScript
4
star
11

webosbrew-autostart

Simple log app to run autostart items on WebOS
JavaScript
4
star
12

standupg

TypeScript
4
star
13

otto

Otto Artificial Intelligence
TypeScript
4
star
14

SLWidget

iOS Widget that display next departures for SL traffic in Stockholm
JavaScript
3
star
15

cir-food

Cir-Food reverse API implementation in NodeJS.
JavaScript
3
star
16

kopoong

Simple pong game in QT
C++
3
star
17

next-event

Just get the next event in your Google Calendar in plain text
JavaScript
3
star
18

marlin-artillery-hornet

Marlin firmware for Artillery Hornet
C++
3
star
19

brutor

PHP script to make anomymous CURL requests with Tor
PHP
3
star
20

skull-king-lib-cpp

C++
2
star
21

deploy-worker

Simple worker that watch a file and execute scripts
Shell
2
star
22

folla-generator

Folla generator in Node.JS using RSS + Say
JavaScript
2
star
23

kopiro

Personal portfolio website
HTML
2
star
24

hackthebox-popcorn

Shell
2
star
25

arduino

My Arduino Projects
C++
2
star
26

itasa-search

Search SRT on italiansubs.net
JavaScript
2
star
27

kopiro-growlstyle

Personal Growl 2.0 Style
CSS
2
star
28

dr

Run any binary you have in mind into a Docker environment
Shell
2
star
29

backup

Shell
2
star
30

stss-jmk

Alloy.JMK to compile STSS files with TiShadow.
JavaScript
2
star
31

todolist-app-lessons-cc

JavaScript
1
star
32

math-constants-prime-checker

JavaScript
1
star
33

hashcode

TypeScript
1
star
34

alfred-workflows

Collection of my Alfred workflows
1
star
35

televideo

Televideo
JavaScript
1
star
36

ruzzle-hack

PHP Implementation for Ruzzle Solver
PHP
1
star
37

aoc

Advent Of Code 2019
HTML
1
star
38

csv-api

Simple minimalist CSV-API server that supports data CSV uploads and retrieval via JSON.
PHP
1
star
39

awesome-titanium

Awesome Titanium widgets and modules.
1
star
40

simple-atv-aerial

Python
1
star
41

wp-with-docker

Wordpress containerized in a single Docker image.
PHP
1
star
42

iopasso-api

Per quando Gabriele passa
Python
1
star
43

pika-bulba

Simple 3D game of pokemons running with beautiful pixel-art
JavaScript
1
star