音楽系API（主に音楽配信サービス）まとめ

[DIGLE](https://digle.tokyo)を開発している傍らで実際に使用しているAPIや今後使用したいAPIに関して情報をまとめておきたいと思いメモ
サービス内容も簡単に記載していきます。

# 1.音楽配信サービスAPI
## Spotify API
https://developer.spotify.com/web-api/

Spotify APIの明文化されていない仕様は以下にまとめてます。
[Spotify APIの仕様についてまとめ](https://qiita.com/yumayamada1029/items/fdbd77526dfef4decaa6)

楽曲情報の取得やプレイリストの作成、再生コントロールのAPIなど一通りのREST APIが揃っている。

- Albums
- Artists
- Browse　（Spotifyのブラウズタブに表示される情報が取得できる。ニューリリースアルバムやカテゴリ情報、関連プレイリストなど）
- Follow（ユーザーやアーティストのフォロー関連のAPI）
- Library(ユーザーの保存したトラック、アルバム情報の操作)
- Personalization（ユーザーの試聴傾向に関する情報を取得できる）
- Player（再生コントロールのAPI。TVやAIスピーカーなどのハードとも連携可能）
- Playlists
- Profiles
- Search
- Tracks

様々な言語の[SDK](https://developer.spotify.com/web-api/code-examples/#wrappers)があり、開発も直ぐにできる印象。Javascript SDKに関してはクライアントサイドのみの提供のため、ユーザーのプライベート情報や非公開プレイリストの取得などに必要な関数が存在しないため注意が必要。また、iOS・Android　SDKについてもベータ版のため予告なしの仕様変更もありうるとのこと。



## Apple Music API
https://developer.apple.com/musickit/
https://developer.apple.com/documentation/applemusicapi

楽曲情報やプレイリストなどの取得を行う**Apple Music API**, アクセストークンの取得を行う**StoreKit**、 楽曲の再生コントロールなどを行う**MediaPlayer**フレームワークの3つのツールで構成されている。
~~Apple Music APIのみWebで使用可能。現在API自体はGETリクエストのみしか用意されていないため、Web側でプレイリストの作成や削除、ユーザー情報の操作などは不可。~~

WWDC2018にて[MusicKit JS](https://developer.apple.com/documentation/musickitjs#topics)の紹介が行われ、アプリだけでなくブラウザベースで再生、停止等のプレイヤーの操作を行うことのできるフレームワークが登場しました。

MusicKit JSの操作方法等はこちらの記事が詳しいです：
https://dev.classmethod.jp/smartphone/iphone/wwdc-18-play-music-with-music-kit-js/

Apple Music APIの大まかなセットアップ、使用法はこちら：
https://dev.classmethod.jp/smartphone/iphone/ios-11-apple-music-api-intro/
http://qiita.com/hanawat/items/c59c3365156a474821cc

## Google Play Music API
非公式ではあるがAPIあり
https://unofficial-google-music-api.readthedocs.io/en/latest/
https://github.com/jamon/playmusic

## SoundCloud API
(現在アプリの新規登録を停止しているとのこと)
https://developers.soundcloud.com/
[Cross Domain](https://developers.soundcloud.com/docs/api/guide#crossdomain)を公式でサポートしているため、アプリをSoundCloudに登録してIDを取得すれば複雑な認証などもなく情報取得が可能。

[Python](https://github.com/soundcloud/soundcloud-python)、[Ruby](https://github.com/soundcloud/soundcloud-ruby)、[Javascript](https://developers.soundcloud.com/docs/api/sdks#javascript) SDKあり

## Deezer API
https://developers.deezer.com/api
（ログイン後利用規約の同意が必要）
[日本初のロスレス音楽配信サービス](https://www.phileweb.com/review/article/201712/09/2861.html)を提供している。
SoundCloud同様、認証の必要がなく情報の取得が可能（POST,DELETEは認証が必要）

## KKBOX API
https://developer.kkbox.com/#/
楽曲やプレイリスト情報の取得を行うAPIが中心に揃っている。
SDKはPython,Javascript,Android,Objective-C,Swift,.NET Framework,Go

以下のURLから簡単に様々な言語でAPIのテストができる
https://docs-en.kkbox.codes/v1.1/reference

## Amazon Music API
Device APIとWeb APIの二種類に大別されている。
[Login With Amazon(LWA)](https://developer.amazon.com/ja/docs/music/API_browse_LWA.html)と組み合わせてアクセストークンを取得し、Amazon Music内のデータ取得、更新などが可能。
＊23年6月現在、Web APIは[一部の開発者のみに限定公開](https://developer.amazon.com/ja/docs/music/API_web_overview.html#accessing-the-apis)とのこと。
https://developer.amazon.com/ja/docs/music/get_started_program-overview.html

## YouTube Music API

一部のデータはYouTube Musicと共通の為、YouTube APIにて情報取得可能
（こちらの[コメント](https://qiita.com/yumayamada1029/items/d556e8d227418bcfb8c0#comment-87462812705de1e3a503)より情報提供頂きました）

YouTube API
https://developers.google.com/youtube

非公式API
https://ytmusicapi.readthedocs.io/en/latest/
https://www.npmjs.com/package/youtube-music-api


# 2.歌詞情報API
##Musixmatch
https://www.musixmatch.com/ja
https://developer.musixmatch.com/

歌詞情報を提供するサービス。
2kまでのAPIコールであれば無料で利用できる。

## Genius
https://genius.com/

https://genius.com/api-clients
*サインアップが必要

歌詞情報のサービス。
歌詞に対してなぜそのような歌詞が書かれているのか、といった背景についてユーザー間で投稿ができるようになっている。

## 歌詞GET
http://www.kget.jp/api/

歌詞情報を検索、閲覧できるサービス。
APIは以下の機能を提供している
・歌詞検索
・歌詞詳細
・新着歌詞日付一覧
・新着歌詞一覧
・デイリーランキング一覧
・ウィークリーランキング一覧
・マンスリーランキング一覧

仕様の詳細、及び価格については問い合わせが必要
http://www.kget.jp/mailto/

# 3.音声認識系API
## 音響認識SDK
マイクで録音した音声信号を入力し、演奏タイミングや音程・和音を識別して結果を返す機能を提供している。
演奏の採点等に使用できる。
https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_name=acoustic_recognition&p_name=api_usage_scenario

## ACRCloud
https://www.acrcloud.jp/
コンテンツの自動認識サービス。
[音声フィンガープリント](https://www.acrcloud.jp/technologies)と呼ばれる技術を用いることで、周囲で流れている音楽や鼻歌から楽曲を特定することが可能となる。
また、ストリーミングサービス（SpotifyやDeezerなど)の楽曲とリンクを繋げることができるため、そのまま各ストリーミングサービスから直接楽曲を購入・再生などができる。

サインアップ時に14日間のフリートライアルが設けられるため、そこでテストが可能。

## AudD
https://audd.io/
音声認識API。約4250万曲のデータベースを持っている。
音声認識の方法として、
1.マイクやオーディオファイルを通じた音声
2.鼻歌
3.歌詞
の3つが提供されている。

作成例としてブラウザ上で流れる音声の認識を行う[Chrome拡張機能](https://chrome.google.com/webstore/detail/audd%C2%AE-music-recognition/lhhohkfofnfbnildpdhhjeeenapeceei)を作成している。

一度のリクエストで10を超えるリクエストをしたい場合はAPIトークンが必要とのこと
https://docs.audd.io/#authentication-and-limits

# 4.その他API
## Gracenote
https://developer.gracenote.com/
音楽CDデータベースのAPI。音楽のメタデータ（曲名は勿論、リリース日やジャンル、テンポ等）を所有しており、Apple iTunes Storeなどの音楽配信サービスや、ソニー、パイオニア、アルパインなどの自動車・家電製品、Samsung、Sony Ericssonなどの携帯音楽アプリケーションに技術を提供している。
APIは大きく分けて3つ
### 1.メタデータ
曲名やリリース日、国、カバーアート画像やジャンル等テキスト情報を取得できる。
試験版であるが"Timeline API"を利用すると、ビートの位置や曲の区切り、テンポなどの情報を曲のタイムライン毎に取得できる。
https://developer.gracenote.com/web-api

### 2.楽曲認識
SDK(GNSDK)を利用した音声認識検索機能の提供。
試験版であるが"LiveID"と呼ばれる機能を利用することでアーティストのライブ演奏の楽曲と元の音源をマッチさせる機能を提供している。

### 3.ミュージック・ディスカバリー
"Rhythm API" を利用すると楽曲のフィルタリング、リコメンド機能を使用できる。
利用ユーザーに向けたラジオやプレイリストのリコメンド、ユーザーの好み、気分に合わせた楽曲のフィルタリング等。
https://developer.gracenote.com/rhythm-api

## Music Story
音楽メタデータのサービス。[欧州、北アメリカのアーティストの情報が主となっている](http://www.music-story.com/stats/)。楽曲情報だけでなくアーティストのホームページやSNSリンク、歌詞やアルバムのレビュー情報なども取得できる。
http://developers.music-story.com/developers


## Discogs
https://www.discogs.com/developers/
音楽データベースのAPI。参加ユーザー同士の有志による情報作成のため、楽曲情報編集等のAPIも提供されている。

## Last.fm
楽曲の好みをパーソナライズして提供するストリーミングラジオを利用した音楽SNS。
https://www.last.fm/ja/api

## FANART.tv
ジャケ写等画像を取得できる。
https://fanart.tv/
https://fanarttv.docs.apiary.io/

## Billboard Chart
https://github.com/guoguo12/billboard-charts
（非公式）[Billboard.com](https://www.billboard.com/charts)のチャートを取得できる。

## MusicBrainz
https://musicbrainz.org/
オープンな音楽データベースを提供するサービス。

こちらの記事が詳しいです。
https://dev.classmethod.jp/tool/music-brainz/

## Cover Art Archive
https://coverartarchive.org/
アーティストの楽曲、アルバムに使われるカバーアート画像を簡単に取得できることを目指したサービス。
MusicBrainzと様々なメディア情報を保存している[Internet Archive](https://archive.org/)の共同で作成されたAPI。
カバーアートはMusicBrainzのユーザーからアップロードされ、有志でユーザー同士でチェックしているため品質が保たれているとのこと。


## TextAlive
http://textalive.jp/
産総研のサービス。
音楽に合わせて歌詞アニメーションをつけることの出来るプログラム。
自動生成することも出来るが、プログラミングの知識があればブラウザ上に用意されたテキストエディタで編集して凝ったものもつくれる。

以下はエディタ内で使用するAPI
http://docs.textalive.jp/programming/templates/

## Songle Sync
http://api.songle.jp/sync
上に同じく産総研のサービス。
[能動的音楽鑑賞サービスSongle(ソングル)](http://songle.jp/)で使われている技術を利用したAPI。
楽曲の解析内容（サビ・イントロなどの構成、BPM、コード、メロディ）を基に様々なイベントを受け取ることができる。
例えば、サビに入ったというイベントを受けた際に映像の演出を切り替えたり、照明の色を一斉に切り替えるなど。
以下チュートリアル
http://tutorial.songle.jp/sync

## チケットぴあ
http://t.pia.jp/info/api.jsp
大別して検索系API,購入系APIの2種類を提供している。
利用に際しては審査・利用料が必要になるとのこと。

## SonicAPI
http://www.sonicapi.com/
音声ファイルに対して様々な分析をしたり、処理を加えたりすることが出来るAPI。
Ableton, Steinberg, Korg等に技術提供を行っている。
無料アカウントの場合、2.5GBバイトまでの音声ファイルを処理できる(1ファイルあたり上限15分まで)

利用可能なAPIは以下の通り
### 分析API
・analyze/chords
コードの検出
・analyze/key
キーの分析。メジャー・マイナーの検出。
・analyze/loudness
音圧
・analyze/melody
メロディーの検出。単音のメロディー（例えば、アカペラの音声ファイル等）にのみ使用可能。
・analyze/tempo
テンポの検出。

### ファイルAPI
・file/download
ファイルのダウンロードリンクを提供
・file/status
ファイルの状態を確認(ダウンロード可能かどうか)
・file/upload
音声ファイルのアップロード

### 処理API
・process/elastique
テンポとピッチの変更
・process/elastiqueTune
単音のメロディーのピッチ補正
・process/reverb
リバーブ効果を付与する

## Music Skill API
Amazon AlexaやAmazon EchoなどのAlexa対応デバイスに対して音楽ストリーミングの機能を作成できるAPI。

＊スキルの配信地域は現在米国内のみ対応
https://developer.amazon.com/ja/docs/music-skills/understand-the-music-skill-api.html

## Songlink
https://song.link/
様々な音楽ストリーミングサービスへのリンクをまとめたランディングページを作成できるサービス。
例えば[Spotifyのトラックリンク](https://open.spotify.com/track/0y675KDleCZEudjoeL1sQQ?si=fiyagGcsSXujQCRUbOHqvg)をsonglinkの検索フォームに貼り付けると、他ストリーミングサービスへのリンクをまとめた[ランディングページ](https://song.link/s/0y675KDleCZEudjoeL1sQQ)が作成される。

APIドキュメント
https://github.com/songlink/docs/blob/master/api-v1-alpha.1.md

## bandsintown Events API
https://www.artists.bandsintown.com/support/api-installation

アーティストのイベント情報を掲載する[bandsintown](https://www.bandsintown.com/ja)が提供するAPIで、アーティスト情報、イベント情報の取得ができる。
主にアーティストやその関係者向けのAPIとして提供されているが、学術目的の学生にも提供されている。
APIリクエストを行うにはフォームから申し込みを行い、Application IDを貰う必要がある（学生向けのApplication IDは３ヶ月間有効とのこと）

## songkick API
https://www.songkick.com/developer

アーティストのイベント情報を掲載する[songkick](https://www.songkick.com/)が提供するAPI。

主に以下の機能が提供されている
・開催予定イベント、アーティスト情報の検索
・songkickユーザーがフォローしている過去および今後開催予定のイベント情報の取得
・過去行われたイベント情報の取得

## Chartmetric API
https://www.chartmetric.com/
https://api.chartmetric.com/apidoc/

複数のストリーミングサービスやSNSを横断してアーティストの作品情報に対する様々な分析ができるサービス。
サービスの主な機能は[こちら](https://www.chartmetric.com/features)
APIリクエストを行う場合、charmetric側に連絡し、APIキーを貰う必要がある。