Observed since 20 Oct, 19:11 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
_2DNote
Purpose: An experiment in making visual interfaces more accessible to people who are blind. Screen readers linearize your page content, so they don't communicate 2-dimensional visuals very well. You can address that by mapping 2D positions to notes.
Potential Uses: Create 2D games and apps that people can use together, regardless of vision capabilities? Hear the contours of your signature as you write it? Enable people to "hear" what someone else is drawing? Locate elements on a page? Convert graphs into sound? Etc.
Some Design Choices: _2DNote does not rely on binaural audio, so devices with only 1 speaker can still communicate the 2D position of one or more elements simultaneously. It does that by relying on volume and pitch. Brain plasticity will take care of the rest.
You can think of the y dimension as the "proximity dimension" (louder = closer to you), and the x dimension as the "piano dimension" (left-to-right = low-to-high notes).
_2DNote.js is made from pure "vanilla" JavaScript. So no extra dependencies. :smile:
https://codepen.io/hchiam/full/eYYdVeX
(You can live edit the demo code in real time here: https://codepen.io/hchiam/pen/eYYdVeX)
Yes:
<script
src="https://cdn.jsdelivr.net/gh/hchiam/_2DNote@1.12.0/_2DNote.min.js"
integrity="sha384-WdS+mavw33iD6+LA5WvOOdklYxzu60nE9DdK9RlJITvWzSJPeF8pF1ln7VrWa+yC"
crossorigin="anonymous"
></script>
While not recommended, you can auto-update to the latest by linking the src to:
https://cdn.jsdelivr.net/gh/hchiam/_2DNote@master/_2DNote.min.js orhttps://cdn.jsdelivr.net/gh/hchiam/_2DNote@latest/_2DNote.min.jsBy including _2DNote.js, you get an object _2DNote, which you can use in your HTML or JS code.
For example:
<div onmousemove="_2DNote.update(event,colourSoundIcon);">...</div>
For quick setup on the body tag:
<body>
<script
src="https://cdn.jsdelivr.net/gh/hchiam/_2DNote@1.12.0/_2DNote.min.js"
integrity="sha384-WdS+mavw33iD6+LA5WvOOdklYxzu60nE9DdK9RlJITvWzSJPeF8pF1ln7VrWa+yC"
crossorigin="anonymous"
></script>
<script>
_2DNote.setAs2DArea(document.body, callbackUponUpdate);
function callbackUponUpdate() {
// do something whenever _2DNote.update() is triggered;
}
</script>
</body>
For quick setup of a custom 2D click/touch area:
<body>
<div id="2d-area" style="width: 100vw; height: 100vh;">...</div>
...
<script
src="https://cdn.jsdelivr.net/gh/hchiam/_2DNote@1.12.0/_2DNote.min.js"
integrity="sha384-WdS+mavw33iD6+LA5WvOOdklYxzu60nE9DdK9RlJITvWzSJPeF8pF1ln7VrWa+yC"
crossorigin="anonymous"
></script>
<script>
_2DNote.setAs2DArea(document.getElementById("2d-area"), callbackUponUpdate);
function callbackUponUpdate() {
// do something whenever _2DNote.update() is triggered;
}
</script>
</body>
To disable the "exit" sound:
var useExitDetection = false;
_2DNote.setAs2DArea(
document.querySelector("#your_element"),
callbackUponUpdate,
useExitDetection
);
For a full working code example, see example-include.html
Here's an example of 2 notes playing simultaneously: example-two-notes.html
The things you're most likely to use are: .play(e), .update(e), .stop(), and .copy().
(Full details in _2DNote.js.)
_2DNote.audioContext:_2DNote instance to do the work of actually creating the note._2DNote.note:_2DNote instance can play._2DNote.play(e, setupExitDetection = true):e is for event or element.)setupExitDetection is an optional parameter, and is true by default. You most likely will want to do either _2DNote.play(e) or _2DNote.play(e, false). This parameter tells _2DNote whether it should play an "exit" sound when you leave the 2D area._2DNote in only one area of the page, you should let users know when the cursor moves outside of that area. To do that, try something like <tag-name onmouseleave="_2DNote.stop();"> on the enclosing HTML element tag. See example-include.html or example-two-notes.html for examples placed on the body tag. If you'd like to disable the warnExitedView when the mouse leaves the body, then you can run document.body.removeEventListener("mouseleave",_2DNote.warnExitedView);_2DNote.update(e) or _2DNote.update(e, callback):_2DNote instance is playing to update to the current position of the element or mouse click event, which it figures out for you. (e is for event or element.)callback is an optional parameter, and is a function that will be run from within update() with this signature: callback(volume, frequency, pan). See full details in _2DNote.js. See usage example in example-include.html or example-two-notes.html._2DNote.stop():_2DNote instance is currently playing._2DNote.copy():_2DNote instance. Extra instances make it more convenient to play multiple notes at the same time._2DNote.getFrequency(e):e is for event or element.)_2DNote.getVolume(e):e is for event or element.)_2DNote.getPan(e):e is for event or element.) Panning creates binaural audio: if you use headphones, it'll sound like the audio is coming from the left or right side of you._2DNote.normalize(value, inputRange, outputRange):[inputRangeMin, inputRangeMax]) to be in the chosen output range ([outputRangeMin, outputRangeMax]). It returns the re-mapped value.https://www.npmjs.com/package/2dnote
npm i 2dnote
See the notes in this example to publish to both GitHub packages page and npm packages page: https://github.com/hchiam/generator-hchiam-learning/commit/f3bbdfa93ae7c27e8d32b04f587afc644048e486
https://github.com/hchiam/web-accessibility-course-notes#web-accessibility-a11y-course-notes
https://github.com/hchiam/flying-focus
https://github.com/hchiam/keyboard-focus-trap
bash package.sh
Download counts and popularity will appear here as the collector receives them.
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 19:11 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:57b0fe08420678a6d755b71a42c851b4a1b676e1ccc4ee0427854c905828a74e