{"id":20838667,"url":"https://github.com/mewa/esac-mir","last_synced_at":"2025-06-13T13:07:34.468Z","repository":{"id":84914337,"uuid":"109633439","full_name":"mewa/esac-mir","owner":"mewa","description":"Traditional folk music information retrieval from EsAC and MIDI files","archived":false,"fork":false,"pushed_at":"2018-11-05T11:35:08.000Z","size":64,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-12T09:44:59.316Z","etag":null,"topics":["midi","music","music-information-retrieval"],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mewa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-11-06T01:38:09.000Z","updated_at":"2021-10-05T23:39:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"6bc72725-d795-49db-adea-5540944bd897","html_url":"https://github.com/mewa/esac-mir","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mewa/esac-mir","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mewa%2Fesac-mir","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mewa%2Fesac-mir/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mewa%2Fesac-mir/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mewa%2Fesac-mir/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mewa","download_url":"https://codeload.github.com/mewa/esac-mir/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mewa%2Fesac-mir/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259650958,"owners_count":22890385,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["midi","music","music-information-retrieval"],"created_at":"2024-11-18T01:11:03.000Z","updated_at":"2025-06-13T13:07:34.414Z","avatar_url":"https://github.com/mewa.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Formats\n\n### ESAC JSON format\n`ESAC JSON` format is an intermediate format, which represents esac records. Individual records are expressed as JSON objects with the following properties:\n\n| property  | type   | ESAC field mapping |\n|-----------|--------|--------------------|\n| name      | String | record name        |\n| title     | String | CUT                |\n| source    | String | TRD                |\n| region    | String | REG                |\n| signature | String | SIG                |\n| key       | String | KEY                |\n| melody    | String | MEL                |\n| remarks   | String | REM                |\n\n### ESAC-Id JSON format\nIn addition to the properties defined by the `ESAC JSON` format, the `ESAC-Id JSON` format includes record `id`, which is used to make API calls.\n\n| property | type   |\n|----------|--------|\n| id       | String |\n\n### ESAC Filter format\n\n| property | type   |\n|----------|--------|\n| field    | String |\n| term     | String |\n\n`field` can take the following values:\n* `name`\n* `title`\n* `source`\n* `region`\n* `signature`\n* `key`\n* `melody`\n* `melody_raw`\n* `melody_rhythm`\n* `remarks`\n\n### MIDI JSON format\n`MIDI JSON` format is a JSON object representing a MIDI file.\n\n| property | type   | description                                  |\n|----------|--------|----------------------------------------------|\n| midi64   | String | data url containing base64-encoded MIDI file |\n\n## API methods\n\n### Get ESAC record by id\n\n| method | url         |\n|--------|-------------|\n| GET    | `/esac/:id` |\n\n| parameter | description                                                                | optional |\n|-----------|----------------------------------------------------------------------------|----------|\n| :id       | id of ESAC record                                                          | no       |\n| parse     | when non-empty value is suppplied, request body is parsed as raw ESAC file | yes      |\n\n| response              |\n|-----------------------|\n| `ESAC-Id JSON` object |\n\n### Get ESAC records list\n\n| method | url          |\n|--------|--------------|\n| GET    | `/esac/list` |\n\n| response                             |\n|--------------------------------------|\n| JSON array of `ESAC-Id JSON` objects |\n\n### Search for ESACs matching filters\n\n| method | url            |\n|--------|----------------|\n| POST   | `/esac/search` |\n\n| request body                        | response                             |\n|-------------------------------------|--------------------------------------|\n| JSON array of `ESAC Filter` objects | JSON array of `ESAC-Id JSON` objects |\n\n\n### Add ESAC record\n\n| method | url     |\n|--------|---------|\n| PUT    | `/esac` |\n\n\n| parameter | description                                                                | optional |\n|-----------|----------------------------------------------------------------------------|----------|\n| parse     | when non-empty value is suppplied, request body is parsed as raw ESAC file | yes      |\n\n| request body                                          | response                         |\n|-------------------------------------------------------|----------------------------------|\n| `ESAC JSON` (or ESAC file, when `parse` is specified` | `{\"id\": \u003cid of created record\u003e}` |\n\n\n### Update ESAC record by id\n\n| method | url         |\n|--------|-------------|\n| PATCH  | `/esac/:id` |\n\n\n| parameter | description                                                                | optional |\n|-----------|----------------------------------------------------------------------------|----------|\n| :id       | id of ESAC record                                                          | no       |\n| parse     | when non-empty value is suppplied, request body is parsed as raw ESAC file | yes      |\n\n### Delete ESAC record by id\n\n| method | url         |\n|--------|-------------|\n| DELETE | `/esac/:id` |\n\n\n| parameter | description                                                                | optional |\n|-----------|----------------------------------------------------------------------------|----------|\n| :id       | id of ESAC record                                                          | no       |\n\n### Parse raw ESAC to ESAC JSON\n\n| method | url         |\n|--------|-------------|\n| POST   | `/esacjson` |\n\n| request body | response    |\n|--------------|-------------|\n| ESAC file    | `ESAC JSON` |\n\n### Convert ESAC to MIDI\n\n| method | url          |\n|--------|--------------|\n| POST   | `/esac2midi` |\n\n\n| parameter | description                                                                | optional |\n|-----------|----------------------------------------------------------------------------|----------|\n| parse     | when non-empty value is suppplied, request body is parsed as raw ESAC file | yes      |\n| format    | when `format=file`, response is a MIDI file                                | yes      |\n| tempo     | BPM in resulting MIDI file, default is `90`                                | yes      |\n| octave    | base octave of ESAC intervals, default is `5`                              | yes      |\n\n| request body                                          | response                                       |\n|-------------------------------------------------------|------------------------------------------------|\n| `ESAC JSON` (or ESAC file, when `parse` is specified) | `MIDI JSON` (or MIDI file, when `format=file`) |\n\n### Convert MIDI to ESAC\n\n| method | url          |\n|--------|--------------|\n| POST   | `/esac2midi` |\n\n\n| parameter | description                                      | optional |\n|-----------|--------------------------------------------------|----------|\n| key       | base sound of the resulting ESAC, default is `C` | yes      |\n\n| request body | response    |\n|--------------|-------------|\n| MIDI file    | `ESAC JSON` |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmewa%2Fesac-mir","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmewa%2Fesac-mir","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmewa%2Fesac-mir/lists"}