{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"gpuType":"T4","authorship_tag":"ABX9TyP4Oi16kzNVPmBuIwaDJHs3"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"},"accelerator":"GPU"},"cells":[{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"A2kyviv69ZLQ","executionInfo":{"status":"ok","timestamp":1767579984093,"user_tz":-330,"elapsed":2006,"user":{"displayName":"Aaryan Kakad","userId":"03943863255411341958"}},"outputId":"df63ecfa-0256-4b74-b05a-5118b20478a8"},"outputs":[{"output_type":"stream","name":"stdout","text":["Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"]}],"source":["from google.colab import drive\n","drive.mount('/content/drive')\n","import os\n","base_path = '/content/drive/MyDrive/bird-sounds-rnn/raw'\n","os.makedirs(base_path, exist_ok=True)"]},{"cell_type":"code","source":["!pip install xeno-canto"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"EqwMk_Ry9dmD","executionInfo":{"status":"ok","timestamp":1767579758708,"user_tz":-330,"elapsed":6699,"user":{"displayName":"Aaryan Kakad","userId":"03943863255411341958"}},"outputId":"1294b40f-eefe-4ffb-c3f0-fa412156cf7c"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Collecting xeno-canto\n"," Downloading xeno-canto-3.0.tar.gz (9.9 kB)\n"," Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n","Requirement already satisfied: aiofiles>=0.8.0 in /usr/local/lib/python3.12/dist-packages (from xeno-canto) (24.1.0)\n","Requirement already satisfied: aiohttp>=3.8.1 in /usr/local/lib/python3.12/dist-packages (from xeno-canto) (3.13.2)\n","Requirement already satisfied: aiohappyeyeballs>=2.5.0 in /usr/local/lib/python3.12/dist-packages (from aiohttp>=3.8.1->xeno-canto) (2.6.1)\n","Requirement already satisfied: aiosignal>=1.4.0 in /usr/local/lib/python3.12/dist-packages (from aiohttp>=3.8.1->xeno-canto) (1.4.0)\n","Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.12/dist-packages (from aiohttp>=3.8.1->xeno-canto) (25.4.0)\n","Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.12/dist-packages (from aiohttp>=3.8.1->xeno-canto) (1.8.0)\n","Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.12/dist-packages (from aiohttp>=3.8.1->xeno-canto) (6.7.0)\n","Requirement already satisfied: propcache>=0.2.0 in /usr/local/lib/python3.12/dist-packages (from aiohttp>=3.8.1->xeno-canto) (0.4.1)\n","Requirement already satisfied: yarl<2.0,>=1.17.0 in /usr/local/lib/python3.12/dist-packages (from aiohttp>=3.8.1->xeno-canto) (1.22.0)\n","Requirement already satisfied: typing-extensions>=4.2 in /usr/local/lib/python3.12/dist-packages (from aiosignal>=1.4.0->aiohttp>=3.8.1->xeno-canto) (4.15.0)\n","Requirement already satisfied: idna>=2.0 in /usr/local/lib/python3.12/dist-packages (from yarl<2.0,>=1.17.0->aiohttp>=3.8.1->xeno-canto) (3.11)\n","Building wheels for collected packages: xeno-canto\n"," Building wheel for xeno-canto (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Created wheel for xeno-canto: filename=xeno_canto-3.0-py3-none-any.whl size=8705 sha256=418437ef266f1caa4d53cd49166a9b8cd9107dfc72e79e1e54a8581c8e6154b1\n"," Stored in directory: /root/.cache/pip/wheels/ed/5d/b1/d820dc701c129c102c41e9d65288c08772ecd6aee382ae1d57\n","Successfully built xeno-canto\n","Installing collected packages: xeno-canto\n","Successfully installed xeno-canto-3.0\n"]}]},{"cell_type":"code","source":[],"metadata":{"id":"ErBRMwb8Bw2m"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')\n","\n","import os\n","import requests\n","import time\n","import json # If loading from string; or open file\n","\n","base_path = '/content/drive/MyDrive/bird-sounds-rnn/raw/' # Adjust if needed\n","os.makedirs(base_path, exist_ok=True)\n","\n","# Option 1: If you saved the JSON as data_file.txt in Drive\n","with open('/content/data_file.txt', 'r') as f:\n"," data = json.load(f)\n","xc_ids = list(data.keys()) # One line to get all 833 IDs!\n","\n","# Option 2: If pasting the JSON directly (for quick test)\n","# data = json.loads(\"\"\"{your full JSON here}\"\"\")\n","# xc_ids = list(data.keys())\n","\n","print(f\"Loaded {len(xc_ids)} IDs – ready to download!\")\n","\n","for i, xc_id in enumerate(xc_ids):\n"," filename = f\"XC{xc_id}.mp3\"\n"," filepath = os.path.join(base_path, filename)\n"," if os.path.exists(filepath):\n"," print(f\"[{i+1}/{len(xc_ids)}] Skipping existing {filename}\")\n"," continue\n"," url = f\"https://xeno-canto.org/{xc_id}/download\"\n"," try:\n"," resp = requests.get(url, timeout=90)\n"," if resp.status_code == 200:\n"," with open(filepath, 'wb') as f:\n"," f.write(resp.content)\n"," size_mb = os.path.getsize(filepath) / 1e6\n"," print(f\"[{i+1}/{len(xc_ids)}] Downloaded {filename} ({size_mb:.1f} MB)\")\n"," else:\n"," print(f\"[{i+1}/{len(xc_ids)}] Failed {xc_id}: HTTP {resp.status_code}\")\n"," except Exception as e:\n"," print(f\"[{i+1}/{len(xc_ids)}] Error {xc_id}: {e}\")\n"," # Polite delay – increase if rate-limited\n","\n","print(\"Download complete! All files in your raw/ folder.\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"VscIIzFt-IqV","executionInfo":{"status":"ok","timestamp":1767582515296,"user_tz":-330,"elapsed":653357,"user":{"displayName":"Aaryan Kakad","userId":"03943863255411341958"}},"outputId":"a1b0ae75-9f4f-4329-e09f-7f955721ab2d"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n","Loaded 833 IDs – ready to download!\n","[1/833] Skipping existing XC1065199.mp3\n","[2/833] Skipping existing XC934128.mp3\n","[3/833] Skipping existing XC928661.mp3\n","[4/833] Skipping existing XC928658.mp3\n","[5/833] Skipping existing XC667381.mp3\n","[6/833] Skipping existing XC577361.mp3\n","[7/833] Skipping existing XC577358.mp3\n","[8/833] Skipping existing XC577357.mp3\n","[9/833] Skipping existing XC571156.mp3\n","[10/833] Skipping existing XC195759.mp3\n","[11/833] Skipping existing XC312771.mp3\n","[12/833] Skipping existing XC574340.mp3\n","[13/833] Skipping existing XC574339.mp3\n","[14/833] Downloaded XC574336.mp3 (0.3 MB)\n","[15/833] Downloaded XC574335.mp3 (0.7 MB)\n","[16/833] Downloaded XC574331.mp3 (0.2 MB)\n","[17/833] Downloaded XC574328.mp3 (0.1 MB)\n","[18/833] Downloaded XC574318.mp3 (0.6 MB)\n","[19/833] Downloaded XC315635.mp3 (0.1 MB)\n","[20/833] Downloaded XC332453.mp3 (0.1 MB)\n","[21/833] Downloaded XC662750.mp3 (1.6 MB)\n","[22/833] Downloaded XC338333.mp3 (0.1 MB)\n","[23/833] Downloaded XC747786.mp3 (1.3 MB)\n","[24/833] Downloaded XC592695.mp3 (1.2 MB)\n","[25/833] Downloaded XC571151.mp3 (0.3 MB)\n","[26/833] Downloaded XC428896.mp3 (0.2 MB)\n","[27/833] Downloaded XC672092.mp3 (0.8 MB)\n","[28/833] Downloaded XC592654.mp3 (0.2 MB)\n","[29/833] Downloaded XC592653.mp3 (0.5 MB)\n","[30/833] Downloaded XC592651.mp3 (0.9 MB)\n","[31/833] Downloaded XC592633.mp3 (0.2 MB)\n","[32/833] Downloaded XC592632.mp3 (0.8 MB)\n","[33/833] Downloaded XC672093.mp3 (0.5 MB)\n","[34/833] Downloaded XC207015.mp3 (0.3 MB)\n","[35/833] Downloaded XC575166.mp3 (0.6 MB)\n","[36/833] Downloaded XC574744.mp3 (0.2 MB)\n","[37/833] Downloaded XC575191.mp3 (0.1 MB)\n","[38/833] Downloaded XC575179.mp3 (0.1 MB)\n","[39/833] Downloaded XC575171.mp3 (0.1 MB)\n","[40/833] Downloaded XC575163.mp3 (0.3 MB)\n","[41/833] Downloaded XC157465.mp3 (0.8 MB)\n","[42/833] Downloaded XC73507.mp3 (0.5 MB)\n","[43/833] Downloaded XC121242.mp3 (0.6 MB)\n","[44/833] Downloaded XC569707.mp3 (0.1 MB)\n","[45/833] Downloaded XC318987.mp3 (0.6 MB)\n","[46/833] Downloaded XC425063.mp3 (0.4 MB)\n","[47/833] Downloaded XC574610.mp3 (0.1 MB)\n","[48/833] Downloaded XC574608.mp3 (0.1 MB)\n","[49/833] Downloaded XC574605.mp3 (0.4 MB)\n","[50/833] Downloaded XC584332.mp3 (2.3 MB)\n","[51/833] Downloaded XC528954.mp3 (0.2 MB)\n","[52/833] Downloaded XC195756.mp3 (0.7 MB)\n","[53/833] Downloaded XC195753.mp3 (0.3 MB)\n","[54/833] Downloaded XC464298.mp3 (0.0 MB)\n","[55/833] Downloaded XC207249.mp3 (0.0 MB)\n","[56/833] Downloaded XC585187.mp3 (0.5 MB)\n","[57/833] Downloaded XC553185.mp3 (2.2 MB)\n","[58/833] Downloaded XC540848.mp3 (2.5 MB)\n","[59/833] Downloaded XC538078.mp3 (0.1 MB)\n","[60/833] Downloaded XC464464.mp3 (0.2 MB)\n","[61/833] Downloaded XC332745.mp3 (0.3 MB)\n","[62/833] Downloaded XC307546.mp3 (0.1 MB)\n","[63/833] Downloaded XC307545.mp3 (0.2 MB)\n","[64/833] Downloaded XC252829.mp3 (0.2 MB)\n","[65/833] Downloaded XC207166.mp3 (0.2 MB)\n","[66/833] Downloaded XC195758.mp3 (0.1 MB)\n","[67/833] Downloaded XC169914.mp3 (0.1 MB)\n","[68/833] Downloaded XC635073.mp3 (0.3 MB)\n","[69/833] Downloaded XC722891.mp3 (0.4 MB)\n","[70/833] Downloaded XC722890.mp3 (0.4 MB)\n","[71/833] Downloaded XC725558.mp3 (0.4 MB)\n","[72/833] Downloaded XC725557.mp3 (0.4 MB)\n","[73/833] Downloaded XC569708.mp3 (0.4 MB)\n","[74/833] Downloaded XC464043.mp3 (0.1 MB)\n","[75/833] Downloaded XC313104.mp3 (0.4 MB)\n","[76/833] Downloaded XC568732.mp3 (0.1 MB)\n","[77/833] Downloaded XC331891.mp3 (0.1 MB)\n","[78/833] Downloaded XC319152.mp3 (0.3 MB)\n","[79/833] Downloaded XC181302.mp3 (0.1 MB)\n","[80/833] Downloaded XC181301.mp3 (0.1 MB)\n","[81/833] Downloaded XC141328.mp3 (0.4 MB)\n","[82/833] Downloaded XC722892.mp3 (0.7 MB)\n","[83/833] Downloaded XC758845.mp3 (0.3 MB)\n","[84/833] Downloaded XC758844.mp3 (0.3 MB)\n","[85/833] Downloaded XC758842.mp3 (0.1 MB)\n","[86/833] Downloaded XC758841.mp3 (0.4 MB)\n","[87/833] Downloaded XC325429.mp3 (0.2 MB)\n","[88/833] Downloaded XC180194.mp3 (0.3 MB)\n","[89/833] Downloaded XC1055846.mp3 (0.2 MB)\n","[90/833] Downloaded XC654106.mp3 (1.9 MB)\n","[91/833] Downloaded XC672096.mp3 (1.0 MB)\n","[92/833] Downloaded XC316409.mp3 (0.6 MB)\n","[93/833] Downloaded XC241127.mp3 (0.3 MB)\n","[94/833] Downloaded XC241126.mp3 (0.3 MB)\n","[95/833] Downloaded XC328436.mp3 (0.4 MB)\n","[96/833] Downloaded XC315250.mp3 (0.2 MB)\n","[97/833] Downloaded XC372715.mp3 (0.2 MB)\n","[98/833] Downloaded XC330052.mp3 (0.2 MB)\n","[99/833] Downloaded XC157874.mp3 (0.2 MB)\n","[100/833] Downloaded XC789406.mp3 (0.7 MB)\n","[101/833] Downloaded XC303515.mp3 (0.1 MB)\n","[102/833] Downloaded XC576594.mp3 (0.0 MB)\n","[103/833] Downloaded XC429627.mp3 (0.1 MB)\n","[104/833] Downloaded XC667376.mp3 (1.8 MB)\n","[105/833] Downloaded XC124749.mp3 (0.0 MB)\n","[106/833] Downloaded XC428779.mp3 (0.8 MB)\n","[107/833] Downloaded XC321358.mp3 (0.1 MB)\n","[108/833] Downloaded XC579437.mp3 (0.8 MB)\n","[109/833] Downloaded XC548744.mp3 (0.2 MB)\n","[110/833] Downloaded XC438346.mp3 (0.6 MB)\n","[111/833] Downloaded XC519741.mp3 (0.2 MB)\n","[112/833] Downloaded XC667379.mp3 (0.2 MB)\n","[113/833] Downloaded XC570920.mp3 (0.3 MB)\n","[114/833] Downloaded XC697066.mp3 (0.9 MB)\n","[115/833] Downloaded XC468480.mp3 (0.9 MB)\n","[116/833] Downloaded XC165363.mp3 (0.4 MB)\n","[117/833] Downloaded XC279020.mp3 (0.3 MB)\n","[118/833] Downloaded XC667380.mp3 (1.0 MB)\n","[119/833] Downloaded XC596095.mp3 (0.9 MB)\n","[120/833] Downloaded XC577351.mp3 (0.1 MB)\n","[121/833] Downloaded XC577353.mp3 (0.2 MB)\n","[122/833] Downloaded XC317385.mp3 (0.1 MB)\n","[123/833] Downloaded XC294375.mp3 (0.1 MB)\n","[124/833] Downloaded XC294374.mp3 (0.2 MB)\n","[125/833] Downloaded XC294373.mp3 (0.1 MB)\n","[126/833] Downloaded XC165368.mp3 (0.2 MB)\n","[127/833] Downloaded XC786654.mp3 (0.5 MB)\n","[128/833] Downloaded XC670599.mp3 (1.0 MB)\n","[129/833] Downloaded XC124036.mp3 (0.1 MB)\n","[130/833] Downloaded XC667378.mp3 (0.1 MB)\n","[131/833] Downloaded XC162212.mp3 (0.6 MB)\n","[132/833] Downloaded XC177473.mp3 (0.3 MB)\n","[133/833] Downloaded XC314144.mp3 (0.4 MB)\n","[134/833] Downloaded XC312818.mp3 (0.1 MB)\n","[135/833] Downloaded XC351899.mp3 (0.2 MB)\n","[136/833] Downloaded XC351823.mp3 (0.1 MB)\n","[137/833] Downloaded XC490812.mp3 (0.0 MB)\n","[138/833] Downloaded XC206371.mp3 (0.4 MB)\n","[139/833] Downloaded XC892008.mp3 (17.7 MB)\n","[140/833] Downloaded XC314010.mp3 (0.1 MB)\n","[141/833] Downloaded XC924220.mp3 (1.0 MB)\n","[142/833] Downloaded XC169792.mp3 (0.5 MB)\n","[143/833] Downloaded XC925196.mp3 (1.0 MB)\n","[144/833] Downloaded XC924227.mp3 (0.7 MB)\n","[145/833] Downloaded XC577355.mp3 (0.1 MB)\n","[146/833] Downloaded XC135814.mp3 (0.3 MB)\n","[147/833] Downloaded XC312144.mp3 (0.0 MB)\n","[148/833] Downloaded XC343485.mp3 (0.3 MB)\n","[149/833] Downloaded XC443374.mp3 (1.0 MB)\n","[150/833] Downloaded XC316831.mp3 (0.5 MB)\n","[151/833] Downloaded XC313198.mp3 (0.1 MB)\n","[152/833] Downloaded XC313748.mp3 (1.1 MB)\n","[153/833] Downloaded XC341124.mp3 (0.6 MB)\n","[154/833] Downloaded XC206435.mp3 (0.9 MB)\n","[155/833] Downloaded XC315636.mp3 (0.4 MB)\n","[156/833] Downloaded XC689411.mp3 (0.4 MB)\n","[157/833] Downloaded XC697077.mp3 (1.1 MB)\n","[158/833] Downloaded XC341470.mp3 (0.1 MB)\n","[159/833] Downloaded XC328068.mp3 (0.1 MB)\n","[160/833] Downloaded XC206429.mp3 (0.3 MB)\n","[161/833] Downloaded XC141625.mp3 (1.6 MB)\n","[162/833] Downloaded XC785413.mp3 (0.4 MB)\n","[163/833] Downloaded XC585190.mp3 (0.4 MB)\n","[164/833] Downloaded XC583029.mp3 (0.8 MB)\n","[165/833] Downloaded XC425062.mp3 (0.3 MB)\n","[166/833] Downloaded XC657421.mp3 (2.6 MB)\n","[167/833] Downloaded XC308177.mp3 (0.3 MB)\n","[168/833] Downloaded XC518955.mp3 (2.1 MB)\n","[169/833] Downloaded XC574829.mp3 (0.4 MB)\n","[170/833] Downloaded XC120974.mp3 (0.7 MB)\n","[171/833] Downloaded XC359261.mp3 (0.5 MB)\n","[172/833] Downloaded XC317398.mp3 (0.1 MB)\n","[173/833] Downloaded XC206372.mp3 (0.2 MB)\n","[174/833] Downloaded XC371369.mp3 (0.7 MB)\n","[175/833] Downloaded XC572904.mp3 (0.3 MB)\n","[176/833] Downloaded XC572905.mp3 (0.0 MB)\n","[177/833] Downloaded XC517682.mp3 (0.3 MB)\n","[178/833] Downloaded XC517680.mp3 (0.2 MB)\n","[179/833] Downloaded XC517678.mp3 (0.1 MB)\n","[180/833] Downloaded XC311911.mp3 (0.3 MB)\n","[181/833] Downloaded XC779855.mp3 (0.4 MB)\n","[182/833] Downloaded XC758846.mp3 (0.8 MB)\n","[183/833] Downloaded XC758836.mp3 (0.1 MB)\n","[184/833] Downloaded XC758835.mp3 (0.1 MB)\n","[185/833] Downloaded XC758834.mp3 (0.1 MB)\n","[186/833] Downloaded XC725560.mp3 (0.9 MB)\n","[187/833] Downloaded XC725559.mp3 (0.3 MB)\n","[188/833] Downloaded XC672075.mp3 (1.3 MB)\n","[189/833] Downloaded XC414032.mp3 (0.3 MB)\n","[190/833] Downloaded XC206368.mp3 (0.5 MB)\n","[191/833] Downloaded XC206367.mp3 (0.3 MB)\n","[192/833] Downloaded XC206366.mp3 (0.2 MB)\n","[193/833] Downloaded XC778605.mp3 (0.9 MB)\n","[194/833] Downloaded XC758847.mp3 (0.5 MB)\n","[195/833] Downloaded XC343773.mp3 (1.2 MB)\n","[196/833] Downloaded XC314008.mp3 (1.2 MB)\n","[197/833] Downloaded XC722042.mp3 (0.6 MB)\n","[198/833] Downloaded XC635072.mp3 (0.2 MB)\n","[199/833] Downloaded XC454346.mp3 (0.3 MB)\n","[200/833] Downloaded XC454347.mp3 (0.5 MB)\n","[201/833] Downloaded XC357881.mp3 (0.7 MB)\n","[202/833] Downloaded XC778608.mp3 (2.3 MB)\n","[203/833] Downloaded XC524190.mp3 (0.1 MB)\n","[204/833] Downloaded XC308275.mp3 (0.5 MB)\n","[205/833] Downloaded XC666145.mp3 (0.3 MB)\n","[206/833] Downloaded XC314996.mp3 (0.4 MB)\n","[207/833] Downloaded XC358391.mp3 (0.4 MB)\n","[208/833] Downloaded XC215940.mp3 (0.3 MB)\n","[209/833] Downloaded XC585635.mp3 (0.2 MB)\n","[210/833] Downloaded XC808577.mp3 (1.6 MB)\n","[211/833] Downloaded XC808576.mp3 (1.6 MB)\n","[212/833] Downloaded XC635070.mp3 (0.3 MB)\n","[213/833] Downloaded XC460758.mp3 (0.9 MB)\n","[214/833] Downloaded XC454348.mp3 (0.3 MB)\n","[215/833] Downloaded XC460757.mp3 (0.9 MB)\n","[216/833] Downloaded XC460756.mp3 (0.1 MB)\n","[217/833] Downloaded XC460755.mp3 (0.2 MB)\n","[218/833] Downloaded XC460753.mp3 (0.1 MB)\n","[219/833] Downloaded XC330053.mp3 (0.1 MB)\n","[220/833] Downloaded XC575371.mp3 (0.0 MB)\n","[221/833] Downloaded XC575369.mp3 (0.0 MB)\n","[222/833] Downloaded XC575368.mp3 (0.1 MB)\n","[223/833] Downloaded XC575202.mp3 (0.0 MB)\n","[224/833] Downloaded XC575193.mp3 (0.2 MB)\n","[225/833] Downloaded XC575196.mp3 (0.2 MB)\n","[226/833] Downloaded XC206370.mp3 (0.6 MB)\n","[227/833] Downloaded XC213961.mp3 (0.8 MB)\n","[228/833] Downloaded XC205911.mp3 (0.2 MB)\n","[229/833] Downloaded XC140250.mp3 (0.2 MB)\n","[230/833] Downloaded XC585628.mp3 (0.6 MB)\n","[231/833] Downloaded XC442557.mp3 (0.5 MB)\n","[232/833] Downloaded XC342679.mp3 (0.5 MB)\n","[233/833] Downloaded XC205908.mp3 (1.1 MB)\n","[234/833] Downloaded XC426224.mp3 (0.6 MB)\n","[235/833] Downloaded XC205541.mp3 (1.4 MB)\n","[236/833] Downloaded XC574612.mp3 (0.1 MB)\n","[237/833] Downloaded XC377406.mp3 (0.2 MB)\n","[238/833] Downloaded XC309366.mp3 (0.0 MB)\n","[239/833] Downloaded XC189123.mp3 (0.4 MB)\n","[240/833] Downloaded XC437156.mp3 (0.7 MB)\n","[241/833] Downloaded XC169565.mp3 (1.6 MB)\n","[242/833] Downloaded XC311933.mp3 (0.1 MB)\n","[243/833] Downloaded XC207123.mp3 (1.4 MB)\n","[244/833] Downloaded XC132011.mp3 (0.7 MB)\n","[245/833] Downloaded XC325423.mp3 (0.2 MB)\n","[246/833] Downloaded XC325027.mp3 (0.1 MB)\n","[247/833] Downloaded XC255204.mp3 (0.6 MB)\n","[248/833] Downloaded XC209498.mp3 (0.2 MB)\n","[249/833] Downloaded XC209499.mp3 (0.2 MB)\n","[250/833] Downloaded XC207026.mp3 (0.1 MB)\n","[251/833] Downloaded XC577285.mp3 (0.0 MB)\n","[252/833] Downloaded XC576602.mp3 (0.1 MB)\n","[253/833] Downloaded XC569674.mp3 (0.1 MB)\n","[254/833] Downloaded XC569673.mp3 (0.1 MB)\n","[255/833] Downloaded XC808586.mp3 (1.3 MB)\n","[256/833] Downloaded XC808571.mp3 (1.6 MB)\n","[257/833] Downloaded XC306983.mp3 (0.1 MB)\n","[258/833] Downloaded XC779851.mp3 (0.5 MB)\n","[259/833] Downloaded XC308052.mp3 (0.2 MB)\n","[260/833] Downloaded XC720894.mp3 (0.6 MB)\n","[261/833] Downloaded XC788186.mp3 (0.4 MB)\n","[262/833] Downloaded XC788185.mp3 (0.4 MB)\n","[263/833] Downloaded XC788184.mp3 (0.3 MB)\n","[264/833] Downloaded XC574718.mp3 (0.4 MB)\n","[265/833] Downloaded XC574713.mp3 (0.2 MB)\n","[266/833] Downloaded XC574337.mp3 (0.2 MB)\n","[267/833] Downloaded XC574333.mp3 (0.2 MB)\n","[268/833] Downloaded XC574320.mp3 (0.2 MB)\n","[269/833] Downloaded XC578228.mp3 (0.2 MB)\n","[270/833] Downloaded XC574743.mp3 (0.2 MB)\n","[271/833] Downloaded XC573819.mp3 (0.2 MB)\n","[272/833] Downloaded XC460802.mp3 (0.3 MB)\n","[273/833] Downloaded XC460800.mp3 (1.1 MB)\n","[274/833] Downloaded XC343426.mp3 (0.1 MB)\n","[275/833] Downloaded XC808583.mp3 (0.7 MB)\n","[276/833] Downloaded XC585194.mp3 (1.0 MB)\n","[277/833] Downloaded XC576598.mp3 (0.2 MB)\n","[278/833] Downloaded XC460805.mp3 (1.7 MB)\n","[279/833] Downloaded XC443314.mp3 (0.2 MB)\n","[280/833] Downloaded XC399344.mp3 (0.6 MB)\n","[281/833] Downloaded XC308053.mp3 (0.2 MB)\n","[282/833] Downloaded XC308050.mp3 (0.1 MB)\n","[283/833] Downloaded XC519462.mp3 (0.4 MB)\n","[284/833] Downloaded XC212061.mp3 (0.2 MB)\n","[285/833] Downloaded XC758839.mp3 (0.3 MB)\n","[286/833] Downloaded XC207293.mp3 (1.6 MB)\n","[287/833] Downloaded XC206708.mp3 (0.1 MB)\n","[288/833] Downloaded XC206611.mp3 (4.6 MB)\n","[289/833] Downloaded XC207301.mp3 (0.3 MB)\n","[290/833] Downloaded XC206701.mp3 (0.6 MB)\n","[291/833] Downloaded XC206612.mp3 (0.3 MB)\n","[292/833] Downloaded XC214221.mp3 (1.3 MB)\n","[293/833] Downloaded XC207509.mp3 (0.6 MB)\n","[294/833] Downloaded XC576902.mp3 (0.6 MB)\n","[295/833] Downloaded XC255437.mp3 (0.2 MB)\n","[296/833] Downloaded XC670907.mp3 (0.5 MB)\n","[297/833] Downloaded XC670905.mp3 (0.6 MB)\n","[298/833] Downloaded XC670904.mp3 (3.0 MB)\n","[299/833] Downloaded XC670903.mp3 (0.3 MB)\n","[300/833] Downloaded XC670901.mp3 (2.1 MB)\n","[301/833] Downloaded XC670899.mp3 (1.9 MB)\n","[302/833] Downloaded XC670846.mp3 (1.4 MB)\n","[303/833] Downloaded XC207927.mp3 (2.3 MB)\n","[304/833] Downloaded XC808579.mp3 (0.7 MB)\n","[305/833] Downloaded XC778611.mp3 (11.0 MB)\n","[306/833] Downloaded XC293640.mp3 (0.6 MB)\n","[307/833] Downloaded XC206402.mp3 (0.3 MB)\n","[308/833] Downloaded XC330054.mp3 (0.2 MB)\n","[309/833] Downloaded XC255432.mp3 (0.1 MB)\n","[310/833] Downloaded XC393952.mp3 (0.3 MB)\n","[311/833] Downloaded XC212924.mp3 (0.1 MB)\n","[312/833] Downloaded XC576593.mp3 (0.1 MB)\n","[313/833] Downloaded XC576588.mp3 (0.2 MB)\n","[314/833] Downloaded XC778609.mp3 (12.8 MB)\n","[315/833] Downloaded XC780273.mp3 (5.1 MB)\n","[316/833] Downloaded XC583024.mp3 (0.3 MB)\n","[317/833] Downloaded XC578787.mp3 (0.7 MB)\n","[318/833] Downloaded XC425061.mp3 (0.1 MB)\n","[319/833] Downloaded XC187974.mp3 (0.1 MB)\n","[320/833] Downloaded XC584349.mp3 (1.4 MB)\n","[321/833] Downloaded XC577645.mp3 (0.0 MB)\n","[322/833] Downloaded XC577644.mp3 (0.3 MB)\n","[323/833] Downloaded XC568868.mp3 (0.3 MB)\n","[324/833] Downloaded XC568863.mp3 (0.2 MB)\n","[325/833] Downloaded XC464292.mp3 (0.2 MB)\n","[326/833] Downloaded XC464252.mp3 (0.3 MB)\n","[327/833] Downloaded XC207014.mp3 (0.4 MB)\n","[328/833] Downloaded XC584366.mp3 (1.8 MB)\n","[329/833] Downloaded XC577652.mp3 (0.2 MB)\n","[330/833] Downloaded XC577650.mp3 (0.0 MB)\n","[331/833] Downloaded XC309096.mp3 (0.1 MB)\n","[332/833] Downloaded XC320460.mp3 (0.5 MB)\n","[333/833] Downloaded XC206396.mp3 (0.6 MB)\n","[334/833] Downloaded XC124745.mp3 (0.4 MB)\n","[335/833] Downloaded XC256280.mp3 (0.2 MB)\n","[336/833] Downloaded XC141231.mp3 (1.8 MB)\n","[337/833] Downloaded XC165501.mp3 (0.3 MB)\n","[338/833] Downloaded XC169810.mp3 (0.6 MB)\n","[339/833] Downloaded XC1029676.mp3 (3.2 MB)\n","[340/833] Downloaded XC207243.mp3 (0.2 MB)\n","[341/833] Downloaded XC207162.mp3 (0.1 MB)\n","[342/833] Downloaded XC207062.mp3 (1.4 MB)\n","[343/833] Downloaded XC189108.mp3 (0.3 MB)\n","[344/833] Downloaded XC572937.mp3 (0.4 MB)\n","[345/833] Downloaded XC313095.mp3 (0.1 MB)\n","[346/833] Downloaded XC145708.mp3 (0.2 MB)\n","[347/833] Downloaded XC145707.mp3 (0.1 MB)\n","[348/833] Downloaded XC573818.mp3 (0.3 MB)\n","[349/833] Downloaded XC207060.mp3 (0.5 MB)\n","[350/833] Downloaded XC121369.mp3 (0.1 MB)\n","[351/833] Downloaded XC212573.mp3 (0.3 MB)\n","[352/833] Downloaded XC212923.mp3 (0.3 MB)\n","[353/833] Downloaded XC195578.mp3 (0.1 MB)\n","[354/833] Downloaded XC892006.mp3 (0.0 MB)\n","[355/833] Downloaded XC195484.mp3 (0.0 MB)\n","[356/833] Downloaded XC598033.mp3 (0.0 MB)\n","[357/833] Downloaded XC598032.mp3 (0.0 MB)\n","[358/833] Downloaded XC520390.mp3 (0.0 MB)\n","[359/833] Downloaded XC207246.mp3 (0.0 MB)\n","[360/833] Downloaded XC206388.mp3 (0.0 MB)\n","[361/833] Downloaded XC785416.mp3 (0.0 MB)\n","[362/833] Downloaded XC308274.mp3 (0.1 MB)\n","[363/833] Downloaded XC255433.mp3 (1.4 MB)\n","[364/833] Downloaded XC181191.mp3 (0.3 MB)\n","[365/833] Downloaded XC776181.mp3 (13.8 MB)\n","[366/833] Downloaded XC573900.mp3 (1.1 MB)\n","[367/833] Downloaded XC543894.mp3 (2.0 MB)\n","[368/833] Downloaded XC540833.mp3 (1.9 MB)\n","[369/833] Downloaded XC337338.mp3 (1.7 MB)\n","[370/833] Downloaded XC356678.mp3 (0.0 MB)\n","[371/833] Downloaded XC239664.mp3 (0.0 MB)\n","[372/833] Downloaded XC353800.mp3 (0.1 MB)\n","[373/833] Downloaded XC303710.mp3 (0.1 MB)\n","[374/833] Downloaded XC666146.mp3 (0.2 MB)\n","[375/833] Downloaded XC306989.mp3 (0.2 MB)\n","[376/833] Downloaded XC306987.mp3 (0.2 MB)\n","[377/833] Downloaded XC256284.mp3 (0.4 MB)\n","[378/833] Downloaded XC611564.mp3 (1.5 MB)\n","[379/833] Downloaded XC317402.mp3 (0.1 MB)\n","[380/833] Downloaded XC210374.mp3 (0.2 MB)\n","[381/833] Downloaded XC308273.mp3 (0.3 MB)\n","[382/833] Downloaded XC1065213.mp3 (3.9 MB)\n","[383/833] Downloaded XC120586.mp3 (0.5 MB)\n","[384/833] Downloaded XC240446.mp3 (0.3 MB)\n","[385/833] Downloaded XC596718.mp3 (0.9 MB)\n","[386/833] Downloaded XC580650.mp3 (1.3 MB)\n","[387/833] Downloaded XC580647.mp3 (2.2 MB)\n","[388/833] Downloaded XC580643.mp3 (0.8 MB)\n","[389/833] Downloaded XC592541.mp3 (2.2 MB)\n","[390/833] Downloaded XC443635.mp3 (0.3 MB)\n","[391/833] Downloaded XC571140.mp3 (0.6 MB)\n","[392/833] Downloaded XC567247.mp3 (0.6 MB)\n","[393/833] Downloaded XC351644.mp3 (0.1 MB)\n","[394/833] Downloaded XC342681.mp3 (0.7 MB)\n","[395/833] Downloaded XC570841.mp3 (0.2 MB)\n","[396/833] Downloaded XC405774.mp3 (0.2 MB)\n","[397/833] Downloaded XC244557.mp3 (0.2 MB)\n","[398/833] Downloaded XC775794.mp3 (0.5 MB)\n","[399/833] Downloaded XC677391.mp3 (0.5 MB)\n","[400/833] Downloaded XC140464.mp3 (5.5 MB)\n","[401/833] Downloaded XC140039.mp3 (1.9 MB)\n","[402/833] Downloaded XC139449.mp3 (1.9 MB)\n","[403/833] Downloaded XC169831.mp3 (0.1 MB)\n","[404/833] Downloaded XC779859.mp3 (0.2 MB)\n","[405/833] Downloaded XC528927.mp3 (0.1 MB)\n","[406/833] Downloaded XC239352.mp3 (0.4 MB)\n","[407/833] Downloaded XC195582.mp3 (0.4 MB)\n","[408/833] Downloaded XC157482.mp3 (0.5 MB)\n","[409/833] Downloaded XC520167.mp3 (0.1 MB)\n","[410/833] Downloaded XC120592.mp3 (1.4 MB)\n","[411/833] Downloaded XC758493.mp3 (0.7 MB)\n","[412/833] Downloaded XC593441.mp3 (0.6 MB)\n","[413/833] Downloaded XC593439.mp3 (0.9 MB)\n","[414/833] Downloaded XC576605.mp3 (0.2 MB)\n","[415/833] Downloaded XC576596.mp3 (0.7 MB)\n","[416/833] Downloaded XC214230.mp3 (0.8 MB)\n","[417/833] Downloaded XC210277.mp3 (0.1 MB)\n","[418/833] Downloaded XC210276.mp3 (0.9 MB)\n","[419/833] Downloaded XC207021.mp3 (0.2 MB)\n","[420/833] Downloaded XC593438.mp3 (0.8 MB)\n","[421/833] Downloaded XC207023.mp3 (0.3 MB)\n","[422/833] Downloaded XC207020.mp3 (0.4 MB)\n","[423/833] Downloaded XC157275.mp3 (1.3 MB)\n","[424/833] Downloaded XC308330.mp3 (0.3 MB)\n","[425/833] Downloaded XC578839.mp3 (1.6 MB)\n","[426/833] Downloaded XC116613.mp3 (0.1 MB)\n","[427/833] Downloaded XC574366.mp3 (0.3 MB)\n","[428/833] Downloaded XC195576.mp3 (0.1 MB)\n","[429/833] Downloaded XC574334.mp3 (0.2 MB)\n","[430/833] Downloaded XC574332.mp3 (0.1 MB)\n","[431/833] Downloaded XC554155.mp3 (0.7 MB)\n","[432/833] Downloaded XC157274.mp3 (0.3 MB)\n","[433/833] Downloaded XC779854.mp3 (0.1 MB)\n","[434/833] Downloaded XC613907.mp3 (0.4 MB)\n","[435/833] Downloaded XC778604.mp3 (12.2 MB)\n","[436/833] Downloaded XC417433.mp3 (0.2 MB)\n","[437/833] Downloaded XC417432.mp3 (0.4 MB)\n","[438/833] Downloaded XC212579.mp3 (0.5 MB)\n","[439/833] Downloaded XC210275.mp3 (0.5 MB)\n","[440/833] Downloaded XC207133.mp3 (0.9 MB)\n","[441/833] Downloaded XC207056.mp3 (0.7 MB)\n","[442/833] Downloaded XC570840.mp3 (0.3 MB)\n","[443/833] Downloaded XC576910.mp3 (0.4 MB)\n","[444/833] Downloaded XC576909.mp3 (0.0 MB)\n","[445/833] Downloaded XC317037.mp3 (0.7 MB)\n","[446/833] Downloaded XC530400.mp3 (0.4 MB)\n","[447/833] Downloaded XC608965.mp3 (2.6 MB)\n","[448/833] Downloaded XC316407.mp3 (1.9 MB)\n","[449/833] Downloaded XC578188.mp3 (0.2 MB)\n","[450/833] Downloaded XC578183.mp3 (0.2 MB)\n","[451/833] Downloaded XC200959.mp3 (1.3 MB)\n","[452/833] Downloaded XC786656.mp3 (0.6 MB)\n","[453/833] Downloaded XC578189.mp3 (0.4 MB)\n","[454/833] Downloaded XC578186.mp3 (0.2 MB)\n","[455/833] Downloaded XC578179.mp3 (0.2 MB)\n","[456/833] Downloaded XC328064.mp3 (0.1 MB)\n","[457/833] Downloaded XC574731.mp3 (0.3 MB)\n","[458/833] Downloaded XC574719.mp3 (0.1 MB)\n","[459/833] Downloaded XC207161.mp3 (0.7 MB)\n","[460/833] Downloaded XC207806.mp3 (0.8 MB)\n","[461/833] Downloaded XC585617.mp3 (0.3 MB)\n","[462/833] Downloaded XC585176.mp3 (1.9 MB)\n","[463/833] Downloaded XC577850.mp3 (0.8 MB)\n","[464/833] Downloaded XC571201.mp3 (0.2 MB)\n","[465/833] Downloaded XC460803.mp3 (0.8 MB)\n","[466/833] Downloaded XC306990.mp3 (0.1 MB)\n","[467/833] Downloaded XC585174.mp3 (1.7 MB)\n","[468/833] Downloaded XC214229.mp3 (0.3 MB)\n","[469/833] Downloaded XC578212.mp3 (0.0 MB)\n","[470/833] Downloaded XC524196.mp3 (0.2 MB)\n","[471/833] Downloaded XC522219.mp3 (0.4 MB)\n","[472/833] Downloaded XC157864.mp3 (0.1 MB)\n","[473/833] Downloaded XC578600.mp3 (1.2 MB)\n","[474/833] Downloaded XC577870.mp3 (0.3 MB)\n","[475/833] Downloaded XC574949.mp3 (0.9 MB)\n","[476/833] Downloaded XC207142.mp3 (0.4 MB)\n","[477/833] Downloaded XC170868.mp3 (0.2 MB)\n","[478/833] Downloaded XC310426.mp3 (0.5 MB)\n","[479/833] Downloaded XC463792.mp3 (0.2 MB)\n","[480/833] Downloaded XC328065.mp3 (0.1 MB)\n","[481/833] Downloaded XC314003.mp3 (1.2 MB)\n","[482/833] Downloaded XC157276.mp3 (0.4 MB)\n","[483/833] Downloaded XC207025.mp3 (0.2 MB)\n","[484/833] Downloaded XC165051.mp3 (0.6 MB)\n","[485/833] Downloaded XC360899.mp3 (0.3 MB)\n","[486/833] Downloaded XC604529.mp3 (0.5 MB)\n","[487/833] Downloaded XC362256.mp3 (0.3 MB)\n","[488/833] Downloaded XC169807.mp3 (0.2 MB)\n","[489/833] Downloaded XC1065211.mp3 (12.5 MB)\n","[490/833] Downloaded XC1070290.mp3 (0.1 MB)\n","[491/833] Downloaded XC778610.mp3 (2.3 MB)\n","[492/833] Downloaded XC594434.mp3 (1.6 MB)\n","[493/833] Downloaded XC578227.mp3 (0.2 MB)\n","[494/833] Downloaded XC505336.mp3 (0.7 MB)\n","[495/833] Downloaded XC1070308.mp3 (0.6 MB)\n","[496/833] Downloaded XC460796.mp3 (0.8 MB)\n","[497/833] Downloaded XC306994.mp3 (0.1 MB)\n","[498/833] Downloaded XC306992.mp3 (0.2 MB)\n","[499/833] Downloaded XC122407.mp3 (0.5 MB)\n","[500/833] Downloaded XC195495.mp3 (0.4 MB)\n","[501/833] Downloaded XC317387.mp3 (0.4 MB)\n","[502/833] Downloaded XC592544.mp3 (3.7 MB)\n","[503/833] Downloaded XC592491.mp3 (2.5 MB)\n","[504/833] Downloaded XC534618.mp3 (1.1 MB)\n","[505/833] Downloaded XC638209.mp3 (0.5 MB)\n","[506/833] Downloaded XC505344.mp3 (0.8 MB)\n","[507/833] Downloaded XC1070305.mp3 (0.1 MB)\n","[508/833] Downloaded XC605981.mp3 (0.4 MB)\n","[509/833] Downloaded XC578214.mp3 (0.2 MB)\n","[510/833] Downloaded XC313296.mp3 (1.1 MB)\n","[511/833] Downloaded XC309524.mp3 (0.2 MB)\n","[512/833] Downloaded XC157359.mp3 (0.3 MB)\n","[513/833] Downloaded XC981776.mp3 (0.0 MB)\n","[514/833] Downloaded XC592659.mp3 (0.3 MB)\n","[515/833] Downloaded XC592660.mp3 (0.3 MB)\n","[516/833] Downloaded XC297132.mp3 (0.4 MB)\n","[517/833] Downloaded XC297131.mp3 (0.2 MB)\n","[518/833] Downloaded XC297129.mp3 (0.7 MB)\n","[519/833] Downloaded XC297128.mp3 (0.4 MB)\n","[520/833] Downloaded XC297127.mp3 (0.2 MB)\n","[521/833] Downloaded XC297123.mp3 (0.5 MB)\n","[522/833] Downloaded XC608596.mp3 (0.7 MB)\n","[523/833] Downloaded XC758838.mp3 (0.5 MB)\n","[524/833] Downloaded XC598045.mp3 (0.3 MB)\n","[525/833] Downloaded XC541917.mp3 (0.3 MB)\n","[526/833] Downloaded XC377399.mp3 (0.5 MB)\n","[527/833] Downloaded XC331899.mp3 (0.2 MB)\n","[528/833] Downloaded XC326854.mp3 (1.4 MB)\n","[529/833] Downloaded XC326853.mp3 (1.6 MB)\n","[530/833] Downloaded XC576908.mp3 (0.1 MB)\n","[531/833] Downloaded XC576905.mp3 (0.4 MB)\n","[532/833] Downloaded XC239353.mp3 (0.7 MB)\n","[533/833] Downloaded XC207257.mp3 (1.0 MB)\n","[534/833] Downloaded XC195496.mp3 (0.4 MB)\n","[535/833] Downloaded XC189334.mp3 (0.3 MB)\n","[536/833] Downloaded XC519784.mp3 (0.2 MB)\n","[537/833] Downloaded XC519780.mp3 (0.4 MB)\n","[538/833] Downloaded XC519771.mp3 (0.3 MB)\n","[539/833] Downloaded XC519768.mp3 (0.2 MB)\n","[540/833] Downloaded XC207028.mp3 (1.6 MB)\n","[541/833] Downloaded XC592900.mp3 (0.9 MB)\n","[542/833] Downloaded XC592899.mp3 (1.4 MB)\n","[543/833] Downloaded XC592872.mp3 (0.7 MB)\n","[544/833] Downloaded XC592871.mp3 (0.8 MB)\n","[545/833] Downloaded XC592732.mp3 (0.4 MB)\n","[546/833] Downloaded XC592730.mp3 (0.6 MB)\n","[547/833] Downloaded XC592728.mp3 (0.7 MB)\n","[548/833] Downloaded XC592725.mp3 (0.4 MB)\n","[549/833] Downloaded XC519746.mp3 (0.4 MB)\n","[550/833] Downloaded XC594430.mp3 (0.3 MB)\n","[551/833] Downloaded XC343776.mp3 (0.2 MB)\n","[552/833] Downloaded XC578479.mp3 (0.8 MB)\n","[553/833] Downloaded XC568902.mp3 (0.2 MB)\n","[554/833] Downloaded XC568704.mp3 (0.3 MB)\n","[555/833] Downloaded XC464269.mp3 (0.2 MB)\n","[556/833] Downloaded XC195760.mp3 (1.7 MB)\n","[557/833] Downloaded XC598048.mp3 (0.2 MB)\n","[558/833] Downloaded XC592377.mp3 (0.6 MB)\n","[559/833] Downloaded XC577348.mp3 (0.1 MB)\n","[560/833] Downloaded XC576914.mp3 (0.2 MB)\n","[561/833] Downloaded XC569653.mp3 (0.3 MB)\n","[562/833] Downloaded XC309696.mp3 (0.2 MB)\n","[563/833] Downloaded XC239261.mp3 (1.0 MB)\n","[564/833] Downloaded XC592508.mp3 (2.3 MB)\n","[565/833] Downloaded XC592487.mp3 (0.5 MB)\n","[566/833] Downloaded XC524458.mp3 (0.1 MB)\n","[567/833] Downloaded XC659836.mp3 (0.1 MB)\n","[568/833] Downloaded XC592636.mp3 (0.5 MB)\n","[569/833] Downloaded XC592535.mp3 (1.8 MB)\n","[570/833] Downloaded XC207255.mp3 (0.2 MB)\n","[571/833] Downloaded XC592502.mp3 (1.3 MB)\n","[572/833] Downloaded XC331900.mp3 (0.1 MB)\n","[573/833] Downloaded XC809184.mp3 (0.2 MB)\n","[574/833] Downloaded XC577284.mp3 (0.1 MB)\n","[575/833] Downloaded XC401794.mp3 (0.9 MB)\n","[576/833] Downloaded XC325428.mp3 (0.1 MB)\n","[577/833] Downloaded XC195589.mp3 (0.1 MB)\n","[578/833] Downloaded XC170592.mp3 (0.5 MB)\n","[579/833] Downloaded XC584316.mp3 (0.3 MB)\n","[580/833] Downloaded XC424135.mp3 (1.0 MB)\n","[581/833] Downloaded XC442446.mp3 (0.7 MB)\n","[582/833] Downloaded XC613909.mp3 (0.4 MB)\n","[583/833] Downloaded XC592438.mp3 (0.8 MB)\n","[584/833] Downloaded XC361317.mp3 (0.3 MB)\n","[585/833] Downloaded XC598027.mp3 (0.5 MB)\n","[586/833] Downloaded XC181233.mp3 (1.7 MB)\n","[587/833] Downloaded XC592441.mp3 (0.2 MB)\n","[588/833] Downloaded XC239354.mp3 (0.3 MB)\n","[589/833] Downloaded XC587230.mp3 (0.0 MB)\n","[590/833] Downloaded XC568696.mp3 (0.0 MB)\n","[591/833] Downloaded XC779856.mp3 (0.4 MB)\n","[592/833] Downloaded XC604528.mp3 (0.2 MB)\n","[593/833] Downloaded XC665060.mp3 (0.1 MB)\n","[594/833] Downloaded XC315634.mp3 (0.2 MB)\n","[595/833] Downloaded XC206390.mp3 (0.4 MB)\n","[596/833] Downloaded XC157740.mp3 (0.6 MB)\n","[597/833] Downloaded XC672095.mp3 (0.2 MB)\n","[598/833] Downloaded XC574338.mp3 (0.2 MB)\n","[599/833] Downloaded XC141358.mp3 (1.3 MB)\n","[600/833] Downloaded XC202648.mp3 (1.7 MB)\n","[601/833] Downloaded XC178248.mp3 (0.2 MB)\n","[602/833] Downloaded XC393951.mp3 (0.1 MB)\n","[603/833] Downloaded XC432655.mp3 (1.2 MB)\n","[604/833] Downloaded XC318811.mp3 (0.7 MB)\n","[605/833] Downloaded XC313298.mp3 (0.7 MB)\n","[606/833] Downloaded XC256283.mp3 (0.2 MB)\n","[607/833] Downloaded XC256183.mp3 (0.5 MB)\n","[608/833] Downloaded XC214228.mp3 (0.7 MB)\n","[609/833] Downloaded XC571200.mp3 (0.3 MB)\n","[610/833] Downloaded XC473457.mp3 (1.2 MB)\n","[611/833] Downloaded XC325245.mp3 (0.2 MB)\n","[612/833] Downloaded XC209500.mp3 (0.1 MB)\n","[613/833] Downloaded XC206397.mp3 (0.6 MB)\n","[614/833] Downloaded XC188680.mp3 (0.2 MB)\n","[615/833] Downloaded XC144313.mp3 (0.2 MB)\n","[616/833] Downloaded XC1065212.mp3 (79.4 MB)\n","[617/833] Downloaded XC1059515.mp3 (6.6 MB)\n","[618/833] Downloaded XC729664.mp3 (0.6 MB)\n","[619/833] Downloaded XC682362.mp3 (0.6 MB)\n","[620/833] Downloaded XC256281.mp3 (0.1 MB)\n","[621/833] Downloaded XC578217.mp3 (0.1 MB)\n","[622/833] Downloaded XC318995.mp3 (0.9 MB)\n","[623/833] Downloaded XC442390.mp3 (0.8 MB)\n","[624/833] Downloaded XC577177.mp3 (0.4 MB)\n","[625/833] Downloaded XC577175.mp3 (0.3 MB)\n","[626/833] Downloaded XC577173.mp3 (0.6 MB)\n","[627/833] Downloaded XC317261.mp3 (0.7 MB)\n","[628/833] Downloaded XC568904.mp3 (0.4 MB)\n","[629/833] Downloaded XC585618.mp3 (1.2 MB)\n","[630/833] Downloaded XC157875.mp3 (0.5 MB)\n","[631/833] Downloaded XC789404.mp3 (0.5 MB)\n","[632/833] Downloaded XC578190.mp3 (0.7 MB)\n","[633/833] Downloaded XC667377.mp3 (0.8 MB)\n","[634/833] Downloaded XC357156.mp3 (0.0 MB)\n","[635/833] Downloaded XC157858.mp3 (0.9 MB)\n","[636/833] Downloaded XC583034.mp3 (2.3 MB)\n","[637/833] Downloaded XC571185.mp3 (0.8 MB)\n","[638/833] Downloaded XC571182.mp3 (0.1 MB)\n","[639/833] Downloaded XC464285.mp3 (0.1 MB)\n","[640/833] Downloaded XC309110.mp3 (0.1 MB)\n","[641/833] Downloaded XC609517.mp3 (2.2 MB)\n","[642/833] Downloaded XC598051.mp3 (1.5 MB)\n","[643/833] Downloaded XC577887.mp3 (0.5 MB)\n","[644/833] Downloaded XC577886.mp3 (0.5 MB)\n","[645/833] Downloaded XC568910.mp3 (0.2 MB)\n","[646/833] Downloaded XC157876.mp3 (0.4 MB)\n","[647/833] Downloaded XC585629.mp3 (0.0 MB)\n","[648/833] Downloaded XC592532.mp3 (0.0 MB)\n","[649/833] Downloaded XC116615.mp3 (0.5 MB)\n","[650/833] Downloaded XC116614.mp3 (0.7 MB)\n","[651/833] Downloaded XC313653.mp3 (0.0 MB)\n","[652/833] Downloaded XC317383.mp3 (0.0 MB)\n","[653/833] Downloaded XC574615.mp3 (0.1 MB)\n","[654/833] Downloaded XC574602.mp3 (0.0 MB)\n","[655/833] Downloaded XC571204.mp3 (0.4 MB)\n","[656/833] Downloaded XC571203.mp3 (0.3 MB)\n","[657/833] Downloaded XC570919.mp3 (0.2 MB)\n","[658/833] Downloaded XC574614.mp3 (0.2 MB)\n","[659/833] Downloaded XC574613.mp3 (0.2 MB)\n","[660/833] Downloaded XC574611.mp3 (0.7 MB)\n","[661/833] Downloaded XC574603.mp3 (0.3 MB)\n","[662/833] Downloaded XC572939.mp3 (0.2 MB)\n","[663/833] Downloaded XC572926.mp3 (0.4 MB)\n","[664/833] Downloaded XC571139.mp3 (0.2 MB)\n","[665/833] Downloaded XC256107.mp3 (2.1 MB)\n","[666/833] Downloaded XC189333.mp3 (0.6 MB)\n","[667/833] Downloaded XC189113.mp3 (0.5 MB)\n","[668/833] Downloaded XC206425.mp3 (0.4 MB)\n","[669/833] Downloaded XC785417.mp3 (0.5 MB)\n","[670/833] Downloaded XC576918.mp3 (0.5 MB)\n","[671/833] Downloaded XC576603.mp3 (0.2 MB)\n","[672/833] Downloaded XC328066.mp3 (0.1 MB)\n","[673/833] Downloaded XC325246.mp3 (0.1 MB)\n","[674/833] Downloaded XC207256.mp3 (0.3 MB)\n","[675/833] Downloaded XC464413.mp3 (0.0 MB)\n","[676/833] Downloaded XC314726.mp3 (0.0 MB)\n","[677/833] Downloaded XC307877.mp3 (0.0 MB)\n","[678/833] Downloaded XC185664.mp3 (0.0 MB)\n","[679/833] Downloaded XC1065186.mp3 (0.0 MB)\n","[680/833] Downloaded XC583228.mp3 (0.0 MB)\n","[681/833] Downloaded XC583225.mp3 (0.0 MB)\n","[682/833] Downloaded XC577275.mp3 (0.0 MB)\n","[683/833] Downloaded XC577249.mp3 (0.0 MB)\n","[684/833] Downloaded XC577247.mp3 (0.0 MB)\n","[685/833] Downloaded XC577245.mp3 (0.0 MB)\n","[686/833] Downloaded XC577171.mp3 (0.0 MB)\n","[687/833] Downloaded XC576939.mp3 (0.0 MB)\n","[688/833] Downloaded XC576937.mp3 (0.0 MB)\n","[689/833] Downloaded XC576936.mp3 (0.0 MB)\n","[690/833] Downloaded XC576935.mp3 (0.0 MB)\n","[691/833] Downloaded XC576934.mp3 (0.0 MB)\n","[692/833] Downloaded XC576917.mp3 (0.0 MB)\n","[693/833] Downloaded XC576904.mp3 (0.0 MB)\n","[694/833] Downloaded XC576901.mp3 (0.0 MB)\n","[695/833] Downloaded XC460931.mp3 (0.0 MB)\n","[696/833] Downloaded XC400678.mp3 (0.0 MB)\n","[697/833] Downloaded XC540847.mp3 (0.0 MB)\n","[698/833] Downloaded XC524582.mp3 (0.0 MB)\n","[699/833] Downloaded XC438461.mp3 (0.0 MB)\n","[700/833] Downloaded XC247139.mp3 (0.0 MB)\n","[701/833] Downloaded XC315637.mp3 (0.0 MB)\n","[702/833] Downloaded XC181341.mp3 (0.0 MB)\n","[703/833] Downloaded XC157477.mp3 (0.0 MB)\n","[704/833] Downloaded XC256288.mp3 (0.0 MB)\n","[705/833] Downloaded XC124743.mp3 (0.0 MB)\n","[706/833] Downloaded XC574735.mp3 (0.0 MB)\n","[707/833] Downloaded XC574732.mp3 (0.0 MB)\n","[708/833] Downloaded XC574729.mp3 (0.0 MB)\n","[709/833] Downloaded XC574726.mp3 (0.0 MB)\n","[710/833] Downloaded XC574330.mp3 (0.0 MB)\n","[711/833] Downloaded XC574741.mp3 (0.1 MB)\n","[712/833] Downloaded XC574736.mp3 (0.2 MB)\n","[713/833] Downloaded XC206385.mp3 (0.8 MB)\n","[714/833] Downloaded XC568887.mp3 (0.1 MB)\n","[715/833] Downloaded XC195592.mp3 (0.1 MB)\n","[716/833] Downloaded XC337357.mp3 (1.4 MB)\n","[717/833] Downloaded XC189109.mp3 (0.8 MB)\n","[718/833] Downloaded XC331901.mp3 (0.3 MB)\n","[719/833] Downloaded XC688014.mp3 (0.8 MB)\n","[720/833] Downloaded XC367146.mp3 (0.1 MB)\n","[721/833] Downloaded XC360927.mp3 (0.2 MB)\n","[722/833] Downloaded XC214231.mp3 (0.4 MB)\n","[723/833] Downloaded XC207929.mp3 (1.5 MB)\n","[724/833] Downloaded XC608964.mp3 (0.8 MB)\n","[725/833] Downloaded XC574712.mp3 (0.2 MB)\n","[726/833] Downloaded XC570892.mp3 (1.2 MB)\n","[727/833] Downloaded XC318812.mp3 (1.0 MB)\n","[728/833] Downloaded XC571143.mp3 (0.2 MB)\n","[729/833] Downloaded XC779858.mp3 (0.2 MB)\n","[730/833] Downloaded XC205909.mp3 (1.0 MB)\n","[731/833] Downloaded XC779857.mp3 (0.3 MB)\n","[732/833] Downloaded XC613908.mp3 (0.2 MB)\n","[733/833] Downloaded XC605968.mp3 (1.4 MB)\n","[734/833] Downloaded XC578221.mp3 (0.2 MB)\n","[735/833] Downloaded XC576916.mp3 (0.2 MB)\n","[736/833] Downloaded XC576915.mp3 (0.1 MB)\n","[737/833] Downloaded XC576903.mp3 (0.5 MB)\n","[738/833] Downloaded XC165500.mp3 (0.2 MB)\n","[739/833] Downloaded XC417589.mp3 (0.6 MB)\n","[740/833] Downloaded XC406655.mp3 (0.3 MB)\n","[741/833] Downloaded XC122395.mp3 (0.4 MB)\n","[742/833] Downloaded XC348379.mp3 (0.7 MB)\n","[743/833] Downloaded XC454351.mp3 (0.4 MB)\n","[744/833] Downloaded XC454350.mp3 (0.1 MB)\n","[745/833] Downloaded XC605973.mp3 (1.1 MB)\n","[746/833] Downloaded XC605970.mp3 (1.2 MB)\n","[747/833] Downloaded XC206408.mp3 (0.4 MB)\n","[748/833] Downloaded XC292015.mp3 (0.2 MB)\n","[749/833] Downloaded XC207139.mp3 (0.1 MB)\n","[750/833] Downloaded XC157487.mp3 (0.2 MB)\n","[751/833] Downloaded XC778606.mp3 (8.0 MB)\n","[752/833] Downloaded XC454349.mp3 (0.4 MB)\n","[753/833] Downloaded XC442391.mp3 (0.3 MB)\n","[754/833] Downloaded XC621595.mp3 (2.4 MB)\n","[755/833] Downloaded XC308276.mp3 (0.2 MB)\n","[756/833] Downloaded XC306985.mp3 (0.1 MB)\n","[757/833] Downloaded XC569655.mp3 (0.4 MB)\n","[758/833] Downloaded XC157474.mp3 (0.3 MB)\n","[759/833] Downloaded XC242415.mp3 (0.8 MB)\n","[760/833] Downloaded XC114109.mp3 (0.3 MB)\n","[761/833] Downloaded XC1070300.mp3 (0.4 MB)\n","[762/833] Downloaded XC788187.mp3 (0.5 MB)\n","[763/833] Downloaded XC778603.mp3 (17.4 MB)\n","[764/833] Downloaded XC576589.mp3 (0.1 MB)\n","[765/833] Downloaded XC574321.mp3 (0.1 MB)\n","[766/833] Downloaded XC207247.mp3 (0.8 MB)\n","[767/833] Downloaded XC195584.mp3 (0.2 MB)\n","[768/833] Downloaded XC340975.mp3 (1.0 MB)\n","[769/833] Downloaded XC340542.mp3 (0.3 MB)\n","[770/833] Downloaded XC454352.mp3 (0.1 MB)\n","[771/833] Downloaded XC454353.mp3 (0.6 MB)\n","[772/833] Downloaded XC206391.mp3 (0.5 MB)\n","[773/833] Downloaded XC210139.mp3 (0.5 MB)\n","[774/833] Downloaded XC205744.mp3 (0.2 MB)\n","[775/833] Downloaded XC120591.mp3 (0.7 MB)\n","[776/833] Downloaded XC577876.mp3 (0.3 MB)\n","[777/833] Downloaded XC577858.mp3 (1.2 MB)\n","[778/833] Downloaded XC577680.mp3 (0.7 MB)\n","[779/833] Downloaded XC577248.mp3 (0.3 MB)\n","[780/833] Downloaded XC464267.mp3 (0.1 MB)\n","[781/833] Downloaded XC577878.mp3 (0.0 MB)\n","[782/833] Downloaded XC308049.mp3 (1.4 MB)\n","[783/833] Downloaded XC428233.mp3 (0.3 MB)\n","[784/833] Downloaded XC207248.mp3 (0.7 MB)\n","[785/833] Downloaded XC464265.mp3 (0.0 MB)\n","[786/833] Downloaded XC325163.mp3 (0.3 MB)\n","[787/833] Downloaded XC571178.mp3 (0.1 MB)\n","[788/833] Downloaded XC571177.mp3 (0.1 MB)\n","[789/833] Downloaded XC758840.mp3 (0.6 MB)\n","[790/833] Downloaded XC758848.mp3 (0.3 MB)\n","[791/833] Downloaded XC206000.mp3 (0.9 MB)\n","[792/833] Downloaded XC314011.mp3 (0.1 MB)\n","[793/833] Downloaded XC316059.mp3 (0.3 MB)\n","[794/833] Downloaded XC638156.mp3 (0.1 MB)\n","[795/833] Downloaded XC301692.mp3 (0.0 MB)\n","[796/833] Downloaded XC537490.mp3 (0.1 MB)\n","[797/833] Downloaded XC672086.mp3 (1.3 MB)\n","[798/833] Downloaded XC317268.mp3 (0.9 MB)\n","[799/833] Downloaded XC672085.mp3 (1.0 MB)\n","[800/833] Downloaded XC1065180.mp3 (46.3 MB)\n","[801/833] Downloaded XC780063.mp3 (0.5 MB)\n","[802/833] Downloaded XC697075.mp3 (0.7 MB)\n","[803/833] Downloaded XC697070.mp3 (0.5 MB)\n","[804/833] Downloaded XC698862.mp3 (7.9 MB)\n","[805/833] Downloaded XC566893.mp3 (0.5 MB)\n","[806/833] Downloaded XC964500.mp3 (46.5 MB)\n","[807/833] Downloaded XC557438.mp3 (0.3 MB)\n","[808/833] Downloaded XC548242.mp3 (0.8 MB)\n","[809/833] Downloaded XC417410.mp3 (0.1 MB)\n","[810/833] Downloaded XC417409.mp3 (0.2 MB)\n","[811/833] Downloaded XC306681.mp3 (0.1 MB)\n","[812/833] Downloaded XC147534.mp3 (0.1 MB)\n","[813/833] Downloaded XC1008114.mp3 (0.1 MB)\n","[814/833] Downloaded XC1008110.mp3 (0.2 MB)\n","[815/833] Downloaded XC809546.mp3 (0.1 MB)\n","[816/833] Downloaded XC793269.mp3 (0.5 MB)\n","[817/833] Downloaded XC790236.mp3 (6.1 MB)\n","[818/833] Downloaded XC638548.mp3 (0.7 MB)\n","[819/833] Downloaded XC373305.mp3 (1.0 MB)\n","[820/833] Downloaded XC922991.mp3 (0.5 MB)\n","[821/833] Downloaded XC617304.mp3 (0.2 MB)\n","[822/833] Downloaded XC513411.mp3 (0.4 MB)\n","[823/833] Downloaded XC513406.mp3 (0.6 MB)\n","[824/833] Downloaded XC494113.mp3 (0.1 MB)\n","[825/833] Downloaded XC462204.mp3 (4.5 MB)\n","[826/833] Downloaded XC320516.mp3 (0.3 MB)\n","[827/833] Downloaded XC169915.mp3 (0.1 MB)\n","[828/833] Downloaded XC915755.mp3 (0.2 MB)\n","[829/833] Downloaded XC736197.mp3 (0.1 MB)\n","[830/833] Downloaded XC733997.mp3 (1.2 MB)\n","[831/833] Downloaded XC689977.mp3 (0.2 MB)\n","[832/833] Downloaded XC689976.mp3 (2.0 MB)\n","[833/833] Downloaded XC477490.mp3 (0.1 MB)\n","Download complete! All files in your raw/ folder.\n"]}]},{"cell_type":"code","source":["import pandas as pd\n","import json\n","\n","df = pd.read_csv('/content/xenocanto.csv')\n","id = df['Catalogue number']\n","name = df['Scientific name']\n","\n","list_name = {}\n","\n","for i in range(len(id)):\n"," list_name.update({int(id[i]): name[i]})\n","print(list_name)\n","\n","with open('/content/data_file.txt', 'w') as file:\n"," json.dump(list_name, file, indent=4)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"2Fg_A1tb-VYG","executionInfo":{"status":"ok","timestamp":1767581622236,"user_tz":-330,"elapsed":73,"user":{"displayName":"Aaryan Kakad","userId":"03943863255411341958"}},"outputId":"7230dfc6-b289-4d0a-f2d4-5b2e60e5fd61"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["{1065199: 'Funambulus palmarum', 934128: 'Tarbinskiellus portentosus', 928661: 'Duttaphrynus melanostictus', 928658: 'Duttaphrynus melanostictus', 667381: 'Dendrocygna javanica', 577361: 'Tadorna ferruginea', 577358: 'Tadorna ferruginea', 577357: 'Tadorna ferruginea', 571156: 'Anas poecilorhyncha', 195759: 'Anas poecilorhyncha', 312771: 'Galloperdix spadicea', 574340: 'Gallus sonneratii', 574339: 'Gallus sonneratii', 574336: 'Gallus sonneratii', 574335: 'Gallus sonneratii', 574331: 'Gallus sonneratii', 574328: 'Gallus sonneratii', 574318: 'Gallus sonneratii', 315635: 'Gallus sonneratii', 332453: 'Ortygornis pondicerianus', 662750: 'Francolinus pictus', 338333: 'Francolinus pictus', 747786: 'Francolinus pictus', 592695: 'Francolinus pictus', 571151: 'Francolinus pictus', 428896: 'Francolinus pictus', 672092: 'Coturnix coromandelica', 592654: 'Coturnix coromandelica', 592653: 'Coturnix coromandelica', 592651: 'Coturnix coromandelica', 592633: 'Coturnix coromandelica', 592632: 'Coturnix coromandelica', 672093: 'Perdicula asiatica', 207015: 'Perdicula asiatica', 575166: 'Caprimulgus indicus', 574744: 'Caprimulgus indicus', 575191: 'Caprimulgus indicus', 575179: 'Caprimulgus indicus', 575171: 'Caprimulgus indicus', 575163: 'Caprimulgus indicus', 157465: 'Caprimulgus atripennis', 73507: 'Caprimulgus atripennis', 121242: 'Caprimulgus atripennis', 569707: 'Caprimulgus asiaticus', 318987: 'Caprimulgus asiaticus', 425063: 'Cypsiurus balasiensis', 574610: 'Apus affinis', 574608: 'Apus affinis', 574605: 'Apus affinis', 584332: 'Centropus sinensis', 528954: 'Centropus sinensis', 195756: 'Centropus sinensis', 195753: 'Centropus sinensis', 464298: 'Centropus sinensis', 207249: 'Centropus sinensis', 585187: 'Eudynamys scolopaceus', 553185: 'Eudynamys scolopaceus', 540848: 'Eudynamys scolopaceus', 538078: 'Eudynamys scolopaceus', 464464: 'Eudynamys scolopaceus', 332745: 'Eudynamys scolopaceus', 307546: 'Eudynamys scolopaceus', 307545: 'Eudynamys scolopaceus', 252829: 'Eudynamys scolopaceus', 207166: 'Eudynamys scolopaceus', 195758: 'Eudynamys scolopaceus', 169914: 'Eudynamys scolopaceus', 635073: 'Cacomantis sonneratii', 722891: 'Cacomantis sonneratii', 722890: 'Cacomantis sonneratii', 725558: 'Cacomantis sonneratii', 725557: 'Cacomantis sonneratii', 569708: 'Cacomantis passerinus', 464043: 'Cacomantis passerinus', 313104: 'Cacomantis passerinus', 568732: 'Cacomantis passerinus', 331891: 'Cacomantis passerinus', 319152: 'Cacomantis passerinus', 181302: 'Cacomantis passerinus', 181301: 'Cacomantis passerinus', 141328: 'Cacomantis passerinus', 722892: 'Cacomantis passerinus', 758845: 'Surniculus dicruroides', 758844: 'Surniculus dicruroides', 758842: 'Surniculus dicruroides', 758841: 'Surniculus dicruroides', 325429: 'Surniculus dicruroides', 180194: 'Surniculus dicruroides', 1055846: 'Surniculus dicruroides', 654106: 'Surniculus dicruroides', 672096: 'Hierococcyx varius', 316409: 'Hierococcyx varius', 241127: 'Hierococcyx varius', 241126: 'Hierococcyx varius', 328436: 'Hierococcyx varius', 315250: 'Cuculus micropterus', 372715: 'Cuculus micropterus', 330052: 'Cuculus micropterus', 157874: 'Spilopelia chinensis', 789406: 'Spilopelia senegalensis', 303515: 'Treron affinis', 576594: 'Treron phoenicopterus', 429627: 'Treron phoenicopterus', 667376: 'Porphyrio poliocephalus', 124749: 'Zapornia fusca', 428779: 'Rallina eurizonoides', 321358: 'Gallicrex cinerea', 579437: 'Amaurornis phoenicurus', 548744: 'Amaurornis phoenicurus', 438346: 'Amaurornis phoenicurus', 519741: 'Amaurornis phoenicurus', 667379: 'Tachybaptus ruficollis', 570920: 'Tachybaptus ruficollis', 697066: 'Phoenicopterus roseus', 468480: 'Phoenicopterus roseus', 165363: 'Phoenicopterus roseus', 279020: 'Haematopus ostralegus', 667380: 'Himantopus himantopus', 596095: 'Himantopus himantopus', 577351: 'Vanellus indicus', 577353: 'Vanellus indicus', 317385: 'Vanellus indicus', 294375: 'Pluvialis squatarola', 294374: 'Pluvialis squatarola', 294373: 'Pluvialis squatarola', 165368: 'Pluvialis squatarola', 786654: 'Charadrius dubius', 670599: 'Rostratula benghalensis', 124036: 'Hydrophasianus chirurgus', 667378: 'Hydrophasianus chirurgus', 162212: 'Numenius arquata', 177473: 'Arenaria interpres', 314144: 'Calidris tenuirostris', 312818: 'Calidris ferruginea', 351899: 'Limnodromus scolopaceus', 351823: 'Limnodromus scolopaceus', 490812: 'Limnodromus scolopaceus', 206371: 'Tringa totanus', 892008: 'Tringa glareola', 314010: 'Tringa glareola', 924220: 'Anous tenuirostris', 169792: 'Hydroprogne caspia', 925196: 'Sternula saundersi', 924227: 'Sternula saundersi', 577355: 'Sterna aurantia', 135814: 'Chlidonias hybrida', 312144: 'Chlidonias hybrida', 343485: 'Ciconia ciconia', 443374: 'Pseudibis papillosa', 316831: 'Pseudibis papillosa', 313198: 'Ixobrychus cinnamomeus', 313748: 'Bubulcus coromandus', 341124: 'Ardea purpurea', 206435: 'Spilornis cheela', 315636: 'Spilornis cheela', 689411: 'Hieraaetus pennatus', 697077: 'Accipiter badius', 341470: 'Accipiter badius', 328068: 'Accipiter badius', 206429: 'Accipiter badius', 141625: 'Accipiter badius', 785413: 'Accipiter badius', 585190: 'Milvus migrans', 583029: 'Milvus migrans', 425062: 'Milvus migrans', 657421: 'Milvus migrans', 308177: 'Milvus migrans', 518955: 'Tyto alba', 574829: 'Tyto javanica', 120974: 'Tyto javanica', 359261: 'Tyto javanica', 317398: 'Ninox scutulata', 206372: 'Ninox scutulata', 371369: 'Ninox scutulata', 572904: 'Athene brama', 572905: 'Athene brama', 517682: 'Athene brama', 517680: 'Athene brama', 517678: 'Athene brama', 311911: 'Athene brama', 779855: 'Athene blewitti', 758846: 'Athene blewitti', 758836: 'Athene blewitti', 758835: 'Athene blewitti', 758834: 'Athene blewitti', 725560: 'Athene blewitti', 725559: 'Athene blewitti', 672075: 'Athene blewitti', 414032: 'Athene blewitti', 206368: 'Athene blewitti', 206367: 'Athene blewitti', 206366: 'Athene blewitti', 778605: 'Athene blewitti', 758847: 'Athene blewitti', 343773: 'Athene blewitti', 314008: 'Athene blewitti', 722042: 'Athene blewitti', 635072: 'Athene blewitti', 454346: 'Athene blewitti', 454347: 'Glaucidium radiatum', 357881: 'Glaucidium radiatum', 778608: 'Glaucidium radiatum', 524190: 'Glaucidium radiatum', 308275: 'Glaucidium radiatum', 666145: 'Glaucidium radiatum', 314996: 'Otus sunia', 358391: 'Otus sunia', 215940: 'Otus bakkamoena', 585635: 'Bubo bengalensis', 808577: 'Strix ocellata', 808576: 'Strix ocellata', 635070: 'Strix ocellata', 460758: 'Strix ocellata', 454348: 'Strix ocellata', 460757: 'Strix ocellata', 460756: 'Strix ocellata', 460755: 'Strix ocellata', 460753: 'Strix ocellata', 330053: 'Strix ocellata', 575371: 'Strix leptogrammica', 575369: 'Strix leptogrammica', 575368: 'Strix leptogrammica', 575202: 'Strix leptogrammica', 575193: 'Strix leptogrammica', 575196: 'Strix leptogrammica', 206370: 'Harpactes fasciatus', 213961: 'Harpactes fasciatus', 205911: 'Ocyceros griseus', 140250: 'Ocyceros griseus', 585628: 'Ocyceros birostris', 442557: 'Ocyceros birostris', 342679: 'Ocyceros birostris', 205908: 'Ocyceros birostris', 426224: 'Ocyceros birostris', 205541: 'Ocyceros birostris', 574612: 'Halcyon smyrnensis', 377406: 'Halcyon smyrnensis', 309366: 'Halcyon smyrnensis', 189123: 'Halcyon smyrnensis', 437156: 'Halcyon smyrnensis', 169565: 'Halcyon smyrnensis', 311933: 'Halcyon pileata', 207123: 'Alcedo atthis', 132011: 'Ceyx erithaca', 325423: 'Ceyx erithaca', 325027: 'Ceyx erithaca', 255204: 'Ceyx erithaca', 209498: 'Ceyx erithaca', 209499: 'Ceyx erithaca', 207026: 'Merops orientalis', 577285: 'Merops orientalis', 576602: 'Merops orientalis', 569674: 'Merops orientalis', 569673: 'Merops orientalis', 808586: 'Psilopogon zeylanicus', 808571: 'Psilopogon zeylanicus', 306983: 'Psilopogon zeylanicus', 779851: 'Psilopogon zeylanicus', 308052: 'Psilopogon zeylanicus', 720894: 'Psilopogon zeylanicus', 788186: 'Psilopogon viridis', 788185: 'Psilopogon viridis', 788184: 'Psilopogon viridis', 574718: 'Psilopogon viridis', 574713: 'Psilopogon viridis', 574337: 'Psilopogon viridis', 574333: 'Psilopogon viridis', 574320: 'Psilopogon viridis', 578228: 'Psilopogon viridis', 574743: 'Psilopogon viridis', 573819: 'Psilopogon viridis', 460802: 'Psilopogon viridis', 460800: 'Psilopogon viridis', 343426: 'Psilopogon viridis', 808583: 'Psilopogon haemacephalus', 585194: 'Psilopogon haemacephalus', 576598: 'Psilopogon haemacephalus', 460805: 'Psilopogon haemacephalus', 443314: 'Psilopogon haemacephalus', 399344: 'Psilopogon haemacephalus', 308053: 'Psilopogon haemacephalus', 308050: 'Psilopogon haemacephalus', 519462: 'Psilopogon haemacephalus', 212061: 'Psilopogon haemacephalus', 758839: 'Jynx torquilla', 207293: 'Hemicircus canente', 206708: 'Hemicircus canente', 206611: 'Hemicircus canente', 207301: 'Hemicircus canente', 206701: 'Hemicircus canente', 206612: 'Hemicircus canente', 214221: 'Leiopicus mahrattensis', 207509: 'Leiopicus mahrattensis', 576902: 'Leiopicus mahrattensis', 255437: 'Dinopium benghalense', 670907: 'Chrysocolaptes festivus', 670905: 'Chrysocolaptes festivus', 670904: 'Chrysocolaptes festivus', 670903: 'Chrysocolaptes festivus', 670901: 'Chrysocolaptes festivus', 670899: 'Chrysocolaptes festivus', 670846: 'Chrysocolaptes festivus', 207927: 'Chrysocolaptes festivus', 808579: 'Chrysocolaptes festivus', 778611: 'Chrysocolaptes festivus', 293640: 'Chrysocolaptes festivus', 206402: 'Chrysocolaptes festivus', 330054: 'Chrysocolaptes festivus', 255432: 'Micropternus brachyurus', 393952: 'Micropternus brachyurus', 212924: 'Falco peregrinus', 576593: 'Psittacula cyanocephala', 576588: 'Psittacula cyanocephala', 778609: 'Psittacula columboides', 780273: 'Psittacula eupatria', 583024: 'Psittacula eupatria', 578787: 'Psittacula eupatria', 425061: 'Psittacula eupatria', 187974: 'Psittacula eupatria', 584349: 'Psittacula krameri', 577645: 'Psittacula krameri', 577644: 'Psittacula krameri', 568868: 'Psittacula krameri', 568863: 'Psittacula krameri', 464292: 'Psittacula krameri', 464252: 'Psittacula krameri', 207014: 'Psittacula krameri', 584366: 'Psittacula krameri', 577652: 'Psittacula krameri', 577650: 'Psittacula krameri', 309096: 'Psittacula krameri', 320460: 'Pitta brachyura', 206396: 'Pitta brachyura', 124745: 'Pitta brachyura', 256280: 'Pitta brachyura', 141231: 'Tephrodornis pondicerianus', 165501: 'Tephrodornis pondicerianus', 169810: 'Artamus fuscus', 1029676: 'Aegithina tiphia', 207243: 'Aegithina tiphia', 207162: 'Aegithina tiphia', 207062: 'Aegithina tiphia', 189108: 'Aegithina tiphia', 572937: 'Aegithina tiphia', 313095: 'Aegithina tiphia', 145708: 'Aegithina tiphia', 145707: 'Aegithina tiphia', 573818: 'Aegithina tiphia', 207060: 'Pericrocotus cinnamomeus', 121369: 'Pericrocotus cinnamomeus', 212573: 'Pericrocotus cinnamomeus', 212923: 'Coracina macei', 195578: 'Lalage melanoptera', 892006: 'Lanius schach', 195484: 'Lanius schach', 598033: 'Lanius schach', 598032: 'Lanius schach', 520390: 'Lanius schach', 207246: 'Lanius schach', 206388: 'Lanius schach', 785416: 'Lanius schach', 308274: 'Oriolus xanthornus', 255433: 'Oriolus xanthornus', 181191: 'Oriolus xanthornus', 776181: 'Oriolus xanthornus', 573900: 'Oriolus kundoo', 543894: 'Oriolus kundoo', 540833: 'Oriolus kundoo', 337338: 'Oriolus kundoo', 356678: 'Oriolus chinensis', 239664: 'Oriolus chinensis', 353800: 'Dicrurus aeneus', 303710: 'Dicrurus paradiseus', 666146: 'Dicrurus paradiseus', 306989: 'Dicrurus paradiseus', 306987: 'Dicrurus paradiseus', 256284: 'Dicrurus paradiseus', 611564: 'Dicrurus paradiseus', 317402: 'Dicrurus paradiseus', 210374: 'Dicrurus leucophaeus', 308273: 'Dicrurus leucophaeus', 1065213: 'Dicrurus leucophaeus', 120586: 'Dicrurus leucophaeus', 240446: 'Dicrurus caerulescens', 596718: 'Dicrurus macrocercus', 580650: 'Dicrurus macrocercus', 580647: 'Dicrurus macrocercus', 580643: 'Dicrurus macrocercus', 592541: 'Dicrurus macrocercus', 443635: 'Dicrurus macrocercus', 571140: 'Rhipidura albogularis', 567247: 'Rhipidura albogularis', 351644: 'Rhipidura albogularis', 342681: 'Rhipidura albogularis', 570841: 'Rhipidura albogularis', 405774: 'Rhipidura albogularis', 244557: 'Rhipidura albogularis', 775794: 'Rhipidura albogularis', 677391: 'Rhipidura albogularis', 140464: 'Rhipidura albogularis', 140039: 'Rhipidura albogularis', 139449: 'Rhipidura albogularis', 169831: 'Rhipidura aureola', 779859: 'Hypothymis azurea', 528927: 'Hypothymis azurea', 239352: 'Hypothymis azurea', 195582: 'Hypothymis azurea', 157482: 'Terpsiphone paradisi', 520167: 'Terpsiphone paradisi', 120592: 'Dendrocitta vagabunda', 758493: 'Dendrocitta vagabunda', 593441: 'Dendrocitta vagabunda', 593439: 'Dendrocitta vagabunda', 576605: 'Dendrocitta vagabunda', 576596: 'Dendrocitta vagabunda', 214230: 'Dendrocitta vagabunda', 210277: 'Dendrocitta vagabunda', 210276: 'Dendrocitta vagabunda', 207021: 'Dendrocitta vagabunda', 593438: 'Dendrocitta vagabunda', 207023: 'Dendrocitta vagabunda', 207020: 'Dendrocitta vagabunda', 157275: 'Dendrocitta vagabunda', 308330: 'Corvus splendens', 578839: 'Corvus splendens', 116613: 'Corvus splendens', 574366: 'Corvus macrorhynchos', 195576: 'Corvus macrorhynchos', 574334: 'Corvus culminatus', 574332: 'Corvus culminatus', 554155: 'Corvus culminatus', 157274: 'Corvus culminatus', 779854: 'Culicicapa ceylonensis', 613907: 'Culicicapa ceylonensis', 778604: 'Parus cinereus', 417433: 'Parus cinereus', 417432: 'Parus cinereus', 212579: 'Parus cinereus', 210275: 'Parus cinereus', 207133: 'Parus cinereus', 207056: 'Parus cinereus', 570840: 'Parus cinereus', 576910: 'Machlolophus aplonotus', 576909: 'Machlolophus aplonotus', 317037: 'Machlolophus aplonotus', 530400: 'Ammomanes phoenicura', 608965: 'Alauda gulgula', 316407: 'Alauda gulgula', 578188: 'Galerida malabarica', 578183: 'Galerida malabarica', 200959: 'Galerida malabarica', 786656: 'Galerida malabarica', 578189: 'Galerida malabarica', 578186: 'Galerida malabarica', 578179: 'Galerida malabarica', 328064: 'Galerida malabarica', 574731: 'Hypsipetes ganeesa', 574719: 'Hypsipetes ganeesa', 207161: 'Hypsipetes ganeesa', 207806: 'Pycnonotus luteolus', 585617: 'Pycnonotus jocosus', 585176: 'Pycnonotus jocosus', 577850: 'Pycnonotus jocosus', 571201: 'Pycnonotus jocosus', 460803: 'Pycnonotus jocosus', 306990: 'Pycnonotus jocosus', 585174: 'Pycnonotus jocosus', 214229: 'Pycnonotus jocosus', 578212: 'Pycnonotus jocosus', 524196: 'Pycnonotus jocosus', 522219: 'Pycnonotus jocosus', 157864: 'Pycnonotus cafer', 578600: 'Pycnonotus cafer', 577870: 'Pycnonotus cafer', 574949: 'Pycnonotus cafer', 207142: 'Pycnonotus cafer', 170868: 'Pycnonotus leucotis', 310426: 'Pycnonotus leucotis', 463792: 'Ptyonoprogne concolor', 328065: 'Ptyonoprogne concolor', 314003: 'Ptyonoprogne concolor', 157276: 'Ptyonoprogne concolor', 207025: 'Cecropis daurica', 165051: 'Phylloscopus humei', 360899: 'Phylloscopus humei', 604529: 'Phylloscopus inornatus', 362256: 'Phylloscopus tytleri', 169807: 'Phylloscopus griseolus', 1065211: 'Phylloscopus nitidus', 1070290: 'Phylloscopus nitidus', 778610: 'Phylloscopus nitidus', 594434: 'Phylloscopus nitidus', 578227: 'Phylloscopus nitidus', 505336: 'Phylloscopus nitidus', 1070308: 'Phylloscopus trochiloides', 460796: 'Phylloscopus trochiloides', 306994: 'Phylloscopus trochiloides', 306992: 'Phylloscopus trochiloides', 122407: 'Phylloscopus trochiloides', 195495: 'Phylloscopus trochiloides', 317387: 'Acrocephalus stentoreus', 592544: 'Acrocephalus stentoreus', 592491: 'Acrocephalus stentoreus', 534618: 'Acrocephalus stentoreus', 638209: 'Acrocephalus stentoreus', 505344: 'Acrocephalus stentoreus', 1070305: 'Acrocephalus dumetorum', 605981: 'Acrocephalus dumetorum', 578214: 'Acrocephalus dumetorum', 313296: 'Acrocephalus dumetorum', 309524: 'Acrocephalus dumetorum', 157359: 'Iduna rama', 981776: 'Helopsaltes certhiola', 592659: 'Schoenicola platyurus', 592660: 'Schoenicola platyurus', 297132: 'Schoenicola platyurus', 297131: 'Schoenicola platyurus', 297129: 'Schoenicola platyurus', 297128: 'Schoenicola platyurus', 297127: 'Schoenicola platyurus', 297123: 'Schoenicola platyurus', 608596: 'Schoenicola striatus', 758838: 'Cisticola juncidis', 598045: 'Cisticola juncidis', 541917: 'Cisticola juncidis', 377399: 'Prinia buchanani', 331899: 'Prinia hodgsonii', 326854: 'Prinia hodgsonii', 326853: 'Prinia hodgsonii', 576908: 'Prinia hodgsonii', 576905: 'Prinia hodgsonii', 239353: 'Prinia hodgsonii', 207257: 'Prinia hodgsonii', 195496: 'Prinia hodgsonii', 189334: 'Prinia hodgsonii', 519784: 'Prinia sylvatica', 519780: 'Prinia sylvatica', 519771: 'Prinia sylvatica', 519768: 'Prinia sylvatica', 207028: 'Prinia sylvatica', 592900: 'Prinia sylvatica', 592899: 'Prinia sylvatica', 592872: 'Prinia sylvatica', 592871: 'Prinia sylvatica', 592732: 'Prinia sylvatica', 592730: 'Prinia sylvatica', 592728: 'Prinia sylvatica', 592725: 'Prinia sylvatica', 519746: 'Prinia sylvatica', 594430: 'Prinia sylvatica', 343776: 'Prinia sylvatica', 578479: 'Prinia socialis', 568902: 'Prinia socialis', 568704: 'Prinia socialis', 464269: 'Prinia socialis', 195760: 'Prinia socialis', 598048: 'Prinia socialis', 592377: 'Prinia socialis', 577348: 'Prinia socialis', 576914: 'Prinia socialis', 569653: 'Prinia socialis', 309696: 'Prinia socialis', 239261: 'Prinia socialis', 592508: 'Prinia socialis', 592487: 'Prinia socialis', 524458: 'Prinia socialis', 659836: 'Prinia inornata', 592636: 'Prinia inornata', 592535: 'Prinia inornata', 207255: 'Prinia inornata', 592502: 'Prinia inornata', 331900: 'Prinia inornata', 809184: 'Orthotomus sutorius', 577284: 'Orthotomus sutorius', 401794: 'Orthotomus sutorius', 325428: 'Orthotomus sutorius', 195589: 'Orthotomus sutorius', 170592: 'Orthotomus sutorius', 584316: 'Orthotomus sutorius', 424135: 'Orthotomus sutorius', 442446: 'Curruca curruca', 613909: 'Chrysomma sinense', 592438: 'Chrysomma sinense', 361317: 'Chrysomma sinense', 598027: 'Chrysomma sinense', 181233: 'Chrysomma sinense', 592441: 'Chrysomma sinense', 239354: 'Chrysomma sinense', 587230: 'Zosterops palpebrosus', 568696: 'Zosterops palpebrosus', 779856: 'Dumetia hyperythra', 604528: 'Dumetia hyperythra', 665060: 'Pomatorhinus horsfieldii', 315634: 'Pomatorhinus horsfieldii', 206390: 'Pomatorhinus horsfieldii', 157740: 'Pomatorhinus horsfieldii', 672095: 'Pomatorhinus horsfieldii', 574338: 'Pomatorhinus horsfieldii', 141358: 'Pomatorhinus horsfieldii', 202648: 'Pomatorhinus horsfieldii', 178248: 'Pomatorhinus horsfieldii', 393951: 'Pomatorhinus horsfieldii', 432655: 'Pellorneum ruficeps', 318811: 'Pellorneum ruficeps', 313298: 'Pellorneum ruficeps', 256283: 'Pellorneum ruficeps', 256183: 'Pellorneum ruficeps', 214228: 'Pellorneum ruficeps', 571200: 'Pellorneum ruficeps', 473457: 'Pellorneum ruficeps', 325245: 'Pellorneum ruficeps', 209500: 'Pellorneum ruficeps', 206397: 'Pellorneum ruficeps', 188680: 'Pellorneum ruficeps', 144313: 'Pellorneum ruficeps', 1065212: 'Alcippe poioicephala', 1059515: 'Alcippe poioicephala', 729664: 'Alcippe poioicephala', 682362: 'Alcippe poioicephala', 256281: 'Alcippe poioicephala', 578217: 'Alcippe poioicephala', 318995: 'Alcippe poioicephala', 442390: 'Argya malcolmi', 577177: 'Argya malcolmi', 577175: 'Argya malcolmi', 577173: 'Argya malcolmi', 317261: 'Argya malcolmi', 568904: 'Argya malcolmi', 585618: 'Argya striata', 157875: 'Argya striata', 789404: 'Argya striata', 578190: 'Argya striata', 667377: 'Argya caudata', 357156: 'Irena puella', 157858: 'Acridotheres fuscus', 583034: 'Acridotheres tristis', 571185: 'Acridotheres tristis', 571182: 'Acridotheres tristis', 464285: 'Acridotheres tristis', 309110: 'Acridotheres tristis', 609517: 'Acridotheres tristis', 598051: 'Acridotheres tristis', 577887: 'Acridotheres tristis', 577886: 'Acridotheres tristis', 568910: 'Acridotheres tristis', 157876: 'Acridotheres tristis', 585629: 'Gracupica contra', 592532: 'Gracupica contra', 116615: 'Pastor roseus', 116614: 'Pastor roseus', 313653: 'Geokichla citrina', 317383: 'Geokichla citrina', 574615: 'Turdus simillimus', 574602: 'Turdus simillimus', 571204: 'Turdus simillimus', 571203: 'Turdus simillimus', 570919: 'Turdus simillimus', 574614: 'Turdus simillimus', 574613: 'Turdus simillimus', 574611: 'Turdus simillimus', 574603: 'Turdus simillimus', 572939: 'Turdus simillimus', 572926: 'Turdus simillimus', 571139: 'Turdus simillimus', 256107: 'Turdus simillimus', 189333: 'Turdus simillimus', 189113: 'Turdus simillimus', 206425: 'Turdus simillimus', 785417: 'Copsychus fulicatus', 576918: 'Copsychus fulicatus', 576603: 'Copsychus fulicatus', 328066: 'Copsychus fulicatus', 325246: 'Copsychus fulicatus', 207256: 'Copsychus fulicatus', 464413: 'Copsychus saularis', 314726: 'Copsychus saularis', 307877: 'Copsychus saularis', 185664: 'Copsychus saularis', 1065186: 'Copsychus saularis', 583228: 'Copsychus saularis', 583225: 'Copsychus saularis', 577275: 'Copsychus saularis', 577249: 'Copsychus saularis', 577247: 'Copsychus saularis', 577245: 'Copsychus saularis', 577171: 'Copsychus saularis', 576939: 'Copsychus saularis', 576937: 'Copsychus saularis', 576936: 'Copsychus saularis', 576935: 'Copsychus saularis', 576934: 'Copsychus saularis', 576917: 'Copsychus saularis', 576904: 'Copsychus saularis', 576901: 'Copsychus saularis', 460931: 'Copsychus saularis', 400678: 'Copsychus saularis', 540847: 'Copsychus saularis', 524582: 'Copsychus saularis', 438461: 'Copsychus saularis', 247139: 'Copsychus saularis', 315637: 'Copsychus malabaricus', 181341: 'Copsychus malabaricus', 157477: 'Copsychus malabaricus', 256288: 'Copsychus malabaricus', 124743: 'Copsychus malabaricus', 574735: 'Copsychus malabaricus', 574732: 'Copsychus malabaricus', 574729: 'Copsychus malabaricus', 574726: 'Copsychus malabaricus', 574330: 'Copsychus malabaricus', 574741: 'Cyornis pallidipes', 574736: 'Cyornis pallidipes', 206385: 'Cyornis pallidipes', 568887: 'Cyornis tickelliae', 195592: 'Cyornis tickelliae', 337357: 'Cyornis tickelliae', 189109: 'Cyornis tickelliae', 331901: 'Cyornis tickelliae', 688014: 'Larvivora brunnea', 367146: 'Larvivora brunnea', 360927: 'Larvivora brunnea', 214231: 'Larvivora brunnea', 207929: 'Larvivora brunnea', 608964: 'Luscinia svecica', 574712: 'Myophonus horsfieldii', 570892: 'Myophonus horsfieldii', 318812: 'Myophonus horsfieldii', 571143: 'Myophonus horsfieldii', 779858: 'Ficedula superciliaris', 205909: 'Ficedula superciliaris', 779857: 'Ficedula superciliaris', 613908: 'Ficedula superciliaris', 605968: 'Ficedula parva', 578221: 'Ficedula parva', 576916: 'Ficedula parva', 576915: 'Ficedula parva', 576903: 'Ficedula parva', 165500: 'Ficedula parva', 417589: 'Monticola solitarius', 406655: 'Saxicola caprata', 122395: 'Saxicola caprata', 348379: 'Oenanthe fusca', 454351: 'Chloropsis jerdoni', 454350: 'Chloropsis jerdoni', 605973: 'Chloropsis aurifrons', 605970: 'Chloropsis aurifrons', 206408: 'Chloropsis aurifrons', 292015: 'Dicaeum agile', 207139: 'Dicaeum agile', 157487: 'Dicaeum agile', 778606: 'Dicaeum erythrorhynchos', 454349: 'Dicaeum erythrorhynchos', 442391: 'Dicaeum erythrorhynchos', 621595: 'Dicaeum erythrorhynchos', 308276: 'Dicaeum erythrorhynchos', 306985: 'Dicaeum erythrorhynchos', 569655: 'Leptocoma zeylonica', 157474: 'Leptocoma zeylonica', 242415: 'Leptocoma zeylonica', 114109: 'Leptocoma minima', 1070300: 'Cinnyris asiaticus', 788187: 'Cinnyris asiaticus', 778603: 'Cinnyris asiaticus', 576589: 'Cinnyris asiaticus', 574321: 'Cinnyris asiaticus', 207247: 'Cinnyris asiaticus', 195584: 'Cinnyris asiaticus', 340975: 'Cinnyris lotenius', 340542: 'Cinnyris lotenius', 454352: 'Aethopyga vigorsii', 454353: 'Aethopyga vigorsii', 206391: 'Aethopyga vigorsii', 210139: 'Aethopyga vigorsii', 205744: 'Gymnoris xanthocollis', 120591: 'Gymnoris xanthocollis', 577876: 'Passer domesticus', 577858: 'Passer domesticus', 577680: 'Passer domesticus', 577248: 'Passer domesticus', 464267: 'Passer domesticus', 577878: 'Passer domesticus', 308049: 'Passer domesticus', 428233: 'Passer domesticus', 207248: 'Ploceus philippinus', 464265: 'Ploceus philippinus', 325163: 'Ploceus philippinus', 571178: 'Ploceus philippinus', 571177: 'Ploceus philippinus', 758840: 'Amandava amandava', 758848: 'Dendronanthus indicus', 206000: 'Dendronanthus indicus', 314011: 'Motacilla flava', 316059: 'Motacilla maderaspatensis', 638156: 'Motacilla maderaspatensis', 301692: 'Anthus campestris', 537490: 'Anthus cervinus', 672086: 'Emberiza lathami', 317268: 'Emberiza lathami', 672085: 'Emberiza striolata', 1065180: 'Sonus naturalis', 780063: 'Sonus naturalis', 697075: 'Sonus naturalis', 697070: 'Sonus naturalis', 698862: 'Sonus naturalis', 566893: 'Sonus naturalis', 964500: 'Sonus naturalis', 557438: 'Mystery mystery', 548242: 'Mystery mystery', 417410: 'Mystery mystery', 417409: 'Mystery mystery', 306681: 'Mystery mystery', 147534: 'Mystery mystery', 1008114: 'Mystery mystery', 1008110: 'Mystery mystery', 809546: 'Mystery mystery', 793269: 'Mystery mystery', 790236: 'Mystery mystery', 638548: 'Mystery mystery', 373305: 'Mystery mystery', 922991: 'Mystery mystery', 617304: 'Mystery mystery', 513411: 'Mystery mystery', 513406: 'Mystery mystery', 494113: 'Mystery mystery', 462204: 'Mystery mystery', 320516: 'Mystery mystery', 169915: 'Mystery mystery', 915755: 'Mystery mystery', 736197: 'Mystery mystery', 733997: 'Mystery mystery', 689977: 'Mystery mystery', 689976: 'Mystery mystery', 477490: 'Mystery mystery'}\n"]}]},{"cell_type":"code","source":["!pip install torchcodec"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"wGZ9g6TPJNko","executionInfo":{"status":"ok","timestamp":1767582882452,"user_tz":-330,"elapsed":4654,"user":{"displayName":"Aaryan Kakad","userId":"03943863255411341958"}},"outputId":"39171bae-1ba4-44d5-e7e4-f26122c1bf4e"},"execution_count":1,"outputs":[{"output_type":"stream","name":"stdout","text":["Requirement already satisfied: torchcodec in /usr/local/lib/python3.12/dist-packages (0.9.1)\n"]}]},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')\n","\n","import os\n","import torch\n","import torchaudio\n","import matplotlib.pyplot as plt\n","from tqdm import tqdm\n","import warnings\n","warnings.filterwarnings(\"ignore\")\n","\n","# ================== SETTINGS ==================\n","raw_dir = '/content/drive/MyDrive/bird-sounds-rnn/raw/' # Folder with your 833 XC*.mp3 files\n","spec_dir = '/content/drive/MyDrive/bird-sounds-rnn/mel_specs/all/' # All spectrograms go here\n","os.makedirs(spec_dir, exist_ok=True)\n","\n","# Optional: Load your JSON mapping if you want species info later\n","# import json\n","# with open('/content/drive/MyDrive/BirdSoundMumbai/data_file.txt', 'r') as f:\n","# data = json.load(f)\n","\n","# ================== GPU SETUP ==================\n","device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n","print(f\"Using device: {device}\") # Should show cuda with T4 selected\n","\n","# ================== MEL TRANSFORM (GPU) ==================\n","mel_transform = torchaudio.transforms.MelSpectrogram(\n"," sample_rate=22050,\n"," n_fft=512,\n"," win_length=512,\n"," hop_length=256, # 50% overlap → ~431 frames for 5s\n"," f_min=50,\n"," f_max=11000,\n"," n_mels=128,\n"," norm='slaney',\n"," mel_scale='slaney'\n",").to(device)\n","\n","db_transform = torchaudio.transforms.AmplitudeToDB(stype='power', top_db=80).to(device)\n","\n","full_transform = torch.nn.Sequential(mel_transform, db_transform)\n","\n","# ================== PARAMETERS ==================\n","target_sr = 22050\n","target_len = target_sr * 5 # Fixed 5-second clips\n","\n","total_specs = 0\n","print(\"Starting conversion of ALL 833 recordings to Mel spectrograms (5s clips with overlap)...\")\n","\n","for filename in tqdm(sorted(os.listdir(raw_dir))):\n"," if not filename.lower().endswith('.mp3'):\n"," continue\n","\n"," filepath = os.path.join(raw_dir, filename)\n","\n"," try:\n"," # Load audio\n"," waveform, sr = torchaudio.load(filepath)\n","\n"," # Resample to 22050 Hz\n"," if sr != target_sr:\n"," waveform = torchaudio.functional.resample(waveform, orig_freq=sr, new_freq=target_sr)\n","\n"," # Convert to mono\n"," if waveform.shape[0] > 1:\n"," waveform = waveform.mean(dim=0, keepdim=True)\n","\n"," total_samples = waveform.shape[1]\n"," start_sample = 0\n"," clip_idx = 0\n","\n"," while start_sample < total_samples:\n"," end_sample = min(start_sample + target_len, total_samples)\n"," segment = waveform[:, start_sample:end_sample]\n","\n"," # Zero-pad if shorter than 5s\n"," if segment.shape[1] < target_len:\n"," pad = target_len - segment.shape[1]\n"," segment = torch.nn.functional.pad(segment, (0, pad))\n","\n"," # Move to GPU, compute Mel spec\n"," segment = segment.to(device)\n"," with torch.no_grad():\n"," mel = full_transform(segment) # (1, 128, time)\n","\n"," mel = mel.squeeze(0).cpu() # (128, time) on CPU\n","\n"," # Normalize to 0-255 for image saving\n"," mel_min = mel.min()\n"," mel_max = mel.max()\n"," if mel_max > mel_min:\n"," mel = (mel - mel_min) / (mel_max - mel_min)\n"," mel_img = (mel.numpy() * 255).astype('uint8')\n","\n"," # Save as PNG\n"," base_name = os.path.splitext(filename)[0]\n"," save_name = f\"{base_name}_part{clip_idx}.png\"\n"," save_path = os.path.join(spec_dir, save_name)\n","\n"," plt.imsave(save_path, mel_img, cmap='magma', origin='lower')\n","\n"," total_specs += 1\n"," clip_idx += 1\n","\n"," # 50% overlap for more training examples (skip if near end)\n"," if total_samples - end_sample > target_len // 2:\n"," start_sample += target_len // 2\n"," else:\n"," break\n","\n"," except Exception as e:\n"," print(f\"\\nError processing {filename}: {e}\")\n","\n","print(f\"\\nConversion complete!\")\n","print(f\"Generated {total_specs} Mel spectrogram images (5s clips).\")\n","print(f\"All saved in: {spec_dir}\")\n","print(\"Each image is ~128 × 431 pixels – perfect for CNNs or patching into Transformers.\")\n","print(\"Next step: Build a labeled Dataset using your species map and start training!\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"TbHnES5kDPVg","executionInfo":{"status":"ok","timestamp":1767583573219,"user_tz":-330,"elapsed":538620,"user":{"displayName":"Aaryan Kakad","userId":"03943863255411341958"}},"outputId":"3701cb59-f425-421c-dce6-13833a7c5283"},"execution_count":3,"outputs":[{"output_type":"stream","name":"stdout","text":["Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n","Using device: cuda\n","Starting conversion of ALL 833 recordings to Mel spectrograms (5s clips with overlap)...\n"]},{"output_type":"stream","name":"stderr","text":[" 1%| | 7/833 [01:40<4:24:13, 19.19s/it]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC1065186.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC1065186.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC1065186.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 3%|▎ | 27/833 [02:16<06:29, 2.07it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC124743.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC124743.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC124743.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 6%|▌ | 51/833 [02:29<05:32, 2.35it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC157477.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC157477.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC157477.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 10%|█ | 85/833 [02:41<03:11, 3.90it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC181341.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC181341.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC181341.mp3 Invalid argument\n","\n","Error processing XC185664.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC185664.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC185664.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 11%|█ | 92/833 [02:43<03:56, 3.14it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC195484.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC195484.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC195484.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 15%|█▍ | 121/833 [02:54<02:53, 4.11it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC206388.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC206388.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC206388.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 18%|█▊ | 154/833 [03:07<03:09, 3.57it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC207246.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC207246.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC207246.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 23%|██▎ | 191/833 [03:19<05:11, 2.06it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC239664.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC239664.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC239664.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 24%|██▍ | 199/833 [03:21<02:01, 5.20it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC247139.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC247139.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC247139.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 25%|██▌ | 209/833 [03:24<02:46, 3.75it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC256288.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC256288.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC256288.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 27%|██▋ | 224/833 [03:27<02:00, 5.05it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC301692.mp3: Failed to decode audio samples: Could not push packet to decoder: Invalid data found when processing input\n"]},{"output_type":"stream","name":"stderr","text":[" 28%|██▊ | 234/833 [03:28<01:14, 8.08it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC307877.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC307877.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC307877.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 31%|███▏ | 262/833 [03:35<02:29, 3.82it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC313653.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC313653.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC313653.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 32%|███▏ | 269/833 [03:40<04:08, 2.27it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC314726.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC314726.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC314726.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 33%|███▎ | 277/833 [03:40<01:38, 5.65it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC315637.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC315637.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC315637.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 34%|███▍ | 283/833 [03:46<04:44, 1.94it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC317383.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC317383.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC317383.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 39%|███▊ | 322/833 [03:59<03:39, 2.32it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC337357.mp3: Failed to decode audio samples: Could not push packet to decoder: Invalid data found when processing input\n"]},{"output_type":"stream","name":"stderr","text":[" 39%|███▉ | 328/833 [04:01<01:57, 4.29it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC341470.mp3: Failed to decode audio samples: Could not push packet to decoder: Invalid data found when processing input\n","\n","Error processing XC342679.mp3: Failed to decode audio samples: Could not push packet to decoder: Invalid data found when processing input\n","\n","Error processing XC342681.mp3: Failed to decode audio samples: Could not push packet to decoder: Invalid data found when processing input\n"]},{"output_type":"stream","name":"stderr","text":[" 40%|████ | 334/833 [04:02<01:47, 4.66it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC348379.mp3: Failed to decode audio samples: Could not push packet to decoder: Invalid data found when processing input\n"]},{"output_type":"stream","name":"stderr","text":["\r 40%|████ | 336/833 [04:02<01:22, 6.02it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC356678.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC356678.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC356678.mp3 Invalid argument\n","\n","Error processing XC357156.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC357156.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC357156.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":["\r 41%|████ | 340/833 [04:02<01:14, 6.63it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC358391.mp3: Failed to decode audio samples: Could not push packet to decoder: Invalid data found when processing input\n"]},{"output_type":"stream","name":"stderr","text":[" 43%|████▎ | 355/833 [04:08<04:14, 1.88it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC400678.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC400678.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC400678.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 45%|████▌ | 375/833 [04:16<04:56, 1.54it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC437156.mp3: Failed to decode audio samples: Could not push packet to decoder: Invalid data found when processing input\n"]},{"output_type":"stream","name":"stderr","text":["\r 45%|████▌ | 377/833 [04:17<03:59, 1.91it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC438461.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC438461.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC438461.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 46%|████▌ | 384/833 [04:19<02:17, 3.26it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC443314.mp3: Failed to decode audio samples: Could not push packet to decoder: Invalid data found when processing input\n","\n","Error processing XC443374.mp3: Failed to decode audio samples: Could not push packet to decoder: Invalid data found when processing input\n"]},{"output_type":"stream","name":"stderr","text":[" 48%|████▊ | 403/833 [04:30<06:26, 1.11it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC460931.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC460931.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC460931.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 50%|████▉ | 413/833 [04:34<02:17, 3.05it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC464413.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC464413.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC464413.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 52%|█████▏ | 437/833 [04:43<01:24, 4.69it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC520390.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC520390.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC520390.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 53%|█████▎ | 444/833 [04:45<01:10, 5.51it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC524582.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC524582.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC524582.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 54%|█████▍ | 450/833 [04:51<06:38, 1.04s/it]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC540847.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC540847.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC540847.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 55%|█████▌ | 461/833 [05:03<05:04, 1.22it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC568696.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC568696.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC568696.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 61%|██████ | 506/833 [05:28<02:21, 2.32it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC574330.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC574330.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC574330.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 64%|██████▍ | 532/833 [05:41<02:00, 2.49it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC574726.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC574726.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC574726.mp3 Invalid argument\n","\n","Error processing XC574729.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC574729.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC574729.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":["\r 64%|██████▍ | 535/833 [05:42<01:19, 3.77it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC574732.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC574732.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC574732.mp3 Invalid argument\n","\n","Error processing XC574735.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC574735.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC574735.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 68%|██████▊ | 563/833 [05:52<01:22, 3.29it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC576901.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC576901.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC576901.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 68%|██████▊ | 566/833 [05:55<02:23, 1.86it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC576904.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC576904.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC576904.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 69%|██████▉ | 574/833 [05:57<01:28, 2.93it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC576917.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC576917.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC576917.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":["\r 69%|██████▉ | 576/833 [05:59<01:54, 2.24it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC576934.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC576934.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC576934.mp3 Invalid argument\n","\n","Error processing XC576935.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC576935.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC576935.mp3 Invalid argument\n","\n","Error processing XC576936.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC576936.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC576936.mp3 Invalid argument\n","\n","Error processing XC576937.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC576937.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC576937.mp3 Invalid argument\n","\n","Error processing XC576939.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC576939.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC576939.mp3 Invalid argument\n","\n","Error processing XC577171.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC577171.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC577171.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 70%|███████ | 585/833 [06:02<01:55, 2.15it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC577245.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC577245.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC577245.mp3 Invalid argument\n","\n","Error processing XC577247.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC577247.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC577247.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 71%|███████ | 591/833 [06:03<00:59, 4.05it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC577249.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC577249.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC577249.mp3 Invalid argument\n","\n","Error processing XC577275.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC577275.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC577275.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 76%|███████▌ | 634/833 [06:32<03:48, 1.15s/it]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC583225.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC583225.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC583225.mp3 Invalid argument\n","\n","Error processing XC583228.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC583228.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC583228.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 78%|███████▊ | 650/833 [06:44<01:13, 2.50it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC585629.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC585629.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC585629.mp3 Invalid argument\n","\n","Error processing XC587230.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC587230.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC587230.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 79%|███████▉ | 658/833 [06:50<03:20, 1.14s/it]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC592532.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC592532.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC592532.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 83%|████████▎ | 690/833 [07:13<00:46, 3.07it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC598032.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC598032.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC598032.mp3 Invalid argument\n","\n","Error processing XC598033.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC598033.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC598033.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 84%|████████▍ | 698/833 [07:19<01:28, 1.53it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC608596.mp3: Failed to decode audio samples: Could not push packet to decoder: Invalid data found when processing input\n"]},{"output_type":"stream","name":"stderr","text":[" 96%|█████████▋| 803/833 [08:21<00:05, 5.56it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC785416.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC785416.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC785416.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":[" 99%|█████████▊| 821/833 [08:31<00:06, 1.81it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Error processing XC892006.mp3: Failed to create AudioDecoder for /content/drive/MyDrive/bird-sounds-rnn/raw/XC892006.mp3: Could not open input file: /content/drive/MyDrive/bird-sounds-rnn/raw/XC892006.mp3 Invalid argument\n"]},{"output_type":"stream","name":"stderr","text":["100%|██████████| 833/833 [08:53<00:00, 1.56it/s]"]},{"output_type":"stream","name":"stdout","text":["\n","Conversion complete!\n","Generated 8037 Mel spectrogram images (5s clips).\n","All saved in: /content/drive/MyDrive/bird-sounds-rnn/mel_specs/all/\n","Each image is ~128 × 431 pixels – perfect for CNNs or patching into Transformers.\n","Next step: Build a labeled Dataset using your species map and start training!\n"]},{"output_type":"stream","name":"stderr","text":["\n"]}]},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')\n","\n","import os\n","import json\n","import torch\n","import torch.nn as nn\n","import torch.optim as optim\n","from torch.utils.data import Dataset, DataLoader, WeightedRandomSampler\n","from torchvision import transforms, models\n","from PIL import Image\n","from tqdm import tqdm\n","import numpy as np\n","\n","# ================== PATHS ==================\n","spec_dir = '/content/drive/MyDrive/bird-sounds-rnn/mel_specs/all/'\n","json_path = '/content/data_file.txt' # Adjust if path different\n","\n","with open(json_path, 'r') as f:\n"," xc_to_species = json.load(f)\n","\n","# ================== DYNAMIC LABEL MAP FOR ALL BIRDS ==================\n","unique_species = sorted(set(xc_to_species.values()))\n","\n","label_map = {species: idx for idx, species in enumerate(unique_species)}\n","num_classes = len(unique_species)\n","class_names = unique_species # List of all scientific names\n","\n","print(f\"Found {num_classes} unique bird species!\")\n","print(\"Classes:\", class_names) # Will print all ~200+ species\n","\n","# ================== CUSTOM DATASET ==================\n","class BirdSpecDataset(Dataset):\n"," def __init__(self, spec_dir, xc_to_species, label_map, transform=None):\n"," self.spec_dir = spec_dir\n"," self.xc_to_species = xc_to_species\n"," self.label_map = label_map\n"," self.transform = transform\n","\n"," self.files = [f for f in os.listdir(spec_dir) if f.endswith('.png')]\n"," self.labels = []\n"," for f in self.files:\n"," xc_id = f.split('_')[0].replace('XC', '')\n"," sci_name = xc_to_species.get(xc_id, \"unknown\") # fallback\n"," label = label_map.get(sci_name, label_map.get(\"unknown\", 0)) # fallback to 0\n"," self.labels.append(label)\n","\n"," def __len__(self):\n"," return len(self.files)\n","\n"," def __getitem__(self, idx):\n"," img_path = os.path.join(self.spec_dir, self.files[idx])\n"," image = Image.open(img_path).convert('RGB')\n"," label = self.labels[idx]\n","\n"," if self.transform:\n"," image = self.transform(image)\n","\n"," return image, label\n","\n","# ================== TRANSFORMS ==================\n","train_transform = transforms.Compose([\n"," transforms.RandomResizedCrop(224, scale=(0.8, 1.0)),\n"," transforms.RandomHorizontalFlip(),\n"," transforms.ColorJitter(brightness=0.2, contrast=0.2),\n"," transforms.ToTensor(),\n"," transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])\n","])\n","\n","val_transform = transforms.Compose([\n"," transforms.Resize((224, 224)),\n"," transforms.ToTensor(),\n"," transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])\n","])\n","\n","# ================== FULL DATASET & SPLIT ==================\n","full_dataset = BirdSpecDataset(spec_dir, xc_to_species, label_map)\n","\n","train_size = int(0.85 * len(full_dataset))\n","val_size = len(full_dataset) - train_size\n","generator = torch.Generator().manual_seed(42)\n","\n","split = torch.utils.data.random_split(\n"," range(len(full_dataset)),\n"," [train_size, val_size],\n"," generator=generator\n",")\n","\n","train_indices = split[0].indices\n","val_indices = split[1].indices\n","\n","train_dataset = BirdSpecDataset(spec_dir, xc_to_species, label_map, transform=train_transform)\n","train_dataset.files = [full_dataset.files[i] for i in train_indices]\n","train_dataset.labels = [full_dataset.labels[i] for i in train_indices]\n","\n","val_dataset = BirdSpecDataset(spec_dir, xc_to_species, label_map, transform=val_transform)\n","val_dataset.files = [full_dataset.files[i] for i in val_indices]\n","val_dataset.labels = [full_dataset.labels[i] for i in val_indices]\n","\n","# ================== BALANCED SAMPLER (for multi-class) ==================\n","train_labels_np = np.array(train_dataset.labels)\n","class_counts = np.bincount(train_labels_np, minlength=num_classes)\n","class_weights = 1. / (class_counts + 1e-6)\n","sample_weights = class_weights[train_labels_np]\n","\n","sampler = WeightedRandomSampler(sample_weights, len(sample_weights), replacement=True)\n","\n","train_loader = DataLoader(train_dataset, batch_size=32, sampler=sampler, num_workers=2, pin_memory=True)\n","val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False, num_workers=2, pin_memory=True)\n","\n","print(f\"Total images: {len(full_dataset)} | Train: {len(train_dataset)} | Val: {len(val_dataset)}\")\n","print(f\"Training on ALL {num_classes} bird species dynamically!\")\n","\n","# ================== MODEL ==================\n","device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n","model = models.mobilenet_v3_small(pretrained=True)\n","model.classifier[3] = nn.Linear(model.classifier[3].in_features, num_classes)\n","model = model.to(device)\n","\n","criterion = nn.CrossEntropyLoss()\n","optimizer = optim.AdamW(model.parameters(), lr=0.001, weight_decay=0.01)\n","scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=20)\n","\n","# ================== TRAINING LOOP ==================\n","num_epochs = 30 # More epochs for many classes\n","best_acc = 0.0\n","\n","for epoch in range(num_epochs):\n"," model.train()\n"," running_loss = 0.0\n"," for inputs, labels in tqdm(train_loader, desc=f\"Epoch {epoch+1}/{num_epochs}\"):\n"," inputs, labels = inputs.to(device), labels.to(device)\n"," optimizer.zero_grad()\n"," outputs = model(inputs)\n"," loss = criterion(outputs, labels)\n"," loss.backward()\n"," optimizer.step()\n"," running_loss += loss.item()\n","\n"," # Validation\n"," model.eval()\n"," correct = 0\n"," total = 0\n"," with torch.no_grad():\n"," for inputs, labels in val_loader:\n"," inputs, labels = inputs.to(device), labels.to(device)\n"," outputs = model(inputs)\n"," _, predicted = torch.max(outputs, 1)\n"," total += labels.size(0)\n"," correct += (predicted == labels).sum().item()\n","\n"," acc = 100 * correct / total if total > 0 else 0\n"," print(f\"\\nEpoch {epoch+1} - Loss: {running_loss/len(train_loader):.4f} - Val Acc: {acc:.2f}%\")\n","\n"," if acc > best_acc:\n"," best_acc = acc\n"," torch.save({\n"," 'model_state_dict': model.state_dict(),\n"," 'label_map': label_map # Save map for inference\n"," }, '/content/drive/MyDrive/bird-sounds-rnn/multi_species_model.pth')\n","\n"," scheduler.step()\n","\n","print(f\"\\nTraining complete on ALL bird species! Best val acc: {best_acc:.2f}%\")\n","print(\"Model + label map saved. For inference, load label_map to get species names from predictions.\")"],"metadata":{"id":"CQdwOJ6II9NR","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1767586504425,"user_tz":-330,"elapsed":2229922,"user":{"displayName":"Aaryan Kakad","userId":"03943863255411341958"}},"outputId":"31c45372-88e6-420f-cdab-52fbe6cd53cf"},"execution_count":3,"outputs":[{"output_type":"stream","name":"stdout","text":["Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n","Found 204 unique bird species!\n","Classes: ['Accipiter badius', 'Acridotheres fuscus', 'Acridotheres tristis', 'Acrocephalus dumetorum', 'Acrocephalus stentoreus', 'Aegithina tiphia', 'Aethopyga vigorsii', 'Alauda gulgula', 'Alcedo atthis', 'Alcippe poioicephala', 'Amandava amandava', 'Amaurornis phoenicurus', 'Ammomanes phoenicura', 'Anas poecilorhyncha', 'Anous tenuirostris', 'Anthus campestris', 'Anthus cervinus', 'Apus affinis', 'Ardea purpurea', 'Arenaria interpres', 'Argya caudata', 'Argya malcolmi', 'Argya striata', 'Artamus fuscus', 'Athene blewitti', 'Athene brama', 'Bubo bengalensis', 'Bubulcus coromandus', 'Cacomantis passerinus', 'Cacomantis sonneratii', 'Calidris ferruginea', 'Calidris tenuirostris', 'Caprimulgus asiaticus', 'Caprimulgus atripennis', 'Caprimulgus indicus', 'Cecropis daurica', 'Centropus sinensis', 'Ceyx erithaca', 'Charadrius dubius', 'Chlidonias hybrida', 'Chloropsis aurifrons', 'Chloropsis jerdoni', 'Chrysocolaptes festivus', 'Chrysomma sinense', 'Ciconia ciconia', 'Cinnyris asiaticus', 'Cinnyris lotenius', 'Cisticola juncidis', 'Copsychus fulicatus', 'Copsychus malabaricus', 'Copsychus saularis', 'Coracina macei', 'Corvus culminatus', 'Corvus macrorhynchos', 'Corvus splendens', 'Coturnix coromandelica', 'Cuculus micropterus', 'Culicicapa ceylonensis', 'Curruca curruca', 'Cyornis pallidipes', 'Cyornis tickelliae', 'Cypsiurus balasiensis', 'Dendrocitta vagabunda', 'Dendrocygna javanica', 'Dendronanthus indicus', 'Dicaeum agile', 'Dicaeum erythrorhynchos', 'Dicrurus aeneus', 'Dicrurus caerulescens', 'Dicrurus leucophaeus', 'Dicrurus macrocercus', 'Dicrurus paradiseus', 'Dinopium benghalense', 'Dumetia hyperythra', 'Duttaphrynus melanostictus', 'Emberiza lathami', 'Emberiza striolata', 'Eudynamys scolopaceus', 'Falco peregrinus', 'Ficedula parva', 'Ficedula superciliaris', 'Francolinus pictus', 'Funambulus palmarum', 'Galerida malabarica', 'Gallicrex cinerea', 'Galloperdix spadicea', 'Gallus sonneratii', 'Geokichla citrina', 'Glaucidium radiatum', 'Gracupica contra', 'Gymnoris xanthocollis', 'Haematopus ostralegus', 'Halcyon pileata', 'Halcyon smyrnensis', 'Harpactes fasciatus', 'Helopsaltes certhiola', 'Hemicircus canente', 'Hieraaetus pennatus', 'Hierococcyx varius', 'Himantopus himantopus', 'Hydrophasianus chirurgus', 'Hydroprogne caspia', 'Hypothymis azurea', 'Hypsipetes ganeesa', 'Iduna rama', 'Irena puella', 'Ixobrychus cinnamomeus', 'Jynx torquilla', 'Lalage melanoptera', 'Lanius schach', 'Larvivora brunnea', 'Leiopicus mahrattensis', 'Leptocoma minima', 'Leptocoma zeylonica', 'Limnodromus scolopaceus', 'Luscinia svecica', 'Machlolophus aplonotus', 'Merops orientalis', 'Micropternus brachyurus', 'Milvus migrans', 'Monticola solitarius', 'Motacilla flava', 'Motacilla maderaspatensis', 'Myophonus horsfieldii', 'Mystery mystery', 'Ninox scutulata', 'Numenius arquata', 'Ocyceros birostris', 'Ocyceros griseus', 'Oenanthe fusca', 'Oriolus chinensis', 'Oriolus kundoo', 'Oriolus xanthornus', 'Orthotomus sutorius', 'Ortygornis pondicerianus', 'Otus bakkamoena', 'Otus sunia', 'Parus cinereus', 'Passer domesticus', 'Pastor roseus', 'Pellorneum ruficeps', 'Perdicula asiatica', 'Pericrocotus cinnamomeus', 'Phoenicopterus roseus', 'Phylloscopus griseolus', 'Phylloscopus humei', 'Phylloscopus inornatus', 'Phylloscopus nitidus', 'Phylloscopus trochiloides', 'Phylloscopus tytleri', 'Pitta brachyura', 'Ploceus philippinus', 'Pluvialis squatarola', 'Pomatorhinus horsfieldii', 'Porphyrio poliocephalus', 'Prinia buchanani', 'Prinia hodgsonii', 'Prinia inornata', 'Prinia socialis', 'Prinia sylvatica', 'Pseudibis papillosa', 'Psilopogon haemacephalus', 'Psilopogon viridis', 'Psilopogon zeylanicus', 'Psittacula columboides', 'Psittacula cyanocephala', 'Psittacula eupatria', 'Psittacula krameri', 'Ptyonoprogne concolor', 'Pycnonotus cafer', 'Pycnonotus jocosus', 'Pycnonotus leucotis', 'Pycnonotus luteolus', 'Rallina eurizonoides', 'Rhipidura albogularis', 'Rhipidura aureola', 'Rostratula benghalensis', 'Saxicola caprata', 'Schoenicola platyurus', 'Schoenicola striatus', 'Sonus naturalis', 'Spilopelia chinensis', 'Spilopelia senegalensis', 'Spilornis cheela', 'Sterna aurantia', 'Sternula saundersi', 'Strix leptogrammica', 'Strix ocellata', 'Surniculus dicruroides', 'Tachybaptus ruficollis', 'Tadorna ferruginea', 'Tarbinskiellus portentosus', 'Tephrodornis pondicerianus', 'Terpsiphone paradisi', 'Treron affinis', 'Treron phoenicopterus', 'Tringa glareola', 'Tringa totanus', 'Turdus simillimus', 'Tyto alba', 'Tyto javanica', 'Vanellus indicus', 'Zapornia fusca', 'Zosterops palpebrosus']\n","Total images: 8049 | Train: 6841 | Val: 1208\n","Training on ALL 204 bird species dynamically!\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 1/30: 100%|██████████| 214/214 [02:08<00:00, 1.67it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 1 - Loss: 2.0395 - Val Acc: 20.45%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 2/30: 100%|██████████| 214/214 [01:06<00:00, 3.22it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 2 - Loss: 0.5967 - Val Acc: 21.19%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 3/30: 100%|██████████| 214/214 [01:06<00:00, 3.20it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 3 - Loss: 0.3628 - Val Acc: 46.11%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 4/30: 100%|██████████| 214/214 [01:03<00:00, 3.36it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 4 - Loss: 0.2600 - Val Acc: 56.54%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 5/30: 100%|██████████| 214/214 [01:03<00:00, 3.36it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 5 - Loss: 0.2064 - Val Acc: 47.43%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 6/30: 100%|██████████| 214/214 [01:04<00:00, 3.31it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 6 - Loss: 0.1728 - Val Acc: 56.54%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 7/30: 100%|██████████| 214/214 [01:03<00:00, 3.35it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 7 - Loss: 0.1225 - Val Acc: 48.43%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 8/30: 100%|██████████| 214/214 [01:03<00:00, 3.35it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 8 - Loss: 0.1107 - Val Acc: 54.64%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 9/30: 100%|██████████| 214/214 [01:04<00:00, 3.34it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 9 - Loss: 0.0765 - Val Acc: 67.14%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 10/30: 100%|██████████| 214/214 [01:04<00:00, 3.34it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 10 - Loss: 0.0543 - Val Acc: 59.60%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 11/30: 100%|██████████| 214/214 [01:04<00:00, 3.32it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 11 - Loss: 0.0558 - Val Acc: 63.33%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 12/30: 100%|██████████| 214/214 [01:03<00:00, 3.35it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 12 - Loss: 0.0431 - Val Acc: 61.09%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 13/30: 100%|██████████| 214/214 [01:02<00:00, 3.42it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 13 - Loss: 0.0281 - Val Acc: 65.07%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 14/30: 100%|██████████| 214/214 [01:03<00:00, 3.39it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 14 - Loss: 0.0245 - Val Acc: 63.66%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 15/30: 100%|██████████| 214/214 [01:02<00:00, 3.42it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 15 - Loss: 0.0223 - Val Acc: 63.66%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 16/30: 100%|██████████| 214/214 [01:02<00:00, 3.44it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 16 - Loss: 0.0170 - Val Acc: 67.96%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 17/30: 100%|██████████| 214/214 [01:02<00:00, 3.43it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 17 - Loss: 0.0107 - Val Acc: 66.47%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 18/30: 100%|██████████| 214/214 [01:02<00:00, 3.42it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 18 - Loss: 0.0102 - Val Acc: 66.06%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 19/30: 100%|██████████| 214/214 [01:02<00:00, 3.44it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 19 - Loss: 0.0140 - Val Acc: 66.47%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 20/30: 100%|██████████| 214/214 [01:02<00:00, 3.44it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 20 - Loss: 0.0125 - Val Acc: 66.56%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 21/30: 100%|██████████| 214/214 [01:02<00:00, 3.43it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 21 - Loss: 0.0096 - Val Acc: 66.31%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 22/30: 100%|██████████| 214/214 [01:03<00:00, 3.38it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 22 - Loss: 0.0141 - Val Acc: 66.89%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 23/30: 100%|██████████| 214/214 [01:03<00:00, 3.39it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 23 - Loss: 0.0103 - Val Acc: 67.47%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 24/30: 100%|██████████| 214/214 [01:03<00:00, 3.36it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 24 - Loss: 0.0124 - Val Acc: 67.30%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 25/30: 100%|██████████| 214/214 [01:04<00:00, 3.34it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 25 - Loss: 0.0124 - Val Acc: 66.14%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 26/30: 100%|██████████| 214/214 [01:04<00:00, 3.30it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 26 - Loss: 0.0124 - Val Acc: 65.48%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 27/30: 100%|██████████| 214/214 [01:03<00:00, 3.37it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 27 - Loss: 0.0163 - Val Acc: 65.81%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 28/30: 100%|██████████| 214/214 [01:03<00:00, 3.40it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 28 - Loss: 0.0252 - Val Acc: 55.71%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 29/30: 100%|██████████| 214/214 [01:02<00:00, 3.41it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 29 - Loss: 0.0749 - Val Acc: 56.79%\n"]},{"output_type":"stream","name":"stderr","text":["Epoch 30/30: 100%|██████████| 214/214 [01:02<00:00, 3.40it/s]\n"]},{"output_type":"stream","name":"stdout","text":["\n","Epoch 30 - Loss: 0.0777 - Val Acc: 59.85%\n","\n","Training complete on ALL bird species! Best val acc: 67.96%\n","Model + label map saved. For inference, load label_map to get species names from predictions.\n"]}]},{"cell_type":"code","source":[],"metadata":{"id":"ZwlEp4LsMzVm"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":[],"metadata":{"id":"jfPzkxz9Xeub"},"execution_count":null,"outputs":[]}]}