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

https://github.com/brahmlower/audio-slicing-api

A simple audio slicing api
https://github.com/brahmlower/audio-slicing-api

Last synced: about 1 year ago
JSON representation

A simple audio slicing api

Awesome Lists containing this project

README

          

## Prompt

Build a simple API server to handle user audio projects. Your server should provide
endpoints that allow a user to perform the following actions:
1. POST raw audio data and store it.
Eg: $ curl -X POST --data-binary @myfile.wav http://localhost/post
2. GET a list of stored files, GET the content of stored files, and GET metadata of
stored files, such as the duration of the audio. The GET endpoint(s) should
accept a query parameter that allows the user to filter results. Results should be
returned as JSON.
Eg: $ curl http://localhost/download?name=myfile.wav
Eg: $ curl http://localhost/list?maxduration=300
Eg: $ curl http://localhost/info?name=myfile.wav

## Usage

### Database preparation

Start the database via dockercompose. We'll leave it running in the background
```
docker-compose up -d
```

One started, create the schema by applying what can loosely be called our "migrations". Ideaily we'd set up and use sqitch instead.

```
PGPASSWORD=postgres psql -h localhost -U postgres < ./db_migrations/up.sql
```

If we need to reset the db later, we can easily roll back the database using:

```
PGPASSWORD=postgres psql -h localhost -U postgres < ./db_migrations/down.sql
```

### Usage

Get an example audio file if you don't already have one. I've renamed this one to match the examples above

```
wget https://www2.cs.uic.edu/~i101/SoundFiles/taunt.wav
```

With the database already running, start the server in one terminal:

```
npm run build;
npm run start;
```

Then you can use the API exactly as described above:

```
curl -X POST --data-binary @taunt.wav http://localhost:3000/post
curl http://localhost:3000/list?maxduration=300
curl http://localhost:3000/download?name=taunt.wav --output downloaded-taunt.wav
md5 taunt.wav downloaded-taunt.wav
MD5 (taunt.wav) = bdff3faccd932c1ef35d3239e11738cb
MD5 (downloaded-taunt.wav) = bdff3faccd932c1ef35d3239e11738cb
```