{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.11","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":91844,"databundleVersionId":11361821,"isSourceIdPinned":false,"sourceType":"competition"}],"dockerImageVersionId":31040,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#  BirdCLEF Audio clip wav to npy","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport os\nimport cv2\nfrom datetime import datetime\nimport librosa\nimport soundfile as sf","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-20T15:52:19.857996Z","iopub.execute_input":"2025-05-20T15:52:19.858476Z","iopub.status.idle":"2025-05-20T15:52:19.864308Z","shell.execute_reply.started":"2025-05-20T15:52:19.858448Z","shell.execute_reply":"2025-05-20T15:52:19.862992Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!rm -rf output","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-20T16:03:01.577068Z","iopub.execute_input":"2025-05-20T16:03:01.578646Z","iopub.status.idle":"2025-05-20T16:03:01.838549Z","shell.execute_reply.started":"2025-05-20T16:03:01.578608Z","shell.execute_reply":"2025-05-20T16:03:01.837159Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"data0=pd.read_csv('/kaggle/input/birdclef-2025/train.csv')\ndata1=data0[['common_name','filename']]\nclass_names=data1['common_name'].unique().tolist()[0:5]\nprint(class_names)\ndata=data1[data1['common_name'].isin(class_names)]\ndisplay(data)\nN=list(range(len(class_names)))\nnormal_mapping=dict(zip(class_names,N)) \nreverse_mapping=dict(zip(N,class_names))       \ndata['label']=data['common_name'].map(normal_mapping)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-20T15:52:20.012627Z","iopub.execute_input":"2025-05-20T15:52:20.012994Z","iopub.status.idle":"2025-05-20T15:52:20.216126Z","shell.execute_reply.started":"2025-05-20T15:52:20.012960Z","shell.execute_reply":"2025-05-20T15:52:20.214920Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def create_path_label_list(df):\n    path_label_list = []\n    for _, row in df.iterrows():\n        path = row['filename']\n        label = row['label']\n        path_label_list.append((path, label))\n    return path_label_list\n\npath_label_list = create_path_label_list(data)\nprint(path_label_list)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-20T15:52:20.596148Z","iopub.execute_input":"2025-05-20T15:52:20.596519Z","iopub.status.idle":"2025-05-20T15:52:20.606302Z","shell.execute_reply.started":"2025-05-20T15:52:20.596486Z","shell.execute_reply":"2025-05-20T15:52:20.605059Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"paths=data['filename'].tolist()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-20T15:52:20.607568Z","iopub.execute_input":"2025-05-20T15:52:20.607914Z","iopub.status.idle":"2025-05-20T15:52:20.634469Z","shell.execute_reply.started":"2025-05-20T15:52:20.607890Z","shell.execute_reply":"2025-05-20T15:52:20.633019Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"N=list(range(len(class_names)))\nnormal_mapping=dict(zip(class_names,N)) \nreverse_mapping=dict(zip(N,class_names))       \ndata['common_name']=data['common_name'].map(normal_mapping)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-20T15:52:20.635671Z","iopub.execute_input":"2025-05-20T15:52:20.635964Z","iopub.status.idle":"2025-05-20T15:52:20.658271Z","shell.execute_reply.started":"2025-05-20T15:52:20.635939Z","shell.execute_reply":"2025-05-20T15:52:20.657068Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"dir0='/kaggle/input/birdclef-2025/train_audio'","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-20T15:52:20.659389Z","iopub.execute_input":"2025-05-20T15:52:20.659729Z","iopub.status.idle":"2025-05-20T15:52:20.676171Z","shell.execute_reply.started":"2025-05-20T15:52:20.659705Z","shell.execute_reply":"2025-05-20T15:52:20.674611Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"audio_paths=[]\nlabels=[]\nfor path,label in path_label_list:\n    labels+=[label]\n    audio_paths+=[os.path.join(dir0,path)]\nprint(audio_paths)\nprint(labels)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-20T15:52:20.677276Z","iopub.execute_input":"2025-05-20T15:52:20.677654Z","iopub.status.idle":"2025-05-20T15:52:20.689363Z","shell.execute_reply.started":"2025-05-20T15:52:20.677623Z","shell.execute_reply":"2025-05-20T15:52:20.688091Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Configuration\noutput_root = 'output'\ninterval_sec = 1\nsample_rate = 22050  # Common sampling rate\n\n# Create output directory\nos.makedirs(output_root, exist_ok=True)\n\nfor i,audio_path in enumerate(audio_paths):\n    label=str(labels[i])\n    \n    # Load audio file\n    y, sr = librosa.load(audio_path, sr=sample_rate)\n    total_samples = len(y)\n    samples_per_interval = int(sample_rate * interval_sec)\n    num_intervals = int(np.ceil(total_samples / samples_per_interval))\n\n    print(f\"\\nProcessing {audio_path}\")\n    print(f\"  Sample Rate: {sr}, Total Samples: {total_samples}, Samples per Interval: {samples_per_interval}\")\n\n    # Create subdirectory for each audio file\n    audio_name = os.path.splitext(os.path.basename(audio_path))[0]\n    output_dir = os.path.join(output_root, label)\n    os.makedirs(output_dir, exist_ok=True)\n\n    for clip_idx in range(num_intervals):\n        start_sample = clip_idx * samples_per_interval\n        end_sample = start_sample + samples_per_interval\n        \n        # Zero-padding if the last clip is shorter\n        if end_sample > total_samples:\n            clip = np.zeros(samples_per_interval)\n            valid_length = total_samples - start_sample\n            clip[:valid_length] = y[start_sample:]\n        else:\n            clip = y[start_sample:end_sample]\n\n        # Extract features if needed (e.g., MFCC)\n        # mfcc = librosa.feature.mfcc(y=clip, sr=sr, n_mfcc=13)\n        \n        # Save raw audio waveform\n        npy_filename = os.path.join(output_dir, f'{audio_name}_clip_{clip_idx:05d}.npy')\n        np.save(npy_filename, clip)\n        print(clip.shape)\n        \n    print(f\"  -> Saved {num_intervals} clips to {output_dir}\")\n\nprint(\"\\nAll audio files have been processed.\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-20T15:52:20.690483Z","iopub.execute_input":"2025-05-20T15:52:20.690740Z","iopub.status.idle":"2025-05-20T15:52:39.258434Z","shell.execute_reply.started":"2025-05-20T15:52:20.690721Z","shell.execute_reply":"2025-05-20T15:52:39.257527Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}