Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/francostramana/multitrack-player

A web based Multitrack Audio Player using the OMT model :notes:
https://github.com/francostramana/multitrack-player

omt thread webworker worker

Last synced: about 1 month ago
JSON representation

A web based Multitrack Audio Player using the OMT model :notes:

Awesome Lists containing this project

README

        

# Multitrack Audio Player
Este proyecto fue creado con fines educativos para abarcar algunos aspectos relacionados con la **performance web**.

## Qué vamos a hacer?
- "Off the Main Thread": Usaremos Web Workers para procesar tareas con gran costo computacional fuera del hilo principal asi no bloqueamos la UI. (Threading)
- Web Assembly: Vamos a compilar y correr nuestro propio código c++ para usarlo desde JS.
- PWA: Vamos a convertir nuestra aplicación en una aplicación web progresiva para mejorar la usabilidad.

## Por qué (super) Vainilla JS?
Amamos todo lo relacionado con Tooling y FW's JS, pero este proyecto fué armado con fines educativos y nuestro interés es que no se pierde el punto central. Cada uno/a lo puede aplicar en su framework favorito.

## Run
Para correrlo simplemente copiá la carpeta en tu web server favorito, o si tenés **npm** ejecuta: `npm run start` (previamente instala dependencias con `npm install`). Este comando levantará el proyecto en _http://localhost:8080_.

### Dataset ejemplo
Podés usar este multitrack de The Beatles para probar la app: https://drive.google.com/drive/u/0/folders/1VrBsuHtpYQ8r0kDX7Ugtx7gNuN3aCjUL

### Load with fetch

```JS
fetch('assets/bloch_prayer.mp3')
.then(response => {
if (!response.ok) {
throw new Error("HTTP error, status = " + response.status);
}
return response.arrayBuffer();
})
.then(arrayBuffer => audioCtx.decodeAudioData(arrayBuffer))
.then(decodedData => {
source.buffer = decodedData;
console.log("buffer fulled!");
});
```

### clone buffer
```JS
// clona el buffer para trasnferirlo a distintos workers
let pcm = new Float32Array(buffer.getChannelData(0).length);
pcm.set(buffer.getChannelData(0))
```