Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mohayonao/osc-msg

OSC message decoder/encoder with fault tolerant
https://github.com/mohayonao/osc-msg

Last synced: 3 months ago
JSON representation

OSC message decoder/encoder with fault tolerant

Awesome Lists containing this project

README

        

# osc-msg
[![Build Status](https://img.shields.io/travis/mohayonao/osc-msg.svg?style=flat-square)](https://travis-ci.org/mohayonao/osc-msg)
[![NPM Version](https://img.shields.io/npm/v/osc-msg.svg?style=flat-square)](https://www.npmjs.org/package/osc-msg)
[![License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](https://mohayonao.mit-license.org/)

> OSC message decoder/encoder with fault tolerant

## Features
- Not throw an exception if processing with a broken message
- Useful decoding options, `bundle` and `strip`
- Works in both Node.js and browsers

## Installation

npm:

```
npm install osc-msg
```

## API

- `oscmsg.decode(buffer: Buffer, opts={}): object`
- `opts.strict`: strictly validation mode
- `opts.strip`: decode into raw values
- `opts.bundle`: decode as a bundle
- aliases: `fromBuffer`, `toObject`
- `oscmsg.encode(object: object, opts={}): Buffer`
- `opts.strict`: strictly validation mode
- `opts.integer`: use an integer when auto cast
- aliases: `fromObject`, `toBuffer`

## Examples

decode

```js
const dgram = require("dgram");
const oscmsg = require("osc-msg");

const socket = dgram.createSocket("udp4");

socket.on("message", (buffer) => {
const bundle = oscmsg.decode(buffer, { strict: true, strip: true, bundle: true });

if (bundle.error) {
return;
}

bundle.elements.forEach((message) => {
console.log(JSON.stringify(message));
});
});

socket.bind(RECV_PORT);
```

encode

```js
const dgram = require("dgram");
const oscmsg = require("osc-msg");

const message = {
address: "/foo",
args: [
{ type: "integer", value: 0 },
{ type: "float", value: 1.5 }
]
};
const buffer = oscmsg.encode(message);
const socket = dgram.createSocket("udp4");

socket.send(buffer, 0, buffer.length, SEND_PORT, "127.0.0.1");
```

## Javascript representations of the OSC types

_compatible interfaces with [osc-min](https://github.com/russellmcc/node-osc-min)_

- OSC Message

```js
{
"address": string,
"args": [ arg1, arg2, ...argN ],
"oscType": "message"
}
```

Where args is an array of OSC Arguments. `oscType` is optional. `args` can be a single element.

- OSC Arguments

```js
{ "type": string, "value": any }
```

Where the `type` is one of the following:

- `string` - string value
- `float` - numeric value
- `integer` - numeric value
- `blob` - Buffer-like value
- `true` - value is boolean true
- `false` - value is boolean false
- `null` - no value
- `bang` - no value (this is the `I` type tag)
- `timetag` - [ uint32, uint32 ]
- `array` - array of OSC Arguments

- OSC Bundle

```js
{
"timetag": number,
"elements": [ element1, element2, ...elementN ],
"oscType": "bundle"
}
```

Where the timetag is a javascript-native numeric value of the timetag, and elements is an array of either an OSC Bundle or an OSC Message The `oscType` field is optional, but is always returned by api functions.

## See also
- [The Open Sound Control 1.0 Specification](https://opensoundcontrol.org/spec-1_0)
- [osc-min / Javascript representations of the OSC types](https://github.com/russellmcc/node-osc-min#javascript-representations-of-the-osc-types)

## License
MIT