{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import librosa\n",
    "import IPython.display as ipd\n",
    "import matplotlib.pyplot as plt\n",
    "import torch\n",
    "import torchaudio"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Loading audio files with Librosa"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "Cɔt_ame_1 = \"../../sound/1_amr-eng_1.wav\"\n",
    "Cɔt_ame_2 = \"../../sound/1_amr-eng_2.wav\"\n",
    "Cɔt_ame_3 = \"../../sound/1_amr-eng_3.wav\"\n",
    "Cɔt_ame_4 = \"../../sound/1_amr-eng_4.wav\"\n",
    "Cɔt_ame_5 = \"../../sound/1_amr-eng_5.wav\"\n",
    "Cɔt_ame_6 = \"../../sound/1_amr-eng_6.wav\"\n",
    "Cɔt_ame_7 = \"../../sound/1_amr-eng_7.wav\"\n",
    "\n",
    "Cɔt_asm_1 = \"../../sound/1_asm-eng_1.wav\"\n",
    "Cɔt_asm_2 = \"../../sound/1_asm-eng_2.wav\"\n",
    "Cɔt_asm_3 = \"../../sound/1_asm-eng_3.wav\"\n",
    "Cɔt_asm_4 = \"../../sound/1_asm-eng_4.wav\"\n",
    "Cɔt_asm_5 = \"../../sound/1_asm-eng_5.wav\"\n",
    "Cɔt_asm_6 = \"../../sound/1_asm-eng_6.wav\"\n",
    "Cɔt_asm_7 = \"../../sound/1_asm-eng_7.wav\"\n",
    "\n",
    "Cruː_ame_1 = \"../../sound/2_amr-eng_1.wav\"\n",
    "Cruː_ame_2 = \"../../sound/2_amr-eng_2.wav\"\n",
    "Cruː_ame_3 = \"../../sound/2_amr-eng_3.wav\"\n",
    "Cruː_ame_4 = \"../../sound/2_amr-eng_4.wav\"\n",
    "Cruː_ame_5 = \"../../sound/2_amr-eng_5.wav\"\n",
    "Cruː_ame_6 = \"../../sound/2_amr-eng_6.wav\"\n",
    "Cruː_ame_7 = \"../../sound/2_amr-eng_7.wav\"\n",
    "\n",
    "Cruː_asm_1 = \"../../sound/2_asm-eng_1.wav\"\n",
    "Cruː_asm_2 = \"../../sound/2_asm-eng_2.wav\"\n",
    "Cruː_asm_3 = \"../../sound/2_asm-eng_3.wav\"\n",
    "Cruː_asm_4 = \"../../sound/2_asm-eng_4.wav\"\n",
    "Cruː_asm_5 = \"../../sound/2_asm-eng_5.wav\"\n",
    "Cruː_asm_6 = \"../../sound/2_asm-eng_6.wav\"\n",
    "Cruː_asm_7 = \"../../sound/2_asm-eng_7.wav\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "ipd.Audio(filename=Cɔt_ame_1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Extracting Mel Spectrogram"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "scale, sr = librosa.load(Cɔt_ame_7, sr=None)\n",
    "\n",
    "\n",
    "mel_spectrogram = torch.nn.Sequential(\n",
    "    torchaudio.transforms.MelSpectrogram(\n",
    "        sample_rate=16000,\n",
    "        n_fft=1024,\n",
    "        win_length=320, # 320 # 128\n",
    "        hop_length=44, # 44 # 32\n",
    "        window_fn=torch.hamming_window,\n",
    "        n_mels=128\n",
    "    ),\n",
    "    torchaudio.transforms.AmplitudeToDB()\n",
    ")\n",
    "\n",
    "audio_tensor = torch.from_numpy(scale).float()\n",
    "output = mel_spectrogram(audio_tensor).numpy()\n",
    "\n",
    "print(\"duration:\", librosa.get_duration(y=scale, sr=sr))\n",
    "print(\"shape:\", output.shape)\n",
    "\n",
    "plt.figure(figsize=(10, 4))\n",
    "librosa.display.specshow(output, \n",
    "                         x_axis=\"time\",\n",
    "                         y_axis=\"mel\", \n",
    "                         sr=16000,\n",
    "                         cmap=\"magma\",\n",
    "                         vmin=output.min(),\n",
    "                         vmax=output.max(),\n",
    "                         hop_length=44\n",
    "                         )\n",
    "plt.xlabel(\"Time (s)\")\n",
    "plt.ylabel(\"mels\")\n",
    "plt.colorbar(format=\"%+2.f dB\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Mel filter banks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "filter_banks = librosa.filters.mel(n_fft=1024, sr=16000, n_mels=128)\n",
    "\n",
    "filter_banks.shape\n",
    "\n",
    "plt.figure(figsize=(25, 10))\n",
    "librosa.display.specshow(filter_banks, \n",
    "                         sr=sr, \n",
    "                         x_axis=\"linear\")\n",
    "plt.colorbar(format=\"%+2.f\")\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv (3.14.4.final.0)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.14.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
