Skip to content

Commit aa56a1b

Browse files
committed
Started on implementing TrackAudioAnalysis serialization
1 parent fd4f8f0 commit aa56a1b

File tree

11 files changed

+353
-9
lines changed

11 files changed

+353
-9
lines changed

src/main/java/com/spotify/objects/SpotifySerializer.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,16 @@ private <E extends Serializable> E serializeField(Class<E> componentType, JSONOb
115115

116116
@SuppressWarnings("unchecked")
117117
private <E extends Serializable> E[] createArray(Class<E> cls, JSONArray jsonArray) {
118+
if (cls.isPrimitive()) {
119+
if (cls.equals(int.class))
120+
cls = (Class<E>) Integer.class;
121+
else if (cls.equals(boolean.class))
122+
cls = (Class<E>) Boolean.class;
123+
else if (cls.equals(double.class))
124+
cls = (Class<E>) Double.class;
125+
else
126+
return null;
127+
}
118128
E[] array = (E[]) Array.newInstance(cls, jsonArray.length());
119129
for (int i = 0; i < array.length; i++)
120130
array[i] = this.serializeField(cls, jsonArray.getModifiedJSONObject(i), "value");
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.spotify.objects.tracks;
2+
3+
import com.spotify.objects.SpotifyField;
4+
import com.spotify.objects.SpotifyObject;
5+
import com.spotify.objects.tracks.analysis.*;
6+
import lombok.Getter;
7+
import lombok.Setter;
8+
import lombok.ToString;
9+
10+
11+
@Getter
12+
@Setter
13+
@ToString
14+
public class TrackAudioAnalysis implements SpotifyObject {
15+
16+
17+
@SpotifyField
18+
private AudioMeta meta;
19+
20+
@SpotifyField
21+
private AudioTrack track;
22+
23+
@SpotifyField
24+
private AudioBar[] bars;
25+
26+
@SpotifyField
27+
private AudioBeat[] beats;
28+
29+
@SpotifyField
30+
private AudioSection[] sections;
31+
32+
@SpotifyField
33+
private AudioSegment[] segments;
34+
35+
@SpotifyField
36+
private AudioTatum[] tatums;
37+
38+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.spotify.objects.tracks.analysis;
2+
3+
import com.spotify.objects.SpotifyField;
4+
import com.spotify.objects.SpotifyObject;
5+
import com.spotify.objects.SpotifyOptional;
6+
import lombok.Getter;
7+
import lombok.Setter;
8+
9+
@Getter
10+
@Setter
11+
@SpotifyOptional
12+
public class AudioBar implements SpotifyObject {
13+
14+
@SpotifyField
15+
private double start;
16+
17+
@SpotifyField
18+
private double duration;
19+
20+
@SpotifyField
21+
private double confidence;
22+
23+
24+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.spotify.objects.tracks.analysis;
2+
3+
import com.spotify.objects.SpotifyField;
4+
import com.spotify.objects.SpotifyObject;
5+
import com.spotify.objects.SpotifyOptional;
6+
import lombok.Getter;
7+
import lombok.Setter;
8+
9+
@Getter
10+
@Setter
11+
@SpotifyOptional
12+
public class AudioBeat implements SpotifyObject {
13+
14+
@SpotifyField
15+
private double start;
16+
17+
@SpotifyField
18+
private double duration;
19+
20+
@SpotifyField
21+
private double confidence;
22+
23+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.spotify.objects.tracks.analysis;
2+
3+
import com.spotify.objects.SpotifyField;
4+
import com.spotify.objects.SpotifyObject;
5+
import lombok.Getter;
6+
import lombok.Setter;
7+
import lombok.ToString;
8+
9+
10+
@Getter
11+
@Setter
12+
@ToString
13+
public class AudioMeta implements SpotifyObject {
14+
15+
16+
@SpotifyField("analyzer_version")
17+
private String analyzerVersion;
18+
19+
@SpotifyField
20+
private String platform;
21+
22+
@SpotifyField("detailed_status")
23+
private String detailedStatus;
24+
25+
@SpotifyField("status_code")
26+
private int statusCode;
27+
28+
@SpotifyField
29+
private int timestamp;
30+
31+
@SpotifyField("analysis_time")
32+
private double analysisTime;
33+
34+
@SpotifyField("input_process")
35+
private String inputProcess;
36+
37+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.spotify.objects.tracks.analysis;
2+
3+
import com.spotify.objects.SpotifyField;
4+
import com.spotify.objects.SpotifyObject;
5+
import com.spotify.objects.SpotifyOptional;
6+
import lombok.Getter;
7+
import lombok.Setter;
8+
9+
@Getter
10+
@Setter
11+
@SpotifyOptional
12+
public class AudioSection implements SpotifyObject {
13+
14+
15+
@SpotifyField
16+
private double number;
17+
18+
@SpotifyField
19+
private double duration;
20+
21+
@SpotifyField
22+
private double confidence;
23+
24+
@SpotifyField
25+
private double loudness;
26+
27+
@SpotifyField
28+
private double tempo;
29+
30+
@SpotifyField("tempo_confidence")
31+
private double tempConfidence;
32+
33+
@SpotifyField
34+
private int key;
35+
36+
@SpotifyField("key_confidence")
37+
private double keyConfidence;
38+
39+
@SpotifyField
40+
private double mode;
41+
42+
@SpotifyField("mode_confidence")
43+
private double modeConfidence;
44+
45+
@SpotifyField("time_signature")
46+
private int timeSignature;
47+
48+
@SpotifyField("time_signature_confidence")
49+
private double timeSignatureConfidence;
50+
51+
52+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.spotify.objects.tracks.analysis;
2+
3+
import com.spotify.objects.SpotifyField;
4+
import com.spotify.objects.SpotifyObject;
5+
import com.spotify.objects.SpotifyOptional;
6+
import lombok.Getter;
7+
import lombok.Setter;
8+
9+
@Getter
10+
@Setter
11+
@SpotifyOptional
12+
public class AudioSegment implements SpotifyObject {
13+
14+
15+
@SpotifyField
16+
private double start;
17+
18+
@SpotifyField
19+
private double duration;
20+
21+
@SpotifyField
22+
private double confidence;
23+
24+
@SpotifyField("loudness_start")
25+
private double loudnessStart;
26+
27+
@SpotifyField("loudness_max")
28+
private double loudnessMax;
29+
30+
@SpotifyField("loudness_max_time")
31+
private double loudnessMaxTime;
32+
33+
@SpotifyField("loudness_end")
34+
private double loudnessEnd;
35+
36+
@SpotifyField
37+
private double[] pitches;
38+
39+
@SpotifyField
40+
private double[] timbre;
41+
42+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.spotify.objects.tracks.analysis;
2+
3+
import com.spotify.objects.SpotifyField;
4+
import com.spotify.objects.SpotifyObject;
5+
import com.spotify.objects.SpotifyOptional;
6+
import lombok.Getter;
7+
import lombok.Setter;
8+
9+
@Getter
10+
@Setter
11+
@SpotifyOptional
12+
public class AudioTatum implements SpotifyObject {
13+
14+
15+
@SpotifyField
16+
private double start;
17+
18+
@SpotifyField
19+
private double duration;
20+
21+
@SpotifyField
22+
private double confidence;
23+
24+
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package com.spotify.objects.tracks.analysis;
2+
3+
import com.spotify.objects.SpotifyField;
4+
import com.spotify.objects.SpotifyObject;
5+
import com.spotify.objects.SpotifyOptional;
6+
import lombok.Getter;
7+
import lombok.Setter;
8+
9+
10+
@Getter
11+
@Setter
12+
@SpotifyOptional
13+
public class AudioTrack implements SpotifyObject {
14+
15+
16+
@SpotifyField("num_samples")
17+
private int numSamples;
18+
19+
@SpotifyField
20+
private double duration;
21+
22+
@SpotifyField("sample_md5")
23+
private String sampleMd5;
24+
25+
@SpotifyField("offset_seconds")
26+
private int offsetSeconds;
27+
28+
@SpotifyField("window_seconds")
29+
private int windowSeconds;
30+
31+
@SpotifyField("analysis_sample_rate")
32+
private int analysisSampleRate;
33+
34+
@SpotifyField("analysis_channels")
35+
private int analysisChannels;
36+
37+
@SpotifyField("end_of_fade_in")
38+
private double endOfFadeIn;
39+
40+
@SpotifyField("start_of_fade_out")
41+
private double startOfFadeOut;
42+
43+
@SpotifyField
44+
private double loudness;
45+
46+
@SpotifyField
47+
private double tempo;
48+
49+
@SpotifyField("tempo_confidence")
50+
private double tempoConfidence;
51+
52+
@SpotifyField("time_signature")
53+
private int timeSignature;
54+
55+
@SpotifyField("time_signature_confidence")
56+
private double timeSignatureConfidence;
57+
58+
@SpotifyField
59+
private int key;
60+
61+
@SpotifyField("key_confidence")
62+
private double keyConfidence;
63+
64+
@SpotifyField
65+
private int mode;
66+
67+
@SpotifyField("mode_confidence")
68+
private double modeConfidence;
69+
70+
@SpotifyField("codestring")
71+
private String code;
72+
73+
@SpotifyField("code_version")
74+
private double codeVersion;
75+
76+
@SpotifyField("echoprintstring")
77+
private String echoprint;
78+
79+
@SpotifyField("echoprint_version")
80+
private double echoPrintVersion;
81+
82+
@SpotifyField("synchstring")
83+
private String synch;
84+
85+
@SpotifyField("synch_version")
86+
private double synchVersion;
87+
88+
@SpotifyField("rhythmstring")
89+
private String rhythm;
90+
91+
@SpotifyField("rhythm_version")
92+
private double rhythmVersion;
93+
94+
}

src/main/java/com/spotify/requests/tracks/TrackAudioAnalysisGet.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.spotify.requests.tracks;
22

3+
import com.spotify.objects.SpotifySerialize;
4+
import com.spotify.objects.tracks.TrackAudioAnalysis;
35
import com.spotify.requests.AbstractRequest;
46
import com.spotify.requests.SpotifyRequest;
57
import com.spotify.requests.SpotifySubRequest;
@@ -10,6 +12,7 @@
1012
* <a href="https://developer.spotify.com/documentation/web-api/reference/#/operations/get-audio-analysis">Spotify Docs</a>
1113
*/
1214
@SpotifyRequest("audio-analysis")
15+
@SpotifySerialize(TrackAudioAnalysis.class)
1316
public class TrackAudioAnalysisGet extends AbstractRequest {
1417

1518

0 commit comments

Comments
 (0)