## SAFE API
[![Build Status](https://travis-ci.org/laravel/lumen-framework.svg)](https://travis-ci.org/laravel/lumen-framework)
[![Total Downloads](https://poser.pugx.org/laravel/lumen-framework/d/total.svg)](https://packagist.org/packages/laravel/lumen-framework)
[![Latest Stable Version](https://poser.pugx.org/laravel/lumen-framework/v/stable.svg)](https://packagist.org/packages/laravel/lumen-framework)
[![Latest Unstable Version](https://poser.pugx.org/laravel/lumen-framework/v/unstable.svg)](https://packagist.org/packages/laravel/lumen-framework)
[![License](https://poser.pugx.org/laravel/lumen-framework/license.svg)](https://packagist.org/packages/laravel/lumen-framework)
A micro API for the SAFE project
## Lumen Official Documentation
Documentation for the framework can be found on the [Lumen website](http://lumen.laravel.com/docs).
## SAFE API Documentation
So, this is pretty simple...For now we only have 3 endpoints:
```php
/v1/{plugin}/{format}
/v1/{plugin}/term-list.json
/v1/{plugin}/{datatype}/{id}/{format}
```
## /v1/{plugin}/{format}
This endpoint retrieves the userdata for the requested terms
You can use the IDs we return to get more info on that specific term
#### GET Parameters
`{plugin}`
+ SAFECompressor
+ SAFEDistortion
+ SAFEEqualiser
+ SAFEReverb
`{{format}}`
+ json
+ csv
+ xml
+ we're working on adding more output format like MATLab, if you want to help us feel free to make a pull request
#### POST Parameters
`terms=[,,...]` or `terms=all`
The parameter above can be either an array to get the userdata from specific terms or just a string `all` to retrieve all the terms we have on the requested plugin.
`sneakpeek=true`
This parameter will do 2 things, the first thing is it will only retrieve 5 entries of the requested terms. The second thing is it will give you all the other data we have on that specific entry on that term.
**Warning:** When using sneakpeek the response can take several seconds as we need to process all the data we're giving out to you.
## /v1/{plugin}/term-list.json
This endpoint lists all the terms available on the plugin requested in a JSON format
This is ussually used to feed autocomplete inputs
#### GET Parameters
`{plugin}`
+ SAFECompressor
+ SAFEDistortion
+ SAFEEqualiser
+ SAFEReverb
## /v1/{plugin}/{datatype}/{id}/{format}
This endpoint retrieves all the information for a specific term ID
You can get the IDs on [/v1/{plugin}/{format}](#v1pluginformat)
#### GET Parameters
`{plugin}`
+ SAFECompressor
+ SAFEDistortion
+ SAFEEqualiser
+ SAFEReverb
`{datatype}`
+ userdata
+ deltas
+ deltadeltas
+ audiofeaturedata
+ all
`id`
`{{format}}`
+ json
+ csv
+ xml
+ we're working on adding more output format like MATLab, if you want to help us feel free to make a pull request
## Examples
Example usage for the `agressive` term:
http://api.semanticaudio.co.uk/SAFEEqualiser/json
#### POST
`terms=['agressive']`
##### curl Example
```bash
curl --request POST 'http://api.semanticaudio.co.uk/v1/SAFEEqualiser/json' --data 'terms=["agressive"]'
```
#### Response
```json
[
{
"ID": "226",
"userdata": {
"ID": "226",
"Descriptors": "agressive",
"numInputs": "1",
"numOutputs": "1",
"Param_Band1Gain": "1.2190476655960083",
"Param_Band1Frequency": "236.3627471923828",
"Param_Band2Gain": "0",
"Param_Band2Frequency": "560",
"Param_Band2QFactor": "0.7099999785423279",
"Param_Band3Gain": "-12",
"Param_Band3Frequency": "867.53076171875",
"Param_Band3QFactor": "0.7099999785423279",
"Param_Band4Gain": "12",
"Param_Band4Frequency": "6155.52685546875",
"Param_Band4QFactor": "0.7099999785423279",
"Param_Band5Gain": "0",
"Param_Band5Frequency": "8200",
"Metadata_Genre": "reggae",
"Metadata_Instrument": "",
"Metadata_Location": "birmingham",
"Metadata_Experience": "8 years",
"Metadata_Age": "45",
"Metadata_Language": "english",
"FeatureChecksum": "b9421b0ff0addddf4ceaa75800f90e52"
}
},
{
"ID": "236",
"userdata": {
"ID": "236",
"Descriptors": "agressive",
"numInputs": "1",
"numOutputs": "1",
"Param_Band1Gain": "7.009523868560791",
"Param_Band1Frequency": "227.9779052734375",
"Param_Band2Gain": "-4.876190662384033",
"Param_Band2Frequency": "513.8471069335938",
"Param_Band2QFactor": "0.7099999785423279",
"Param_Band3Gain": "0",
"Param_Band3Frequency": "1000",
"Param_Band3QFactor": "0.7099999785423279",
"Param_Band4Gain": "11.580952644348145",
"Param_Band4Frequency": "2831.45947265625",
"Param_Band4QFactor": "0.7099999785423279",
"Param_Band5Gain": "6.400000095367432",
"Param_Band5Frequency": "9158.287109375",
"Metadata_Genre": "reggae",
"Metadata_Instrument": "",
"Metadata_Location": "birmingham",
"Metadata_Experience": "8 years",
"Metadata_Age": "45",
"Metadata_Language": "english",
"FeatureChecksum": "dbdd5c31a0e06dcf278a88314cb8e381"
}
}
]
```
Now let's get all the data for one of these entries for the `agressive` descriptor
http://api.semanticaudio.co.uk/v1/SAFEEqualiser/all/226/json
```bash
curl --request GET 'http://api.semanticaudio.co.uk/v1/SAFEEqualiser/all/226/json'
```
##### Response
```json
{
"userdata": {
"ID": "226",
"Descriptors": "agressive",
"numInputs": "1",
"numOutputs": "1",
"Param_Band1Gain": "1.2190476655960083",
"Param_Band1Frequency": "236.3627471923828",
"Param_Band2Gain": "0",
"Param_Band2Frequency": "560",
"Param_Band2QFactor": "0.7099999785423279",
"Param_Band3Gain": "-12",
"Param_Band3Frequency": "867.53076171875",
"Param_Band3QFactor": "0.7099999785423279",
"Param_Band4Gain": "12",
"Param_Band4Frequency": "6155.52685546875",
"Param_Band4QFactor": "0.7099999785423279",
"Param_Band5Gain": "0",
"Param_Band5Frequency": "8200",
"Metadata_Genre": "reggae",
"Metadata_Instrument": "",
"Metadata_Location": "birmingham",
"Metadata_Experience": "8 years",
"Metadata_Age": "45",
"Metadata_Language": "english",
"FeatureChecksum": "b9421b0ff0addddf4ceaa75800f90e52"
},
"deltas": {
"processed": [...],
"unprocessed": [...]
},
"deltadeltas": {
"processed": [...],
"unprocessed": [...]
},
"audiofeaturedata": {
"processed": [...],
"unprocessed": [...]
}
}
```
And there you have, some semantic audio data :)