UNPKG

cody-music

Version:

mac osx spotify and itunes music player controller, spotify audio features, itunes and spotify genre, and playlist control

88 lines (81 loc) 3.3 kB
import { SpotifyAudioFeature } from "./models"; import { MusicClient } from "./client"; import { MusicUtil } from "./util"; const musicClient = MusicClient.getInstance(); const musicUtil = new MusicUtil(); export class AudioStat { private static instance: AudioStat; private constructor() { // } static getInstance() { if (!AudioStat.instance) { AudioStat.instance = new AudioStat(); } return AudioStat.instance; } async getSpotifyAudioFeatures( ids: string[] ): Promise<SpotifyAudioFeature[]> { let audiofeatures: SpotifyAudioFeature[] = []; if (!ids || ids.length === 0) { return audiofeatures; } // make sure the IDs are the short spotify ID format ids = ids.map((id) => { return musicUtil.createSpotifyIdFromUri(id); }); if (ids.length > 0) { // still some ids left, fetch the features for these ids const qstr = `?ids=${ids.join(",")}`; const api = `/v1/audio-features${qstr}`; let response = await musicClient.spotifyApiGet(api); // check if the token needs to be refreshed if (response.status === 401) { // refresh the token await musicClient.refreshSpotifyToken(); // try again response = await musicClient.spotifyApiGet(api); } // response.data will have a listof audio_features if it's successful: if ( response.data && response.status === 200 && response.data.audio_features ) { /** * { "audio_features": [ { "danceability": 0.808, "energy": 0.626, "key": 7, "loudness": -12.733, "mode": 1, "speechiness": 0.168, "acousticness": 0.00187, "instrumentalness": 0.159, "liveness": 0.376, "valence": 0.369, "tempo": 123.99, "type": "audio_features", "id": "4JpKVNYnVcJ8tuMKjAj50A", "uri": "spotify:track:4JpKVNYnVcJ8tuMKjAj50A", "track_href": "https://api.spotify.com/v1/tracks/4JpKVNYnVcJ8tuMKjAj50A", "analysis_url": "http://echonest-analysis.s3.amazonaws.com/TR/WhpYUARk1kNJ_qP0AdKGcDDFKOQTTgsOoINrqyPQjkUnbteuuBiyj_u94iFCSGzdxGiwqQ6d77f4QLL_8=/3/full.json?AWSAccessKeyId=AKIAJRDFEY23UEVW42BQ&Expires=1458063189&Signature=JRE8SDZStpNOdUsPN/PoS49FMtQ%3D", "duration_ms": 535223, "time_signature": 4 }, */ let audio_features: SpotifyAudioFeature[] = response.data.audio_features; if (audio_features && audio_features.length > 0) { audio_features.forEach((feature) => { if (feature) { audiofeatures.push(feature); } }); } } } return audiofeatures; } }