├── dev ├── __init__.py ├── 3_rencode25_dataset.py ├── extract_audio.py ├── ffprobe_test.py ├── _test_dataset.py ├── get_csv.py ├── crop_upperbody_yuv420_rochester_version.py ├── crop_upperbody_yuv420.py ├── crop_upperbody_npy.py ├── 5_skeleton2binary.py ├── 6_rectify_skeleton.py └── compute_skeleton.py ├── Solos ├── skeleton_files │ ├── __init__.py │ ├── skeleton_dict.json │ └── skeleton_dict_deprecated.json ├── _version.py ├── json_files │ ├── __init__.py │ ├── solos_ids.json │ └── solos_timestamps.json ├── utils.py ├── skeleton.py └── __init__.py ├── test ├── __init__.py ├── data │ └── skeleton_npy_test.npy └── test_library.py ├── setupf.cfg ├── requirements.txt ├── MANIFEST.in ├── setup.py ├── README.md ├── youtubesaver.py └── .gitignore /dev/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Solos/skeleton_files/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/__init__.py: -------------------------------------------------------------------------------- 1 | TEST_PATH= __path__[0] -------------------------------------------------------------------------------- /Solos/_version.py: -------------------------------------------------------------------------------- 1 | __version__ = "0.5" 2 | -------------------------------------------------------------------------------- /setupf.cfg: -------------------------------------------------------------------------------- 1 | [metadata] 2 | description-file = README.md 3 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | Fire 2 | youtube_dl 3 | googledrivedownloader -------------------------------------------------------------------------------- /test/data/skeleton_npy_test.npy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuanFMontesinos/Solos/HEAD/test/data/skeleton_npy_test.npy -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include Solos/json_files/solos_ids.json 2 | include Solos/json_files/solos_timestamps.json 3 | include Solos/skeleton_files/skeleton_dict.json -------------------------------------------------------------------------------- /dev/3_rencode25_dataset.py: -------------------------------------------------------------------------------- 1 | from flerken.video.utils import apply_tree, reencode_25_interpolate 2 | 3 | from multiprocessing import cpu_count 4 | 5 | 6 | def main(root, dst): 7 | apply_tree(root, dst, multiprocessing=cpu_count(), fn=reencode_25_interpolate) 8 | 9 | 10 | if __name__ == '__main__': 11 | import sys 12 | 13 | root = sys.argv[1] 14 | dst = sys.argv[2] 15 | main(root, dst) 16 | # Reencode dataset at 25 fps -------------------------------------------------------------------------------- /dev/extract_audio.py: -------------------------------------------------------------------------------- 1 | from flerken.video.utils import apply_tree, apply_single 2 | 3 | import os 4 | import subprocess 5 | 6 | if __name__ == '__main__': 7 | OR_PATH = '/media/jfm/Slave/Solos/videos' 8 | DST_PATH = '/media/jfm/Slave/Solos/audio_vk' 9 | 10 | rep = apply_tree(OR_PATH, DST_PATH, 11 | output_options=['-ac', '1', '-ar', '16000'], 12 | multiprocessing=0, 13 | ext='.wav', 14 | fn=apply_single) 15 | -------------------------------------------------------------------------------- /Solos/json_files/__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | from ..utils import BaseDict 4 | 5 | __all__ = ['SOLOS_IDS_PATH','SOLOS_TIMESTAMPS_PATH', 'get_solos_ids','get_solos_timestamps'] 6 | 7 | from .. import PATH 8 | SOLOS_IDS_PATH = os.path.join(PATH,'json_files', 'solos_ids.json') 9 | SOLOS_TIMESTAMPS_PATH = os.path.join(PATH,'json_files', 'solos_timestamps.json') 10 | 11 | 12 | def get_solos_ids(): 13 | return BaseDict().load(SOLOS_IDS_PATH) 14 | def get_solos_timestamps(): 15 | return BaseDict().load(SOLOS_TIMESTAMPS_PATH) -------------------------------------------------------------------------------- /dev/ffprobe_test.py: -------------------------------------------------------------------------------- 1 | from ffprobe import FFProbe 2 | import imageio 3 | 4 | path = '/media/jfm/Slave/Solos/videos/Trombone/gv5kQw-jlMs.mkv' 5 | 6 | 7 | def get_size(path): 8 | reader = imageio.get_reader(path) 9 | metadata: dict = reader.get_meta_data() 10 | size = metadata.get('size') 11 | if size is None: 12 | size = metadata.get('source_size') 13 | if size is None: 14 | raise AttributeError(f'Imageio cannot retrieve size from:' 15 | f' {path}') 16 | return size 17 | 18 | 19 | size = get_size(path) 20 | metadata = FFProbe(path) 21 | -------------------------------------------------------------------------------- /dev/_test_dataset.py: -------------------------------------------------------------------------------- 1 | import Solos 2 | from torchtree import Directory_Tree 3 | 4 | PATH = '/media/jfm/Slave/Solos/videos' 5 | 6 | tree = Directory_Tree(path=PATH) 7 | 8 | dic = Solos.get_solos_ids() 9 | 10 | dic_real = {} 11 | 12 | for path in tree.paths(root=PATH): 13 | feats = path.split('/') 14 | cat = feats[-2] 15 | 16 | key = feats[-1].split('.')[0] 17 | if cat not in dic_real: 18 | dic_real[cat] = [] 19 | 20 | dic_real[cat].append(key) 21 | 22 | for cat in dic: 23 | for key in dic[cat]: 24 | if key not in dic_real[cat]: 25 | print(cat,key) 26 | -------------------------------------------------------------------------------- /dev/get_csv.py: -------------------------------------------------------------------------------- 1 | import csv 2 | import sys 3 | 4 | from tqdm import tqdm 5 | 6 | import Solos 7 | 8 | if __name__ == '__main__': 9 | # Expected format 10 | # id, frame_n, j0_x, j0_y, j0_c, ... , j46_x, j46_y, j46_c 11 | # https://www.juanmontesinos.com/Solos/csv/ 12 | 13 | DST = '/home/jfm/solos_csv.csv' 14 | 15 | assert DST.endswith(('.csv')) 16 | 17 | 18 | reader = Solos.SKReader(download=True, in_ram=True) 19 | with open(DST, 'w', newline='') as file: 20 | writer = csv.writer(file) 21 | timer = tqdm(total=len(reader.npy)) 22 | for key in reader.keys(): 23 | sk = reader[key] 24 | for i,sk_i in enumerate(sk): 25 | coords = sk_i.T.flatten() 26 | row = [key,str(i),*['%.4f'%x for x in coords]] 27 | writer.writerow(row) 28 | timer.update() -------------------------------------------------------------------------------- /Solos/utils.py: -------------------------------------------------------------------------------- 1 | import json 2 | import os 3 | 4 | __all__ = ['BaseDict'] 5 | 6 | 7 | class BaseDict(dict): 8 | def __add__(self, other): 9 | o_keys = other.keys() 10 | for key in self.keys(): 11 | if key in o_keys: 12 | raise KeyError('Cannot concatenate both dictionaries. Key %s duplicated' % key) 13 | self.update(other) 14 | return self 15 | 16 | def __radd__(self, other): 17 | if other == 0: 18 | return self 19 | else: 20 | return self.__add__(other) 21 | 22 | def write(self, path): 23 | path = os.path.splitext(path)[0] 24 | with open('%s.json' % path, 'w') as outfile: 25 | json.dump(self, outfile) 26 | 27 | def load(self, path): 28 | with open(path, 'r') as f: 29 | datastore = json.load(f) 30 | self.update(datastore) 31 | return self 32 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup, find_packages 2 | import re 3 | 4 | VERSIONFILE = "Solos/_version.py" 5 | verstrline = open(VERSIONFILE, "rt").read() 6 | VSRE = r"^__version__ = ['\"]([^'\"]*)['\"]" 7 | mo = re.search(VSRE, verstrline, re.M) 8 | if mo: 9 | verstr = mo.group(1) 10 | else: 11 | raise RuntimeError("Unable to find version string in %s." % (VERSIONFILE,)) 12 | 13 | setup(name='solos', 14 | version=verstr, 15 | description='Python implementation of Solos: A Dataset for Audio-Visual Music Source Separation and Localization', 16 | url='https://juanfmontesinos.github.io/Solos/', 17 | author='Juan Montesinos', 18 | author_email='juanfelipe.montesinos@upf.edu', 19 | packages=find_packages(), 20 | install_requires=['Fire', 'youtube_dl', 'googledrivedownloader'], 21 | package_data={'Solos': 'json_files/solos_ids.json'}, 22 | include_package_data=True, 23 | classifiers=[ 24 | "Programming Language :: Python :: 3", ], 25 | zip_safe=False) 26 | -------------------------------------------------------------------------------- /Solos/skeleton.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import os 3 | 4 | from .utils import BaseDict 5 | from . import PATH 6 | __all__ = ['SKReader'] 7 | 8 | 9 | class SKReader(object): 10 | def __init__(self, download=True, in_ram=False): 11 | self.json = BaseDict().load(path=os.path.join(PATH, 'skeleton_files', 'skeleton_dict.json')) 12 | N = self.json['_counter'] 13 | 14 | if download: 15 | from google_drive_downloader import GoogleDriveDownloader as gdd 16 | 17 | gdd.download_file_from_google_drive(file_id='1mA4wFmlqm8a1imOGnT-wFVAqZfpTsqFr', 18 | dest_path=os.path.join(PATH,'skeleton_files','skeleton.npy'), 19 | unzip=False) 20 | self.npy = np.memmap(os.path.join(PATH, 'skeleton_files', 'skeleton.npy'), 21 | dtype=np.float32, 22 | mode='r', 23 | shape=(N, 3, 47)) 24 | if in_ram: 25 | self.npy = self.npy.copy() 26 | 27 | def __call__(self, path, offset, length): 28 | return self.npy[offset:offset + length] 29 | 30 | def __getitem__(self, item): 31 | if isinstance(item, str): 32 | start, stop = self.json[item] 33 | return self.npy[start:stop] 34 | else: 35 | return self.npy[item] 36 | 37 | def __len__(self): 38 | return len(self.json) 39 | def keys(self): 40 | return self.json.keys() -------------------------------------------------------------------------------- /Solos/__init__.py: -------------------------------------------------------------------------------- 1 | PATH = __path__[0] 2 | MEAN = [0.42814959, 0.36149122, 0.32985465] 3 | STD = [0.24243268, 0.23360587, 0.22158483] 4 | 5 | from .json_files import * 6 | 7 | from .skeleton import SKReader 8 | 9 | 10 | def dataset_statistics(dataset_path): 11 | from imageio import get_reader 12 | from random import choice, randint, seed 13 | import os 14 | import numpy as np 15 | from tqdm import tqdm 16 | 17 | seed(666) 18 | json = get_solos_timestamps() 19 | mean = [] 20 | std = [] 21 | c = 0 22 | progress_bar = tqdm(total=754) 23 | for cat in json: 24 | for key in json[cat]: 25 | if not json[cat][key]: 26 | continue 27 | stamps = choice(json[cat][key]) 28 | frame_indices = [randint(*stamps) for _ in range(10)] 29 | path = os.path.join(dataset_path, cat, key + '.mp4') 30 | assert os.path.exists(path) 31 | try: 32 | reader = get_reader(path) 33 | except OSError: 34 | print(f'OSError in {cat}-->{key}') 35 | continue 36 | frames = [reader.get_data(x) / 255. for x in frame_indices] 37 | m = [x.reshape(-1, 3).mean(axis=0) for x in frames] 38 | s = [x.reshape(-1, 3).var(axis=0) for x in frames] 39 | mean.extend(m) 40 | std.extend(s) 41 | progress_bar.set_postfix_str(s=f'{cat}-->{key}') 42 | progress_bar.update() 43 | mean = np.stack(mean).mean(axis=0) 44 | std = np.stack(std).mean(axis=0) ** 0.5 45 | print(f'Mean: {mean}, std:{std}') 46 | return mean, std 47 | -------------------------------------------------------------------------------- /test/test_library.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | import os 3 | 4 | 5 | import numpy as np 6 | from flerken.utils import BaseDict 7 | from flerken.video.utils import get_duration_fps 8 | from torchtree import Directory_Tree 9 | 10 | import Solos 11 | 12 | from . import TEST_PATH 13 | 14 | _VIDEOS_PATH = '/media/jfm/Slave/Solos/videos' 15 | 16 | class TestSolos(unittest.TestCase): 17 | def test_skreader(self): 18 | reader = Solos.skeleton.SKReader(download=True,in_ram=False) 19 | sk = reader['OqH9szlahwU'] 20 | gt = np.load(os.path.join(TEST_PATH,'data/skeleton_npy_test.npy')) 21 | self.assertTrue((gt==sk).all()) 22 | reader = Solos.skeleton.SKReader(download=True, in_ram=True) 23 | keys = reader.keys() 24 | self.assertEqual(len(keys),754+1) 25 | self.assertEqual(len(reader),754+1) 26 | def test_import_json_files(self): 27 | Solos.get_solos_ids() 28 | Solos.get_solos_timestamps() 29 | 30 | @unittest.skipIf(not os.path.exists(_VIDEOS_PATH), 'Path to dataset not found') 31 | def test_solos_timestamps(self): 32 | sk_dict = BaseDict().load(path=os.path.join(Solos.PATH, 'skeleton_files', 'skeleton_dict.json')) 33 | tree = Directory_Tree(_VIDEOS_PATH) 34 | for path in list(tree.paths(_VIDEOS_PATH)): 35 | key = path.split('/')[-1].split('.')[0] 36 | duration, fps = get_duration_fps(path, display=False) 37 | vdur = int((duration[1] * 60 + duration[2] + duration[3] / 1000) * 25) 38 | if abs(vdur - sk_dict[key][1] + sk_dict[key][0]) > 50 or fps != 25: 39 | raise Exception(f'sk_dict.json for file {path} is wrong') -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Solos: A Dataset for Audio-Visual Music Analysis 2 | Audiovisual Dataset. 3 | Please feel free to visit the [Project Page](https://juanmontesinos.com/Solos) for more info. 4 | ## Changelog 5 | - Version 0.2: Bug fix to include json files in pypi package. 6 | - Version 0.3: Bug fix releasing timestamps. 7 | - Added tests 8 | - Version 0.4: Bug fix resampling all the videos to 25 FPS + test 9 | - Version 0.4.1: l0GBOoS_Zv4 timestamp changes + (some) dev code released 10 | - Version 0.5: Dev Code fully released. 11 | ## Citation 12 | Presented at MMSP 2020. 13 | ``` 14 | @inproceedings{montesinos2020solos, 15 | author = {Juan F. Montesinos and 16 | Olga Slizovskaia and 17 | Gloria Haro}, 18 | title = {Solos: A Dataset for Audio-Visual Music Analysis}, 19 | booktitle = {22st {IEEE} International Workshop on Multimedia Signal Processing, 20 | {MMSP} 2020, Tampere, Finland, September 21-24, 2020}, 21 | publisher = {IEEE}, 22 | year = {2020}, 23 | 24 | } 25 | ``` 26 | Disclaimer: 27 | Developer code is not intented to be used nor supported. 28 | 29 | 30 | Copyright © 2020 Juan F. Montesinos 31 | 32 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 33 | 34 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 35 | 36 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 37 | -------------------------------------------------------------------------------- /dev/crop_upperbody_yuv420_rochester_version.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | import tempfile 4 | 5 | import fire 6 | 7 | import numpy as np 8 | from ffprobe import FFProbe 9 | from tqdm import tqdm 10 | import imageio 11 | 12 | from torchtree import Directory_Tree 13 | from flerken.utils import BaseDict 14 | from flerken.video.utils import apply_single 15 | import Solos 16 | 17 | DB_PATH = '/media/jfm/SlaveEVO970/roch_cu_25' 18 | VIDEOS_PATH = os.path.join(DB_PATH, 'videos') 19 | DST_PATH = os.path.join(DB_PATH, 'videos_yuv420_cropped_upperbody_224') 20 | 21 | """ 22 | This script crop Solos videos taking as coords the maximum coordinates of the upperbody. 23 | 24 | Warning: 25 | This is an unstable code as it depends on a ffprobe wrapping. 26 | Some videos may fail if ffprobe returns exceptional metadata. 27 | An alternative is provided via imageio, but it doesn't support webm videos. 28 | 29 | """ 30 | 31 | special_cases = { 32 | } 33 | 34 | 35 | def get_size(path): 36 | reader = imageio.get_reader(path) 37 | metadata: dict = reader.get_meta_data() 38 | size = metadata.get('size') 39 | if size is None: 40 | size = metadata.get('source_size') 41 | if size is None: 42 | raise AttributeError(f'Imageio cannot retrieve size from {video_path}') 43 | return size 44 | 45 | 46 | if __name__ == '__main__': 47 | RECOVER = False 48 | tree = Directory_Tree(VIDEOS_PATH) 49 | if not os.path.exists(DST_PATH): 50 | os.mkdir(DST_PATH) 51 | tree.clone_tree(DST_PATH) 52 | 53 | list_of_video_paths = list(tree.paths(root=VIDEOS_PATH)) 54 | progress_bar = tqdm(list_of_video_paths) 55 | 56 | for video_path in progress_bar: 57 | dst_path = video_path.replace(VIDEOS_PATH, DST_PATH) 58 | key = video_path.split('/')[-1].split('.')[0] 59 | cat = video_path.split('/')[-2] 60 | 61 | input_options = ['-y'] 62 | input_options = ['-y', '-hide_banner', '-loglevel', 'panic'] 63 | output_options = ['-s', '256x256', '-pix_fmt', 'yuv420p'] 64 | apply_single(video_path, dst_path, input_options, output_options, ext='.mp4') 65 | progress_bar.set_postfix_str(f'{cat}-->{key}') 66 | -------------------------------------------------------------------------------- /youtubesaver.py: -------------------------------------------------------------------------------- 1 | from __future__ import unicode_literals 2 | import json as _json 3 | import os as _os 4 | import sys as _sys 5 | import fire as _fire 6 | import youtube_dl as _youtube_dl 7 | 8 | from Solos import SOLOS_IDS_PATH 9 | 10 | __all__ = ['YouTubeSaver'] 11 | 12 | 13 | class YouTubeSaver(object): 14 | """Load video from YouTube using an auditionDataset.json """ 15 | 16 | def __init__(self): 17 | self.outtmpl = '%(id)s.%(ext)s' 18 | self.ydl_opts = { 19 | 'format': 'bestvideo+bestaudio', 20 | 'outtmpl': self.outtmpl, 21 | """ 22 | 'postprocessors': [{ 23 | 'key': 'FFmpegExtractAudio', 24 | 'preferredcodec': 'mp3', 25 | 'preferredquality': '192', 26 | }], 27 | """ 28 | 'logger': None 29 | } 30 | 31 | def from_json(self, dataset_dir, json_path=SOLOS_IDS_PATH): 32 | dataset = _json.load(open(json_path)) 33 | 34 | for instrument in dataset.keys(): 35 | if not _os.path.exists(_os.path.join(dataset_dir, instrument)): 36 | _os.makedirs(_os.path.join(dataset_dir, instrument)) 37 | self.ydl_opts['outtmpl'] = _os.path.join(dataset_dir, instrument, self.outtmpl) 38 | with _youtube_dl.YoutubeDL(self.ydl_opts) as ydl: 39 | for i, video_id in enumerate(dataset[instrument]): 40 | try: 41 | ydl.download(['https://www.youtube.com/watch?v=%s' % video_id]) 42 | del dataset[video_id] 43 | except OSError: 44 | with open(_os.path.join(dataset_dir, 'backup.json'), 'w') as dst_file: 45 | _json.dump(dataset, dst_file) 46 | print('Process failed at video {0}, #{1}'.format(video_id, i)) 47 | print('Backup saved at {0}'.format(_os.path.join(dataset_dir, 'backup.json'))) 48 | ydl.download(['https://www.youtube.com/watch?v=%s' % video_id]) 49 | 50 | except KeyboardInterrupt: 51 | _sys.exit() 52 | 53 | 54 | if __name__ == '__main__': 55 | _fire.Fire(YouTubeSaver) 56 | 57 | # USAGE 58 | # python youtubesaver.py from_json /path_to_your_dst 59 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | skeleton_files_test.py 8 | *.so 9 | *.idea 10 | # Distribution / packaging 11 | .Python 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | wheels/ 24 | pip-wheel-metadata/ 25 | share/python-wheels/ 26 | *.egg-info/ 27 | .installed.cfg 28 | *.egg 29 | MANIFEST 30 | 31 | # PyInstaller 32 | # Usually these files are written by a python script from a template 33 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 34 | *.manifest 35 | *.spec 36 | 37 | # Installer logs 38 | pip-log.txt 39 | pip-delete-this-directory.txt 40 | 41 | # Unit test / coverage reports 42 | htmlcov/ 43 | .tox/ 44 | .nox/ 45 | .coverage 46 | .coverage.* 47 | .cache 48 | nosetests.xml 49 | coverage.xml 50 | *.cover 51 | *.py,cover 52 | .hypothesis/ 53 | .pytest_cache/ 54 | 55 | # Translations 56 | *.mo 57 | *.pot 58 | 59 | # Django stuff: 60 | *.log 61 | local_settings.py 62 | db.sqlite3 63 | db.sqlite3-journal 64 | 65 | # Flask stuff: 66 | instance/ 67 | .webassets-cache 68 | 69 | # Scrapy stuff: 70 | .scrapy 71 | 72 | # Sphinx documentation 73 | docs/_build/ 74 | 75 | # PyBuilder 76 | target/ 77 | 78 | # Jupyter Notebook 79 | .ipynb_checkpoints 80 | 81 | # IPython 82 | profile_default/ 83 | ipython_config.py 84 | 85 | # pyenv 86 | .python-version 87 | 88 | # pipenv 89 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 90 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 91 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 92 | # install all needed dependencies. 93 | #Pipfile.lock 94 | 95 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 96 | __pypackages__/ 97 | 98 | # Celery stuff 99 | celerybeat-schedule 100 | celerybeat.pid 101 | 102 | # SageMath parsed files 103 | *.sage.py 104 | 105 | # Environments 106 | .env 107 | .venv 108 | env/ 109 | venv/ 110 | ENV/ 111 | env.bak/ 112 | venv.bak/ 113 | 114 | # Spyder project settings 115 | .spyderproject 116 | .spyproject 117 | 118 | # Rope project settings 119 | .ropeproject 120 | 121 | # mkdocs documentation 122 | /site 123 | 124 | # mypy 125 | .mypy_cache/ 126 | .dmypy.json 127 | dmypy.json 128 | 129 | # Pyre type checker 130 | .pyre/ 131 | -------------------------------------------------------------------------------- /dev/crop_upperbody_yuv420.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | import tempfile 4 | 5 | import fire 6 | 7 | import numpy as np 8 | from ffprobe import FFProbe 9 | from tqdm import tqdm 10 | import imageio 11 | 12 | from torchtree import Directory_Tree 13 | from flerken.utils import BaseDict 14 | from flerken.video.utils import apply_single 15 | import Solos 16 | 17 | DB_PATH = '/media/jfm/Slave/Solos' 18 | VIDEOS_PATH = os.path.join(DB_PATH, 'videos') 19 | DST_PATH = os.path.join(DB_PATH, 'videos_yuv420_cropped_upperbody_256') 20 | 21 | """ 22 | This script crop Solos videos taking as coords the maximum coordinates of the upperbody. 23 | 24 | Warning: 25 | This is an unstable code as it depends on a ffprobe wrapping. 26 | Some videos may fail if ffprobe returns exceptional metadata. 27 | An alternative is provided via imageio, but it doesn't support webm videos. 28 | 29 | """ 30 | 31 | special_cases = { 32 | 'STKXyBGSGyE': [0, 400, 50, 320], 33 | 'eHbxLcoLWYY': [120, 420, 190, 360], 34 | 'tfcNUo8qjrA': [100, 450, 100, 320], 35 | 'eCQO6k5Qrmg': [130, 420, 130, 300], 36 | 'YcXK-dWMxC0': [150, 330, 210, 360], 37 | 'u6Mr13lHQVs': [420, 620, 20, 280], 38 | 'dTApdk9eCVU': [250, 600, 160, 360], 39 | } 40 | 41 | 42 | def get_size(path): 43 | reader = imageio.get_reader(path) 44 | metadata: dict = reader.get_meta_data() 45 | size = metadata.get('size') 46 | if size is None: 47 | size = metadata.get('source_size') 48 | if size is None: 49 | raise AttributeError(f'Imageio cannot retrieve size from {video_path}') 50 | return size 51 | 52 | 53 | if __name__ == '__main__': 54 | RECOVER = False 55 | 56 | sk_reader = Solos.SKReader(in_ram=True, download=True) 57 | solos_ids = Solos.get_solos_ids() 58 | tree = Directory_Tree(VIDEOS_PATH) 59 | tmp = tempfile.gettempdir() 60 | tmp = os.path.join(tmp, 'yuv420_conversor.json') 61 | 62 | if not os.path.exists(DST_PATH): 63 | os.mkdir(DST_PATH) 64 | tree.clone_tree(DST_PATH) 65 | if RECOVER: 66 | list_of_video_paths = BaseDict().load(tmp)['paths'] 67 | else: 68 | list_of_video_paths = list(tree.paths(root=VIDEOS_PATH)) 69 | failure = [] 70 | progress_bar = tqdm(list_of_video_paths) 71 | 72 | for video_path in progress_bar: 73 | dst_path = video_path.replace(VIDEOS_PATH, DST_PATH) 74 | key = video_path.split('/')[-1].split('.')[0] 75 | if key not in special_cases: 76 | continue 77 | cat = video_path.split('/')[-2] 78 | try: 79 | metadata = FFProbe(video_path) 80 | vw = int(metadata.video[0].width) 81 | vh = int(metadata.video[0].height) 82 | except Exception: 83 | try: 84 | vw, vh = get_size(video_path) 85 | except Exception as ex: 86 | failure.append(video_path) 87 | print(f'Metadata exception at:' 88 | f'{video_path}') 89 | continue 90 | if key in special_cases: 91 | x_min, x_max, y_min, y_max = special_cases[key] 92 | else: 93 | skeleton = sk_reader[key] 94 | # Interpolation may point out of the img 95 | # Cropping out of the image leads to errors in ffmpeg 96 | x_max = min(skeleton[:, 0, :].max(), vw) 97 | x_min = max(skeleton[:, 0, :].min(), 0) 98 | y_max = min(skeleton[:, 1, :].max(), vh) 99 | y_min = max(skeleton[:, 1, :].min(), 0) 100 | w = int(x_max - x_min) 101 | h = int(y_max - y_min) 102 | 103 | input_options = ['-y'] 104 | input_options = ['-y', '-hide_banner', '-loglevel', 'panic'] 105 | output_options = ['-vf', f"crop={w}:{h}:{int(x_min)}:{int(y_min)}", '-s', '256x256', '-pix_fmt', 'yuv420p'] 106 | apply_single(video_path, dst_path, input_options, output_options, ext='.mp4') 107 | progress_bar.set_postfix_str(f'{cat}-->{key}') 108 | json = BaseDict() 109 | json['paths'] = failure 110 | json.write(tmp) 111 | print('Wrong videos:') 112 | for s in failure: 113 | print(s) 114 | -------------------------------------------------------------------------------- /dev/crop_upperbody_npy.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | from shutil import rmtree 4 | import subprocess 5 | import tempfile 6 | 7 | import numpy as np 8 | from ffprobe import FFProbe 9 | from tqdm import tqdm 10 | import imageio 11 | 12 | from flerken.video.utils import apply_single 13 | from torchtree import Directory_Tree 14 | from flerken.utils import BaseDict 15 | import Solos 16 | 17 | DB_PATH = '/media/jfm/Slave/Solos' 18 | VIDEOS_PATH = os.path.join(DB_PATH, 'videos') 19 | DST_PATH = os.path.join('/media/jfm/SlaveEVO970/Solos', 'frames') 20 | 21 | """ 22 | This script crop Solos videos taking as coords the maximum coordinates of the upperbody. 23 | 24 | Warning: 25 | This is an unstable code as it depends on a ffprobe wrapping. 26 | Some videos may fail if ffprobe returns exceptional metadata. 27 | An alternative is provided via imageio, but it doesn't support webm videos. 28 | 29 | """ 30 | 31 | 32 | def get_size(path): 33 | reader = imageio.get_reader(path) 34 | metadata: dict = reader.get_meta_data() 35 | size = metadata.get('size') 36 | if size is None: 37 | size = metadata.get('source_size') 38 | if size is None: 39 | raise AttributeError(f'Imageio cannot retrieve size from {video_path}') 40 | return size 41 | 42 | 43 | class FFMPEGFrameExtractor: 44 | def __init__(self, path): 45 | self.path = path 46 | tmp = tempfile.gettempdir() 47 | self.dst = os.path.join(tmp, 'frame_extraction') 48 | 49 | def __enter__(self): 50 | self.make_folder() 51 | return self 52 | 53 | def __exit__(self, exc_type, exc_val, exc_tb): 54 | rmtree(self.dst) 55 | 56 | def make_folder(self): 57 | if os.path.exists(self.dst): 58 | rmtree(self.dst) 59 | os.mkdir(self.dst) 60 | 61 | def read_frames(self): 62 | files = sorted(os.listdir(self.dst)) 63 | paths = [os.path.join(self.dst, f) for f in files] 64 | 65 | frames = [imageio.imread(p) for p in paths] 66 | frames = np.stack(frames) 67 | return frames 68 | 69 | 70 | if __name__ == '__main__': 71 | VERBOSE = False 72 | sk_reader = Solos.SKReader(in_ram=True, download=True) 73 | solos_ids = Solos.get_solos_ids() 74 | tree = Directory_Tree(VIDEOS_PATH) 75 | 76 | if not os.path.exists(DST_PATH): 77 | os.mkdir(DST_PATH) 78 | tree.clone_tree(DST_PATH) 79 | 80 | list_of_video_paths = list(tree.paths(root=VIDEOS_PATH)) 81 | failure = [] 82 | progress_bar = tqdm(list_of_video_paths) 83 | 84 | for video_path in progress_bar: 85 | dst_path = video_path.replace(VIDEOS_PATH, DST_PATH).split('.')[0] + '.npy' 86 | with FFMPEGFrameExtractor(video_path) as extractor: 87 | 88 | key = video_path.split('/')[-1].split('.')[0] 89 | cat = video_path.split('/')[-2] 90 | 91 | try: 92 | metadata = FFProbe(video_path) 93 | vw = int(metadata.video[0].width) 94 | vh = int(metadata.video[0].height) 95 | except Exception: 96 | try: 97 | vw, vh = get_size(video_path) 98 | except Exception as ex: 99 | failure.append(video_path) 100 | print(f'Metadata exception at:' 101 | f'{video_path}') 102 | continue 103 | skeleton = sk_reader[key] 104 | # Interpolation may point out of the img 105 | # Cropping out of the image leads to errors in ffmpeg 106 | x_max = min(skeleton[:, 0, :].max(), vw) 107 | x_min = max(skeleton[:, 0, :].min(), 0) 108 | y_max = min(skeleton[:, 1, :].max(), vh) 109 | y_min = max(skeleton[:, 1, :].min(), 0) 110 | w = int(x_max - x_min) 111 | h = int(y_max - y_min) 112 | 113 | path = os.path.join(extractor.dst, 'frame_%05d.png') 114 | input_options = ['-y', '-hide_banner', '-loglevel', 'panic'] 115 | output_options = ['-vf', f"crop={w}:{h}:{int(x_min)}:{int(y_min)}", '-s', '256x256'] 116 | 117 | result = subprocess.Popen(["ffmpeg", *input_options, '-i', video_path, *output_options, path], 118 | stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 119 | 120 | stdout = result.stdout.read() 121 | stderr = result.stderr 122 | if stdout != '' and VERBOSE: 123 | print(stdout.decode("utf-8")) 124 | if stderr is not None and VERBOSE: 125 | print(stderr.read().decode("utf-8")) 126 | frames = extractor.read_frames() 127 | np.save(dst_path, frames) 128 | progress_bar.set_postfix_str(f'{cat}-->{key}') 129 | print('Wrong videos:') 130 | for s in failure: 131 | print(s) 132 | -------------------------------------------------------------------------------- /dev/5_skeleton2binary.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import torch 3 | from scipy.signal import resample 4 | from scipy.io.wavfile import read as read_audio, write 5 | from tqdm import tqdm 6 | 7 | from torchtree import Directory_Tree 8 | from flerken.utils import BaseDict 9 | import os 10 | import sys 11 | import fire 12 | 13 | sys.path.append('/home/jfm/GitHub/OpenposeWrapper/openpose_wrapper') 14 | from skeleton import Skeleton 15 | from Solos import get_solos_ids, PATH 16 | 17 | OR_PATH = '/media/jfm/Slave/Solos' 18 | 19 | 20 | # OR_PATH = '/media/jfm/SlaveSSD/test_dataset' 21 | 22 | 23 | def openpose25toupperbody(data_numpy): 24 | if torch.is_tensor(data_numpy): 25 | new_data = torch.zeros(data_numpy.shape[0], 3, 7) 26 | else: 27 | new_data = np.zeros((data_numpy.shape[0], 3, 7)) 28 | new_data[..., 0] = data_numpy[..., 1] 29 | new_data[..., 1:] = data_numpy[..., 2:8] 30 | return new_data 31 | 32 | 33 | def uperbodyhands(skeleton, hands): 34 | if torch.is_tensor(skeleton): 35 | data_numpy = torch.zeros(skeleton.shape[0], 3, 7 + 20 * 2) 36 | else: 37 | data_numpy = np.zeros((skeleton.shape[0], 3, 7 + 20 * 2)) 38 | data_numpy[..., :7] = openpose25toupperbody(skeleton) 39 | data_numpy[..., 7:7 + 20] = hands[:, 0, :, 1:21] 40 | data_numpy[..., 7 + 20:7 + 20 * 2] = hands[:, 1, :, 1:21] 41 | return data_numpy 42 | 43 | 44 | def skeleton2stamps(skeleton, min_frames, max_error): 45 | def prune_idx(idx_list, min_frames, max_error): 46 | mod = True 47 | i = 0 48 | while mod: 49 | result = [] 50 | mod = False 51 | 52 | for i in range(i, len(idx_list) - 1): 53 | # fake_idx = i if i > 0 else 0 54 | result = idx_list[:i] 55 | stamp_t = idx_list[i] 56 | stamp_t1 = idx_list[i + 1] 57 | error = stamp_t1[0] - stamp_t[1] 58 | if error < max_error: 59 | result.append([stamp_t[0], stamp_t1[1]]) 60 | result.extend(idx_list[i + 2:]) 61 | idx_list = result 62 | mod = True 63 | 64 | break 65 | 66 | return [x for x in idx_list if x[1] - x[0] > min_frames] 67 | 68 | ids = [] 69 | idx = [] 70 | for i, tensor in enumerate(skeleton): 71 | if tensor[2, 4] != 0 or tensor[2, 7] != 0: 72 | idx.append(i) 73 | else: 74 | # if len(idx) > min_frames: Replaced at prune_idx 75 | if len(idx) > 1: 76 | ids.append([min(idx), max(idx)]) 77 | idx = [] 78 | if idx: 79 | ids.append([min(idx), max(idx)]) 80 | 81 | return prune_idx(ids, min_frames, max_error) 82 | 83 | 84 | def yield_modules(tree, solos_ids, prefix): 85 | for n, m in tree.skeleton.named_modules(prefix=os.path.join(prefix, 'skeleton')): 86 | if m.level() == 3: 87 | ID = n.split('/')[-1] 88 | assert ID in solos_ids 89 | yield n, ID, m 90 | 91 | 92 | SSK = ['VdFnyZWJAgo', 93 | '1u3yHICR_BU', 94 | 'I0LedcEaPL0', 95 | '1X2l_1za1g0', 96 | 'PCicM6i59_I', 97 | 'VlIcqDWmPkw', 98 | 'XlPvAkLT3Yw', 99 | 'tar_TGXQ59g', 100 | 'QAiwlq3aP2U', 101 | 'aGXm9SGCVT8', 102 | 'FBbaE4ytj8E', 103 | 'tfcNUo8qjrA', 104 | 'X0T6KysSejQ', 105 | 'cZoWhKTZTYY', 106 | 'eHbxLcoLWYY', 107 | 'eCQO6k5Qrmg', 108 | 'lR8RrUBhCQg', 109 | 'STKXyBGSGyE', 110 | 'YcXK-dWMxC0', 111 | '3bpD1lZsTsM', 112 | 'ufsSRKgUb6g', 113 | 'aGk1zIDQQjQ', 114 | 'nZ4HNz9xvSw', 115 | 'HQveyGmUBSs', 116 | 'P_lSgczU2Sk', 117 | 'u6Mr13lHQVs', 118 | 'JRPtROMynA8', 119 | '4-hZDt0Vr5I', 120 | 'C952gmBlkIU', 121 | 'sgyhfvTIMmw', 122 | '-kUCgRjtwPY', 123 | 'fC6p0MRp-s4', 124 | 'dTApdk9eCVU'] 125 | SSKD = {} 126 | for key in SSK: 127 | for cat in get_solos_ids(): 128 | if key in get_solos_ids()[cat]: 129 | SSKD[key] = cat 130 | break 131 | 132 | print(SSKD) 133 | 134 | def main(OR_PATH, ignore=['videos', 'info_backup', 'spectrograms_npy', 'sax', 'xylophone'], minumum_frames=150, 135 | max_error=5): 136 | solos_ids = get_solos_ids() 137 | hands_on_json = BaseDict().load(path=os.path.join(PATH, 'skeleton_files', 'skeleton_dict.json')) 138 | solos_ids = [] 139 | for values in get_solos_ids().values(): 140 | solos_ids.extend(values) 141 | 142 | for key in hands_on_json: 143 | if key not in solos_ids: 144 | ignore.append(key) 145 | print('Creating directory tree... (it may take a long time)') 146 | tree = Directory_Tree(OR_PATH, ignore=ignore) 147 | if not os.path.exists(os.path.join(OR_PATH, 'skeleton_npy')): 148 | os.mkdir(os.path.join(OR_PATH, 'skeleton_npy')) 149 | tree.skeleton.clone_tree(os.path.join(OR_PATH, 'skeleton_npy')) 150 | print('Done!') 151 | c = 0 152 | npy_dict = BaseDict() 153 | # for path in tree.info.paths(OR_PATH + '/info'): 154 | for name, key, m in yield_modules(tree, solos_ids, OR_PATH): 155 | n_sk = len(os.listdir(name)) 156 | npy_dict[key] = [c, c + n_sk] 157 | c += n_sk 158 | # THIS PART IS APPENDED TO FIX THE PROBLEM 159 | ######## 160 | fixd = BaseDict().load(path=os.path.join('/media/jfm/Slave/SkDataset/skeleton_npy', 'skeleton_dict.json')) 161 | for key in SSK: 162 | idx0, idx1 = fixd[key] 163 | n_sk = idx1 - idx0 164 | npy_dict[key] = [c, c + n_sk] 165 | c += n_sk 166 | ######## 167 | npy_big = np.memmap(os.path.join(OR_PATH, 'skeleton_npy', 'skeleton_npy.npy'), dtype=np.float32, mode='w+', 168 | shape=(c, 3, 47)) 169 | npy_dict['_counter'] = c 170 | t = tqdm(total=len(SSK)+len(list(yield_modules(tree, solos_ids, OR_PATH)))) 171 | # for name, module in tree.skeleton.named_modules(prefix=os.path.join(OR_PATH, 'skeleton')): 172 | solos_stamps = BaseDict() 173 | 174 | for name, key, module in yield_modules(tree, solos_ids, OR_PATH): 175 | # if module.level() == 3: 176 | cat = name.split('/')[-2] 177 | if cat not in solos_stamps: 178 | solos_stamps[cat] = {} 179 | sk = Skeleton(1, path=name) 180 | npy = uperbodyhands(sk.skeleton[:, 0, ...], sk.hands[:, 0, ...]) 181 | stamps = skeleton2stamps(npy, minumum_frames, max_error) 182 | solos_stamps[cat][key]=stamps 183 | idx0, idx1 = npy_dict[key] 184 | npy_big[idx0:idx1] = npy 185 | t.update() 186 | # THIS PART IS APPENDED TO FIX THE PROBLEM 187 | ######## 188 | fixd = BaseDict().load(path=os.path.join('/media/jfm/Slave/SkDataset/skeleton_npy', 'skeleton_dict.json')) 189 | npy_sk = np.memmap(os.path.join('/media/jfm/Slave/SkDataset/skeleton_npy', 'skeleton_npy.npy'), 190 | dtype=np.float32, 191 | mode='r', 192 | shape=(fixd['_counter'], 3, 47)) 193 | for key in SSK: 194 | json = BaseDict().load(os.path.join('/media/jfm/Slave/SkDataset/info',SSKD[key].lower(),key+'.json')) 195 | solos_stamps[SSKD[key]][key] = json['stamps'] 196 | idx0, idx1 = npy_dict[key] 197 | idx0_sk, idx1_sk = fixd[key] 198 | npy_big[idx0:idx1] = npy_sk[idx0_sk:idx1_sk] 199 | t.update() 200 | ######## 201 | npy_dict.write(os.path.join(OR_PATH, 'skeleton_npy', 'skeleton_dict')) 202 | solos_stamps.write(os.path.join(OR_PATH, 'skeleton_npy', 'solos_ids_new')) 203 | 204 | 205 | if __name__ == '__main__': 206 | # fire.Fire(main) 207 | rep = main(OR_PATH, ignore=[]) 208 | -------------------------------------------------------------------------------- /dev/6_rectify_skeleton.py: -------------------------------------------------------------------------------- 1 | from torchtree import Tree 2 | import torch 3 | from flerken.utils import BaseDict 4 | import numpy as np 5 | from torchtree import Tree 6 | import torch 7 | import numpy as np 8 | from flerken.utils import BaseDict 9 | import sys 10 | 11 | sys.path.append('/home/jfm/GitHub/OpenposeWrapper/openpose_wrapper') 12 | from skeleton import Skeleton 13 | 14 | 15 | def get_disordered_graph(): 16 | num_node = 7 + 20 * 2 17 | self_link = [(i, i) for i in range(num_node)] 18 | neighbor_link_body = [(3, 2), (2, 1), (1, 0), 19 | (6, 5), (5, 4), (4, 0)] 20 | neighbor_link_hand1 = [(4, 3), (3, 2), (2, 1), (1, -3), 21 | (8, 7), (7, 6), (6, 5), (5, -3), 22 | (12, 11), (11, 10), (10, 9), (9, -3), 23 | (16, 15), (15, 14), (14, 13), (13, -3), 24 | (20, 19), (19, 18), (18, 17), (17, -3)] 25 | neighbor_link_hand1 = [(x[0] + 6, x[1] + 6) for x in neighbor_link_hand1] 26 | neighbor_link_hand2 = [(4, 3), (3, 2), (2, 1), (1, -20), 27 | (8, 7), (7, 6), (6, 5), (5, -20), 28 | (12, 11), (11, 10), (10, 9), (9, -20), 29 | (16, 15), (15, 14), (14, 13), (13, -20), 30 | (20, 19), (19, 18), (18, 17), (17, -20)] 31 | neighbor_link_hand2 = [(x[0] + 6 + 20, x[1] + 6 + 20) for x in neighbor_link_hand2] 32 | edge = self_link + neighbor_link_body + neighbor_link_hand1 + neighbor_link_hand2 33 | return edge 34 | 35 | 36 | def skeleton_mean(data_numpy: np.ndarray): 37 | coords = data_numpy[:, :2, :] 38 | # 39 | mask = data_numpy[:, 2, :][:, None, :].repeat(2, axis=1) == 0 # Shape T,2,J 40 | mean = np.zeros(coords.shape[1:]) 41 | # mean = coords.new_zeros(2, data_numpy.shape[-1]) 42 | for c in range(2): 43 | for j in range(data_numpy.shape[-1]): 44 | mean[c, j] = data_numpy[:, c, j][~mask[:, c, j]].mean() 45 | mean[np.isnan(mean)] = 0 46 | 47 | return mean 48 | 49 | 50 | class Graph(object): 51 | def __init__(self, graph): 52 | self.graph = sorted([sorted(x) for x in graph]) 53 | self.tree = Tree() 54 | self.build_tree(self.tree, 0) 55 | 56 | def iter_graph(self, c): 57 | triggered = False 58 | for edge in self.graph: 59 | if edge[0] == c and edge[1] != c: 60 | triggered = True 61 | yield edge 62 | if not triggered: 63 | yield (c, None) 64 | 65 | def build_tree(self, tree, c): 66 | for edge in self.iter_graph(c): 67 | x, y = str(edge[0]), edge[1] 68 | if y is None: 69 | tree.add_module(x, Tree()) 70 | else: 71 | if x not in tree._modules and int(x) != y: 72 | 73 | new_tree = Tree() 74 | tree.add_module(x, new_tree) 75 | self.build_tree(new_tree, y) 76 | else: 77 | self.build_tree(new_tree, y) 78 | 79 | def get_ordered_graph(self): 80 | x = [] 81 | self.iter_ordered_graph(self.tree, -1, x) 82 | del x[0] 83 | return tuple(x) 84 | 85 | def iter_ordered_graph(self, tree, prev, lista): 86 | for el, mod in self.iter_children(tree, prev): 87 | lista.append(el) 88 | self.iter_ordered_graph(mod, el[1], lista) 89 | 90 | def iter_children(self, tree, prev): 91 | for name, mod in tree.named_children(): 92 | yield (prev, int(name)), mod 93 | 94 | 95 | def lin_interp_mask(skeleton, th=0): 96 | T = skeleton.shape[0] 97 | mask = (skeleton[:, 2, :] <= th).astype(np.int8) 98 | dist_fwd = np.zeros_like(mask).astype(np.int16) 99 | index_fwd = np.zeros_like(mask).astype(np.int32) 100 | dist_bwd = np.zeros_like(mask).astype(np.int16) 101 | index_bwd = np.zeros_like(mask.astype(np.int32)) 102 | 103 | dist_fwd[0] = mask[0] 104 | index_fwd[0] = 0 - dist_fwd[0] 105 | dist_bwd[T - 1] = mask[T - 1] 106 | index_bwd[T - 1] = T - 1 + dist_bwd[T - 1] 107 | 108 | for t in range(T - 2, -1, -1): 109 | dist_bwd[t] = (dist_bwd[t + 1] + mask[t]) * mask[t] 110 | index_bwd[t] = t + dist_bwd[t] 111 | for t in range(1, T): 112 | dist_fwd[t] = (dist_fwd[t - 1] + mask[t]) * mask[t] 113 | index_fwd[t] = t - dist_fwd[t] 114 | 115 | return index_fwd, index_bwd, dist_fwd, dist_bwd 116 | 117 | 118 | def lin_interp(skeleton: np.ndarray, graph, th): 119 | skeleton_rel = skeleton.copy() 120 | T = skeleton.shape[0] 121 | # Obtain relative coords 122 | for prev, pos in graph: 123 | skeleton_rel[:, :2, pos] = skeleton[:, :2, pos] - skeleton[:, :2, prev] 124 | sk_avg = skeleton_mean(skeleton_rel) # shape 2,J 125 | sk_avg = np.concatenate([sk_avg, np.zeros((1, sk_avg.shape[-1]))], axis=0)[ 126 | None, ...] # Expanding sk_avg to fit (1,3,J) 127 | index_fwd, index_bwd, dist_fwd, dist_bwd = lin_interp_mask(skeleton_rel, th) 128 | skeleton_rel = np.concatenate([skeleton_rel, sk_avg], axis=0) # Padding skeleton_rel 129 | elements = [] 130 | for i in range(T): 131 | indices_fwd = skeleton_rel[index_fwd[i], :2, range(47)] 132 | indices_bwd = skeleton_rel[index_bwd[i], :2, range(47)] 133 | element = (indices_fwd * dist_bwd[i][:, None] + indices_bwd * dist_fwd[i][:, None]) / ( 134 | dist_fwd[i][:, None] + dist_bwd[i][:, None]) 135 | element[np.isnan(element)] = indices_fwd[np.isnan(element)] 136 | elements.append(element.transpose()) 137 | skeleton[:, :2, :] = np.stack(elements) 138 | # Moving back to absolute coords 139 | skeleton_out = skeleton.copy() 140 | for prev, pos in graph: 141 | skeleton_out[:, :2, pos] = skeleton[:, :2, pos] + skeleton_out[:, :2, prev] 142 | return skeleton_out 143 | 144 | 145 | # def test(): 146 | # json = BaseDict().load('/media/jfm/Slave/SkDataset/skeleton_npy/skeleton_dict.json') 147 | # N = json['_counter'] 148 | # numpy_mmap = np.memmap('/media/jfm/Slave/SkDataset/skeleton_npy/skeleton_nonpadded.npy', dtype=np.float32, 149 | # mode='r', 150 | # shape=(N, 3, 47)) 151 | # 152 | # edge = get_disordered_graph() 153 | # elements = json['TiqUpTAwWgY'] 154 | # elements = json['XAQBStul-PU'] 155 | # # elements = json['uj9q1jBICTQ'] 156 | # path = '/media/jfm/SlaveSSD/test_video_folder' 157 | # tensor = numpy_mmap[elements[0]:elements[1]] 158 | # 159 | # from overlay_sk import Skeleton_Plotter 160 | # 161 | # graph = Graph(edge).get_ordered_graph() 162 | # skeleton = lin_interp(tensor.copy(), graph, 0.2) 163 | # sk = Skeleton_Plotter(graph=Graph(edge).get_ordered_graph(), th=0) 164 | # w = sk(torch.from_numpy(skeleton)) 165 | 166 | 167 | def run(): 168 | json_path = '/media/jfm/Slave/Solos/skeleton_npy/skeleton_dict.json' 169 | mmap_path = '/media/jfm/Slave/Solos/skeleton_npy/skeleton_npy.npy' 170 | dst_path = '/media/jfm/Slave/Solos/skeleton_npy/skeleton_npy_padded.npy' 171 | 172 | json = BaseDict().load(json_path) 173 | N = json['_counter'] 174 | numpy_mmap = np.memmap(mmap_path, dtype=np.float32, mode='r', 175 | shape=(N, 3, 47)) 176 | dst_mmap = np.memmap(dst_path, dtype=np.float32, mode='w+', 177 | shape=(N, 3, 47)) 178 | N = json['_counter'] 179 | edge = get_disordered_graph() 180 | for key in json: 181 | elements = json[key] 182 | tensor = numpy_mmap[elements[0]:elements[1]] 183 | dst_mmap[elements[0]:elements[1]] = lin_interp(tensor.copy(), Graph(edge).get_ordered_graph(), 0.2) 184 | 185 | 186 | if __name__ == '__main__': 187 | run() 188 | -------------------------------------------------------------------------------- /dev/compute_skeleton.py: -------------------------------------------------------------------------------- 1 | from flerken.video.utils import apply_single 2 | from flerken.utils import BaseDict 3 | from torchtree import Directory_Tree 4 | from tqdm import tqdm 5 | from scipy.io.wavfile import read 6 | 7 | import sys 8 | from collections import deque 9 | import threading 10 | 11 | sys.path.append('/home/jfm/GitHub/OpenposeWrapper') 12 | from openpose_wrapper.core import OPose 13 | 14 | import fire 15 | 16 | 17 | import time 18 | import os 19 | from shutil import rmtree 20 | 21 | 22 | class FakeThread(): 23 | def is_alive(self): 24 | return True 25 | 26 | 27 | def timeit(method): 28 | def timed(*args, **kw): 29 | ts = time.time() 30 | result = method(*args, **kw) 31 | te = time.time() 32 | if 'log_time' in kw: 33 | name = kw.get('log_name', method.__name__.upper()) 34 | kw['log_time'][name] = int((te - ts) * 1000) 35 | else: 36 | print('%r %2.2f ms' % \ 37 | (method.__name__, (te - ts) * 1000)) 38 | return result 39 | 40 | return timed 41 | 42 | 43 | def main(root, gpu_ids=[0, 1], use_threading=False, verbose=True, ignore=[]): 44 | def full_path(paths, root): 45 | for path in paths: 46 | yield os.path.join(root, path) 47 | 48 | def gen_named_modules(module): 49 | for n, m in module.named_modules(): 50 | yield n 51 | 52 | tree = Directory_Tree(root, ignore=ignore) # Set of videos in a nutshell 53 | 54 | audio_dir = os.path.join(root, 'audio') # Abs path to audio folder 55 | frame_dir = os.path.join(root, 'frames') # Abs path to frames folder 56 | skeleton_dir = os.path.join(root, 'skeleton') # Abs path to skeleton folder 57 | info_dir = os.path.join(root, 'info') # Abs path to info folder 58 | for folder in gen_named_modules(tree.videos): 59 | path = os.path.join(info_dir, folder) 60 | if not os.path.exists(path): 61 | os.makedirs(path) 62 | paths = tuple(x for x, y in tree.videos.named_parameters()) # Rel path class1/video_1...classN/videoM 63 | # Folder making 64 | if verbose: 65 | print('Relative paths:') 66 | tuple(print(p) for p in paths) 67 | print('Absolute paths:') 68 | for root_ in (audio_dir, frame_dir, skeleton_dir): 69 | for path in full_path(paths, root_): 70 | if not os.path.exists(path): 71 | os.makedirs(path) 72 | if verbose: 73 | print('Path: %s. Exist: %r' % (path, False)) 74 | else: 75 | if verbose: 76 | print('Path: %s. Exist: %r' % (path, True)) 77 | 78 | # OpenPose instances 79 | # gpus = {idx: OPose({'num_gpu_start': 0, 'num_gpu': 2}) for idx in gpu_ids} 80 | 81 | gpus_available = deque(gpu_ids) 82 | print('Available gpus: %r' % gpu_ids) 83 | if hasattr(tree, 'info'): 84 | videos_available = dict({x: None for x in tree.videos.paths(root + '/videos')}) 85 | videos_available_keys = tuple(videos_available.keys()) 86 | for already_done in tree.info.paths(): 87 | already_done = already_done.split('.')[0] 88 | for key in videos_available_keys: 89 | if already_done in key: 90 | videos_available.pop(key) 91 | videos_available = deque(videos_available.keys()) 92 | else: 93 | videos_available = deque(tree.videos.paths(root + '/videos')) 94 | if verbose: 95 | print('Available videos:') 96 | for v in videos_available: 97 | print(v) 98 | # threads 99 | threads = {} 100 | N = len(videos_available) 101 | t = tqdm(total=N) 102 | while videos_available: 103 | if gpus_available: 104 | 105 | gpu_id = gpus_available.pop() 106 | 107 | video_path = videos_available.pop() 108 | if verbose: 109 | print('Video --> %s' % video_path) 110 | print('Still available:') 111 | print('%r' % videos_available) 112 | frame_path = video_path.split('.')[0].replace('videos', 'frames') 113 | sk_path = frame_path.replace('frames', 'skeleton') 114 | audio_path = frame_path.replace('frames', 'audio') 115 | info_path = frame_path.replace('frames', 'info') 116 | t.update() 117 | t.set_postfix(remaining_time=len(videos_available) * 1.2 / 5) 118 | if use_threading: 119 | 120 | print('Threading with GPU %d' % gpu_id) 121 | x = threading.Thread(target=process_folder, 122 | args=(video_path, frame_path, sk_path, audio_path, info_path, gpu_id), 123 | daemon=True) 124 | x.start() 125 | threads[x.ident] = [gpu_id, x] 126 | 127 | else: 128 | x = process_folder(video_path, frame_path, sk_path, audio_path, info_path, gpu_id) 129 | gpus_available.append(gpu_id) 130 | if use_threading: 131 | for idx, thread in list(threads.items()): 132 | if not thread[1].is_alive(): 133 | gpus_available.append(thread[0]) 134 | threads.pop(idx) 135 | time.sleep(0.5) 136 | t.close() 137 | while 1: 138 | m = [] 139 | for idx, thread in threads.items(): 140 | m.append(thread[1].is_alive()) 141 | time.sleep(5) 142 | if max(m) == 0: 143 | break 144 | 145 | 146 | def process_folder(video_path, frames_path, skeleton_path, audio_path, info_path, op, ): 147 | info = BaseDict() 148 | audio_path = None 149 | print('Starting the thread for video %s' % video_path) 150 | print('Getting frames at %s' % frames_path) 151 | audio_opts = [] 152 | video_opts = [] 153 | # Uncomment to deal with audio too 154 | if audio_path is not None: 155 | audio_opts += ['-ac', '1', '-ab', '16000', '-ar', '16384', audio_path] 156 | apply_single(video_path, frames_path + '/%05d.png', ['-y', '-hide_banner'], audio_opts, ext=None) 157 | # apply_single(video_path, frames_path + '/%05d.png', [], audio_opts) 158 | print('Getting skeleton at %s' % skeleton_path) 159 | info['video_frames'] = len(os.listdir(frames_path)) 160 | if audio_path is not None: 161 | info['audio_frames'] = read(audio_path)[1].shape[0] 162 | 163 | op = OPose({'num_gpu_start': op, 'num_gpu': 1}) 164 | op.config_essential(number_people_max=1, face=True, hand=True, write_json=skeleton_path) 165 | imgs = op.process_images(frames_path, display=False, keep_in_ram=False) 166 | rmtree(frames_path) 167 | info.write(info_path) 168 | return imgs 169 | 170 | 171 | if __name__ == '__main__': 172 | # fire.Fire(main) 173 | root = '/media/jfm/Slave/SolosPff' 174 | ignore=[] 175 | # path = '/media/jfm/Slave/Solos/redo.json' 176 | # dic = BaseDict().load(path) 177 | # ignore = [x.split('/')[1].split('.')[0] for x in dic['not_redo']] 178 | # do = [x.split('/')[1].split('.')[0] for x in dic['redo']] 179 | # print(len(do)) 180 | main(root, gpu_ids=[1, 1], use_threading=False, verbose=False, 181 | ignore=['cf', 'clc', 'clf', 'clt', 'cltu', 'clv', 'ct', 'ec', 'ef', 'tf', 'tf', 'tut', 'tuv', 'vc', 'vf', 'vt', 182 | 'xf', 'skeleton'] + ignore) 183 | # main(root, gpu_ids=[0, 0, 0, 1, 1], use_threading=False, verbose=True, 184 | # ignore=['cf', 'clc', 'clf', 'clt', 'cltu', 'clv', 'ct', 'ec', 'ef', 'tf', 'tf', 'tut', 'tuv', 'vc', 'vf', 'vt', 185 | # 'xf']) 186 | -------------------------------------------------------------------------------- /Solos/json_files/solos_ids.json: -------------------------------------------------------------------------------- 1 | {"Bassoon": ["YreSo0ephV8", "4mKABLySoaA", "VBg8t8i_FXY", "C9elXZLgTtk", "tnTNNoJxcv8", "0tPZZefcNhM", "NCw1l0xdDAY", "WXOI8lVpv9U", "eZAUcEMFxhk", "nLEudqnb4Kw", "78LFB7yRSfw", "AbIefEf-mHw", "FpcApoUhzIw", "5w35MH2IP28", "aja1XNR8bUg", "QVC6DZnNKlQ", "5E0dO2txQnE", "-0yEIJCnno8", "CdddiToTUYM", "C1Ms4wQNfis", "6xkQSMRUIwI", "I7dgMp-SUUs", "QS5tgo6pnkc", "RfF6VRTmd0Q", "s77FZtwP6jg", "v807cm50DMA", "A9e8sVGmwz4", "Q-epTZknkqI", "DIt3yL8CN_s", "17z6ifj2XXk", "EbqdFn9dNvM", "GRa2jui1uVU", "f-YM4rXZXSs", "Hb_UTQsnFqA", "iv6IgPueG90", "XP6EIvVrmLs", "En3ZQDepsno", "rFul69M_Ekw", "NsCL6AtMNJ8", "02DPGPi0wm0", "iJzm4dXWgtE", "q3MV48f5lWs", "lOFmT_uZBs0", "lniM27xD4pM", "Z5Su2HfobMM", "gGHMniGg0qM", "mXm8vWa9GXA", "lSvJRltc6TE", "QKaiawzDXXE", "_rEjpyR84-U", "DkZ9jpHVCMI", "UPgJFfqoy68", "i2ymT9FZbsI", "8E2X03begsM", "sFUSjtNf1v0", "kt6iCSjACCE"], "Cello": ["3TR7YwNESt0", "GkT1NLMY7xQ", "b28_gkUgqoE", "GMyL9JTfDps", "iNef2eekeK0", "QPfE-FqhQq4", "P--7W1h4khQ", "N7te_FRdSgk", "0jSLgzeFmao", "IpCafmoaImc", "PR1Pzaqew9w", "SPh_q2n3JYM", "ww9_f6hxYKo", "REhp68K-6mw", "l9ufvevHbkE", "TiqUpTAwWgY", "CNDZfj3BaqA", "voJaSCe8UyM", "UWRZ4gi3HAM", "5IwWfy2RhQE", "VEaJzYRrrD8", "nAtHjkKGr4A", "MKsYR-9ZD9M", "07kcsRHipyw", "Q0OfnLEpty4", "6--mQjcImjM", "3PrFqTav5Ow", "WSheIMbyC5w", "uIqbE0Ylh9o", "ebMlp9Kc_bY", "OvXAT3_GGec", "LDq9sFUjwQk", "J_nJYlZHpuw", "wXq_IU_vvrI", "Z1rRodHDapI", "6GEkwyK_tns", "s92f3CW9IdQ", "MHhK6jG6U2I", "vI-A3KJSBpk", "ZNs5igA6tZQ", "JxhUFn5CT6A", "iXnGftY7k_k", "6XJCvBBQu78", "BvrGLXMvc_o", "t81IJJVi-Us", "7nzwswUUDto", "-ZMb-QiqDJY", "zGiFcVKafQM", "hC7XPGO45hk", "VdFnyZWJAgo", "eRpbaoIOJjI", "dfPeeHyfpP8", "2C7_o5mfE6k", "dKBVWebVakI", "gRy76nNP6CQ", "mGQLXRTl3Z0", "PDJ_QZAbGi4", "w7Kh0LscP3U", "1u3yHICR_BU", "sBZJCnxdmPc", "yC8ovVGeUfA", "DpvxiC0osbA", "MNB8H2p9Kk0", "5sXcGZ60NpI", "kG3CrRcMgMk", "dTmuOKUPsYI", "RDnLgY2-abc", "WotHO4X1kak", "I0LedcEaPL0", "7WeXhVxpTAw", "JW9-YhFMYSE", "8PXQeH0g6jI", "wHfhjkI2L9M", "4UI2fPRaxpg", "7_8yPpCjK_w", "aLTH6DVXAcU", "KtsdeqrcO2U", "iuvaHDIGP5U", "mmJim2h-byQ", "FR1UZKD238Y", "42ULINLSfrE", "A2d2DHxV4l0", "4jxmrdkyjCc", "09iOwYycY6w", "AT97pTC97tY", "j9Re7hWGh3Y", "Zz9nwbi9oqA", "j4CwTQmRxiY", "vWytPM5Wawk", "WSvQ7_N1y08", "llpPao0uM7U", "-qRn8UyHogA", "MbuRvmZy3Yw", "MaYRimw-mx8", "Ng8QfKTk1KA", "seWlG50y-so", "fLH9GyDbUjU", "bw2Etrk6cHg", "fJ7yh1E9S-k", "1X2l_1za1g0", "DsQX--nVPJQ", "qxiDk7x6gkM", "BJW31sWO5cE", "CrBCIFZImKE", "3qHdCTe0mIs", "4-TAbbQmCtg", "qtIrc7YUEvo", "A2KrKTMSoEU", "Jsu5p6iAApI", "xFlBZMiVMT0", "qtVf-KkpX1w", "DEmhfGTWt8g", "PCicM6i59_I", "poCw2CCrfzA", "7Z96EdnfzoQ", "Yi9Xdiq579o", "qzl9w7gME50", "Vp2lSAv__wE", "VlIcqDWmPkw", "gtr9N_qdHag", "rifOR2Q0cRk", "bhxNofWXTEA", "aHiqoSUV5MA", "DB3kIKJPdUA", "RV4Ob2Y9hvQ", "BObT8M5Mnus", "bNLswbcgbF4", "stgIDZN6e5Q", "eWTR-puxJyo", "Y1ZO2qfr0ko", "D_a1o8biIAk", "PpcSlOZY3Aw", "heFoLuid8-Y", "JQOC7Za4Pbw"], "Clarinet": ["qcPxLfJIT3s", "spZDVNWU5tA", "Z2AzriAJGCY", "QRbAMpz3Wus", "x7yiHwxutnQ", "dKg0OEzVGZA", "w4i4erpXY_c", "QXB_-TKd_DE", "R9vWT8CzTwU", "RsAIbDuxIUk", "BByuG-mcNc8", "4tNWjh4s2qQ", "byMsmzvTvLc", "4lXPdLFslJo", "gS52OYKwLB0", "PhfEbohIrvM", "0u8gQg5BXZ8", "aACYBGNq1LA", "H3QO6crfDeI", "SJ15dBCpoKM", "7RMr7K3ywZM", "a0el7aaC00M", "6ZWpAEkpwLE", "KQB9_x4gkAk", "AEdr3XTgRvc", "PwgKYbfpVtI", "0LzT3uYOrDI", "YYsq62f_eAg", "5-qPKGx1KHk", "BAbU6ctxGlc", "NPzOaUZUqao", "kVYAY7sOjrk", "AgprSCu5TSA", "be_mQelli5w", "4bBZjqKqbZc", "d-HtHaVETac", "Qtsz5LWf-8w", "hK3aJa05450", "0EwC0ZOQOWg", "cBofHRtHqRw", "X3GbAKww1KI", "VbKND1yzpF0", "472KbWLCAb8", "Xg-MBWMDe6Q", "Q8hj8eYK6gc", "WnUAJsk97k4", "_kGCx15M0ms", "z5tIPscghnM", "ENt0yLlqizs"], "DoubleBass": ["GxvCwJfkr4A", "9eL-jZolM8k", "DUZ6gZDLlTc", "JagOdyHQWFE", "_2cmM-ezUkY", "-dd8eQzvRKY", "KA1C80N9SMo", "TFhRxcvLazI", "-Gzz7mlcnrA", "SD2fEx9kNpY", "_XWTQnZ3-8g", "2rFIKDJhkLQ", "zdawwJ4sXhw", "qsRi7OCwyYk", "9qKaMSd6Dvw", "URml6i5xnxg", "ThS7PSisxeg", "flBXBpWJ9MQ", "xqCg4EQTH3E", "t6_zmIMnNMo", "C2rQAl6k-xk", "bd2h2_MLzPI", "j-XvDYhhfKY", "FowI3MYGSM4", "sveFiOQ5j5s", "yEnGTTY9ILg", "By9-kbbpjzs", "0KKjHvY3K00", "s_pZmwu09LM", "LrtP_aaOo4k", "LZBrIj72VnI", "ZAEn-TgSFew", "h68lQ6vwVSg", "0wcmaZpHarU", "2qmT4DA1Eds", "yIJ1bp5OGXI", "lZOY9AKDlm8", "i_TtsSomAkY", "g8aZpvJTkXk", "Nz2GuVHV_tQ", "jp12L8TmbnQ", "DW5bm1f0mk0", "vD9_IFATwQk", "1oXh85Qjkf8", "7j6oSAH5-no", "y3X6miK_I6A", "kerhzUUT-oY", "Y-djdPoHhbY", "fajJjmQmpPo", "peY7HCOqT7g", "gGPxQB6BSVY", "_DNEckeD2s8", "HLPaCrUk_QA", "4Eu4ZtHFX-M", "ko4UN_PIpVc", "WI-vYblPi6Q", "b8ocLtMUKoQ", "7boe10Hbgdg"], "Flute": ["xE908RyNvGY", "pvbqhkYRS9I", "zpCO7eSI9Q8", "0CW79SadQvs", "YEyKM13yf_4", "XlPvAkLT3Yw", "K7fBlN9kqlI", "L505EUfuKXo", "xLsJiesFtR4", "FQ017iBbwSE", "XUY-5Ji7RSo", "9MKeGursT48", "tar_TGXQ59g", "QAiwlq3aP2U", "woCrO0VxT6s", "aGXm9SGCVT8", "CDDYAN87zDs", "U-w6uARcQ_w", "M2VD97CTZBA", "sIJibwlhpgI", "CpwKka2ZQ_Q", "IwVzHubf-AU", "guMUF9uLn9c", "iZ9mDC-h1VI", "GyzoyHOrW9g", "6Msu5whwZp8", "GY6_fvCO-qM", "sFZxHP0cdis", "_Hwms79wzuA", "UkA7Q64pa5s", "6GwfuWhOOdY", "fQNaSXz1HH4", "gP5AQaG2nrA", "MVDw2DRMll8", "FBbaE4ytj8E", "tfcNUo8qjrA", "X0T6KysSejQ", "cZoWhKTZTYY", "Sz40f_geQRo", "eHbxLcoLWYY", "Tsc3IvYofS4", "mkMFtEZN938", "PezMSXKNAYQ", "b2HdawjaXaM", "be1jJCH32OU", "EkhMOP-WOCI", "3eNS7XoMWKs"], "Horn": ["uzvdXiG6wFc", "NpBgfrKcX4s", "7oYZqza2O70", "8V1AfWUBDC4", "phQsRPlzFRc", "Zuk7lgvBD2c", "VIUqPsGCHdU", "kQjgSdkG-2w", "SoH7T7OsTxY", "wCWrLV_Osgw", "ZhsmsV_ChHo", "e7QonmD34ZQ", "0ttqwuSOMRA", "kitiLnAWqwA", "-mDLXrSTFeg", "4i4RaNKmqpg", "4nNjh4aGtjc", "WLV1SXQR-tM", "XyhvXQ2BdLM", "Q6vzjR7HH1c", "Gg7ci0QzfLw", "H83zmcFj93U", "oe3rovGvB5s", "gQ2FkvEpi00", "u1s5wQVhwws", "Y9t9eMY-O9U", "j757Lyv53UA", "s7JW4-CgR44", "SqWamN0ZYCo", "H7HeGL4BslI", "WsXiWtJB4Yg", "1MNl9YoPyPA", "WCcLn0qXpUY", "35pY0N1OgUI", "eNGHfCEzPPQ", "H5YlhGn9C8U", "qWoPIW5moQc", "a6Ke9eY8v88", "p2NrxxKucaU", "TQiHN4xUydc", "fm8fOwylrd4", "05kiyxeRawY", "ur77HMoZPjY", "gqGh0MnVYH4", "YWFfyjylq8g", "N-1BpmU7rQQ", "CO7c2viMh7M", "rpDZOJcCxYs", "j7TkUM8KihE", "iapUF9ttQs8"], "Oboe": ["Zbae0Xmt-3g", "iR9C2gR69ig", "byUf3v8_3DA", "J35NN2jixOw", "sl54jflBpBk", "kJwQt63Jds8", "AtCyFMoCjjk", "zaaiYBTNl_Y", "JnK9F4nBOB8", "gFvVvfA8PVk", "gXWZCtjgDms", "BzNtmZigskI", "Ifr0TDjxQ4Q", "0T966F09Q_8", "O97rrxsxN-E", "Nfw7UbPu4Bg", "DKFd4Tglop4", "y2MFDfND2Gw", "Am-Beu-ctv0", "GB5aU875dwQ", "fkkCiJGeBoU", "CTo7eU-vSN8", "qFjO38celk4", "q-vsfKEUOWQ", "7hZG4v0UsH4", "ZKQKRt7XRCY", "jGOU2OFKazM", "Sk97ni7cytg", "02ZV69OUtVU", "fxZZuo-68kY", "4qO672SnK3o", "oReNgmDQdj4", "R1oaXBJYkWE", "UzzkjrfdSdE", "2nE1vDXAcW8", "v8OdWUvLa10", "kLukFBD0Ivg", "393P8zRug8I", "y1NVH5Uu_4o", "Xq8XSdsst7I", "oI0SVRCy_ls", "-25TnDTMy1s", "eM4Dab0hbB8", "BoxMI2VUxGg", "IZLowMeesFI", "tNDmA-RzBg4", "VZVTAskHa4A", "52YP_P8T7qc", "vwKXyfeVRVE", "6DI9Afoaiz4", "GYkyCy0NUr4", "qNqZuJ3IYqc", "ueGak0TFVEU"], "Saxophone": ["YjTO6o8yiZw", "QrCMPRpdfwU", "QcLOE1fkrX0", "5MOH4bCEFxQ", "EuHyy73Jc5U", "CXFYi7iozF8", "XAQBStul-PU", "_ZejWRWUidc", "UO2RXlrXseo", "uPFmNhqERog", "XMe3sx3C0z4", "ZQRZmdIda6s", "77OHAqrL2tA", "JI_glaY-qvI", "z8tWYFa1IkE", "ZwFDieF3ZFE", "7PNsIVhKV0M", "dy_VGcI3pqA", "gq0-x29RYvM", "aC8JzVFm7LI", "vihnv5-l-4g", "Hj4Qc3_em6E", "pRv9iXN5FHk", "rEnef0RRQfU", "7ceNky6vW9s", "6SN-h-wd_fM", "HoiQWzWCOgk", "nxkX-DNKScA", "A8Q-O5KB7kw", "OqH9szlahwU", "m5Y-UX9Srq0", "1ulhWinVNfo", "R9g-OMGPsm0", "ag39M6kCwRA", "sNDgd3wAIhs", "zNoSvo4hbuM", "ENa-FK70gMQ", "igCT4G1M1Xo", "0CZvvdta4Lc", "1kH9rdpPc38", "9lpi9pjKjz4", "y64SQKecqX4", "zsvTWQ4kPmo", "cViWaf73v1c", "7p0XMNoGFFE"], "Trombone": ["bEKjN9gJFcc", "wmyWpgA3IOM", "2FOf7OpA16M", "B4OYUfmzcTc", "lZmGCTRaJWI", "ZxLuL07Troc", "wobcIuAg9-c", "1Pg4eCGPCW0", "Lb3IYryFqhg", "8P2tojMUMh0", "xHpSRAqDzEc", "OwRFnXpeVbs", "zMPddD6ONO0", "2bYLzLsIWME", "HjcvteM65rU", "gv5kQw-jlMs", "BfDiMuPuNTk", "mZNNWTrvGoA", "tzQZ9HAzkN0", "VXCM7OqYr2s", "zO70rRweED4", "Fj-XI_1M2so", "JQJ0mJylOGo", "XXms5IK6eZE", "OABlWfhFNR0", "_77A5wGQLGU", "yG1DzBXVxw8", "_W2VM3uinZA", "Rka-Gpys4bA", "zCCKnGy8d6Y", "lFOduNx2OU8", "7p4bBUexcjg", "laq2CpGvdmY", "2Nnux-Uhr-s", "Pg9LvfTEpBA", "PKAxZjJctZs", "iJNyROC4bsU", "OPJgBE4zrds", "6klGDQlv--8", "eu_om_tqmZA", "Bp1nNO6eyaA", "KrQEYrEoeZo", "LuB1Q4JAXYY", "w6rZk01h9ak", "_EHUE5cLxQ4", "LBZ1EvU5bYY", "UgERYVl589Y", "WFeKh6RMMag", "kQmHz_oIQh8", "A6CjIck0YzE"], "Trumpet": ["2btIZEqeThs", "iwo1xXqsfiE", "JW2ud5KDFx4", "3azSBjFTiig", "rB9Ff-jcr1c", "eCQO6k5Qrmg", "qH_mI63Ra2Q", "zNO2ITrg5O4", "vPrlA5lT9LY", "0KYUektUHpg", "lR8RrUBhCQg", "02qCh_MBwtc", "6A_YE_SC5gs", "STKXyBGSGyE", "YcXK-dWMxC0", "zQOSy7vkbTM", "BKx-_2WMcB4", "qoy8a6UMEpU", "VuQLvqLE9zo", "7dLsRs23WJg", "bQc7xJhXKdg", "4BovCUXSGus", "a6b1S_VkvJ4", "v3s8A6C9AfE", "AS_TXoM2NVQ", "GYK2CIwsVp4", "HM0EP6W2OKQ", "tTb0yFcI2U8", "fTUalNqUzKw", "wnp3WUKB32I", "GWU_50fQ6q0", "V--5M0ymbbM", "-IBdXOZagLA", "U1Ik12eS5WA", "Faa3nytprWw", "QE-sDP-D-CA", "3bpD1lZsTsM", "ufsSRKgUb6g", "vW4wOpX094o", "aGk1zIDQQjQ", "y1fk_0eGggs", "7C_EZday9G4", "HkGF8A0N5xw", "_NaB7ZS5TTs", "Mfj2vFFdcgw", "AZPwFCD7eo4", "P6AovGKMtH8", "fombzY71B6s", "nZ4HNz9xvSw", "b2G-8sUrtCM"], "Tuba": ["-jyrc7VdL5s", "hyCLFtmcYxo", "poe8zvj0MGY", "Z4zI5rCHgBg", "HQveyGmUBSs", "lpAVnvhTmAA", "tNAcx6ZGKds", "P_lSgczU2Sk", "R5j8f9TQ3ZQ", "wwNtNog-pfg", "g_ifTNX0JqA", "mOmUcCQNVJU", "rrc8oD54sQk", "C2o3j7b5klA", "u6Mr13lHQVs", "udKRvSc3QqY", "4VJz9lT09oE", "yXLF7dzeJiw", "ribMR6UL2xg", "JRPtROMynA8", "WNjneIIIEjY", "GRTTCjEEGks", "QVHfU1D9Wb4", "yhVcclBVc_I", "4-hZDt0Vr5I", "nQMA5_ukf4w", "pg0vRIfHDHA", "baNbDY257wU", "ICKnUHRZfkc", "lwpD5ZLWGOU", "jH3sCTzek7k", "CHJf_1WsVHk", "sRMYO3rLHwA", "z_I41tB8zSc", "C952gmBlkIU", "6sRMktnR7XM", "sgyhfvTIMmw", "Axzyyn1GCxY", "-kUCgRjtwPY", "ilZ61Cctlos", "N0VAxdaDynM"], "Viola": ["lLml8_BjQO8", "WZgPcjChMsY", "IGCx-Bdi-50", "p0CzWz7DzVo", "SsbB7f_Z-io", "zv8lwIHpyvU", "80pVi2NQ66c", "_fp_jfzBgts", "hjvtVopqflI", "jvZgxmVGR4A", "WyAtM5H6H0w", "SOU5JJ_sPh4", "-fTiMdxqL1o", "4KujFOTKzN0", "W-ghmZkTtFE", "M-iEuiShwjg", "WBXyDy8vVnA", "blzgC-ylE9w", "WD36F6NoDvg", "r265LrQjFL4", "wQ0EibGzows", "xVMIoPj_xDA", "JlzM6rgu5iw", "_LbrrV0V3wU", "fZe2U5-idiI", "Rt6Q1ca1Sqg", "VsllnL0mTuU", "7tm_jQ592So", "BNTdgv-DHm0", "_D-cVF_uvBk", "qac9PbLaBsE", "7LJa8WznDLA", "voiYeiehBdo", "JsR877if8j0", "517gOh0NNfY", "f3oaQZgr4z4", "Xs2sZ8iVEsw", "c_l4U4qnM4k", "qHxEIkwJwmU", "u4noM_AJjoQ", "QrZ6LQWY-fo", "mPoN8m8gYz0", "-onflKwlhRA", "FPUPIuDm7kc", "q1_ODrcuxEY", "pzGMc_csKrw", "gyQMB9mTy2s", "rfYY1Mpd284", "NcByr12rAxM", "B2vbBww6qPI", "QoUut_eHEF8", "RBQH09gvpWc", "fnXlE75nx7g", "cvE44e05rh8", "Jikd2Z3woSQ"], "Violin": ["JrNn2Ns7k-g", "Si-S3XUftsk", "YRBLqsvqeMA", "Iz2SAWjD9mQ", "zXDQ-QliMJI", "BNT95mbdbvo", "Iw91usZ7wiI", "K0-gjCYrJn8", "a1_cmEl_ScQ", "RSvOYJ6Seko", "uNdB37UuLGY", "SOOXHrXmvJs", "E4GV4eqEKFQ", "PUYCwgJD2Ko", "KxH4527dL88", "Q-NR6tsZyjI", "zRRUSMeTwl8", "8RkJOOb2AVM", "rgmlb3jI274", "38WfnMP7O6Y", "MFgnRXqS6g8", "sOdmMnjIWAU", "-uV87ToKCcM", "XahBwMHViJg", "Xxpypdm0nj0", "E4FEOExWpKE", "0dKj8oP3QxE", "lWZG4fa3hQU", "hSPeJm9-XF4", "ZbEKQ7poGT0", "ODMV3Qrt20k", "UWVROLcT3C0", "WlxEQT3Onlw", "qcCPODzJNQ4", "fC6p0MRp-s4", "aiDmJ48o5Mw", "pGppKoQeQG8", "7Yb5ZVNiNDk", "e04KbqVApT4", "E1xr4touR5g", "tq69Hs2ytHQ", "0OynaB3dcV4", "BVNafswddw8", "TImP-2G1FI4", "l0GBOoS_Zv4", "a0f9W1CRxQM", "fVrk2p35zEA", "3RxH4R1V_ZQ", "_PFXrLBWlgU", "jsttzKQGFro", "1ytu0LGRScg", "LFXQZamLiw4", "Qhfc41bn4jo", "C-dhpfxFDeM", "ULQIHfXmwEk", "XK5t7TFtJsQ", "3AJYvZin3Z0", "dTApdk9eCVU", "v0Vz9bZRIQo", "2EVvJId3QAw", "4emPz_bpV4E", "QRdYAusDCLo", "1ndATPWcaok", "PCCkguu91r4", "AhzKxE6irJ8", "dTfA72RG8-g"]} -------------------------------------------------------------------------------- /Solos/skeleton_files/skeleton_dict.json: -------------------------------------------------------------------------------- 1 | {"Rka-Gpys4bA": [0, 6123], "Fj-XI_1M2so": [6123, 13254], "VXCM7OqYr2s": [13254, 23031], "B4OYUfmzcTc": [23031, 28938], "_W2VM3uinZA": [28938, 31823], "PKAxZjJctZs": [31823, 41479], "OPJgBE4zrds": [41479, 44984], "WFeKh6RMMag": [44984, 54475], "Pg9LvfTEpBA": [54475, 60211], "bEKjN9gJFcc": [60211, 63493], "iJNyROC4bsU": [63493, 69313], "OABlWfhFNR0": [69313, 72869], "2FOf7OpA16M": [72869, 83535], "BfDiMuPuNTk": [83535, 89540], "zCCKnGy8d6Y": [89540, 93844], "LBZ1EvU5bYY": [93844, 96240], "laq2CpGvdmY": [96240, 102384], "KrQEYrEoeZo": [102384, 108167], "_77A5wGQLGU": [108167, 114177], "wobcIuAg9-c": [114177, 121509], "Bp1nNO6eyaA": [121509, 123342], "A6CjIck0YzE": [123342, 132731], "yG1DzBXVxw8": [132731, 137714], "JQJ0mJylOGo": [137714, 156171], "HjcvteM65rU": [156171, 165116], "UgERYVl589Y": [165116, 168836], "zMPddD6ONO0": [168836, 195553], "XXms5IK6eZE": [195553, 200714], "2bYLzLsIWME": [200714, 202494], "6klGDQlv--8": [202494, 209874], "xHpSRAqDzEc": [209874, 215369], "lZmGCTRaJWI": [215369, 224397], "mZNNWTrvGoA": [224397, 235697], "ZxLuL07Troc": [235697, 240476], "lFOduNx2OU8": [240476, 262263], "kQmHz_oIQh8": [262263, 269797], "8P2tojMUMh0": [269797, 275955], "2Nnux-Uhr-s": [275955, 286364], "eu_om_tqmZA": [286364, 297404], "wmyWpgA3IOM": [297404, 300496], "Lb3IYryFqhg": [300496, 305454], "LuB1Q4JAXYY": [305454, 312049], "7p4bBUexcjg": [312049, 316885], "zO70rRweED4": [316885, 325378], "_EHUE5cLxQ4": [325378, 336748], "OwRFnXpeVbs": [336748, 340499], "w6rZk01h9ak": [340499, 347577], "gv5kQw-jlMs": [347577, 351590], "1Pg4eCGPCW0": [351590, 359298], "tzQZ9HAzkN0": [359298, 379968], "TFhRxcvLazI": [379968, 388484], "7j6oSAH5-no": [388484, 399397], "g8aZpvJTkXk": [399397, 413431], "kerhzUUT-oY": [413431, 421951], "4Eu4ZtHFX-M": [421951, 450832], "C2rQAl6k-xk": [450832, 497529], "DW5bm1f0mk0": [497529, 512099], "-Gzz7mlcnrA": [512099, 524424], "yIJ1bp5OGXI": [524424, 533025], "0KKjHvY3K00": [533025, 539828], "URml6i5xnxg": [539828, 549890], "fajJjmQmpPo": [549890, 558239], "b8ocLtMUKoQ": [558239, 601451], "_2cmM-ezUkY": [601451, 612458], "HLPaCrUk_QA": [612458, 624041], "bd2h2_MLzPI": [624041, 674574], "LZBrIj72VnI": [674574, 675641], "GxvCwJfkr4A": [675641, 685781], "jp12L8TmbnQ": [685781, 697620], "SD2fEx9kNpY": [697620, 707565], "WI-vYblPi6Q": [707565, 716634], "y3X6miK_I6A": [716634, 731311], "h68lQ6vwVSg": [731311, 736142], "flBXBpWJ9MQ": [736142, 745569], "t6_zmIMnNMo": [745569, 778811], "j-XvDYhhfKY": [778811, 790645], "peY7HCOqT7g": [790645, 816715], "_DNEckeD2s8": [816715, 818370], "0wcmaZpHarU": [818370, 837505], "7boe10Hbgdg": [837505, 862297], "ZAEn-TgSFew": [862297, 881780], "yEnGTTY9ILg": [881780, 898123], "s_pZmwu09LM": [898123, 907902], "gGPxQB6BSVY": [907902, 922439], "KA1C80N9SMo": [922439, 932784], "-dd8eQzvRKY": [932784, 941336], "Y-djdPoHhbY": [941336, 946591], "ko4UN_PIpVc": [946591, 955434], "qsRi7OCwyYk": [955434, 963906], "LrtP_aaOo4k": [963906, 968806], "2qmT4DA1Eds": [968806, 977331], "By9-kbbpjzs": [977331, 983191], "_XWTQnZ3-8g": [983191, 996090], "lZOY9AKDlm8": [996090, 1002121], "9eL-jZolM8k": [1002121, 1015144], "1oXh85Qjkf8": [1015144, 1031233], "i_TtsSomAkY": [1031233, 1040841], "Nz2GuVHV_tQ": [1040841, 1042218], "ThS7PSisxeg": [1042218, 1047363], "zdawwJ4sXhw": [1047363, 1056385], "JagOdyHQWFE": [1056385, 1068705], "sveFiOQ5j5s": [1068705, 1084354], "xqCg4EQTH3E": [1084354, 1097700], "FowI3MYGSM4": [1097700, 1108007], "DUZ6gZDLlTc": [1108007, 1120313], "vD9_IFATwQk": [1120313, 1128632], "9qKaMSd6Dvw": [1128632, 1147002], "2rFIKDJhkLQ": [1147002, 1153987], "9lpi9pjKjz4": [1153987, 1157612], "QrCMPRpdfwU": [1157612, 1161772], "5MOH4bCEFxQ": [1161772, 1166196], "ENa-FK70gMQ": [1166196, 1172479], "pRv9iXN5FHk": [1172479, 1179214], "XAQBStul-PU": [1179214, 1182968], "JI_glaY-qvI": [1182968, 1189739], "dy_VGcI3pqA": [1189739, 1198699], "UO2RXlrXseo": [1198699, 1203135], "1ulhWinVNfo": [1203135, 1211613], "7p0XMNoGFFE": [1211613, 1213250], "igCT4G1M1Xo": [1213250, 1218502], "nxkX-DNKScA": [1218502, 1223496], "7PNsIVhKV0M": [1223496, 1225850], "uPFmNhqERog": [1225850, 1230884], "OqH9szlahwU": [1230884, 1232503], "R9g-OMGPsm0": [1232503, 1235464], "CXFYi7iozF8": [1235464, 1239222], "ZQRZmdIda6s": [1239222, 1243615], "6SN-h-wd_fM": [1243615, 1247330], "A8Q-O5KB7kw": [1247330, 1249889], "HoiQWzWCOgk": [1249889, 1250584], "_ZejWRWUidc": [1250584, 1253851], "m5Y-UX9Srq0": [1253851, 1259008], "gq0-x29RYvM": [1259008, 1264847], "77OHAqrL2tA": [1264847, 1268623], "XMe3sx3C0z4": [1268623, 1271540], "zNoSvo4hbuM": [1271540, 1273065], "rEnef0RRQfU": [1273065, 1276749], "0CZvvdta4Lc": [1276749, 1286078], "z8tWYFa1IkE": [1286078, 1290012], "QcLOE1fkrX0": [1290012, 1292919], "1kH9rdpPc38": [1292919, 1294052], "7ceNky6vW9s": [1294052, 1297918], "Hj4Qc3_em6E": [1297918, 1299722], "sNDgd3wAIhs": [1299722, 1303314], "aC8JzVFm7LI": [1303314, 1304072], "cViWaf73v1c": [1304072, 1309998], "YjTO6o8yiZw": [1309998, 1314317], "vihnv5-l-4g": [1314317, 1325760], "y64SQKecqX4": [1325760, 1329081], "ZwFDieF3ZFE": [1329081, 1330724], "zsvTWQ4kPmo": [1330724, 1331942], "ag39M6kCwRA": [1331942, 1336448], "EuHyy73Jc5U": [1336448, 1337350], "vPrlA5lT9LY": [1337350, 1339996], "AZPwFCD7eo4": [1339996, 1341638], "V--5M0ymbbM": [1341638, 1345626], "-IBdXOZagLA": [1345626, 1356205], "fombzY71B6s": [1356205, 1359140], "Faa3nytprWw": [1359140, 1360428], "tTb0yFcI2U8": [1360428, 1362383], "v3s8A6C9AfE": [1362383, 1363773], "HM0EP6W2OKQ": [1363773, 1364053], "qH_mI63Ra2Q": [1364053, 1365625], "JW2ud5KDFx4": [1365625, 1366503], "y1fk_0eGggs": [1366503, 1368135], "QE-sDP-D-CA": [1368135, 1368757], "3azSBjFTiig": [1368757, 1371250], "GYK2CIwsVp4": [1371250, 1371907], "4BovCUXSGus": [1371907, 1372564], "vW4wOpX094o": [1372564, 1372997], "P6AovGKMtH8": [1372997, 1376794], "7C_EZday9G4": [1376794, 1377407], "6A_YE_SC5gs": [1377407, 1379096], "BKx-_2WMcB4": [1379096, 1380068], "HkGF8A0N5xw": [1380068, 1381420], "2btIZEqeThs": [1381420, 1384655], "Mfj2vFFdcgw": [1384655, 1385214], "7dLsRs23WJg": [1385214, 1385731], "b2G-8sUrtCM": [1385731, 1386450], "U1Ik12eS5WA": [1386450, 1387239], "iwo1xXqsfiE": [1387239, 1387904], "zNO2ITrg5O4": [1387904, 1390789], "fTUalNqUzKw": [1390789, 1391871], "0KYUektUHpg": [1391871, 1392528], "bQc7xJhXKdg": [1392528, 1393757], "02qCh_MBwtc": [1393757, 1394380], "GWU_50fQ6q0": [1394380, 1397392], "wnp3WUKB32I": [1397392, 1398175], "VuQLvqLE9zo": [1398175, 1398830], "AS_TXoM2NVQ": [1398830, 1399254], "qoy8a6UMEpU": [1399254, 1403181], "a6b1S_VkvJ4": [1403181, 1404477], "_NaB7ZS5TTs": [1404477, 1405526], "rB9Ff-jcr1c": [1405526, 1414029], "zQOSy7vkbTM": [1414029, 1416342], "N0VAxdaDynM": [1416342, 1418763], "nQMA5_ukf4w": [1418763, 1421597], "jH3sCTzek7k": [1421597, 1422302], "WNjneIIIEjY": [1422302, 1423606], "wwNtNog-pfg": [1423606, 1430819], "ilZ61Cctlos": [1430819, 1432364], "rrc8oD54sQk": [1432364, 1435672], "ribMR6UL2xg": [1435672, 1437987], "-jyrc7VdL5s": [1437987, 1439215], "Axzyyn1GCxY": [1439215, 1444378], "hyCLFtmcYxo": [1444378, 1451832], "pg0vRIfHDHA": [1451832, 1453064], "sRMYO3rLHwA": [1453064, 1463802], "lpAVnvhTmAA": [1463802, 1468523], "tNAcx6ZGKds": [1468523, 1470224], "ICKnUHRZfkc": [1470224, 1472187], "R5j8f9TQ3ZQ": [1472187, 1475884], "C2o3j7b5klA": [1475884, 1483361], "yhVcclBVc_I": [1483361, 1486579], "z_I41tB8zSc": [1486579, 1489225], "CHJf_1WsVHk": [1489225, 1496295], "Z4zI5rCHgBg": [1496295, 1496938], "mOmUcCQNVJU": [1496938, 1500784], "4VJz9lT09oE": [1500784, 1508511], "g_ifTNX0JqA": [1508511, 1510989], "poe8zvj0MGY": [1510989, 1515612], "lwpD5ZLWGOU": [1515612, 1525645], "baNbDY257wU": [1525645, 1532971], "udKRvSc3QqY": [1532971, 1540453], "GRTTCjEEGks": [1540453, 1543440], "6sRMktnR7XM": [1543440, 1546592], "yXLF7dzeJiw": [1546592, 1553827], "QVHfU1D9Wb4": [1553827, 1558931], "E1xr4touR5g": [1558931, 1576861], "YRBLqsvqeMA": [1576861, 1592480], "Iz2SAWjD9mQ": [1592480, 1596873], "rgmlb3jI274": [1596873, 1613057], "2EVvJId3QAw": [1613057, 1633031], "RSvOYJ6Seko": [1633031, 1637269], "qcCPODzJNQ4": [1637269, 1648963], "C-dhpfxFDeM": [1648963, 1657075], "a0f9W1CRxQM": [1657075, 1676323], "dTfA72RG8-g": [1676323, 1684958], "jsttzKQGFro": [1684958, 1686710], "KxH4527dL88": [1686710, 1693387], "_PFXrLBWlgU": [1693387, 1699746], "LFXQZamLiw4": [1699746, 1714381], "ULQIHfXmwEk": [1714381, 1723333], "JrNn2Ns7k-g": [1723333, 1733666], "lWZG4fa3hQU": [1733666, 1750194], "l0GBOoS_Zv4": [1750194, 1754343], "K0-gjCYrJn8": [1754343, 1757766], "PUYCwgJD2Ko": [1757766, 1770616], "PCCkguu91r4": [1770616, 1784838], "1ndATPWcaok": [1784838, 1796618], "Q-NR6tsZyjI": [1796618, 1800372], "7Yb5ZVNiNDk": [1800372, 1804868], "3RxH4R1V_ZQ": [1804868, 1824668], "e04KbqVApT4": [1824668, 1825824], "Qhfc41bn4jo": [1825824, 1839004], "BVNafswddw8": [1839004, 1846573], "Iw91usZ7wiI": [1846573, 1851905], "TImP-2G1FI4": [1851905, 1858490], "v0Vz9bZRIQo": [1858490, 1869395], "fVrk2p35zEA": [1869395, 1881475], "sOdmMnjIWAU": [1881475, 1893039], "E4GV4eqEKFQ": [1893039, 1909663], "zRRUSMeTwl8": [1909663, 1931324], "a1_cmEl_ScQ": [1931324, 1938635], "4emPz_bpV4E": [1938635, 1957431], "QRdYAusDCLo": [1957431, 1971751], "UWVROLcT3C0": [1971751, 1976918], "3AJYvZin3Z0": [1976918, 1990763], "E4FEOExWpKE": [1990763, 2001165], "Si-S3XUftsk": [2001165, 2002217], "AhzKxE6irJ8": [2002217, 2006940], "pGppKoQeQG8": [2006940, 2018153], "uNdB37UuLGY": [2018153, 2023492], "1ytu0LGRScg": [2023492, 2038596], "0dKj8oP3QxE": [2038596, 2040186], "38WfnMP7O6Y": [2040186, 2043228], "-uV87ToKCcM": [2043228, 2048461], "aiDmJ48o5Mw": [2048461, 2059723], "zXDQ-QliMJI": [2059723, 2073435], "XK5t7TFtJsQ": [2073435, 2077366], "hSPeJm9-XF4": [2077366, 2089405], "MFgnRXqS6g8": [2089405, 2091688], "tq69Hs2ytHQ": [2091688, 2099923], "ODMV3Qrt20k": [2099923, 2115165], "ZbEKQ7poGT0": [2115165, 2117769], "Xxpypdm0nj0": [2117769, 2124821], "XahBwMHViJg": [2124821, 2142562], "0OynaB3dcV4": [2142562, 2143579], "8RkJOOb2AVM": [2143579, 2148640], "WlxEQT3Onlw": [2148640, 2156359], "BNT95mbdbvo": [2156359, 2158944], "SOOXHrXmvJs": [2158944, 2172903], "4KujFOTKzN0": [2172903, 2181609], "BNTdgv-DHm0": [2181609, 2190543], "zv8lwIHpyvU": [2190543, 2198957], "JsR877if8j0": [2198957, 2203365], "7tm_jQ592So": [2203365, 2210897], "QoUut_eHEF8": [2210897, 2219818], "IGCx-Bdi-50": [2219818, 2231112], "gyQMB9mTy2s": [2231112, 2235668], "QrZ6LQWY-fo": [2235668, 2241164], "-onflKwlhRA": [2241164, 2250949], "mPoN8m8gYz0": [2250949, 2259935], "rfYY1Mpd284": [2259935, 2270235], "Xs2sZ8iVEsw": [2270235, 2289593], "xVMIoPj_xDA": [2289593, 2292358], "qHxEIkwJwmU": [2292358, 2301375], "pzGMc_csKrw": [2301375, 2310573], "q1_ODrcuxEY": [2310573, 2312468], "B2vbBww6qPI": [2312468, 2333717], "-fTiMdxqL1o": [2333717, 2338979], "cvE44e05rh8": [2338979, 2347880], "lLml8_BjQO8": [2347880, 2351281], "NcByr12rAxM": [2351281, 2361321], "FPUPIuDm7kc": [2361321, 2369586], "_D-cVF_uvBk": [2369586, 2378749], "jvZgxmVGR4A": [2378749, 2386220], "hjvtVopqflI": [2386220, 2394783], "f3oaQZgr4z4": [2394783, 2395918], "80pVi2NQ66c": [2395918, 2402169], "WBXyDy8vVnA": [2402169, 2413077], "W-ghmZkTtFE": [2413077, 2426154], "SOU5JJ_sPh4": [2426154, 2431258], "qac9PbLaBsE": [2431258, 2434749], "c_l4U4qnM4k": [2434749, 2443021], "7LJa8WznDLA": [2443021, 2454813], "wQ0EibGzows": [2454813, 2463901], "Rt6Q1ca1Sqg": [2463901, 2472719], "p0CzWz7DzVo": [2472719, 2476453], "SsbB7f_Z-io": [2476453, 2481647], "517gOh0NNfY": [2481647, 2490657], "_fp_jfzBgts": [2490657, 2501619], "u4noM_AJjoQ": [2501619, 2511073], "Jikd2Z3woSQ": [2511073, 2520205], "_LbrrV0V3wU": [2520205, 2527764], "voiYeiehBdo": [2527764, 2535636], "WZgPcjChMsY": [2535636, 2544019], "M-iEuiShwjg": [2544019, 2551274], "fZe2U5-idiI": [2551274, 2559982], "JlzM6rgu5iw": [2559982, 2568770], "fnXlE75nx7g": [2568770, 2579201], "WD36F6NoDvg": [2579201, 2588394], "blzgC-ylE9w": [2588394, 2591639], "r265LrQjFL4": [2591639, 2599332], "WyAtM5H6H0w": [2599332, 2608985], "VsllnL0mTuU": [2608985, 2618736], "RBQH09gvpWc": [2618736, 2629776], "BJW31sWO5cE": [2629776, 2634236], "JW9-YhFMYSE": [2634236, 2637332], "iuvaHDIGP5U": [2637332, 2646609], "RV4Ob2Y9hvQ": [2646609, 2675011], "dKBVWebVakI": [2675011, 2685778], "rifOR2Q0cRk": [2685778, 2690349], "t81IJJVi-Us": [2690349, 2691280], "b28_gkUgqoE": [2691280, 2694954], "PpcSlOZY3Aw": [2694954, 2713158], "voJaSCe8UyM": [2713158, 2716400], "aLTH6DVXAcU": [2716400, 2733636], "poCw2CCrfzA": [2733636, 2738036], "Ng8QfKTk1KA": [2738036, 2756120], "wXq_IU_vvrI": [2756120, 2760886], "aHiqoSUV5MA": [2760886, 2778037], "uIqbE0Ylh9o": [2778037, 2779578], "Jsu5p6iAApI": [2779578, 2786065], "Y1ZO2qfr0ko": [2786065, 2791861], "42ULINLSfrE": [2791861, 2807013], "8PXQeH0g6jI": [2807013, 2815134], "4UI2fPRaxpg": [2815134, 2828232], "nAtHjkKGr4A": [2828232, 2849684], "-qRn8UyHogA": [2849684, 2861675], "CNDZfj3BaqA": [2861675, 2885773], "mGQLXRTl3Z0": [2885773, 2914970], "RDnLgY2-abc": [2914970, 2919468], "3TR7YwNESt0": [2919468, 2926579], "w7Kh0LscP3U": [2926579, 2931698], "3PrFqTav5Ow": [2931698, 2934553], "vI-A3KJSBpk": [2934553, 2952946], "DpvxiC0osbA": [2952946, 2955976], "dfPeeHyfpP8": [2955976, 2965434], "4-TAbbQmCtg": [2965434, 2977209], "iXnGftY7k_k": [2977209, 2996115], "QPfE-FqhQq4": [2996115, 2998618], "OvXAT3_GGec": [2998618, 3018210], "Yi9Xdiq579o": [3018210, 3030857], "iNef2eekeK0": [3030857, 3040108], "6XJCvBBQu78": [3040108, 3051987], "PR1Pzaqew9w": [3051987, 3058412], "ebMlp9Kc_bY": [3058412, 3081634], "MbuRvmZy3Yw": [3081634, 3087560], "hC7XPGO45hk": [3087560, 3090527], "fLH9GyDbUjU": [3090527, 3103440], "Zz9nwbi9oqA": [3103440, 3120254], "kG3CrRcMgMk": [3120254, 3130459], "7Z96EdnfzoQ": [3130459, 3131935], "6GEkwyK_tns": [3131935, 3133987], "qtIrc7YUEvo": [3133987, 3149729], "A2d2DHxV4l0": [3149729, 3152668], "dTmuOKUPsYI": [3152668, 3158804], "sBZJCnxdmPc": [3158804, 3163149], "D_a1o8biIAk": [3163149, 3184238], "j9Re7hWGh3Y": [3184238, 3198152], "vWytPM5Wawk": [3198152, 3217223], "DEmhfGTWt8g": [3217223, 3237888], "VEaJzYRrrD8": [3237888, 3244674], "7_8yPpCjK_w": [3244674, 3252708], "Q0OfnLEpty4": [3252708, 3260438], "eRpbaoIOJjI": [3260438, 3277858], "PDJ_QZAbGi4": [3277858, 3290411], "WSvQ7_N1y08": [3290411, 3307293], "mmJim2h-byQ": [3307293, 3315297], "qzl9w7gME50": [3315297, 3320958], "LDq9sFUjwQk": [3320958, 3331685], "JQOC7Za4Pbw": [3331685, 3342989], "07kcsRHipyw": [3342989, 3344258], "heFoLuid8-Y": [3344258, 3359759], "UWRZ4gi3HAM": [3359759, 3371810], "WSheIMbyC5w": [3371810, 3382832], "llpPao0uM7U": [3382832, 3401842], "j4CwTQmRxiY": [3401842, 3422885], "seWlG50y-so": [3422885, 3440144], "GMyL9JTfDps": [3440144, 3455252], "AT97pTC97tY": [3455252, 3472617], "qtVf-KkpX1w": [3472617, 3477557], "Z1rRodHDapI": [3477557, 3494615], "s92f3CW9IdQ": [3494615, 3506504], "CrBCIFZImKE": [3506504, 3510910], "DsQX--nVPJQ": [3510910, 3522222], "yC8ovVGeUfA": [3522222, 3534331], "bhxNofWXTEA": [3534331, 3539106], "ZNs5igA6tZQ": [3539106, 3551219], "7nzwswUUDto": [3551219, 3564033], "BvrGLXMvc_o": [3564033, 3586478], "xFlBZMiVMT0": [3586478, 3603731], "MNB8H2p9Kk0": [3603731, 3613156], "JxhUFn5CT6A": [3613156, 3625540], "Vp2lSAv__wE": [3625540, 3631529], "bw2Etrk6cHg": [3631529, 3635847], "FR1UZKD238Y": [3635847, 3644930], "DB3kIKJPdUA": [3644930, 3670149], "BObT8M5Mnus": [3670149, 3676679], "5IwWfy2RhQE": [3676679, 3687248], "J_nJYlZHpuw": [3687248, 3708924], "MHhK6jG6U2I": [3708924, 3720154], "0jSLgzeFmao": [3720154, 3729123], "MaYRimw-mx8": [3729123, 3736498], "-ZMb-QiqDJY": [3736498, 3744803], "5sXcGZ60NpI": [3744803, 3768389], "7WeXhVxpTAw": [3768389, 3800547], "6--mQjcImjM": [3800547, 3804176], "P--7W1h4khQ": [3804176, 3818195], "ww9_f6hxYKo": [3818195, 3821832], "2C7_o5mfE6k": [3821832, 3824510], "zGiFcVKafQM": [3824510, 3841088], "wHfhjkI2L9M": [3841088, 3846378], "gRy76nNP6CQ": [3846378, 3852098], "KtsdeqrcO2U": [3852098, 3863343], "WotHO4X1kak": [3863343, 3879455], "stgIDZN6e5Q": [3879455, 3902495], "bNLswbcgbF4": [3902495, 3915228], "fJ7yh1E9S-k": [3915228, 3929124], "3qHdCTe0mIs": [3929124, 3940041], "l9ufvevHbkE": [3940041, 3949567], "MKsYR-9ZD9M": [3949567, 3951850], "IpCafmoaImc": [3951850, 3960832], "N7te_FRdSgk": [3960832, 3983645], "REhp68K-6mw": [3983645, 3995094], "qxiDk7x6gkM": [3995094, 3996258], "eWTR-puxJyo": [3996258, 4009572], "gtr9N_qdHag": [4009572, 4021170], "09iOwYycY6w": [4021170, 4034287], "A2KrKTMSoEU": [4034287, 4037874], "TiqUpTAwWgY": [4037874, 4047793], "4jxmrdkyjCc": [4047793, 4061064], "GkT1NLMY7xQ": [4061064, 4065038], "SPh_q2n3JYM": [4065038, 4071738], "XP6EIvVrmLs": [4071738, 4081172], "VBg8t8i_FXY": [4081172, 4091932], "NsCL6AtMNJ8": [4091932, 4107030], "78LFB7yRSfw": [4107030, 4113285], "q3MV48f5lWs": [4113285, 4121683], "QKaiawzDXXE": [4121683, 4131072], "_rEjpyR84-U": [4131072, 4139667], "RfF6VRTmd0Q": [4139667, 4148534], "5w35MH2IP28": [4148534, 4154678], "nLEudqnb4Kw": [4154678, 4155424], "02DPGPi0wm0": [4155424, 4171337], "AbIefEf-mHw": [4171337, 4176689], "eZAUcEMFxhk": [4176689, 4182249], "I7dgMp-SUUs": [4182249, 4196583], "0tPZZefcNhM": [4196583, 4208586], "5E0dO2txQnE": [4208586, 4209337], "Hb_UTQsnFqA": [4209337, 4214038], "lSvJRltc6TE": [4214038, 4223268], "aja1XNR8bUg": [4223268, 4247905], "rFul69M_Ekw": [4247905, 4257277], "tnTNNoJxcv8": [4257277, 4263104], "kt6iCSjACCE": [4263104, 4267115], "CdddiToTUYM": [4267115, 4268153], "iJzm4dXWgtE": [4268153, 4270055], "lniM27xD4pM": [4270055, 4280399], "FpcApoUhzIw": [4280399, 4284673], "DkZ9jpHVCMI": [4284673, 4289812], "sFUSjtNf1v0": [4289812, 4300031], "f-YM4rXZXSs": [4300031, 4309627], "DIt3yL8CN_s": [4309627, 4315742], "s77FZtwP6jg": [4315742, 4323760], "Z5Su2HfobMM": [4323760, 4329525], "NCw1l0xdDAY": [4329525, 4338047], "8E2X03begsM": [4338047, 4339338], "Q-epTZknkqI": [4339338, 4347583], "QS5tgo6pnkc": [4347583, 4358765], "iv6IgPueG90": [4358765, 4365749], "YreSo0ephV8": [4365749, 4371176], "6xkQSMRUIwI": [4371176, 4373438], "WXOI8lVpv9U": [4373438, 4381965], "mXm8vWa9GXA": [4381965, 4392420], "QVC6DZnNKlQ": [4392420, 4405004], "lOFmT_uZBs0": [4405004, 4416878], "A9e8sVGmwz4": [4416878, 4421768], "UPgJFfqoy68": [4421768, 4430809], "C9elXZLgTtk": [4430809, 4443400], "4mKABLySoaA": [4443400, 4451526], "EbqdFn9dNvM": [4451526, 4459168], "v807cm50DMA": [4459168, 4471363], "gGHMniGg0qM": [4471363, 4477275], "i2ymT9FZbsI": [4477275, 4482849], "17z6ifj2XXk": [4482849, 4489500], "C1Ms4wQNfis": [4489500, 4494483], "-0yEIJCnno8": [4494483, 4495823], "GRa2jui1uVU": [4495823, 4497896], "En3ZQDepsno": [4497896, 4503649], "X3GbAKww1KI": [4503649, 4505328], "AgprSCu5TSA": [4505328, 4506759], "aACYBGNq1LA": [4506759, 4512717], "Z2AzriAJGCY": [4512717, 4521110], "Qtsz5LWf-8w": [4521110, 4521912], "gS52OYKwLB0": [4521912, 4524021], "BByuG-mcNc8": [4524021, 4525763], "472KbWLCAb8": [4525763, 4533920], "ENt0yLlqizs": [4533920, 4534631], "hK3aJa05450": [4534631, 4536714], "4tNWjh4s2qQ": [4536714, 4543297], "4lXPdLFslJo": [4543297, 4557933], "QXB_-TKd_DE": [4557933, 4576491], "PhfEbohIrvM": [4576491, 4577619], "byMsmzvTvLc": [4577619, 4578504], "Q8hj8eYK6gc": [4578504, 4585502], "kVYAY7sOjrk": [4585502, 4593272], "6ZWpAEkpwLE": [4593272, 4594392], "dKg0OEzVGZA": [4594392, 4601382], "be_mQelli5w": [4601382, 4601930], "Xg-MBWMDe6Q": [4601930, 4610870], "AEdr3XTgRvc": [4610870, 4611680], "spZDVNWU5tA": [4611680, 4613724], "0EwC0ZOQOWg": [4613724, 4618484], "H3QO6crfDeI": [4618484, 4618924], "BAbU6ctxGlc": [4618924, 4623263], "RsAIbDuxIUk": [4623263, 4623859], "_kGCx15M0ms": [4623859, 4625573], "0u8gQg5BXZ8": [4625573, 4636037], "x7yiHwxutnQ": [4636037, 4638161], "a0el7aaC00M": [4638161, 4652863], "cBofHRtHqRw": [4652863, 4653381], "w4i4erpXY_c": [4653381, 4653658], "5-qPKGx1KHk": [4653658, 4654898], "0LzT3uYOrDI": [4654898, 4662673], "z5tIPscghnM": [4662673, 4669152], "SJ15dBCpoKM": [4669152, 4671007], "KQB9_x4gkAk": [4671007, 4684793], "7RMr7K3ywZM": [4684793, 4686057], "PwgKYbfpVtI": [4686057, 4697771], "qcPxLfJIT3s": [4697771, 4702379], "4bBZjqKqbZc": [4702379, 4709960], "d-HtHaVETac": [4709960, 4710973], "NPzOaUZUqao": [4710973, 4711871], "WnUAJsk97k4": [4711871, 4715061], "VbKND1yzpF0": [4715061, 4718289], "YYsq62f_eAg": [4718289, 4719404], "QRbAMpz3Wus": [4719404, 4740091], "R9vWT8CzTwU": [4740091, 4753531], "4qO672SnK3o": [4753531, 4758199], "vwKXyfeVRVE": [4758199, 4765977], "y2MFDfND2Gw": [4765977, 4767897], "gFvVvfA8PVk": [4767897, 4778824], "y1NVH5Uu_4o": [4778824, 4788088], "oI0SVRCy_ls": [4788088, 4795333], "gXWZCtjgDms": [4795333, 4797019], "BoxMI2VUxGg": [4797019, 4799068], "CTo7eU-vSN8": [4799068, 4800646], "oReNgmDQdj4": [4800646, 4808040], "fkkCiJGeBoU": [4808040, 4809335], "qNqZuJ3IYqc": [4809335, 4811713], "byUf3v8_3DA": [4811713, 4827058], "zaaiYBTNl_Y": [4827058, 4838969], "qFjO38celk4": [4838969, 4849847], "GB5aU875dwQ": [4849847, 4854102], "Am-Beu-ctv0": [4854102, 4855117], "DKFd4Tglop4": [4855117, 4862892], "ueGak0TFVEU": [4862892, 4874272], "IZLowMeesFI": [4874272, 4879249], "6DI9Afoaiz4": [4879249, 4887294], "O97rrxsxN-E": [4887294, 4896848], "VZVTAskHa4A": [4896848, 4911504], "7hZG4v0UsH4": [4911504, 4912803], "q-vsfKEUOWQ": [4912803, 4914630], "R1oaXBJYkWE": [4914630, 4926869], "ZKQKRt7XRCY": [4926869, 4946841], "GYkyCy0NUr4": [4946841, 4960437], "eM4Dab0hbB8": [4960437, 4965001], "393P8zRug8I": [4965001, 4969526], "0T966F09Q_8": [4969526, 4979949], "kJwQt63Jds8": [4979949, 4990498], "JnK9F4nBOB8": [4990498, 4994309], "jGOU2OFKazM": [4994309, 5018342], "J35NN2jixOw": [5018342, 5019714], "v8OdWUvLa10": [5019714, 5030804], "Zbae0Xmt-3g": [5030804, 5059096], "iR9C2gR69ig": [5059096, 5068948], "BzNtmZigskI": [5068948, 5079939], "Xq8XSdsst7I": [5079939, 5081699], "tNDmA-RzBg4": [5081699, 5083750], "AtCyFMoCjjk": [5083750, 5094178], "UzzkjrfdSdE": [5094178, 5098487], "52YP_P8T7qc": [5098487, 5099861], "sl54jflBpBk": [5099861, 5103507], "kLukFBD0Ivg": [5103507, 5113855], "Nfw7UbPu4Bg": [5113855, 5125682], "Sk97ni7cytg": [5125682, 5132598], "-25TnDTMy1s": [5132598, 5141525], "2nE1vDXAcW8": [5141525, 5152314], "Ifr0TDjxQ4Q": [5152314, 5161764], "02ZV69OUtVU": [5161764, 5171611], "fxZZuo-68kY": [5171611, 5212311], "4i4RaNKmqpg": [5212311, 5222191], "-mDLXrSTFeg": [5222191, 5228905], "35pY0N1OgUI": [5228905, 5237019], "WLV1SXQR-tM": [5237019, 5241365], "a6Ke9eY8v88": [5241365, 5248766], "rpDZOJcCxYs": [5248766, 5257786], "7oYZqza2O70": [5257786, 5270838], "wCWrLV_Osgw": [5270838, 5276160], "8V1AfWUBDC4": [5276160, 5283935], "gQ2FkvEpi00": [5283935, 5290221], "XyhvXQ2BdLM": [5290221, 5296258], "H5YlhGn9C8U": [5296258, 5301852], "fm8fOwylrd4": [5301852, 5311553], "Gg7ci0QzfLw": [5311553, 5319154], "uzvdXiG6wFc": [5319154, 5326366], "j757Lyv53UA": [5326366, 5332858], "s7JW4-CgR44": [5332858, 5339481], "e7QonmD34ZQ": [5339481, 5339871], "TQiHN4xUydc": [5339871, 5347118], "kitiLnAWqwA": [5347118, 5354637], "oe3rovGvB5s": [5354637, 5362533], "4nNjh4aGtjc": [5362533, 5370940], "Zuk7lgvBD2c": [5370940, 5378181], "Y9t9eMY-O9U": [5378181, 5384406], "VIUqPsGCHdU": [5384406, 5390598], "kQjgSdkG-2w": [5390598, 5397377], "H83zmcFj93U": [5397377, 5408288], "qWoPIW5moQc": [5408288, 5415346], "gqGh0MnVYH4": [5415346, 5425836], "YWFfyjylq8g": [5425836, 5442309], "CO7c2viMh7M": [5442309, 5449248], "phQsRPlzFRc": [5449248, 5458357], "WsXiWtJB4Yg": [5458357, 5464008], "NpBgfrKcX4s": [5464008, 5472570], "SoH7T7OsTxY": [5472570, 5476713], "WCcLn0qXpUY": [5476713, 5484543], "0ttqwuSOMRA": [5484543, 5490548], "p2NrxxKucaU": [5490548, 5497464], "ur77HMoZPjY": [5497464, 5508652], "05kiyxeRawY": [5508652, 5516108], "1MNl9YoPyPA": [5516108, 5521032], "N-1BpmU7rQQ": [5521032, 5527661], "ZhsmsV_ChHo": [5527661, 5535120], "u1s5wQVhwws": [5535120, 5541269], "iapUF9ttQs8": [5541269, 5554337], "eNGHfCEzPPQ": [5554337, 5565028], "H7HeGL4BslI": [5565028, 5580933], "j7TkUM8KihE": [5580933, 5589600], "SqWamN0ZYCo": [5589600, 5594944], "Q6vzjR7HH1c": [5594944, 5601861], "zpCO7eSI9Q8": [5601861, 5611516], "xE908RyNvGY": [5611516, 5614087], "iZ9mDC-h1VI": [5614087, 5627546], "L505EUfuKXo": [5627546, 5633885], "gP5AQaG2nrA": [5633885, 5635840], "sFZxHP0cdis": [5635840, 5648554], "Tsc3IvYofS4": [5648554, 5652233], "woCrO0VxT6s": [5652233, 5657039], "GY6_fvCO-qM": [5657039, 5659512], "IwVzHubf-AU": [5659512, 5664229], "xLsJiesFtR4": [5664229, 5674587], "9MKeGursT48": [5674587, 5679124], "FQ017iBbwSE": [5679124, 5690471], "mkMFtEZN938": [5690471, 5699408], "be1jJCH32OU": [5699408, 5704874], "0CW79SadQvs": [5704874, 5705456], "EkhMOP-WOCI": [5705456, 5720584], "M2VD97CTZBA": [5720584, 5725293], "pvbqhkYRS9I": [5725293, 5727390], "K7fBlN9kqlI": [5727390, 5733343], "6Msu5whwZp8": [5733343, 5734833], "6GwfuWhOOdY": [5734833, 5753476], "Sz40f_geQRo": [5753476, 5760846], "YEyKM13yf_4": [5760846, 5766924], "PezMSXKNAYQ": [5766924, 5772712], "b2HdawjaXaM": [5772712, 5773663], "XUY-5Ji7RSo": [5773663, 5783221], "U-w6uARcQ_w": [5783221, 5789584], "MVDw2DRMll8": [5789584, 5790704], "CDDYAN87zDs": [5790704, 5795753], "guMUF9uLn9c": [5795753, 5803896], "GyzoyHOrW9g": [5803896, 5805463], "CpwKka2ZQ_Q": [5805463, 5813062], "UkA7Q64pa5s": [5813062, 5814560], "_Hwms79wzuA": [5814560, 5820489], "3eNS7XoMWKs": [5820489, 5828126], "sIJibwlhpgI": [5828126, 5833351], "fQNaSXz1HH4": [5833351, 5840004], "VdFnyZWJAgo": [5840004, 5845454], "1u3yHICR_BU": [5845454, 5849142], "I0LedcEaPL0": [5849142, 5853698], "1X2l_1za1g0": [5853698, 5869299], "PCicM6i59_I": [5869299, 5873435], "VlIcqDWmPkw": [5873435, 5878157], "XlPvAkLT3Yw": [5878157, 5883264], "tar_TGXQ59g": [5883264, 5888595], "QAiwlq3aP2U": [5888595, 5892080], "aGXm9SGCVT8": [5892080, 5900440], "FBbaE4ytj8E": [5900440, 5907942], "tfcNUo8qjrA": [5907942, 5911159], "X0T6KysSejQ": [5911159, 5919108], "cZoWhKTZTYY": [5919108, 5920577], "eHbxLcoLWYY": [5920577, 5922772], "eCQO6k5Qrmg": [5922772, 5924364], "lR8RrUBhCQg": [5924364, 5925140], "STKXyBGSGyE": [5925140, 5926679], "YcXK-dWMxC0": [5926679, 5928189], "3bpD1lZsTsM": [5928189, 5932646], "ufsSRKgUb6g": [5932646, 5933211], "aGk1zIDQQjQ": [5933211, 5936003], "nZ4HNz9xvSw": [5936003, 5937815], "HQveyGmUBSs": [5937815, 5941276], "P_lSgczU2Sk": [5941276, 5942388], "u6Mr13lHQVs": [5942388, 5949306], "JRPtROMynA8": [5949306, 5950879], "4-hZDt0Vr5I": [5950879, 5951183], "C952gmBlkIU": [5951183, 5955054], "sgyhfvTIMmw": [5955054, 5962092], "-kUCgRjtwPY": [5962092, 5969154], "fC6p0MRp-s4": [5969154, 5973085], "dTApdk9eCVU": [5973085, 5976615], "_counter": 5976615} -------------------------------------------------------------------------------- /Solos/skeleton_files/skeleton_dict_deprecated.json: -------------------------------------------------------------------------------- 1 | {"Rka-Gpys4bA": [0, 6123], "Fj-XI_1M2so": [6123, 13254], "VXCM7OqYr2s": [13254, 23031], "B4OYUfmzcTc": [23031, 28938], "_W2VM3uinZA": [28938, 31823], "PKAxZjJctZs": [31823, 41479], "OPJgBE4zrds": [41479, 44984], "WFeKh6RMMag": [44984, 54475], "Pg9LvfTEpBA": [54475, 60211], "bEKjN9gJFcc": [60211, 63493], "iJNyROC4bsU": [63493, 69313], "OABlWfhFNR0": [69313, 72869], "2FOf7OpA16M": [72869, 83535], "BfDiMuPuNTk": [83535, 89540], "zCCKnGy8d6Y": [89540, 93844], "LBZ1EvU5bYY": [93844, 96240], "laq2CpGvdmY": [96240, 102384], "KrQEYrEoeZo": [102384, 108167], "_77A5wGQLGU": [108167, 114177], "wobcIuAg9-c": [114177, 121509], "Bp1nNO6eyaA": [121509, 123342], "A6CjIck0YzE": [123342, 132731], "yG1DzBXVxw8": [132731, 137714], "JQJ0mJylOGo": [137714, 156171], "HjcvteM65rU": [156171, 165116], "UgERYVl589Y": [165116, 168836], "zMPddD6ONO0": [168836, 195553], "XXms5IK6eZE": [195553, 200714], "2bYLzLsIWME": [200714, 202494], "6klGDQlv--8": [202494, 209874], "xHpSRAqDzEc": [209874, 215369], "lZmGCTRaJWI": [215369, 224397], "mZNNWTrvGoA": [224397, 235697], "ZxLuL07Troc": [235697, 240476], "lFOduNx2OU8": [240476, 262263], "kQmHz_oIQh8": [262263, 269797], "8P2tojMUMh0": [269797, 275955], "2Nnux-Uhr-s": [275955, 286364], "eu_om_tqmZA": [286364, 297404], "wmyWpgA3IOM": [297404, 300496], "Lb3IYryFqhg": [300496, 305454], "LuB1Q4JAXYY": [305454, 312049], "7p4bBUexcjg": [312049, 316885], "zO70rRweED4": [316885, 325378], "_EHUE5cLxQ4": [325378, 336748], "OwRFnXpeVbs": [336748, 340499], "w6rZk01h9ak": [340499, 347577], "gv5kQw-jlMs": [347577, 351590], "1Pg4eCGPCW0": [351590, 359298], "tzQZ9HAzkN0": [359298, 379968], "TFhRxcvLazI": [379968, 388484], "7j6oSAH5-no": [388484, 399397], "g8aZpvJTkXk": [399397, 413431], "kerhzUUT-oY": [413431, 421951], "4Eu4ZtHFX-M": [421951, 450832], "C2rQAl6k-xk": [450832, 497529], "DW5bm1f0mk0": [497529, 512099], "-Gzz7mlcnrA": [512099, 524424], "yIJ1bp5OGXI": [524424, 533025], "0KKjHvY3K00": [533025, 539828], "URml6i5xnxg": [539828, 549890], "fajJjmQmpPo": [549890, 558239], "b8ocLtMUKoQ": [558239, 601451], "_2cmM-ezUkY": [601451, 612458], "HLPaCrUk_QA": [612458, 624041], "bd2h2_MLzPI": [624041, 674574], "LZBrIj72VnI": [674574, 675641], "GxvCwJfkr4A": [675641, 685781], "jp12L8TmbnQ": [685781, 697620], "SD2fEx9kNpY": [697620, 707565], "WI-vYblPi6Q": [707565, 716634], "y3X6miK_I6A": [716634, 731311], "h68lQ6vwVSg": [731311, 736142], "flBXBpWJ9MQ": [736142, 745569], "t6_zmIMnNMo": [745569, 778811], "j-XvDYhhfKY": [778811, 790645], "peY7HCOqT7g": [790645, 816715], "_DNEckeD2s8": [816715, 818370], "0wcmaZpHarU": [818370, 837505], "7boe10Hbgdg": [837505, 862297], "ZAEn-TgSFew": [862297, 881780], "yEnGTTY9ILg": [881780, 898123], "s_pZmwu09LM": [898123, 907902], "gGPxQB6BSVY": [907902, 922439], "KA1C80N9SMo": [922439, 932784], "-dd8eQzvRKY": [932784, 941336], "Y-djdPoHhbY": [941336, 946591], "ko4UN_PIpVc": [946591, 955434], "qsRi7OCwyYk": [955434, 963906], "LrtP_aaOo4k": [963906, 968806], "2qmT4DA1Eds": [968806, 977331], "By9-kbbpjzs": [977331, 983191], "_XWTQnZ3-8g": [983191, 996090], "lZOY9AKDlm8": [996090, 1002121], "9eL-jZolM8k": [1002121, 1015144], "1oXh85Qjkf8": [1015144, 1031233], "i_TtsSomAkY": [1031233, 1040841], "Nz2GuVHV_tQ": [1040841, 1042218], "ThS7PSisxeg": [1042218, 1047363], "zdawwJ4sXhw": [1047363, 1056385], "JagOdyHQWFE": [1056385, 1068705], "sveFiOQ5j5s": [1068705, 1084354], "xqCg4EQTH3E": [1084354, 1097700], "FowI3MYGSM4": [1097700, 1108007], "DUZ6gZDLlTc": [1108007, 1120313], "vD9_IFATwQk": [1120313, 1128632], "9qKaMSd6Dvw": [1128632, 1147002], "2rFIKDJhkLQ": [1147002, 1153987], "9lpi9pjKjz4": [1153987, 1157612], "QrCMPRpdfwU": [1157612, 1161772], "5MOH4bCEFxQ": [1161772, 1166196], "ENa-FK70gMQ": [1166196, 1172479], "pRv9iXN5FHk": [1172479, 1179214], "XAQBStul-PU": [1179214, 1182968], "JI_glaY-qvI": [1182968, 1189739], "dy_VGcI3pqA": [1189739, 1198699], "UO2RXlrXseo": [1198699, 1203135], "1ulhWinVNfo": [1203135, 1211613], "7p0XMNoGFFE": [1211613, 1213250], "igCT4G1M1Xo": [1213250, 1218502], "nxkX-DNKScA": [1218502, 1223496], "7PNsIVhKV0M": [1223496, 1225850], "uPFmNhqERog": [1225850, 1230884], "OqH9szlahwU": [1230884, 1232503], "R9g-OMGPsm0": [1232503, 1235464], "CXFYi7iozF8": [1235464, 1239222], "ZQRZmdIda6s": [1239222, 1243615], "6SN-h-wd_fM": [1243615, 1247330], "A8Q-O5KB7kw": [1247330, 1249889], "HoiQWzWCOgk": [1249889, 1250584], "_ZejWRWUidc": [1250584, 1253851], "m5Y-UX9Srq0": [1253851, 1259008], "gq0-x29RYvM": [1259008, 1264847], "77OHAqrL2tA": [1264847, 1268623], "XMe3sx3C0z4": [1268623, 1271540], "zNoSvo4hbuM": [1271540, 1273065], "rEnef0RRQfU": [1273065, 1276749], "0CZvvdta4Lc": [1276749, 1286078], "z8tWYFa1IkE": [1286078, 1290012], "QcLOE1fkrX0": [1290012, 1292919], "1kH9rdpPc38": [1292919, 1294052], "7ceNky6vW9s": [1294052, 1297918], "Hj4Qc3_em6E": [1297918, 1299722], "sNDgd3wAIhs": [1299722, 1303314], "aC8JzVFm7LI": [1303314, 1304072], "cViWaf73v1c": [1304072, 1309998], "YjTO6o8yiZw": [1309998, 1314317], "vihnv5-l-4g": [1314317, 1325760], "y64SQKecqX4": [1325760, 1329081], "ZwFDieF3ZFE": [1329081, 1330724], "zsvTWQ4kPmo": [1330724, 1331942], "ag39M6kCwRA": [1331942, 1336448], "EuHyy73Jc5U": [1336448, 1337350], "trumpet07": [1337350, 1338399], "trumpet17": [1338399, 1340088], "trumpet48": [1340088, 1340710], "trumpet04": [1340710, 1342249], "trumpet03": [1342249, 1346706], "trumpet39": [1346706, 1349019], "trumpet18": [1349019, 1350101], "trumpet24": [1350101, 1350979], "trumpet45": [1350979, 1354967], "trumpet08": [1354967, 1358764], "trumpet44": [1358764, 1359044], "trumpet16": [1359044, 1361690], "trumpet37": [1361690, 1363262], "trumpet23": [1363262, 1364614], "trumpet36": [1364614, 1365271], "trumpet50": [1365271, 1366054], "trumpet13": [1366054, 1367342], "trumpet25": [1367342, 1367965], "trumpet40": [1367965, 1369597], "trumpet43": [1369597, 1370021], "trumpet32": [1370021, 1370678], "trumpet02": [1370678, 1373471], "trumpet15": [1373471, 1374861], "trumpet31": [1374861, 1375518], "trumpet27": [1375518, 1376183], "trumpet12": [1376183, 1379195], "trumpet11": [1379195, 1381008], "trumpet46": [1381008, 1384935], "trumpet05": [1384935, 1385500], "trumpet06": [1385500, 1387092], "trumpet47": [1387092, 1389047], "trumpet34": [1389047, 1389702], "trumpet21": [1389702, 1400281], "trumpet14": [1400281, 1403216], "trumpet29": [1403216, 1404445], "trumpet30": [1404445, 1405741], "trumpet52": [1405741, 1406300], "trumpet35": [1406300, 1407019], "trumpet09": [1407019, 1410254], "trumpet38": [1410254, 1412747], "trumpet42": [1412747, 1413360], "trumpet41": [1413360, 1413877], "trumpet01": [1413877, 1415387], "trumpet49": [1415387, 1415820], "trumpet22": [1415820, 1416609], "trumpet33": [1416609, 1419494], "trumpet10": [1419494, 1420270], "trumpet19": [1420270, 1428773], "trumpet51": [1428773, 1430415], "trumpet26": [1430415, 1431387], "tuba28": [1431387, 1442125], "tuba36": [1442125, 1443670], "tuba38": [1443670, 1448391], "tuba05": [1448391, 1451852], "tuba07": [1451852, 1459579], "tuba26": [1459579, 1462797], "tuba10": [1462797, 1464760], "tuba27": [1464760, 1465872], "tuba24": [1465872, 1468350], "tuba33": [1468350, 1472196], "tuba19": [1472196, 1472500], "tuba31": [1472500, 1475487], "tuba37": [1475487, 1477908], "tuba04": [1477908, 1485385], "tuba30": [1485385, 1492620], "tuba06": [1492620, 1494194], "tuba23": [1494194, 1501407], "tuba12": [1501407, 1508445], "tuba16": [1508445, 1512316], "tuba02": [1512316, 1514631], "tuba14": [1514631, 1524664], "tuba35": [1524664, 1525896], "tuba34": [1525896, 1528542], "tuba22": [1528542, 1535868], "tuba18": [1535868, 1541031], "tuba20": [1541031, 1548513], "tuba17": [1548513, 1552210], "tuba32": [1552210, 1552915], "tuba39": [1552915, 1556067], "tuba11": [1556067, 1561171], "tuba01": [1561171, 1568233], "tuba29": [1568233, 1571541], "tuba25": [1571541, 1576164], "tuba41": [1576164, 1576807], "tuba13": [1576807, 1583877], "tuba08": [1583877, 1585181], "tuba21": [1585181, 1592100], "tuba09": [1592100, 1593328], "tuba15": [1593328, 1596162], "tuba40": [1596162, 1597863], "tuba03": [1597863, 1605317], "violin38": [1605317, 1606907], "violin22": [1606907, 1609860], "violin06": [1609860, 1614692], "E1xr4touR5g": [1614692, 1657676], "YRBLqsvqeMA": [1657676, 1676398], "violin08": [1676398, 1679860], "violin02": [1679860, 1688319], "violin09": [1688319, 1691310], "Iz2SAWjD9mQ": [1691310, 1696574], "rgmlb3jI274": [1696574, 1715973], "2EVvJId3QAw": [1715973, 1739916], "qcCPODzJNQ4": [1739916, 1753765], "C-dhpfxFDeM": [1753765, 1763487], "violin25": [1763487, 1769482], "violin32": [1769482, 1783194], "violin27": [1783194, 1789339], "a0f9W1CRxQM": [1789339, 1812411], "dTfA72RG8-g": [1812411, 1822760], "jsttzKQGFro": [1822760, 1824442], "violin12": [1824442, 1831764], "violin20": [1831764, 1833961], "_PFXrLBWlgU": [1833961, 1841335], "LFXQZamLiw4": [1841335, 1858895], "violin31": [1858895, 1862449], "ULQIHfXmwEk": [1862449, 1873178], "JrNn2Ns7k-g": [1873178, 1885563], "violin17": [1885563, 1891779], "violin21": [1891779, 1895185], "lWZG4fa3hQU": [1895185, 1914997], "violin28": [1914997, 1920712], "violin47": [1920712, 1924643], "K0-gjCYrJn8": [1924643, 1928748], "PUYCwgJD2Ko": [1928748, 1941072], "PCCkguu91r4": [1941072, 1957890], "violin34": [1957890, 1971849], "violin19": [1971849, 1979990], "violin10": [1979990, 1985340], "1ndATPWcaok": [1985340, 1999460], "violin14": [1999460, 2012120], "violin15": [2012120, 2017611], "violin01": [2017611, 2024008], "violin36": [2024008, 2027538], "violin41": [2027538, 2032877], "3RxH4R1V_ZQ": [2032877, 2056611], "violin24": [2056611, 2059383], "Qhfc41bn4jo": [2059383, 2075181], "BVNafswddw8": [2075181, 2084262], "Iw91usZ7wiI": [2084262, 2090652], "violin39": [2090652, 2095148], "violin16": [2095148, 2097859], "TImP-2G1FI4": [2097859, 2105759], "violin48": [2105759, 2109513], "v0Vz9bZRIQo": [2109513, 2135655], "fVrk2p35zEA": [2135655, 2150149], "sOdmMnjIWAU": [2150149, 2164009], "violin45": [2164009, 2169070], "E4GV4eqEKFQ": [2169070, 2188996], "zRRUSMeTwl8": [2188996, 2214961], "violin33": [2214961, 2221638], "violin42": [2221638, 2229873], "a1_cmEl_ScQ": [2229873, 2236884], "4emPz_bpV4E": [2236884, 2259414], "QRdYAusDCLo": [2259414, 2276578], "UWVROLcT3C0": [2276578, 2279678], "3AJYvZin3Z0": [2279678, 2296290], "E4FEOExWpKE": [2296290, 2308770], "violin11": [2308770, 2322482], "violin04": [2322482, 2329226], "violin44": [2329226, 2330243], "pGppKoQeQG8": [2330243, 2343248], "1ytu0LGRScg": [2343248, 2357733], "violin40": [2357733, 2362456], "38WfnMP7O6Y": [2362456, 2365498], "-uV87ToKCcM": [2365498, 2371769], "aiDmJ48o5Mw": [2371769, 2385167], "violin35": [2385167, 2389405], "violin50": [2389405, 2390457], "violin23": [2390457, 2394861], "violin49": [2394861, 2397465], "hSPeJm9-XF4": [2397465, 2411895], "violin30": [2411895, 2417847], "violin18": [2417847, 2430795], "MFgnRXqS6g8": [2430795, 2433524], "violin37": [2433524, 2436109], "violin05": [2436109, 2439453], "violin51": [2439453, 2440609], "ODMV3Qrt20k": [2440609, 2458879], "violin26": [2458879, 2461789], "XahBwMHViJg": [2461789, 2483055], "violin52": [2483055, 2486986], "violin29": [2486986, 2493428], "violin46": [2493428, 2497577], "violin43": [2497577, 2504629], "WlxEQT3Onlw": [2504629, 2513880], "violin03": [2513880, 2519279], "violin07": [2519279, 2523289], "4KujFOTKzN0": [2523289, 2531995], "BNTdgv-DHm0": [2531995, 2540929], "zv8lwIHpyvU": [2540929, 2549343], "JsR877if8j0": [2549343, 2553751], "7tm_jQ592So": [2553751, 2561283], "QoUut_eHEF8": [2561283, 2570204], "IGCx-Bdi-50": [2570204, 2581498], "gyQMB9mTy2s": [2581498, 2586054], "QrZ6LQWY-fo": [2586054, 2591550], "-onflKwlhRA": [2591550, 2601335], "mPoN8m8gYz0": [2601335, 2610321], "rfYY1Mpd284": [2610321, 2620621], "Xs2sZ8iVEsw": [2620621, 2639979], "xVMIoPj_xDA": [2639979, 2642744], "qHxEIkwJwmU": [2642744, 2651761], "pzGMc_csKrw": [2651761, 2660959], "q1_ODrcuxEY": [2660959, 2662854], "B2vbBww6qPI": [2662854, 2684103], "-fTiMdxqL1o": [2684103, 2689365], "cvE44e05rh8": [2689365, 2698266], "lLml8_BjQO8": [2698266, 2701667], "NcByr12rAxM": [2701667, 2711707], "FPUPIuDm7kc": [2711707, 2719972], "_D-cVF_uvBk": [2719972, 2729135], "jvZgxmVGR4A": [2729135, 2736606], "hjvtVopqflI": [2736606, 2745169], "f3oaQZgr4z4": [2745169, 2746304], "80pVi2NQ66c": [2746304, 2752555], "WBXyDy8vVnA": [2752555, 2763463], "W-ghmZkTtFE": [2763463, 2776540], "SOU5JJ_sPh4": [2776540, 2781644], "qac9PbLaBsE": [2781644, 2785135], "c_l4U4qnM4k": [2785135, 2793407], "7LJa8WznDLA": [2793407, 2805199], "wQ0EibGzows": [2805199, 2814287], "Rt6Q1ca1Sqg": [2814287, 2823105], "p0CzWz7DzVo": [2823105, 2826839], "SsbB7f_Z-io": [2826839, 2832033], "517gOh0NNfY": [2832033, 2841043], "_fp_jfzBgts": [2841043, 2852005], "u4noM_AJjoQ": [2852005, 2861459], "Jikd2Z3woSQ": [2861459, 2870591], "_LbrrV0V3wU": [2870591, 2878150], "voiYeiehBdo": [2878150, 2886022], "WZgPcjChMsY": [2886022, 2894405], "M-iEuiShwjg": [2894405, 2901660], "fZe2U5-idiI": [2901660, 2910368], "JlzM6rgu5iw": [2910368, 2919156], "fnXlE75nx7g": [2919156, 2929587], "WD36F6NoDvg": [2929587, 2938780], "blzgC-ylE9w": [2938780, 2942025], "r265LrQjFL4": [2942025, 2949718], "WyAtM5H6H0w": [2949718, 2959371], "VsllnL0mTuU": [2959371, 2969122], "RBQH09gvpWc": [2969122, 2980162], "cello07": [2980162, 3009359], "BJW31sWO5cE": [3009359, 3013819], "JW9-YhFMYSE": [3013819, 3016915], "cello24": [3016915, 3034999], "RV4Ob2Y9hvQ": [3034999, 3063401], "dKBVWebVakI": [3063401, 3074168], "cello37": [3074168, 3083694], "t81IJJVi-Us": [3083694, 3084625], "PpcSlOZY3Aw": [3084625, 3102829], "aLTH6DVXAcU": [3102829, 3120065], "cello34": [3120065, 3129523], "poCw2CCrfzA": [3129523, 3133923], "wXq_IU_vvrI": [3133923, 3138689], "cello38": [3138689, 3163908], "cello39": [3163908, 3167495], "aHiqoSUV5MA": [3167495, 3184646], "cello17": [3184646, 3188782], "Jsu5p6iAApI": [3188782, 3195269], "Y1ZO2qfr0ko": [3195269, 3201065], "42ULINLSfrE": [3201065, 3216217], "8PXQeH0g6jI": [3216217, 3224338], "4UI2fPRaxpg": [3224338, 3237436], "nAtHjkKGr4A": [3237436, 3258888], "cello20": [3258888, 3276147], "cello45": [3276147, 3289264], "RDnLgY2-abc": [3289264, 3293762], "cello40": [3293762, 3305641], "cello16": [3305641, 3329227], "3PrFqTav5Ow": [3329227, 3332082], "vI-A3KJSBpk": [3332082, 3350475], "DpvxiC0osbA": [3350475, 3353505], "cello50": [3353505, 3354669], "cello11": [3354669, 3377891], "4-TAbbQmCtg": [3377891, 3389666], "QPfE-FqhQq4": [3389666, 3392169], "cello48": [3392169, 3412834], "OvXAT3_GGec": [3412834, 3432426], "iNef2eekeK0": [3432426, 3441677], "cello41": [3441677, 3447666], "cello52": [3447666, 3466572], "PR1Pzaqew9w": [3466572, 3472997], "cello14": [3472997, 3485644], "MbuRvmZy3Yw": [3485644, 3491570], "hC7XPGO45hk": [3491570, 3494537], "fLH9GyDbUjU": [3494537, 3507450], "Zz9nwbi9oqA": [3507450, 3524264], "6GEkwyK_tns": [3524264, 3526316], "A2d2DHxV4l0": [3526316, 3529255], "dTmuOKUPsYI": [3529255, 3535391], "sBZJCnxdmPc": [3535391, 3539736], "D_a1o8biIAk": [3539736, 3560825], "j9Re7hWGh3Y": [3560825, 3574739], "cello06": [3574739, 3578486], "VEaJzYRrrD8": [3578486, 3585272], "cello60": [3585272, 3594254], "cello33": [3594254, 3604459], "7_8yPpCjK_w": [3604459, 3612493], "cello56": [3612493, 3619604], "Q0OfnLEpty4": [3619604, 3627334], "PDJ_QZAbGi4": [3627334, 3639887], "WSvQ7_N1y08": [3639887, 3656769], "mmJim2h-byQ": [3656769, 3664773], "cello23": [3664773, 3687813], "cello36": [3687813, 3692384], "LDq9sFUjwQk": [3692384, 3703111], "JQOC7Za4Pbw": [3703111, 3714415], "07kcsRHipyw": [3714415, 3715684], "heFoLuid8-Y": [3715684, 3731185], "UWRZ4gi3HAM": [3731185, 3743236], "cello57": [3743236, 3746910], "cello32": [3746910, 3759724], "cello35": [3759724, 3771715], "cello31": [3771715, 3775689], "WSheIMbyC5w": [3775689, 3786711], "llpPao0uM7U": [3786711, 3805721], "j4CwTQmRxiY": [3805721, 3826764], "cello55": [3826764, 3832215], "cello03": [3832215, 3836059], "GMyL9JTfDps": [3836059, 3851167], "cello47": [3851167, 3854796], "AT97pTC97tY": [3854796, 3872161], "cello01": [3872161, 3876717], "cello10": [3876717, 3880405], "Z1rRodHDapI": [3880405, 3897463], "cello08": [3897463, 3906740], "CrBCIFZImKE": [3906740, 3911146], "DsQX--nVPJQ": [3911146, 3922458], "cello46": [3922458, 3926776], "cello12": [3926776, 3942518], "cello49": [3942518, 3945760], "bhxNofWXTEA": [3945760, 3950535], "ZNs5igA6tZQ": [3950535, 3962648], "cello27": [3962648, 3980068], "cello05": [3980068, 3985451], "cello25": [3985451, 3998184], "BvrGLXMvc_o": [3998184, 4020629], "cello18": [4020629, 4031859], "MNB8H2p9Kk0": [4031859, 4041284], "JxhUFn5CT6A": [4041284, 4053668], "cello43": [4053668, 4077766], "cello28": [4077766, 4086735], "FR1UZKD238Y": [4086735, 4095818], "cello13": [4095818, 4107707], "cello21": [4107707, 4109248], "BObT8M5Mnus": [4109248, 4115778], "5IwWfy2RhQE": [4115778, 4126347], "J_nJYlZHpuw": [4126347, 4148023], "cello04": [4148023, 4151348], "cello29": [4151348, 4174161], "cello30": [4174161, 4178883], "7WeXhVxpTAw": [4178883, 4211041], "cello15": [4211041, 4215981], "P--7W1h4khQ": [4215981, 4230000], "cello19": [4230000, 4238305], "cello26": [4238305, 4255558], "ww9_f6hxYKo": [4255558, 4259195], "cello44": [4259195, 4274796], "2C7_o5mfE6k": [4274796, 4277474], "zGiFcVKafQM": [4277474, 4294052], "wHfhjkI2L9M": [4294052, 4299342], "cello22": [4299342, 4304461], "gRy76nNP6CQ": [4304461, 4310181], "KtsdeqrcO2U": [4310181, 4321426], "WotHO4X1kak": [4321426, 4337538], "cello42": [4337538, 4343199], "cello02": [4343199, 4347164], "fJ7yh1E9S-k": [4347164, 4361060], "3qHdCTe0mIs": [4361060, 4373722], "cello58": [4373722, 4381097], "cello54": [4381097, 4393206], "cello53": [4393206, 4394682], "MKsYR-9ZD9M": [4394682, 4396965], "cello59": [4396965, 4410236], "REhp68K-6mw": [4410236, 4421685], "eWTR-puxJyo": [4421685, 4434999], "gtr9N_qdHag": [4434999, 4446597], "TiqUpTAwWgY": [4446597, 4456516], "cello51": [4456516, 4475587], "SPh_q2n3JYM": [4475587, 4482287], "cello09": [4482287, 4486688], "XP6EIvVrmLs": [4486688, 4496122], "VBg8t8i_FXY": [4496122, 4506882], "NsCL6AtMNJ8": [4506882, 4521980], "78LFB7yRSfw": [4521980, 4528235], "q3MV48f5lWs": [4528235, 4536633], "QKaiawzDXXE": [4536633, 4546022], "_rEjpyR84-U": [4546022, 4554617], "RfF6VRTmd0Q": [4554617, 4563484], "5w35MH2IP28": [4563484, 4569628], "nLEudqnb4Kw": [4569628, 4570374], "02DPGPi0wm0": [4570374, 4586287], "AbIefEf-mHw": [4586287, 4591639], "eZAUcEMFxhk": [4591639, 4597199], "I7dgMp-SUUs": [4597199, 4611533], "0tPZZefcNhM": [4611533, 4623536], "5E0dO2txQnE": [4623536, 4624287], "Hb_UTQsnFqA": [4624287, 4628988], "lSvJRltc6TE": [4628988, 4638218], "aja1XNR8bUg": [4638218, 4662855], "rFul69M_Ekw": [4662855, 4672227], "tnTNNoJxcv8": [4672227, 4678054], "kt6iCSjACCE": [4678054, 4682065], "CdddiToTUYM": [4682065, 4683103], "iJzm4dXWgtE": [4683103, 4685005], "lniM27xD4pM": [4685005, 4695349], "FpcApoUhzIw": [4695349, 4699623], "DkZ9jpHVCMI": [4699623, 4704762], "sFUSjtNf1v0": [4704762, 4714981], "f-YM4rXZXSs": [4714981, 4724577], "DIt3yL8CN_s": [4724577, 4730692], "s77FZtwP6jg": [4730692, 4738710], "Z5Su2HfobMM": [4738710, 4744475], "NCw1l0xdDAY": [4744475, 4752997], "8E2X03begsM": [4752997, 4754288], "Q-epTZknkqI": [4754288, 4762533], "QS5tgo6pnkc": [4762533, 4773715], "iv6IgPueG90": [4773715, 4780699], "YreSo0ephV8": [4780699, 4786126], "6xkQSMRUIwI": [4786126, 4788388], "WXOI8lVpv9U": [4788388, 4796915], "mXm8vWa9GXA": [4796915, 4807370], "QVC6DZnNKlQ": [4807370, 4819954], "lOFmT_uZBs0": [4819954, 4831828], "A9e8sVGmwz4": [4831828, 4836718], "UPgJFfqoy68": [4836718, 4845759], "C9elXZLgTtk": [4845759, 4858350], "4mKABLySoaA": [4858350, 4866476], "EbqdFn9dNvM": [4866476, 4874118], "v807cm50DMA": [4874118, 4886313], "gGHMniGg0qM": [4886313, 4892225], "i2ymT9FZbsI": [4892225, 4897799], "17z6ifj2XXk": [4897799, 4904450], "C1Ms4wQNfis": [4904450, 4909433], "-0yEIJCnno8": [4909433, 4910773], "GRa2jui1uVU": [4910773, 4912846], "En3ZQDepsno": [4912846, 4918599], "clarinet44": [4918599, 4918876], "clarinet33": [4918876, 4933578], "clarinet23": [4933578, 4940568], "clarinet38": [4940568, 4941453], "clarinet51": [4941453, 4942717], "clarinet09": [4942717, 4950298], "clarinet08": [4950298, 4958068], "clarinet29": [4958068, 4964026], "clarinet01": [4964026, 4972966], "clarinet27": [4972966, 4991524], "clarinet28": [4991524, 4993266], "clarinet46": [4993266, 4993977], "clarinet40": [4993977, 4995408], "clarinet35": [4995408, 4999747], "clarinet50": [4999747, 5006737], "clarinet19": [5006737, 5007547], "clarinet45": [5007547, 5008143], "clarinet43": [5008143, 5009383], "clarinet39": [5009383, 5009901], "clarinet04": [5009901, 5021615], "clarinet30": [5021615, 5028094], "clarinet47": [5028094, 5028534], "clarinet07": [5028534, 5035532], "clarinet03": [5035532, 5042115], "clarinet32": [5042115, 5043235], "clarinet25": [5043235, 5046425], "clarinet10": [5046425, 5048508], "clarinet14": [5048508, 5050222], "clarinet48": [5050222, 5051024], "clarinet02": [5051024, 5065660], "clarinet06": [5065660, 5067784], "clarinet24": [5067784, 5072392], "clarinet42": [5072392, 5073520], "clarinet15": [5073520, 5081913], "clarinet05": [5081913, 5083957], "clarinet20": [5083957, 5091732], "clarinet37": [5091732, 5092280], "clarinet13": [5092280, 5106066], "clarinet31": [5106066, 5108175], "clarinet21": [5108175, 5110030], "clarinet22": [5110030, 5118187], "clarinet16": [5118187, 5128651], "clarinet41": [5128651, 5129766], "clarinet12": [5129766, 5134526], "clarinet49": [5134526, 5135424], "clarinet18": [5135424, 5148864], "clarinet11": [5148864, 5150543], "clarinet36": [5150543, 5159483], "clarinet17": [5159483, 5162711], "clarinet34": [5162711, 5183398], "clarinet26": [5183398, 5184411], "4qO672SnK3o": [5184411, 5189079], "vwKXyfeVRVE": [5189079, 5196857], "y2MFDfND2Gw": [5196857, 5198777], "gFvVvfA8PVk": [5198777, 5209704], "y1NVH5Uu_4o": [5209704, 5218968], "oI0SVRCy_ls": [5218968, 5226213], "gXWZCtjgDms": [5226213, 5227899], "BoxMI2VUxGg": [5227899, 5229948], "CTo7eU-vSN8": [5229948, 5231526], "oReNgmDQdj4": [5231526, 5238920], "fkkCiJGeBoU": [5238920, 5240215], "qNqZuJ3IYqc": [5240215, 5242593], "byUf3v8_3DA": [5242593, 5257938], "zaaiYBTNl_Y": [5257938, 5269849], "qFjO38celk4": [5269849, 5280727], "GB5aU875dwQ": [5280727, 5284982], "Am-Beu-ctv0": [5284982, 5285997], "DKFd4Tglop4": [5285997, 5293772], "ueGak0TFVEU": [5293772, 5305152], "IZLowMeesFI": [5305152, 5310129], "6DI9Afoaiz4": [5310129, 5318174], "O97rrxsxN-E": [5318174, 5327728], "VZVTAskHa4A": [5327728, 5342384], "7hZG4v0UsH4": [5342384, 5343683], "q-vsfKEUOWQ": [5343683, 5345510], "R1oaXBJYkWE": [5345510, 5357749], "ZKQKRt7XRCY": [5357749, 5377721], "GYkyCy0NUr4": [5377721, 5391317], "eM4Dab0hbB8": [5391317, 5395881], "393P8zRug8I": [5395881, 5400406], "0T966F09Q_8": [5400406, 5410829], "kJwQt63Jds8": [5410829, 5421378], "JnK9F4nBOB8": [5421378, 5425189], "jGOU2OFKazM": [5425189, 5449222], "J35NN2jixOw": [5449222, 5450594], "v8OdWUvLa10": [5450594, 5461684], "Zbae0Xmt-3g": [5461684, 5489976], "iR9C2gR69ig": [5489976, 5499828], "BzNtmZigskI": [5499828, 5510819], "Xq8XSdsst7I": [5510819, 5512579], "tNDmA-RzBg4": [5512579, 5514630], "AtCyFMoCjjk": [5514630, 5525058], "UzzkjrfdSdE": [5525058, 5529367], "52YP_P8T7qc": [5529367, 5530741], "sl54jflBpBk": [5530741, 5534387], "kLukFBD0Ivg": [5534387, 5544735], "Nfw7UbPu4Bg": [5544735, 5556562], "Sk97ni7cytg": [5556562, 5563478], "-25TnDTMy1s": [5563478, 5572405], "2nE1vDXAcW8": [5572405, 5583194], "Ifr0TDjxQ4Q": [5583194, 5592644], "02ZV69OUtVU": [5592644, 5602491], "fxZZuo-68kY": [5602491, 5643191], "-mDLXrSTFeg": [5643191, 5649905], "35pY0N1OgUI": [5649905, 5658019], "WLV1SXQR-tM": [5658019, 5662365], "a6Ke9eY8v88": [5662365, 5669766], "rpDZOJcCxYs": [5669766, 5678786], "wCWrLV_Osgw": [5678786, 5684108], "8V1AfWUBDC4": [5684108, 5691883], "gQ2FkvEpi00": [5691883, 5698169], "XyhvXQ2BdLM": [5698169, 5704206], "H5YlhGn9C8U": [5704206, 5709800], "fm8fOwylrd4": [5709800, 5719501], "uzvdXiG6wFc": [5719501, 5726713], "j757Lyv53UA": [5726713, 5733205], "s7JW4-CgR44": [5733205, 5739828], "e7QonmD34ZQ": [5739828, 5740218], "TQiHN4xUydc": [5740218, 5747465], "kitiLnAWqwA": [5747465, 5754984], "oe3rovGvB5s": [5754984, 5762880], "4nNjh4aGtjc": [5762880, 5771287], "Zuk7lgvBD2c": [5771287, 5778528], "Y9t9eMY-O9U": [5778528, 5784753], "VIUqPsGCHdU": [5784753, 5790945], "kQjgSdkG-2w": [5790945, 5797724], "H83zmcFj93U": [5797724, 5808635], "qWoPIW5moQc": [5808635, 5815693], "gqGh0MnVYH4": [5815693, 5826183], "YWFfyjylq8g": [5826183, 5842656], "CO7c2viMh7M": [5842656, 5849595], "phQsRPlzFRc": [5849595, 5858704], "WsXiWtJB4Yg": [5858704, 5864355], "NpBgfrKcX4s": [5864355, 5872917], "SoH7T7OsTxY": [5872917, 5877060], "WCcLn0qXpUY": [5877060, 5884890], "0ttqwuSOMRA": [5884890, 5890895], "p2NrxxKucaU": [5890895, 5897811], "05kiyxeRawY": [5897811, 5905267], "1MNl9YoPyPA": [5905267, 5910191], "N-1BpmU7rQQ": [5910191, 5916820], "ZhsmsV_ChHo": [5916820, 5924279], "u1s5wQVhwws": [5924279, 5930428], "iapUF9ttQs8": [5930428, 5943496], "H7HeGL4BslI": [5943496, 5959401], "j7TkUM8KihE": [5959401, 5968068], "SqWamN0ZYCo": [5968068, 5973412], "Q6vzjR7HH1c": [5973412, 5980329], "flute13": [5980329, 5988278], "flute24": [5988278, 5997933], "flute19": [5997933, 5999402], "flute16": [5999402, 6010749], "flute42": [6010749, 6015855], "flute09": [6015855, 6023225], "flute30": [6023225, 6029588], "flute43": [6029588, 6034813], "flute39": [6034813, 6049941], "flute04": [6049941, 6063400], "flute36": [6063400, 6073758], "flute29": [6073758, 6081357], "flute11": [6081357, 6084574], "flute40": [6084574, 6090527], "flute41": [6090527, 6093000], "flute45": [6093000, 6098049], "flute35": [6098049, 6102855], "flute06": [6102855, 6106340], "flute14": [6106340, 6113977], "flute20": [6113977, 6116548], "flute25": [6116548, 6117499], "flute08": [6117499, 6123838], "flute18": [6123838, 6125328], "flute46": [6125328, 6130045], "flute03": [6130045, 6148688], "flute27": [6148688, 6149808], "flute44": [6149808, 6151763], "flute47": [6151763, 6152345], "flute12": [6152345, 6158274], "flute22": [6158274, 6167211], "flute23": [6167211, 6168709], "flute01": [6168709, 6174175], "flute26": [6174175, 6180828], "flute31": [6180828, 6183023], "flute37": [6183023, 6187732], "flute28": [6187732, 6193064], "flute34": [6193064, 6205778], "flute17": [6205778, 6210315], "flute33": [6210315, 6211882], "flute38": [6211882, 6220242], "flute07": [6220242, 6228385], "flute02": [6228385, 6234463], "flute15": [6234463, 6236560], "flute32": [6236560, 6242348], "flute21": [6242348, 6246027], "flute10": [6246027, 6255585], "flute05": [6255585, 6263087], "_counter": 6263087} -------------------------------------------------------------------------------- /Solos/json_files/solos_timestamps.json: -------------------------------------------------------------------------------- 1 | {"Trombone": {"Rka-Gpys4bA": [[0, 6050]], "Fj-XI_1M2so": [[0, 7130]], "VXCM7OqYr2s": [[139, 9652]], "B4OYUfmzcTc": [[0, 5906]], "_W2VM3uinZA": [[18, 750], [760, 2028], [2036, 2867]], "PKAxZjJctZs": [[0, 9655]], "OPJgBE4zrds": [[18, 3488]], "WFeKh6RMMag": [[0, 9490]], "Pg9LvfTEpBA": [[0, 5735]], "bEKjN9gJFcc": [[1, 973], [979, 1941], [1948, 3280]], "iJNyROC4bsU": [[0, 5819]], "OABlWfhFNR0": [[18, 220], [229, 497], [506, 988], [996, 1255], [1263, 1682], [1692, 2208], [2217, 3067], [3077, 3538]], "2FOf7OpA16M": [[7, 10656]], "BfDiMuPuNTk": [[0, 6004]], "zCCKnGy8d6Y": [[0, 4303]], "LBZ1EvU5bYY": [[18, 1283], [1291, 1848], [1855, 2379]], "laq2CpGvdmY": [[0, 6143]], "KrQEYrEoeZo": [[207, 3177], [3196, 4402], [4433, 5646]], "_77A5wGQLGU": [[0, 6009]], "wobcIuAg9-c": [[0, 7331]], "Bp1nNO6eyaA": [[0, 1832]], "A6CjIck0YzE": [[0, 9388]], "yG1DzBXVxw8": [[21, 4949]], "JQJ0mJylOGo": [[0, 18389]], "HjcvteM65rU": [[0, 8944]], "UgERYVl589Y": [[0, 3719]], "zMPddD6ONO0": [[18, 7977], [7986, 26699]], "XXms5IK6eZE": [[0, 5160]], "2bYLzLsIWME": [[18, 493], [501, 997], [1006, 1763]], "6klGDQlv--8": [[45, 7379]], "xHpSRAqDzEc": [[0, 5494]], "lZmGCTRaJWI": [[0, 8989]], "mZNNWTrvGoA": [[242, 11222]], "ZxLuL07Troc": [[0, 4778]], "lFOduNx2OU8": [[0, 21786]], "kQmHz_oIQh8": [[0, 7533]], "8P2tojMUMh0": [[4, 6149]], "2Nnux-Uhr-s": [[0, 10397]], "eu_om_tqmZA": [[0, 11039]], "wmyWpgA3IOM": [[0, 3075]], "Lb3IYryFqhg": [[18, 508], [516, 894], [903, 1461], [1468, 1705], [1713, 2486], [2494, 3528], [3536, 4398], [4407, 4940]], "LuB1Q4JAXYY": [[3, 6589]], "7p4bBUexcjg": [[0, 4835]], "zO70rRweED4": [[0, 8492]], "_EHUE5cLxQ4": [[18, 315], [355, 645], [680, 3255], [3305, 11352]], "OwRFnXpeVbs": [[18, 1112], [1120, 2170], [2177, 2656], [2664, 3339], [3348, 3733]], "w6rZk01h9ak": [[289, 3123], [3219, 3770], [3873, 5749], [5872, 6934]], "gv5kQw-jlMs": [[0, 1609], [1618, 2609], [2616, 3998]], "1Pg4eCGPCW0": [[0, 7707]], "tzQZ9HAzkN0": [[134, 3030], [3045, 6665], [6689, 9643], [9677, 11200], [11230, 12420], [12443, 13916], [13930, 19070], [19092, 19301], [19319, 19542], [19558, 19784], [19800, 20029], [20048, 20277], [20294, 20533]]}, "DoubleBass": {"TFhRxcvLazI": [[9, 8492]], "7j6oSAH5-no": [[0, 10912]], "g8aZpvJTkXk": [[0, 14033]], "kerhzUUT-oY": [[0, 8519]], "4Eu4ZtHFX-M": [[109, 28855]], "C2rQAl6k-xk": [[0, 46696]], "DW5bm1f0mk0": [[0, 14569]], "-Gzz7mlcnrA": [[0, 4583], [4607, 12324]], "yIJ1bp5OGXI": [[106, 8474]], "0KKjHvY3K00": [[0, 6802]], "URml6i5xnxg": [[0, 10061]], "fajJjmQmpPo": [[157, 2843], [2862, 7138], [7160, 8337]], "b8ocLtMUKoQ": [[0, 43211]], "_2cmM-ezUkY": [[0, 11006]], "HLPaCrUk_QA": [[0, 11582]], "bd2h2_MLzPI": [[0, 50532]], "LZBrIj72VnI": [[0, 1066]], "GxvCwJfkr4A": [[0, 10139]], "jp12L8TmbnQ": [[0, 11838]], "SD2fEx9kNpY": [[0, 9944]], "WI-vYblPi6Q": [[0, 9068]], "y3X6miK_I6A": [[0, 14676]], "h68lQ6vwVSg": [[2, 4809]], "flBXBpWJ9MQ": [[0, 9426]], "t6_zmIMnNMo": [[0, 33241]], "j-XvDYhhfKY": [[0, 11833]], "peY7HCOqT7g": [[0, 26069]], "_DNEckeD2s8": [[0, 1654]], "0wcmaZpHarU": [[167, 7694], [7870, 9819], [9994, 13639], [13815, 15579], [15755, 16712], [16892, 19134]], "7boe10Hbgdg": [[0, 24791]], "ZAEn-TgSFew": [[0, 19482]], "yEnGTTY9ILg": [[0, 16342]], "s_pZmwu09LM": [[0, 9778]], "gGPxQB6BSVY": [[0, 14536]], "KA1C80N9SMo": [[23, 10301]], "-dd8eQzvRKY": [[402, 1704], [1805, 4001], [4103, 5711], [5813, 8451]], "Y-djdPoHhbY": [[0, 5254]], "ko4UN_PIpVc": [[0, 8842]], "qsRi7OCwyYk": [[0, 8471]], "LrtP_aaOo4k": [[178, 4873]], "2qmT4DA1Eds": [[0, 8524]], "By9-kbbpjzs": [[0, 5859]], "_XWTQnZ3-8g": [[0, 4935], [5169, 12898]], "lZOY9AKDlm8": [[0, 6030]], "9eL-jZolM8k": [[0, 13022]], "1oXh85Qjkf8": [[0, 16088]], "i_TtsSomAkY": [[0, 9607]], "Nz2GuVHV_tQ": [[0, 1376]], "ThS7PSisxeg": [[3, 5132]], "zdawwJ4sXhw": [[0, 9021]], "JagOdyHQWFE": [[178, 12319]], "sveFiOQ5j5s": [[75, 15616]], "xqCg4EQTH3E": [[101, 13345]], "FowI3MYGSM4": [[0, 10306]], "DUZ6gZDLlTc": [[9, 2977], [2991, 5420], [5441, 9348], [9381, 10185], [10208, 12305]], "vD9_IFATwQk": [[189, 8318]], "9qKaMSd6Dvw": [[0, 18369]], "2rFIKDJhkLQ": [[0, 6984]]}, "Saxophone": {"9lpi9pjKjz4": [[112, 3624]], "QrCMPRpdfwU": [[0, 4080]], "5MOH4bCEFxQ": [[0, 4423]], "ENa-FK70gMQ": [[0, 6282]], "pRv9iXN5FHk": [[0, 6717]], "XAQBStul-PU": [[35, 3713]], "JI_glaY-qvI": [[2, 6769]], "dy_VGcI3pqA": [[0, 8959]], "UO2RXlrXseo": [[102, 4403]], "1ulhWinVNfo": [[0, 1739], [1779, 7378], [7408, 8477]], "7p0XMNoGFFE": [[2, 1635]], "igCT4G1M1Xo": [[102, 5235]], "nxkX-DNKScA": [[102, 4893]], "7PNsIVhKV0M": [[0, 2353]], "uPFmNhqERog": [[100, 4948]], "OqH9szlahwU": [[89, 1617]], "R9g-OMGPsm0": [[21, 2940]], "CXFYi7iozF8": [[0, 3757]], "ZQRZmdIda6s": [[251, 3888]], "6SN-h-wd_fM": [[0, 191], [209, 3678]], "A8Q-O5KB7kw": [[89, 2556]], "HoiQWzWCOgk": [[17, 568]], "_ZejWRWUidc": [[0, 3266]], "m5Y-UX9Srq0": [[0, 5156]], "gq0-x29RYvM": [[0, 5838]], "77OHAqrL2tA": [[2, 3774]], "XMe3sx3C0z4": [[0, 2916]], "zNoSvo4hbuM": [[0, 1524]], "rEnef0RRQfU": [[0, 170], [188, 3683]], "0CZvvdta4Lc": [[4, 7366], [7372, 9326]], "z8tWYFa1IkE": [[0, 3933]], "QcLOE1fkrX0": [[2, 2905]], "1kH9rdpPc38": [[0, 1116]], "7ceNky6vW9s": [[113, 3865]], "Hj4Qc3_em6E": [[0, 1803]], "sNDgd3wAIhs": [[0, 3591]], "aC8JzVFm7LI": [[0, 757]], "cViWaf73v1c": [[0, 5925]], "YjTO6o8yiZw": [[13, 4295]], "vihnv5-l-4g": [[320, 4310], [4471, 11273]], "y64SQKecqX4": [[0, 3320]], "ZwFDieF3ZFE": [[0, 1642]], "zsvTWQ4kPmo": [[0, 1217]], "ag39M6kCwRA": [[0, 4475]], "EuHyy73Jc5U": [[0, 901]]}, "Trumpet": {"vPrlA5lT9LY": [[898, 1132], [1252, 1436], [1565, 2524]], "AZPwFCD7eo4": [], "V--5M0ymbbM": [[249, 1181], [1348, 1512], [1661, 1813], [2057, 2952], [3392, 3721]], "-IBdXOZagLA": [[287, 3799], [3854, 5629], [5634, 8752], [8960, 9634], [9684, 10421], [10426, 10577]], "fombzY71B6s": [[0, 467], [478, 1294], [1305, 1821], [1826, 2433], [2447, 2796]], "Faa3nytprWw": [[4, 1282]], "tTb0yFcI2U8": [], "v3s8A6C9AfE": [], "HM0EP6W2OKQ": [[0, 279]], "qH_mI63Ra2Q": [[0, 1571]], "JW2ud5KDFx4": [[0, 877]], "y1fk_0eGggs": [[0, 1631]], "QE-sDP-D-CA": [[0, 621]], "3azSBjFTiig": [[0, 171], [2020, 2209]], "GYK2CIwsVp4": [[0, 627]], "4BovCUXSGus": [[0, 645]], "vW4wOpX094o": [[0, 432]], "P6AovGKMtH8": [[214, 429], [768, 933], [1662, 1891], [2657, 2845], [3048, 3338]], "7C_EZday9G4": [], "6A_YE_SC5gs": [[2, 674], [681, 1313], [1323, 1673]], "BKx-_2WMcB4": [[0, 971]], "HkGF8A0N5xw": [[0, 1190]], "2btIZEqeThs": [], "Mfj2vFFdcgw": [[0, 558]], "7dLsRs23WJg": [[0, 516]], "b2G-8sUrtCM": [[0, 704]], "U1Ik12eS5WA": [[0, 788]], "iwo1xXqsfiE": [[0, 664]], "zNO2ITrg5O4": [[0, 2884]], "fTUalNqUzKw": [[0, 1081]], "0KYUektUHpg": [], "bQc7xJhXKdg": [], "02qCh_MBwtc": [[0, 622]], "GWU_50fQ6q0": [], "wnp3WUKB32I": [[0, 782]], "VuQLvqLE9zo": [[9, 631]], "AS_TXoM2NVQ": [[30, 413]], "qoy8a6UMEpU": [[0, 3926]], "a6b1S_VkvJ4": [[0, 1295]], "_NaB7ZS5TTs": [[0, 1048]], "rB9Ff-jcr1c": [[0, 8502]], "zQOSy7vkbTM": [[23, 2276]], "eCQO6k5Qrmg": [[0, 1591]], "lR8RrUBhCQg": [[2, 775]], "STKXyBGSGyE": [[0, 1538]], "YcXK-dWMxC0": [[7, 1509]], "3bpD1lZsTsM": [[219, 4310]], "ufsSRKgUb6g": [[0, 564]], "aGk1zIDQQjQ": [[1822, 1990], [2060, 2791]], "nZ4HNz9xvSw": []}, "Tuba": {"N0VAxdaDynM": [[0, 2420]], "nQMA5_ukf4w": [[0, 2833]], "jH3sCTzek7k": [[150, 695]], "WNjneIIIEjY": [[1, 1303]], "wwNtNog-pfg": [[162, 2322], [2342, 3797], [3817, 5783], [5803, 7210]], "ilZ61Cctlos": [[0, 1544]], "rrc8oD54sQk": [[0, 3307]], "ribMR6UL2xg": [[0, 418], [472, 2277]], "-jyrc7VdL5s": [[194, 1139]], "Axzyyn1GCxY": [[0, 5162]], "hyCLFtmcYxo": [[1, 7451]], "pg0vRIfHDHA": [[0, 1231]], "sRMYO3rLHwA": [[0, 1212], [1265, 1490], [1547, 10737]], "lpAVnvhTmAA": [[116, 4720]], "tNAcx6ZGKds": [[0, 1700]], "ICKnUHRZfkc": [[213, 393], [398, 579], [713, 1917]], "R5j8f9TQ3ZQ": [[0, 3696]], "C2o3j7b5klA": [[176, 7474]], "yhVcclBVc_I": [[0, 3217]], "z_I41tB8zSc": [[0, 2645]], "CHJf_1WsVHk": [[275, 6296], [6580, 6736]], "Z4zI5rCHgBg": [[0, 642]], "mOmUcCQNVJU": [[0, 3845]], "4VJz9lT09oE": [[4, 7697]], "g_ifTNX0JqA": [[0, 2477]], "poe8zvj0MGY": [[0, 4622]], "lwpD5ZLWGOU": [[104, 9941]], "baNbDY257wU": [[0, 1828], [1866, 2733], [2739, 3308], [3343, 3567], [3572, 4218], [4317, 4623], [4848, 5079], [5094, 5249], [5340, 5897], [6965, 7147]], "udKRvSc3QqY": [[139, 7127]], "GRTTCjEEGks": [[0, 2986]], "6sRMktnR7XM": [[14, 3151]], "yXLF7dzeJiw": [[81, 3581], [3596, 5315], [5325, 7114]], "QVHfU1D9Wb4": [[92, 5017]], "HQveyGmUBSs": [[99, 2061], [2120, 2994]], "P_lSgczU2Sk": [[15, 1098]], "u6Mr13lHQVs": [[93, 6776]], "JRPtROMynA8": [[129, 1416]], "4-hZDt0Vr5I": [[0, 303]], "C952gmBlkIU": [[0, 3870]], "sgyhfvTIMmw": [[0, 7037]], "-kUCgRjtwPY": [[0, 7061]]}, "Violin": {"E1xr4touR5g": [[0, 17929]], "YRBLqsvqeMA": [[0, 15618]], "Iz2SAWjD9mQ": [[94, 4390]], "rgmlb3jI274": [[102, 1573], [1674, 2803], [2904, 4511], [4612, 5914], [6015, 7359], [7460, 16183]], "2EVvJId3QAw": [[0, 19973]], "RSvOYJ6Seko": [[0, 666], [675, 3644], [3653, 4036]], "qcCPODzJNQ4": [[0, 11693]], "C-dhpfxFDeM": [[0, 8111]], "a0f9W1CRxQM": [[0, 5063], [5181, 19247]], "dTfA72RG8-g": [[0, 8634]], "jsttzKQGFro": [[66, 1636]], "KxH4527dL88": [[164, 325], [514, 742], [1097, 1315], [1417, 1751], [1909, 2457], [3258, 3474], [3800, 4103], [4138, 4339], [4359, 4548], [4553, 4934], [4940, 5204], [5239, 5721], [6011, 6224]], "_PFXrLBWlgU": [[0, 6358]], "LFXQZamLiw4": [[0, 8643], [8669, 10063], [10071, 10588], [10669, 12026], [12074, 13239], [13245, 13763]], "ULQIHfXmwEk": [[8, 8951]], "JrNn2Ns7k-g": [[0, 10332]], "lWZG4fa3hQU": [[0, 16527]], "l0GBOoS_Zv4": [[0, 200], [763, 1450]], "K0-gjCYrJn8": [[0, 3422]], "PUYCwgJD2Ko": [[18, 1884], [1894, 4223], [4235, 7628], [7637, 10568], [10577, 12833]], "PCCkguu91r4": [[81, 2445], [2455, 4695], [4701, 14204]], "1ndATPWcaok": [[0, 11779]], "Q-NR6tsZyjI": [[89, 3662]], "7Yb5ZVNiNDk": [], "3RxH4R1V_ZQ": [[193, 4998], [5130, 14526], [14609, 19702]], "e04KbqVApT4": [[0, 1155]], "Qhfc41bn4jo": [[402, 4410], [4511, 8758], [8859, 11247], [11348, 13084]], "BVNafswddw8": [[0, 7568]], "Iw91usZ7wiI": [[37, 477], [484, 5331]], "TImP-2G1FI4": [[0, 6584]], "v0Vz9bZRIQo": [[0, 10904]], "fVrk2p35zEA": [[0, 12079]], "sOdmMnjIWAU": [[22, 11563]], "E4GV4eqEKFQ": [[0, 1175], [1187, 16623]], "zRRUSMeTwl8": [[0, 16601], [16609, 21638]], "a1_cmEl_ScQ": [[7, 6514], [6814, 7307]], "4emPz_bpV4E": [[0, 18795]], "QRdYAusDCLo": [[0, 14319]], "UWVROLcT3C0": [[0, 5166]], "3AJYvZin3Z0": [[0, 13002], [13007, 13844]], "E4FEOExWpKE": [[0, 10401]], "Si-S3XUftsk": [[11, 1051]], "AhzKxE6irJ8": [[321, 775], [1576, 2213], [2401, 3443], [3448, 4298], [4532, 4700]], "pGppKoQeQG8": [[0, 3842], [3851, 11212]], "uNdB37UuLGY": [[0, 5330]], "1ytu0LGRScg": [[0, 15103]], "0dKj8oP3QxE": [[109, 1589]], "38WfnMP7O6Y": [[133, 482], [623, 1522], [1692, 2477], [2573, 2781]], "-uV87ToKCcM": [[81, 5181]], "aiDmJ48o5Mw": [[0, 11261]], "zXDQ-QliMJI": [[198, 374], [2045, 2303], [4188, 4447], [5767, 6223], [11816, 12056], [12127, 12308], [12604, 12995]], "XK5t7TFtJsQ": [[0, 3930]], "hSPeJm9-XF4": [[103, 684], [690, 973], [1159, 1365], [1416, 1834], [1839, 2342], [2347, 2662], [2747, 3557], [4838, 5088], [5371, 5536], [5598, 5918], [5981, 6292], [6548, 6894], [7067, 7223], [7303, 7478], [7491, 7674], [7686, 7908], [8091, 8346], [8355, 9085], [9503, 9672], [9864, 10068], [10450, 10674], [11066, 11227], [11606, 11819]], "MFgnRXqS6g8": [[0, 2282]], "tq69Hs2ytHQ": [[0, 457], [467, 1134], [2208, 2494], [2667, 3092], [3118, 3398], [3403, 3867], [4165, 4346], [4807, 4975], [5011, 5182], [6103, 6417], [6422, 6804], [6815, 7023]], "ODMV3Qrt20k": [[13, 15231]], "ZbEKQ7poGT0": [[0, 2603]], "Xxpypdm0nj0": [[29, 7051]], "XahBwMHViJg": [[177, 17740]], "0OynaB3dcV4": [[42, 1016]], "8RkJOOb2AVM": [[0, 213], [219, 1905], [1969, 4845]], "WlxEQT3Onlw": [[496, 1235], [1244, 2038], [2045, 4617], [4626, 5628], [5637, 7376]], "BNT95mbdbvo": [[276, 571], [584, 742], [1136, 1375], [2082, 2317], [2346, 2584]], "SOOXHrXmvJs": [[0, 13890]], "fC6p0MRp-s4": [[7, 3923]], "dTApdk9eCVU": [[72, 3511]]}, "Viola": {"4KujFOTKzN0": [[0, 8705]], "BNTdgv-DHm0": [[0, 1251], [1259, 8933]], "zv8lwIHpyvU": [[0, 8413]], "JsR877if8j0": [[0, 4339]], "7tm_jQ592So": [[0, 7531]], "QoUut_eHEF8": [[0, 8870]], "IGCx-Bdi-50": [[0, 11293]], "gyQMB9mTy2s": [[121, 4431]], "QrZ6LQWY-fo": [[0, 5495]], "-onflKwlhRA": [[77, 9709]], "mPoN8m8gYz0": [[0, 8985]], "rfYY1Mpd284": [[0, 10299]], "Xs2sZ8iVEsw": [[0, 19356]], "xVMIoPj_xDA": [[0, 2763]], "qHxEIkwJwmU": [[0, 8913]], "pzGMc_csKrw": [[0, 9180]], "q1_ODrcuxEY": [[0, 1894]], "B2vbBww6qPI": [[0, 21248]], "-fTiMdxqL1o": [[94, 5171]], "cvE44e05rh8": [[0, 8900]], "lLml8_BjQO8": [[81, 2051], [2075, 3398]], "NcByr12rAxM": [[0, 9788]], "FPUPIuDm7kc": [[0, 8264]], "_D-cVF_uvBk": [[56, 1028], [1077, 3790], [3839, 5015], [5064, 6517], [6566, 9148]], "jvZgxmVGR4A": [[0, 7470]], "hjvtVopqflI": [[0, 8562]], "f3oaQZgr4z4": [[0, 1134]], "80pVi2NQ66c": [[402, 1101], [1302, 2596], [2697, 3679], [3781, 6150]], "WBXyDy8vVnA": [[177, 10907]], "W-ghmZkTtFE": [[0, 13076]], "SOU5JJ_sPh4": [[0, 5103]], "qac9PbLaBsE": [[10, 191], [208, 3385]], "c_l4U4qnM4k": [[0, 8270]], "7LJa8WznDLA": [[0, 11791]], "wQ0EibGzows": [[0, 9087]], "Rt6Q1ca1Sqg": [[0, 8767]], "p0CzWz7DzVo": [[0, 3733]], "SsbB7f_Z-io": [[0, 5193]], "517gOh0NNfY": [[0, 9009]], "_fp_jfzBgts": [[101, 10887]], "u4noM_AJjoQ": [[0, 9453]], "Jikd2Z3woSQ": [[0, 9131]], "_LbrrV0V3wU": [[0, 7499]], "voiYeiehBdo": [[0, 7871]], "WZgPcjChMsY": [[0, 8382]], "M-iEuiShwjg": [[165, 1520], [1621, 3787], [3888, 4337], [4438, 7254]], "fZe2U5-idiI": [[31, 8687]], "JlzM6rgu5iw": [[0, 8787]], "fnXlE75nx7g": [[0, 10389]], "WD36F6NoDvg": [[0, 9192]], "blzgC-ylE9w": [[0, 3244]], "r265LrQjFL4": [[0, 7692]], "WyAtM5H6H0w": [[0, 9652]], "VsllnL0mTuU": [[485, 1352], [1360, 2375], [2383, 3463], [3472, 4844], [4852, 6772], [6781, 7819], [7826, 9408]], "RBQH09gvpWc": [[2, 11038]]}, "Cello": {"BJW31sWO5cE": [[0, 4459]], "JW9-YhFMYSE": [[0, 3095]], "iuvaHDIGP5U": [[37, 9073]], "RV4Ob2Y9hvQ": [[0, 2567], [2572, 7578], [7585, 16569], [16575, 23151], [23174, 28401]], "dKBVWebVakI": [[0, 10766]], "rifOR2Q0cRk": [[0, 4570]], "t81IJJVi-Us": [[278, 930]], "b28_gkUgqoE": [[18, 3634]], "PpcSlOZY3Aw": [[0, 13413], [13419, 18203]], "voJaSCe8UyM": [[0, 3238]], "aLTH6DVXAcU": [[0, 17235]], "poCw2CCrfzA": [[21, 419], [759, 1936], [2072, 2647], [3192, 3430], [3436, 4063]], "Ng8QfKTk1KA": [[0, 18073]], "wXq_IU_vvrI": [[0, 4765]], "aHiqoSUV5MA": [[0, 17150]], "uIqbE0Ylh9o": [[0, 1476]], "Jsu5p6iAApI": [[201, 3548], [3656, 6470]], "Y1ZO2qfr0ko": [[0, 5795]], "42ULINLSfrE": [[2, 8858], [8866, 15150]], "8PXQeH0g6jI": [[0, 8076]], "4UI2fPRaxpg": [[0, 13078]], "nAtHjkKGr4A": [[0, 21451]], "-qRn8UyHogA": [[22, 11961]], "CNDZfj3BaqA": [[0, 179], [229, 1334], [1359, 1738], [1815, 23088], [23093, 23882]], "mGQLXRTl3Z0": [[119, 1931], [2214, 3719], [4203, 5354], [5405, 6568], [6822, 8868], [9187, 9722], [9902, 11355], [11563, 11939], [12165, 12868], [13345, 13976], [14078, 14334], [14500, 16111], [16396, 17459], [18282, 18861], [19633, 21991], [22412, 23587], [23928, 24421], [25328, 26947], [28152, 28502], [28507, 29196]], "RDnLgY2-abc": [[0, 4497]], "3TR7YwNESt0": [[0, 7110]], "w7Kh0LscP3U": [[196, 770], [781, 1187], [1550, 1851], [1860, 2360], [2368, 3065], [3486, 3715], [3776, 4303]], "3PrFqTav5Ow": [[0, 2854]], "vI-A3KJSBpk": [[0, 18367]], "DpvxiC0osbA": [[0, 3029]], "dfPeeHyfpP8": [[0, 9457]], "4-TAbbQmCtg": [[0, 11774]], "iXnGftY7k_k": [[0, 18905]], "QPfE-FqhQq4": [[0, 2502]], "OvXAT3_GGec": [[25, 19523]], "Yi9Xdiq579o": [[30, 4237], [4341, 8400], [8407, 8582], [8663, 10221], [10418, 12646]], "iNef2eekeK0": [[1, 9250]], "6XJCvBBQu78": [[0, 11878]], "PR1Pzaqew9w": [[77, 6415]], "ebMlp9Kc_bY": [[406, 23160]], "MbuRvmZy3Yw": [[472, 1431], [1440, 2713], [2723, 3093], [3101, 3515], [3523, 4731], [4740, 5577]], "hC7XPGO45hk": [[279, 1390], [1408, 2966]], "fLH9GyDbUjU": [[0, 8166], [8181, 12842]], "Zz9nwbi9oqA": [[0, 16764]], "kG3CrRcMgMk": [[509, 9453]], "7Z96EdnfzoQ": [[0, 1475]], "6GEkwyK_tns": [[0, 2051]], "qtIrc7YUEvo": [[0, 494], [920, 1095], [1235, 3328], [4053, 7143], [7683, 9706], [10799, 12674], [12687, 12888], [12901, 13777], [14427, 15537]], "A2d2DHxV4l0": [[0, 2938]], "dTmuOKUPsYI": [[7, 2393], [2402, 4109], [4120, 4684], [4690, 6131]], "sBZJCnxdmPc": [[0, 4344]], "D_a1o8biIAk": [[0, 21088]], "j9Re7hWGh3Y": [[0, 13913]], "vWytPM5Wawk": [[7, 4590], [4755, 10710], [10830, 13201], [13278, 19066]], "DEmhfGTWt8g": [[650, 3197], [3202, 3618], [3792, 4242], [4308, 4562], [4567, 6063], [7011, 8095], [8163, 8525], [9618, 10742], [10881, 11043], [11060, 13001], [14552, 15246], [15613, 17807], [19261, 19484], [20260, 20542]], "VEaJzYRrrD8": [[0, 5968], [6344, 6719]], "7_8yPpCjK_w": [[755, 5398], [5451, 6951], [6973, 7287]], "Q0OfnLEpty4": [[0, 7729]], "eRpbaoIOJjI": [[0, 17396]], "PDJ_QZAbGi4": [[6, 12510]], "WSvQ7_N1y08": [[110, 16831]], "mmJim2h-byQ": [[244, 2982], [2987, 3139], [3388, 5032], [5178, 5605], [5780, 6042], [6373, 7440], [7672, 7987]], "qzl9w7gME50": [[609, 5660]], "LDq9sFUjwQk": [[0, 10704]], "JQOC7Za4Pbw": [[0, 11303]], "07kcsRHipyw": [[0, 1268]], "heFoLuid8-Y": [[0, 15500]], "UWRZ4gi3HAM": [[0, 12050]], "WSheIMbyC5w": [[0, 4041], [4046, 11021]], "llpPao0uM7U": [[0, 1374], [1392, 19009]], "j4CwTQmRxiY": [[0, 21042]], "seWlG50y-so": [[16, 17223]], "GMyL9JTfDps": [[0, 15107]], "AT97pTC97tY": [[5, 4158], [4165, 6886], [6900, 9106], [9114, 11499], [11509, 13369], [13377, 17362]], "qtVf-KkpX1w": [[59, 1729], [1985, 2215], [2266, 2889], [3886, 4231]], "Z1rRodHDapI": [[0, 17057]], "s92f3CW9IdQ": [[17, 11752]], "CrBCIFZImKE": [[0, 4405]], "DsQX--nVPJQ": [[0, 11311]], "yC8ovVGeUfA": [[7, 11905]], "bhxNofWXTEA": [[0, 4774]], "ZNs5igA6tZQ": [[1, 3386], [3434, 5632], [5717, 6955], [7061, 9307], [9417, 12098]], "7nzwswUUDto": [[6, 12749]], "BvrGLXMvc_o": [[177, 22444]], "xFlBZMiVMT0": [[37, 1262], [2004, 2595], [3016, 5641], [5746, 6429], [6485, 8103], [8276, 9414], [10084, 10469], [11084, 11775], [12653, 13800], [13982, 15009], [15287, 16446]], "MNB8H2p9Kk0": [[30, 9379]], "JxhUFn5CT6A": [[0, 12383]], "Vp2lSAv__wE": [[0, 5988]], "bw2Etrk6cHg": [[84, 4307]], "FR1UZKD238Y": [[0, 9082]], "DB3kIKJPdUA": [[0, 7190], [7990, 13470], [13475, 14550], [14555, 16646], [16651, 24991], [25012, 25218]], "BObT8M5Mnus": [[0, 6529]], "5IwWfy2RhQE": [[0, 10568]], "J_nJYlZHpuw": [[39, 21574]], "MHhK6jG6U2I": [[70, 11212]], "0jSLgzeFmao": [[0, 8618]], "MaYRimw-mx8": [[0, 7374]], "-ZMb-QiqDJY": [[78, 8280]], "5sXcGZ60NpI": [[0, 23315], [23321, 23585]], "7WeXhVxpTAw": [[0, 32157]], "6--mQjcImjM": [[0, 3628]], "P--7W1h4khQ": [[90, 7056], [7268, 13963]], "ww9_f6hxYKo": [[81, 2126], [2144, 3635]], "2C7_o5mfE6k": [[0, 2677]], "zGiFcVKafQM": [[144, 9021], [9128, 16577]], "wHfhjkI2L9M": [[0, 5289]], "gRy76nNP6CQ": [[0, 5719]], "KtsdeqrcO2U": [[86, 11227]], "WotHO4X1kak": [[0, 16111]], "stgIDZN6e5Q": [[711, 22867]], "bNLswbcgbF4": [[0, 12644]], "fJ7yh1E9S-k": [[96, 13814]], "3qHdCTe0mIs": [[0, 10916]], "l9ufvevHbkE": [[1, 9524]], "MKsYR-9ZD9M": [[300, 547], [769, 1099], [1388, 2056]], "IpCafmoaImc": [[0, 8981]], "N7te_FRdSgk": [[0, 22812]], "REhp68K-6mw": [[0, 11448]], "qxiDk7x6gkM": [[0, 1163]], "eWTR-puxJyo": [[0, 13313]], "gtr9N_qdHag": [[0, 11579]], "09iOwYycY6w": [[30, 13090]], "A2KrKTMSoEU": [[0, 3586]], "TiqUpTAwWgY": [[402, 3871], [3972, 5387], [5488, 7403], [7504, 9818]], "4jxmrdkyjCc": [[490, 1627], [1694, 2075], [2210, 2691], [2699, 2884], [3059, 3761], [4080, 4525], [4636, 7023], [7028, 7784], [7860, 8417], [8729, 9086], [9289, 9584], [9758, 9969], [10174, 10562], [10727, 11007], [11910, 13256]], "GkT1NLMY7xQ": [[6, 3950]], "SPh_q2n3JYM": [[3, 2071], [2113, 6696]], "VdFnyZWJAgo": [[15, 5423]], "1u3yHICR_BU": [[0, 3687]], "I0LedcEaPL0": [[114, 2278], [2383, 4441]], "1X2l_1za1g0": [[0, 15398]], "PCicM6i59_I": [[0, 489], [909, 1431], [1436, 1607], [2976, 3707]], "VlIcqDWmPkw": [[0, 4721]]}, "Bassoon": {"XP6EIvVrmLs": [[0, 9433]], "VBg8t8i_FXY": [[0, 10759]], "NsCL6AtMNJ8": [[0, 15097]], "78LFB7yRSfw": [[0, 6254]], "q3MV48f5lWs": [[0, 8397]], "QKaiawzDXXE": [[0, 9388]], "_rEjpyR84-U": [[0, 2160], [2167, 4498], [4505, 5940], [5948, 8578]], "RfF6VRTmd0Q": [[0, 8866]], "5w35MH2IP28": [[0, 6143]], "nLEudqnb4Kw": [[0, 745]], "02DPGPi0wm0": [[0, 15912]], "AbIefEf-mHw": [[56, 5350]], "eZAUcEMFxhk": [[0, 5559]], "I7dgMp-SUUs": [[177, 14333]], "0tPZZefcNhM": [[0, 8106], [8113, 12002]], "5E0dO2txQnE": [[0, 750]], "Hb_UTQsnFqA": [[162, 4326]], "lSvJRltc6TE": [[0, 9229]], "aja1XNR8bUg": [[0, 24636]], "rFul69M_Ekw": [[0, 9371]], "tnTNNoJxcv8": [[35, 513], [544, 2561], [2589, 4087], [4129, 5811]], "kt6iCSjACCE": [[0, 4010]], "CdddiToTUYM": [[0, 1037]], "iJzm4dXWgtE": [[2, 1900]], "lniM27xD4pM": [[0, 10343]], "FpcApoUhzIw": [[0, 3876]], "DkZ9jpHVCMI": [[0, 5138]], "sFUSjtNf1v0": [[0, 10218]], "f-YM4rXZXSs": [[11, 9595]], "DIt3yL8CN_s": [[1, 2188], [2196, 3072], [3080, 6113]], "s77FZtwP6jg": [[0, 8017]], "Z5Su2HfobMM": [[0, 5764]], "NCw1l0xdDAY": [[0, 8521]], "8E2X03begsM": [[0, 1290]], "Q-epTZknkqI": [[16, 8231]], "QS5tgo6pnkc": [[0, 11181]], "iv6IgPueG90": [[0, 6983]], "YreSo0ephV8": [[45, 5426]], "6xkQSMRUIwI": [[0, 2261]], "WXOI8lVpv9U": [[0, 8526]], "mXm8vWa9GXA": [[0, 10454]], "QVC6DZnNKlQ": [[31, 12583]], "lOFmT_uZBs0": [[2, 11872]], "A9e8sVGmwz4": [[6, 4885]], "UPgJFfqoy68": [[0, 9024]], "C9elXZLgTtk": [[0, 12590]], "4mKABLySoaA": [[0, 8075]], "EbqdFn9dNvM": [[153, 7640]], "v807cm50DMA": [[325, 3284], [3360, 4049], [4200, 7527], [7629, 12194]], "gGHMniGg0qM": [[9, 5904]], "i2ymT9FZbsI": [[0, 5461]], "17z6ifj2XXk": [[17, 4200], [4285, 6645]], "C1Ms4wQNfis": [[0, 4982]], "-0yEIJCnno8": [[0, 1339]], "GRa2jui1uVU": [[0, 2072]], "En3ZQDepsno": [[179, 2261], [2360, 2715], [2822, 4236], [4352, 5748]]}, "Clarinet": {"X3GbAKww1KI": [[0, 1678]], "AgprSCu5TSA": [[0, 1430]], "aACYBGNq1LA": [[0, 5957]], "Z2AzriAJGCY": [[0, 8392]], "Qtsz5LWf-8w": [[0, 801]], "gS52OYKwLB0": [[0, 2108]], "BByuG-mcNc8": [[1, 1730]], "472KbWLCAb8": [[117, 8005]], "ENt0yLlqizs": [[0, 710]], "hK3aJa05450": [[0, 2082]], "4tNWjh4s2qQ": [[123, 6582]], "4lXPdLFslJo": [[93, 14577]], "QXB_-TKd_DE": [[0, 18552]], "PhfEbohIrvM": [[0, 1126]], "byMsmzvTvLc": [[12, 849]], "Q8hj8eYK6gc": [[128, 6997]], "kVYAY7sOjrk": [[6, 7754]], "6ZWpAEkpwLE": [[0, 1119]], "dKg0OEzVGZA": [[0, 6989]], "be_mQelli5w": [[0, 547]], "Xg-MBWMDe6Q": [[348, 8913]], "AEdr3XTgRvc": [[0, 542]], "spZDVNWU5tA": [[310, 1730]], "0EwC0ZOQOWg": [[161, 4759]], "H3QO6crfDeI": [[0, 439]], "BAbU6ctxGlc": [[0, 4338]], "RsAIbDuxIUk": [[0, 595]], "_kGCx15M0ms": [[0, 1713]], "0u8gQg5BXZ8": [[49, 4885], [4901, 10450]], "x7yiHwxutnQ": [[2, 2123]], "a0el7aaC00M": [[106, 1448], [1584, 3087], [3200, 4176], [4321, 5380], [5532, 6140], [6261, 7312], [7439, 9870], [9961, 12035], [12042, 14695]], "cBofHRtHqRw": [[0, 517]], "w4i4erpXY_c": [[0, 276]], "5-qPKGx1KHk": [[0, 1239]], "0LzT3uYOrDI": [[163, 3622], [3723, 5145], [5151, 7706]], "z5tIPscghnM": [[104, 3224], [3365, 4703], [4811, 5335], [5443, 6478]], "SJ15dBCpoKM": [[0, 1854]], "KQB9_x4gkAk": [[265, 3317], [3568, 5639], [5780, 7631], [7737, 11751], [11997, 12412], [12442, 12679], [12896, 13075], [13426, 13692]], "7RMr7K3ywZM": [[0, 1263]], "PwgKYbfpVtI": [[222, 1364], [1547, 2169], [2199, 2363], [2438, 3010], [3202, 3533], [3933, 4120], [4252, 6460], [6570, 6729], [6853, 7112], [7372, 7542], [7577, 7758], [7847, 8136], [8582, 8942], [9108, 9259], [9466, 9650], [9682, 9878], [10063, 10468], [10518, 11235]], "qcPxLfJIT3s": [[0, 4607]], "4bBZjqKqbZc": [[0, 7580]], "d-HtHaVETac": [[21, 960]], "NPzOaUZUqao": [[0, 876]], "WnUAJsk97k4": [[0, 3189]], "VbKND1yzpF0": [[220, 1203], [1218, 1738], [1875, 2440], [2616, 3007]], "YYsq62f_eAg": [[0, 1114]], "QRbAMpz3Wus": [[90, 758], [1263, 19649]], "R9vWT8CzTwU": [[0, 1520], [1648, 2000], [2225, 2595], [2972, 3199], [3204, 3498], [3868, 4363], [4660, 5223], [5435, 5913], [6072, 6620], [7056, 7887], [8154, 8810], [9067, 9870], [10089, 10364], [10733, 10902], [11098, 11474], [11604, 12078], [12483, 13051]]}, "Oboe": {"4qO672SnK3o": [[0, 4667]], "vwKXyfeVRVE": [[0, 7777]], "y2MFDfND2Gw": [[0, 1919]], "gFvVvfA8PVk": [[0, 10926]], "y1NVH5Uu_4o": [[0, 9263]], "oI0SVRCy_ls": [[0, 7244]], "gXWZCtjgDms": [[0, 1685]], "BoxMI2VUxGg": [[89, 1980]], "CTo7eU-vSN8": [[96, 1528]], "oReNgmDQdj4": [[0, 7281]], "fkkCiJGeBoU": [[0, 1294]], "qNqZuJ3IYqc": [[232, 705], [1335, 1759]], "byUf3v8_3DA": [[0, 15344]], "zaaiYBTNl_Y": [[0, 11910]], "qFjO38celk4": [[89, 3467], [3538, 4790], [4855, 7101], [7172, 10808]], "GB5aU875dwQ": [[102, 382], [483, 4153]], "Am-Beu-ctv0": [[46, 984]], "DKFd4Tglop4": [[0, 7774]], "ueGak0TFVEU": [[0, 11379]], "IZLowMeesFI": [[0, 4976]], "6DI9Afoaiz4": [[0, 8044]], "O97rrxsxN-E": [[2, 9553]], "VZVTAskHa4A": [[202, 3554], [3587, 6936], [6970, 9133], [9163, 10479], [10516, 12466], [12496, 14602]], "7hZG4v0UsH4": [[0, 1191]], "q-vsfKEUOWQ": [[0, 1826]], "R1oaXBJYkWE": [[0, 12238]], "ZKQKRt7XRCY": [[0, 19971]], "GYkyCy0NUr4": [[146, 5958], [6069, 9479], [9618, 13593]], "eM4Dab0hbB8": [[0, 4563]], "393P8zRug8I": [[23, 4413]], "0T966F09Q_8": [[60, 326], [345, 698], [765, 1155], [1175, 3329], [3361, 6783], [6799, 7897], [7919, 10035], [10078, 10295]], "kJwQt63Jds8": [[3, 3382], [3390, 5954], [5961, 9573], [9581, 10546]], "JnK9F4nBOB8": [[82, 1212], [1217, 3810]], "jGOU2OFKazM": [[0, 24032]], "J35NN2jixOw": [[0, 1371]], "v8OdWUvLa10": [[0, 3484], [3515, 6168], [6202, 7361], [7403, 11089]], "Zbae0Xmt-3g": [[126, 10751], [10783, 13882], [13922, 16943], [16988, 28134]], "iR9C2gR69ig": [[0, 9851]], "BzNtmZigskI": [[43, 2298], [2303, 4279], [4284, 10990]], "Xq8XSdsst7I": [[0, 1759]], "tNDmA-RzBg4": [[5, 2032]], "AtCyFMoCjjk": [[126, 10214]], "UzzkjrfdSdE": [[102, 4257]], "52YP_P8T7qc": [[1, 1371]], "sl54jflBpBk": [[102, 342], [444, 990], [1091, 2240], [2341, 3544]], "kLukFBD0Ivg": [[0, 10347]], "Nfw7UbPu4Bg": [[0, 11826]], "Sk97ni7cytg": [[0, 6915]], "-25TnDTMy1s": [[0, 8926]], "2nE1vDXAcW8": [[0, 10788]], "Ifr0TDjxQ4Q": [[0, 9449]], "02ZV69OUtVU": [[107, 3265], [3371, 6612], [6694, 9846]], "fxZZuo-68kY": [[0, 40699]]}, "Horn": {"4i4RaNKmqpg": [[0, 9879]], "-mDLXrSTFeg": [[0, 6713]], "35pY0N1OgUI": [[0, 8082]], "WLV1SXQR-tM": [[18, 4345]], "a6Ke9eY8v88": [[0, 7400]], "rpDZOJcCxYs": [[0, 9019]], "7oYZqza2O70": [[108, 12923]], "wCWrLV_Osgw": [[0, 5321]], "8V1AfWUBDC4": [[0, 7774]], "gQ2FkvEpi00": [[17, 655], [682, 2330], [2367, 6267]], "XyhvXQ2BdLM": [[5, 6036]], "H5YlhGn9C8U": [[43, 5520]], "fm8fOwylrd4": [[0, 3257], [3265, 8800], [8808, 9700]], "Gg7ci0QzfLw": [[0, 7600]], "uzvdXiG6wFc": [[0, 7211]], "j757Lyv53UA": [[0, 6491]], "s7JW4-CgR44": [[0, 6622]], "e7QonmD34ZQ": [[101, 389]], "TQiHN4xUydc": [[92, 7123]], "kitiLnAWqwA": [[0, 7518]], "oe3rovGvB5s": [[0, 7878]], "4nNjh4aGtjc": [[0, 8406]], "Zuk7lgvBD2c": [[21, 7226]], "Y9t9eMY-O9U": [[0, 6118]], "VIUqPsGCHdU": [[0, 6191]], "kQjgSdkG-2w": [[13, 746], [768, 2297], [2312, 3713], [3732, 6767]], "H83zmcFj93U": [[0, 10910]], "qWoPIW5moQc": [[0, 7057]], "gqGh0MnVYH4": [[0, 10489]], "YWFfyjylq8g": [[0, 16472]], "CO7c2viMh7M": [[0, 6938]], "phQsRPlzFRc": [[0, 9108]], "WsXiWtJB4Yg": [[0, 4022], [4033, 5650]], "NpBgfrKcX4s": [[0, 8545]], "SoH7T7OsTxY": [[367, 2426], [2595, 3981]], "WCcLn0qXpUY": [[0, 7829]], "0ttqwuSOMRA": [[0, 6004]], "p2NrxxKucaU": [[0, 6915]], "ur77HMoZPjY": [[0, 11187]], "05kiyxeRawY": [[0, 7455]], "1MNl9YoPyPA": [[128, 588], [595, 804], [811, 1038], [1044, 1270], [1276, 1489], [1495, 1708], [1715, 2125], [2131, 3885], [3891, 4796]], "N-1BpmU7rQQ": [[0, 6628]], "ZhsmsV_ChHo": [[0, 7458]], "u1s5wQVhwws": [[0, 6148]], "iapUF9ttQs8": [[45, 4667], [4943, 13067]], "eNGHfCEzPPQ": [[0, 10690]], "H7HeGL4BslI": [[0, 15904]], "j7TkUM8KihE": [[0, 8666]], "SqWamN0ZYCo": [[0, 5343]], "Q6vzjR7HH1c": [[0, 6916]]}, "Flute": {"zpCO7eSI9Q8": [[142, 1982], [2283, 3182], [3187, 6916], [7047, 8082], [9113, 9379]], "xE908RyNvGY": [[0, 2570]], "iZ9mDC-h1VI": [[228, 850], [1479, 1690], [1783, 2142], [2147, 3122], [3255, 3988], [4001, 4335], [4342, 5161], [5548, 6128], [6417, 8563], [8770, 10451], [10880, 11281], [11293, 11929], [11950, 12445]], "L505EUfuKXo": [[118, 5456], [5470, 5670], [5848, 6203]], "gP5AQaG2nrA": [[127, 1784]], "sFZxHP0cdis": [[133, 1939], [2041, 7380], [7481, 12579]], "Tsc3IvYofS4": [[596, 820], [948, 1105], [1127, 2351], [2357, 2843], [2848, 3013], [3209, 3400]], "woCrO0VxT6s": [[96, 4676]], "GY6_fvCO-qM": [[0, 2472]], "IwVzHubf-AU": [[1, 4715]], "xLsJiesFtR4": [[3, 1954], [2002, 10301]], "9MKeGursT48": [[30, 549], [700, 1394], [1554, 2376], [2508, 2890], [2897, 3352], [3470, 3854], [3999, 4235]], "FQ017iBbwSE": [[42, 6257], [6262, 6764], [6771, 8449], [8456, 11210]], "mkMFtEZN938": [[4, 8932]], "be1jJCH32OU": [[816, 1223], [1427, 2288], [2811, 3291], [3958, 4841], [4889, 5136]], "0CW79SadQvs": [[12, 565]], "EkhMOP-WOCI": [[28, 15041]], "M2VD97CTZBA": [[13, 1149], [2050, 2675], [3042, 3556], [3760, 4212]], "pvbqhkYRS9I": [[0, 2096]], "K7fBlN9kqlI": [[103, 267], [386, 817], [822, 1031], [1037, 1262], [1276, 1690], [1817, 2128], [2482, 3153], [3260, 3422], [3591, 3877], [4127, 4278], [4334, 4721], [4741, 5152], [5157, 5621], [5627, 5952]], "6Msu5whwZp8": [[2, 1487]], "6GwfuWhOOdY": [[126, 18000], [18006, 18172], [18181, 18418]], "Sz40f_geQRo": [[0, 442], [884, 1346], [1687, 1985], [2221, 2454], [2920, 3423], [3675, 3921], [4138, 4963], [5502, 5831], [6176, 6346], [6787, 7050]], "YEyKM13yf_4": [[534, 2469], [2562, 3400], [3679, 6077]], "PezMSXKNAYQ": [[0, 5697]], "b2HdawjaXaM": [[0, 950]], "XUY-5Ji7RSo": [[230, 6139], [6163, 9557]], "U-w6uARcQ_w": [[0, 6189], [6201, 6362]], "MVDw2DRMll8": [[0, 1119]], "CDDYAN87zDs": [[0, 5048]], "guMUF9uLn9c": [[16, 626], [1259, 2373], [2763, 3362], [3821, 8127]], "GyzoyHOrW9g": [[0, 1566]], "CpwKka2ZQ_Q": [[2, 378], [414, 710], [1023, 1357], [1370, 2413], [2488, 2988], [3119, 4227], [4238, 5294], [5317, 5508], [5540, 6145], [6166, 6640], [6668, 7002], [7024, 7594]], "UkA7Q64pa5s": [[32, 222]], "_Hwms79wzuA": [[12, 240], [560, 1697], [1829, 2912], [3131, 3951], [4032, 5658]], "3eNS7XoMWKs": [[0, 7636]], "sIJibwlhpgI": [[5, 5220]], "fQNaSXz1HH4": [[70, 6652]], "XlPvAkLT3Yw": [[0, 5106]], "tar_TGXQ59g": [[96, 3289], [3397, 4588], [4598, 5246]], "QAiwlq3aP2U": [[9, 3477]], "aGXm9SGCVT8": [[177, 8285]], "FBbaE4ytj8E": [[621, 899], [905, 1080], [1159, 1518], [1571, 1893], [2020, 2541], [2551, 2729], [2929, 3166], [3214, 3869], [3875, 4219], [4232, 7501]], "tfcNUo8qjrA": [[63, 3069]], "X0T6KysSejQ": [[0, 6179], [6186, 7492]], "cZoWhKTZTYY": [[0, 1450]], "eHbxLcoLWYY": [[0, 2188]]}} --------------------------------------------------------------------------------