Skip to content

Audio sample files used in Alex Bainter's projects, with conversion and deployment scripts

License

Notifications You must be signed in to change notification settings

generative-music/samples-alex-bainter

Repository files navigation

@generative-music/samples-alex-bainter

Audio sample files used in Alex Bainter's projects, with conversion and deployment scripts.

Usage

This package exports a function which takes an audio format (one of 'ogg','mp3', or 'wav') and returns a sample index which adheres to the schema defined by @generative-music/sample-index-schema and contains URLs to audio samples of the specified type.

import getSamples from '@generative-music/samples-alex-bainter';
import Tone from 'tone';

const samples = getSamples({ format: 'mp3' });

const pianoSampler = new Tone.Sampler(wav['vsco2-piano-mf']);

By default, the URLs in the sample index are relative (e.g. 'vsco2-piano-mf/ogg/<filename>.ogg'). A string prefix can be added by passing a host parameter to the get function, or with an environment variable named SAMPLE_FILE_HOST. If a parameter is passed and the environment variable is also set, the argument will be used.

import getSamples from '@generative-music/samples-alex-bainter';

const samples = getSamples({ host: 'http://example.com', format: 'ogg' });

console.log(samples);
/*
{https://github.com/metalex9/s3-sync
  'vsco2-piano-mf': {
    A0: 'http://example.com/vsco2-piano-mf/ogg/<filename>.ogg',
    'C#1': 'http://example.com/vsco2-piano-mf/ogg/<filename>.ogg'
    // ...
  },
  // ...
}
*/

To include only the index for a specific format, you can access it directly like so:

import getMp3Samples from '@generative-music/samples-alex-bainter/src/mp3';

const mp3Samples = getSamples({ host: 'http://example.com' });

This can be useful for dynamically loading a sample index to reduce bundle sizes in the browser:

const lazyMp3Index = () =>
  import('generative-music/samples-alex-bainter/src/mp3');
const lazyOggIndex = () =>
  import('generative-music/samples-alex-bainter/src/ogg');

const loadSampleIndex = isOggSupported => {
  if (isOggSupported) {
    return lazyOggIndex();
  }
  return lazyMp3Index();
};

loadSampleIndex.then(samples => {
  //...
});

Local development

Cached proxy server

npm run serve:proxy

Start a proxy server at http://localhost:6969 which serves sample files from an S3 bucket and caches them in the local file system.

Building

This step takes a long time and is no longer necessary if you just want to get one of my projects running locally. See Cached proxy server above.

npm run build

Prerenders necessary samples and converts all samples to the output formats with FFmpeg and creates dist/index.json. This may take a while. If dist/index.json exists prior to running this, only missing samples will be converted.

Serving locally with Docker

Requries Docker and Docker Compose.

npm run serve

Serve the sample files on your local machine at http://localhost:6969/.

CDN configuration with AWS S3

Prerequisites

See @alexbainter/s3-sync configuration.

Uploading to S3

Requires read and write access.

npm run deploy

Uploads the samples and the output index to the configured S3 bucket. This will only upload files if they're missing from the S3 bucket.

Downloading from S3

Requires read access.

npm run pull

Downloads the samples and the ouput index from the configured S3 bucket. This will only download files if they're missing locally.

Sample sources

About

Audio sample files used in Alex Bainter's projects, with conversion and deployment scripts

Resources

License

Stars

Watchers

Forks

Packages

No packages published