Example usage
Storing annotations
This section demonstrates a complete use-case of JAMS for storing estimated annotations. The example uses librosa to estimate global tempo and beat timings.
example_beat.py
The following script loads the librosa example audio clip, estimates the track duration, tempo, and beat timings, and constructs a JAMS object to store the estimations.
1#!/usr/bin/env python
2
3import librosa
4import jams
5
6
7def beat_track(infile, outfile):
8
9 # Load the audio file
10 y, sr = librosa.load(infile)
11
12 # Compute the track duration
13 track_duration = librosa.get_duration(y=y, sr=sr)
14
15 # Extract tempo and beat estimates
16 tempo, beat_frames = librosa.beat.beat_track(y=y, sr=sr)
17
18 # Convert beat frames to time
19 beat_times = librosa.frames_to_time(beat_frames, sr=sr)
20
21 # Construct a new JAMS object and annotation records
22 jam = jams.JAMS()
23
24 # Store the track duration
25 jam.file_metadata.duration = track_duration
26
27 beat_a = jams.Annotation(namespace='beat')
28 beat_a.annotation_metadata = jams.AnnotationMetadata(data_source='librosa beat tracker')
29
30 # Add beat timings to the annotation record.
31 # The beat namespace does not require value or confidence fields,
32 # so we can leave those blank.
33 for t in beat_times:
34 beat_a.append(time=t, duration=0.0)
35
36 # Store the new annotation in the jam
37 jam.annotations.append(beat_a)
38
39 # Add tempo estimation to the annotation.
40 tempo_a = jams.Annotation(namespace='tempo', time=0, duration=track_duration)
41 tempo_a.annotation_metadata = jams.AnnotationMetadata(data_source='librosa tempo estimator')
42
43 # The tempo estimate is global, so it should start at time=0 and cover the full
44 # track duration.
45 # If we had a likelihood score on the estimation, it could be stored in
46 # `confidence`. Since we have no competing estimates, we'll set it to 1.0.
47 tempo_a.append(time=0.0,
48 duration=track_duration,
49 value=tempo,
50 confidence=1.0)
51
52 # Store the new annotation in the jam
53 jam.annotations.append(tempo_a)
54
55 # Save to disk
56 jam.save(outfile)
57
58
59if __name__ == '__main__':
60
61 infile = librosa.util.example_audio_file()
62 beat_track(infile, 'output.jams')
example_beat_output.jams
The above script generates the following JAMS object.
1{
2 "sandbox": {},
3 "file_metadata": {
4 "duration": 61.45886621315193,
5 "title": "",
6 "release": "",
7 "identifiers": {},
8 "artist": "",
9 "jams_version": "0.2.3"
10 },
11 "annotations": [
12 {
13 "sandbox": {},
14 "duration": null,
15 "data": [
16 {
17 "value": null,
18 "confidence": null,
19 "time": 0.11609977324263039,
20 "duration": 0.0
21 },
22 {
23 "value": null,
24 "confidence": null,
25 "time": 0.5572789115646258,
26 "duration": 0.0
27 },
28 {
29 "value": null,
30 "confidence": null,
31 "time": 0.9984580498866213,
32 "duration": 0.0
33 },
34 {
35 "value": null,
36 "confidence": null,
37 "time": 1.4628571428571429,
38 "duration": 0.0
39 },
40 {
41 "value": null,
42 "confidence": null,
43 "time": 1.9272562358276644,
44 "duration": 0.0
45 },
46 {
47 "value": null,
48 "confidence": null,
49 "time": 2.391655328798186,
50 "duration": 0.0
51 },
52 {
53 "value": null,
54 "confidence": null,
55 "time": 2.8328344671201813,
56 "duration": 0.0
57 },
58 {
59 "value": null,
60 "confidence": null,
61 "time": 3.297233560090703,
62 "duration": 0.0
63 },
64 {
65 "value": null,
66 "confidence": null,
67 "time": 3.7616326530612243,
68 "duration": 0.0
69 },
70 {
71 "value": null,
72 "confidence": null,
73 "time": 4.2260317460317465,
74 "duration": 0.0
75 },
76 {
77 "value": null,
78 "confidence": null,
79 "time": 4.690430839002268,
80 "duration": 0.0
81 },
82 {
83 "value": null,
84 "confidence": null,
85 "time": 5.154829931972789,
86 "duration": 0.0
87 },
88 {
89 "value": null,
90 "confidence": null,
91 "time": 5.61922902494331,
92 "duration": 0.0
93 },
94 {
95 "value": null,
96 "confidence": null,
97 "time": 6.0836281179138325,
98 "duration": 0.0
99 },
100 {
101 "value": null,
102 "confidence": null,
103 "time": 6.524807256235827,
104 "duration": 0.0
105 },
106 {
107 "value": null,
108 "confidence": null,
109 "time": 6.989206349206349,
110 "duration": 0.0
111 },
112 {
113 "value": null,
114 "confidence": null,
115 "time": 7.453605442176871,
116 "duration": 0.0
117 },
118 {
119 "value": null,
120 "confidence": null,
121 "time": 7.918004535147392,
122 "duration": 0.0
123 },
124 {
125 "value": null,
126 "confidence": null,
127 "time": 8.382403628117913,
128 "duration": 0.0
129 },
130 {
131 "value": null,
132 "confidence": null,
133 "time": 8.870022675736962,
134 "duration": 0.0
135 },
136 {
137 "value": null,
138 "confidence": null,
139 "time": 9.311201814058958,
140 "duration": 0.0
141 },
142 {
143 "value": null,
144 "confidence": null,
145 "time": 9.775600907029478,
146 "duration": 0.0
147 },
148 {
149 "value": null,
150 "confidence": null,
151 "time": 10.24,
152 "duration": 0.0
153 },
154 {
155 "value": null,
156 "confidence": null,
157 "time": 10.704399092970522,
158 "duration": 0.0
159 },
160 {
161 "value": null,
162 "confidence": null,
163 "time": 11.145578231292516,
164 "duration": 0.0
165 },
166 {
167 "value": null,
168 "confidence": null,
169 "time": 11.609977324263038,
170 "duration": 0.0
171 },
172 {
173 "value": null,
174 "confidence": null,
175 "time": 12.07437641723356,
176 "duration": 0.0
177 },
178 {
179 "value": null,
180 "confidence": null,
181 "time": 12.538775510204081,
182 "duration": 0.0
183 },
184 {
185 "value": null,
186 "confidence": null,
187 "time": 13.003174603174603,
188 "duration": 0.0
189 },
190 {
191 "value": null,
192 "confidence": null,
193 "time": 13.467573696145125,
194 "duration": 0.0
195 },
196 {
197 "value": null,
198 "confidence": null,
199 "time": 13.931972789115646,
200 "duration": 0.0
201 },
202 {
203 "value": null,
204 "confidence": null,
205 "time": 14.396371882086168,
206 "duration": 0.0
207 },
208 {
209 "value": null,
210 "confidence": null,
211 "time": 14.837551020408164,
212 "duration": 0.0
213 },
214 {
215 "value": null,
216 "confidence": null,
217 "time": 15.27873015873016,
218 "duration": 0.0
219 },
220 {
221 "value": null,
222 "confidence": null,
223 "time": 15.74312925170068,
224 "duration": 0.0
225 },
226 {
227 "value": null,
228 "confidence": null,
229 "time": 16.207528344671204,
230 "duration": 0.0
231 },
232 {
233 "value": null,
234 "confidence": null,
235 "time": 16.671927437641724,
236 "duration": 0.0
237 },
238 {
239 "value": null,
240 "confidence": null,
241 "time": 17.11310657596372,
242 "duration": 0.0
243 },
244 {
245 "value": null,
246 "confidence": null,
247 "time": 17.600725623582765,
248 "duration": 0.0
249 },
250 {
251 "value": null,
252 "confidence": null,
253 "time": 18.04190476190476,
254 "duration": 0.0
255 },
256 {
257 "value": null,
258 "confidence": null,
259 "time": 18.52952380952381,
260 "duration": 0.0
261 },
262 {
263 "value": null,
264 "confidence": null,
265 "time": 18.970702947845805,
266 "duration": 0.0
267 },
268 {
269 "value": null,
270 "confidence": null,
271 "time": 19.435102040816325,
272 "duration": 0.0
273 },
274 {
275 "value": null,
276 "confidence": null,
277 "time": 19.89950113378685,
278 "duration": 0.0
279 },
280 {
281 "value": null,
282 "confidence": null,
283 "time": 20.36390022675737,
284 "duration": 0.0
285 },
286 {
287 "value": null,
288 "confidence": null,
289 "time": 20.805079365079365,
290 "duration": 0.0
291 },
292 {
293 "value": null,
294 "confidence": null,
295 "time": 21.292698412698414,
296 "duration": 0.0
297 },
298 {
299 "value": null,
300 "confidence": null,
301 "time": 21.73387755102041,
302 "duration": 0.0
303 },
304 {
305 "value": null,
306 "confidence": null,
307 "time": 22.221496598639455,
308 "duration": 0.0
309 },
310 {
311 "value": null,
312 "confidence": null,
313 "time": 22.66267573696145,
314 "duration": 0.0
315 },
316 {
317 "value": null,
318 "confidence": null,
319 "time": 23.127074829931974,
320 "duration": 0.0
321 },
322 {
323 "value": null,
324 "confidence": null,
325 "time": 23.591473922902495,
326 "duration": 0.0
327 },
328 {
329 "value": null,
330 "confidence": null,
331 "time": 24.055873015873015,
332 "duration": 0.0
333 },
334 {
335 "value": null,
336 "confidence": null,
337 "time": 24.49705215419501,
338 "duration": 0.0
339 },
340 {
341 "value": null,
342 "confidence": null,
343 "time": 24.961451247165535,
344 "duration": 0.0
345 },
346 {
347 "value": null,
348 "confidence": null,
349 "time": 25.425850340136055,
350 "duration": 0.0
351 },
352 {
353 "value": null,
354 "confidence": null,
355 "time": 25.913469387755104,
356 "duration": 0.0
357 },
358 {
359 "value": null,
360 "confidence": null,
361 "time": 26.354648526077096,
362 "duration": 0.0
363 },
364 {
365 "value": null,
366 "confidence": null,
367 "time": 26.81904761904762,
368 "duration": 0.0
369 },
370 {
371 "value": null,
372 "confidence": null,
373 "time": 27.28344671201814,
374 "duration": 0.0
375 },
376 {
377 "value": null,
378 "confidence": null,
379 "time": 27.74784580498866,
380 "duration": 0.0
381 },
382 {
383 "value": null,
384 "confidence": null,
385 "time": 28.189024943310656,
386 "duration": 0.0
387 },
388 {
389 "value": null,
390 "confidence": null,
391 "time": 28.65342403628118,
392 "duration": 0.0
393 },
394 {
395 "value": null,
396 "confidence": null,
397 "time": 29.1178231292517,
398 "duration": 0.0
399 },
400 {
401 "value": null,
402 "confidence": null,
403 "time": 29.60544217687075,
404 "duration": 0.0
405 },
406 {
407 "value": null,
408 "confidence": null,
409 "time": 30.06984126984127,
410 "duration": 0.0
411 },
412 {
413 "value": null,
414 "confidence": null,
415 "time": 30.53424036281179,
416 "duration": 0.0
417 },
418 {
419 "value": null,
420 "confidence": null,
421 "time": 30.975419501133786,
422 "duration": 0.0
423 },
424 {
425 "value": null,
426 "confidence": null,
427 "time": 31.43981859410431,
428 "duration": 0.0
429 },
430 {
431 "value": null,
432 "confidence": null,
433 "time": 31.880997732426305,
434 "duration": 0.0
435 },
436 {
437 "value": null,
438 "confidence": null,
439 "time": 32.36861678004535,
440 "duration": 0.0
441 },
442 {
443 "value": null,
444 "confidence": null,
445 "time": 32.833015873015874,
446 "duration": 0.0
447 },
448 {
449 "value": null,
450 "confidence": null,
451 "time": 33.29741496598639,
452 "duration": 0.0
453 },
454 {
455 "value": null,
456 "confidence": null,
457 "time": 33.73859410430839,
458 "duration": 0.0
459 },
460 {
461 "value": null,
462 "confidence": null,
463 "time": 34.202993197278914,
464 "duration": 0.0
465 },
466 {
467 "value": null,
468 "confidence": null,
469 "time": 34.66739229024943,
470 "duration": 0.0
471 },
472 {
473 "value": null,
474 "confidence": null,
475 "time": 35.131791383219955,
476 "duration": 0.0
477 },
478 {
479 "value": null,
480 "confidence": null,
481 "time": 35.57297052154195,
482 "duration": 0.0
483 },
484 {
485 "value": null,
486 "confidence": null,
487 "time": 36.060589569160996,
488 "duration": 0.0
489 },
490 {
491 "value": null,
492 "confidence": null,
493 "time": 36.52498866213152,
494 "duration": 0.0
495 },
496 {
497 "value": null,
498 "confidence": null,
499 "time": 36.989387755102044,
500 "duration": 0.0
501 },
502 {
503 "value": null,
504 "confidence": null,
505 "time": 37.430566893424036,
506 "duration": 0.0
507 },
508 {
509 "value": null,
510 "confidence": null,
511 "time": 37.89496598639456,
512 "duration": 0.0
513 },
514 {
515 "value": null,
516 "confidence": null,
517 "time": 38.35936507936508,
518 "duration": 0.0
519 },
520 {
521 "value": null,
522 "confidence": null,
523 "time": 38.8237641723356,
524 "duration": 0.0
525 },
526 {
527 "value": null,
528 "confidence": null,
529 "time": 39.2649433106576,
530 "duration": 0.0
531 },
532 {
533 "value": null,
534 "confidence": null,
535 "time": 39.75256235827664,
536 "duration": 0.0
537 },
538 {
539 "value": null,
540 "confidence": null,
541 "time": 40.216961451247165,
542 "duration": 0.0
543 },
544 {
545 "value": null,
546 "confidence": null,
547 "time": 40.68136054421769,
548 "duration": 0.0
549 },
550 {
551 "value": null,
552 "confidence": null,
553 "time": 41.12253968253968,
554 "duration": 0.0
555 },
556 {
557 "value": null,
558 "confidence": null,
559 "time": 41.586938775510205,
560 "duration": 0.0
561 },
562 {
563 "value": null,
564 "confidence": null,
565 "time": 42.05133786848072,
566 "duration": 0.0
567 },
568 {
569 "value": null,
570 "confidence": null,
571 "time": 42.515736961451246,
572 "duration": 0.0
573 },
574 {
575 "value": null,
576 "confidence": null,
577 "time": 42.956916099773245,
578 "duration": 0.0
579 },
580 {
581 "value": null,
582 "confidence": null,
583 "time": 43.44453514739229,
584 "duration": 0.0
585 },
586 {
587 "value": null,
588 "confidence": null,
589 "time": 43.885714285714286,
590 "duration": 0.0
591 },
592 {
593 "value": null,
594 "confidence": null,
595 "time": 44.373333333333335,
596 "duration": 0.0
597 },
598 {
599 "value": null,
600 "confidence": null,
601 "time": 44.83773242630385,
602 "duration": 0.0
603 },
604 {
605 "value": null,
606 "confidence": null,
607 "time": 45.302131519274376,
608 "duration": 0.0
609 },
610 {
611 "value": null,
612 "confidence": null,
613 "time": 45.7665306122449,
614 "duration": 0.0
615 },
616 {
617 "value": null,
618 "confidence": null,
619 "time": 46.20770975056689,
620 "duration": 0.0
621 },
622 {
623 "value": null,
624 "confidence": null,
625 "time": 46.672108843537416,
626 "duration": 0.0
627 },
628 {
629 "value": null,
630 "confidence": null,
631 "time": 47.13650793650794,
632 "duration": 0.0
633 },
634 {
635 "value": null,
636 "confidence": null,
637 "time": 47.600907029478456,
638 "duration": 0.0
639 },
640 {
641 "value": null,
642 "confidence": null,
643 "time": 48.06530612244898,
644 "duration": 0.0
645 },
646 {
647 "value": null,
648 "confidence": null,
649 "time": 48.529705215419504,
650 "duration": 0.0
651 },
652 {
653 "value": null,
654 "confidence": null,
655 "time": 48.99410430839002,
656 "duration": 0.0
657 },
658 {
659 "value": null,
660 "confidence": null,
661 "time": 49.458503401360545,
662 "duration": 0.0
663 },
664 {
665 "value": null,
666 "confidence": null,
667 "time": 49.92290249433107,
668 "duration": 0.0
669 },
670 {
671 "value": null,
672 "confidence": null,
673 "time": 50.387301587301586,
674 "duration": 0.0
675 },
676 {
677 "value": null,
678 "confidence": null,
679 "time": 50.85170068027211,
680 "duration": 0.0
681 },
682 {
683 "value": null,
684 "confidence": null,
685 "time": 51.2928798185941,
686 "duration": 0.0
687 },
688 {
689 "value": null,
690 "confidence": null,
691 "time": 51.757278911564626,
692 "duration": 0.0
693 },
694 {
695 "value": null,
696 "confidence": null,
697 "time": 52.22167800453515,
698 "duration": 0.0
699 },
700 {
701 "value": null,
702 "confidence": null,
703 "time": 52.68607709750567,
704 "duration": 0.0
705 },
706 {
707 "value": null,
708 "confidence": null,
709 "time": 53.15047619047619,
710 "duration": 0.0
711 },
712 {
713 "value": null,
714 "confidence": null,
715 "time": 53.614875283446715,
716 "duration": 0.0
717 },
718 {
719 "value": null,
720 "confidence": null,
721 "time": 54.05605442176871,
722 "duration": 0.0
723 },
724 {
725 "value": null,
726 "confidence": null,
727 "time": 54.52045351473923,
728 "duration": 0.0
729 },
730 {
731 "value": null,
732 "confidence": null,
733 "time": 54.98485260770975,
734 "duration": 0.0
735 },
736 {
737 "value": null,
738 "confidence": null,
739 "time": 55.44925170068027,
740 "duration": 0.0
741 },
742 {
743 "value": null,
744 "confidence": null,
745 "time": 55.913650793650795,
746 "duration": 0.0
747 },
748 {
749 "value": null,
750 "confidence": null,
751 "time": 56.37804988662131,
752 "duration": 0.0
753 },
754 {
755 "value": null,
756 "confidence": null,
757 "time": 56.842448979591836,
758 "duration": 0.0
759 },
760 {
761 "value": null,
762 "confidence": null,
763 "time": 57.30684807256236,
764 "duration": 0.0
765 },
766 {
767 "value": null,
768 "confidence": null,
769 "time": 57.77124716553288,
770 "duration": 0.0
771 },
772 {
773 "value": null,
774 "confidence": null,
775 "time": 58.2356462585034,
776 "duration": 0.0
777 },
778 {
779 "value": null,
780 "confidence": null,
781 "time": 58.6768253968254,
782 "duration": 0.0
783 },
784 {
785 "value": null,
786 "confidence": null,
787 "time": 59.14122448979592,
788 "duration": 0.0
789 }
790 ],
791 "namespace": "beat",
792 "time": 0,
793 "annotation_metadata": {
794 "corpus": "",
795 "validation": "",
796 "annotation_tools": "",
797 "version": "",
798 "curator": {
799 "name": "",
800 "email": ""
801 },
802 "annotation_rules": "",
803 "annotator": {},
804 "data_source": "librosa beat tracker"
805 }
806 },
807 {
808 "sandbox": {},
809 "duration": 61.45886621315193,
810 "data": [
811 {
812 "value": 129.19921875,
813 "confidence": 1.0,
814 "time": 0.0,
815 "duration": 61.45886621315193
816 }
817 ],
818 "namespace": "tempo",
819 "time": 0,
820 "annotation_metadata": {
821 "corpus": "",
822 "validation": "",
823 "annotation_tools": "",
824 "version": "",
825 "curator": {
826 "name": "",
827 "email": ""
828 },
829 "annotation_rules": "",
830 "annotator": {},
831 "data_source": "librosa tempo estimator"
832 }
833 }
834 ]
835}
Evaluating annotations
The following script illustrates how to evaluate one JAMS annotation object against another using the built-in eval submodule to wrap mir_eval.
Given two jams files, say, reference.jams and estimate.jams, the script first loads them as objects
(j_ref and j_est, respectively). It then uses the JAMS.search method to locate all
annotations of namespace "beat". If no matching annotations are found, an empty list is returned.
In this example, we are assuming that each JAMS file contains only a single annotation of interest, so the first result is taken by indexing the results at 0. (In general, you may want to use annotation_metadata to select a specific annotation from the JAMS object, if multiple are present.)
Finally, the two annotations are compared by calling jams.eval.beat, which returns an ordered
dictionary of evaluation metrics for the annotations in question.
example_eval.py
1#!/usr/bin/env python
2
3import sys
4import jams
5
6from pprint import pprint
7
8def compare_beats(f_ref, f_est):
9
10 # f_ref contains the reference annotations
11 j_ref = jams.load(f_ref)
12
13 # f_est contains the estimated annotations
14 j_est = jams.load(f_est)
15
16 # Get the first reference beats
17 beat_ref = j_ref.search(namespace='beat')[0]
18 beat_est = j_est.search(namespace='beat')[0]
19
20 # Get the scores
21 return jams.eval.beat(beat_ref, beat_est)
22
23
24if __name__ == '__main__':
25
26 f_ref, f_est = sys.argv[1:]
27 scores = compare_beats(f_ref, f_est)
28
29 # Print them out
30 pprint(dict(scores))
31
Data conversion
JAMS provides some basic functionality to help convert from flat file formats (e.g., CSV or LAB).
example_chord_import.py
1#!/usr/bin/env python
2
3import jams
4import sys
5
6
7def import_chord_jams(infile, outfile):
8
9 # import_lab returns a new jams object,
10 # and a handle to the newly created annotation
11 chords = jams.util.import_lab('chord', infile)
12
13 # Infer the track duration from the end of the last annotation
14 duration = max([obs.time + obs.duration for obs in chords])
15
16 chords.time = 0
17 chords.duration = duration
18
19 # Create a jams object
20 jam = jams.JAMS()
21 jam.file_metadata.duration = duration
22 jam.annotations.append(chords)
23
24 # save to disk
25 jam.save(outfile)
26
27
28if __name__ == '__main__':
29
30 infile, outfile = sys.argv[1:]
31 import_chord_jams(infile, outfile)
chord_output.jams
Calling the above script on 01_-_I_Saw_Her_Standing_There.lab from IsoPhonics should produce the following JAMS object:
1{
2 "annotations": [
3 {
4 "duration": 175.804082,
5 "data": [
6 {
7 "duration": 2.6122669999999997,
8 "value": "N",
9 "confidence": 1.0,
10 "time": 0.0
11 },
12 {
13 "duration": 8.846803000000001,
14 "value": "E",
15 "confidence": 1.0,
16 "time": 2.6122669999999997
17 },
18 {
19 "duration": 1.4628569999999996,
20 "value": "A",
21 "confidence": 1.0,
22 "time": 11.45907
23 },
24 {
25 "duration": 4.521546999999998,
26 "value": "E",
27 "confidence": 1.0,
28 "time": 12.921927
29 },
30 {
31 "duration": 2.966888000000001,
32 "value": "B",
33 "confidence": 1.0,
34 "time": 17.443474
35 },
36 {
37 "duration": 1.497686999999999,
38 "value": "E",
39 "confidence": 1.0,
40 "time": 20.410362
41 },
42 {
43 "duration": 1.4628580000000007,
44 "value": "E:7/3",
45 "confidence": 1.0,
46 "time": 21.908049
47 },
48 {
49 "duration": 1.4860770000000016,
50 "value": "A",
51 "confidence": 1.0,
52 "time": 23.370907
53 },
54 {
55 "duration": 1.486076999999998,
56 "value": "A:min/b3",
57 "confidence": 1.0,
58 "time": 24.856984
59 },
60 {
61 "duration": 1.497686999999999,
62 "value": "E",
63 "confidence": 1.0,
64 "time": 26.343061
65 },
66 {
67 "duration": 1.5092970000000037,
68 "value": "B",
69 "confidence": 1.0,
70 "time": 27.840747999999998
71 },
72 {
73 "duration": 5.955917999999997,
74 "value": "E",
75 "confidence": 1.0,
76 "time": 29.350045
77 },
78 {
79 "duration": 1.497686999999999,
80 "value": "A",
81 "confidence": 1.0,
82 "time": 35.305963
83 },
84 {
85 "duration": 4.459452000000006,
86 "value": "E",
87 "confidence": 1.0,
88 "time": 36.80365
89 },
90 {
91 "duration": 2.982543999999997,
92 "value": "B",
93 "confidence": 1.0,
94 "time": 41.263102
95 },
96 {
97 "duration": 1.474466999999997,
98 "value": "E",
99 "confidence": 1.0,
100 "time": 44.245646
101 },
102 {
103 "duration": 1.4860770000000016,
104 "value": "E:7/3",
105 "confidence": 1.0,
106 "time": 45.720113
107 },
108 {
109 "duration": 1.4860770000000016,
110 "value": "A",
111 "confidence": 1.0,
112 "time": 47.20619
113 },
114 {
115 "duration": 1.4628569999999996,
116 "value": "A:min/b3",
117 "confidence": 1.0,
118 "time": 48.692267
119 },
120 {
121 "duration": 1.497686999999999,
122 "value": "E",
123 "confidence": 1.0,
124 "time": 50.155124
125 },
126 {
127 "duration": 1.4860770000000016,
128 "value": "B",
129 "confidence": 1.0,
130 "time": 51.652811
131 },
132 {
133 "duration": 2.9721550000000008,
134 "value": "E",
135 "confidence": 1.0,
136 "time": 53.138888
137 },
138 {
139 "duration": 9.020951999999987,
140 "value": "A",
141 "confidence": 1.0,
142 "time": 56.111043
143 },
144 {
145 "duration": 3.0185940000000073,
146 "value": "B",
147 "confidence": 1.0,
148 "time": 65.13199499999999
149 },
150 {
151 "duration": 3.0418140000000022,
152 "value": "A",
153 "confidence": 1.0,
154 "time": 68.150589
155 },
156 {
157 "duration": 3.0069840000000028,
158 "value": "E",
159 "confidence": 1.0,
160 "time": 71.192403
161 },
162 {
163 "duration": 1.497686999999999,
164 "value": "A",
165 "confidence": 1.0,
166 "time": 74.199387
167 },
168 {
169 "duration": 4.539501000000001,
170 "value": "E",
171 "confidence": 1.0,
172 "time": 75.697074
173 },
174 {
175 "duration": 2.9721550000000008,
176 "value": "B",
177 "confidence": 1.0,
178 "time": 80.236575
179 },
180 {
181 "duration": 3.012962999999999,
182 "value": "E",
183 "confidence": 1.0,
184 "time": 83.20873
185 },
186 {
187 "duration": 1.5149279999999976,
188 "value": "A",
189 "confidence": 1.0,
190 "time": 86.221693
191 },
192 {
193 "duration": 1.5209070000000082,
194 "value": "A:min/b3",
195 "confidence": 1.0,
196 "time": 87.736621
197 },
198 {
199 "duration": 1.4628569999999854,
200 "value": "E",
201 "confidence": 1.0,
202 "time": 89.25752800000001
203 },
204 {
205 "duration": 1.4370680000000107,
206 "value": "B",
207 "confidence": 1.0,
208 "time": 90.720385
209 },
210 {
211 "duration": 11.949235999999999,
212 "value": "E",
213 "confidence": 1.0,
214 "time": 92.157453
215 },
216 {
217 "duration": 3.0185940000000073,
218 "value": "B",
219 "confidence": 1.0,
220 "time": 104.106689
221 },
222 {
223 "duration": 3.0534239999999926,
224 "value": "E",
225 "confidence": 1.0,
226 "time": 107.12528300000001
227 },
228 {
229 "duration": 2.9453800000000143,
230 "value": "A",
231 "confidence": 1.0,
232 "time": 110.178707
233 },
234 {
235 "duration": 1.4896309999999744,
236 "value": "E",
237 "confidence": 1.0,
238 "time": 113.12408700000002
239 },
240 {
241 "duration": 1.4860770000000088,
242 "value": "B",
243 "confidence": 1.0,
244 "time": 114.61371799999999
245 },
246 {
247 "duration": 2.845166000000006,
248 "value": "E",
249 "confidence": 1.0,
250 "time": 116.099795
251 },
252 {
253 "duration": 9.101501000000013,
254 "value": "A",
255 "confidence": 1.0,
256 "time": 118.944961
257 },
258 {
259 "duration": 3.0069839999999886,
260 "value": "B",
261 "confidence": 1.0,
262 "time": 128.04646200000002
263 },
264 {
265 "duration": 2.983764000000008,
266 "value": "A",
267 "confidence": 1.0,
268 "time": 131.053446
269 },
270 {
271 "duration": 3.006984999999986,
272 "value": "E",
273 "confidence": 1.0,
274 "time": 134.03721000000002
275 },
276 {
277 "duration": 1.4313290000000052,
278 "value": "A",
279 "confidence": 1.0,
280 "time": 137.044195
281 },
282 {
283 "duration": 4.582638999999972,
284 "value": "E",
285 "confidence": 1.0,
286 "time": 138.475524
287 },
288 {
289 "duration": 2.9837640000000363,
290 "value": "B",
291 "confidence": 1.0,
292 "time": 143.05816299999998
293 },
294 {
295 "duration": 1.5092969999999752,
296 "value": "E",
297 "confidence": 1.0,
298 "time": 146.04192700000002
299 },
300 {
301 "duration": 1.5092970000000037,
302 "value": "E:7/3",
303 "confidence": 1.0,
304 "time": 147.551224
305 },
306 {
307 "duration": 1.451246999999995,
308 "value": "A",
309 "confidence": 1.0,
310 "time": 149.060521
311 },
312 {
313 "duration": 1.5092970000000037,
314 "value": "A:min/b3",
315 "confidence": 1.0,
316 "time": 150.511768
317 },
318 {
319 "duration": 1.509297000000032,
320 "value": "E",
321 "confidence": 1.0,
322 "time": 152.021065
323 },
324 {
325 "duration": 1.5325169999999844,
326 "value": "B",
327 "confidence": 1.0,
328 "time": 153.53036200000003
329 },
330 {
331 "duration": 4.469842,
332 "value": "E",
333 "confidence": 1.0,
334 "time": 155.062879
335 },
336 {
337 "duration": 1.5325169999999844,
338 "value": "B",
339 "confidence": 1.0,
340 "time": 159.532721
341 },
342 {
343 "duration": 4.516280999999992,
344 "value": "E",
345 "confidence": 1.0,
346 "time": 161.065238
347 },
348 {
349 "duration": 1.5325170000000128,
350 "value": "B",
351 "confidence": 1.0,
352 "time": 165.581519
353 },
354 {
355 "duration": 1.5325170000000128,
356 "value": "A",
357 "confidence": 1.0,
358 "time": 167.114036
359 },
360 {
361 "duration": 1.0908560000000023,
362 "value": "E",
363 "confidence": 1.0,
364 "time": 168.646553
365 },
366 {
367 "duration": 1.9497639999999876,
368 "value": "E:9",
369 "confidence": 1.0,
370 "time": 169.737409
371 },
372 {
373 "duration": 4.116908999999993,
374 "value": "N",
375 "confidence": 1.0,
376 "time": 171.687173
377 }
378 ],
379 "namespace": "chord",
380 "time": 0,
381 "annotation_metadata": {
382 "version": "",
383 "annotation_tools": "",
384 "annotator": {},
385 "curator": {
386 "email": "",
387 "name": ""
388 },
389 "data_source": "",
390 "corpus": "",
391 "annotation_rules": "",
392 "validation": ""
393 },
394 "sandbox": {}
395 }
396 ],
397 "file_metadata": {
398 "duration": 175.804082,
399 "jams_version": "0.2.3",
400 "artist": "",
401 "identifiers": {},
402 "release": "",
403 "title": ""
404 },
405 "sandbox": {}
406}
More examples
In general, converting a dataset to JAMS format will require a bit more work to ensure that value fields conform to the specified namespace schema, but the import script above should serve as a simple starting point.
For further reference, a separate repository jams-data has been created to house conversion scripts for publicly available datasets. Note that development of converters is a work in progress, so proceed with caution!