{"cells": [{"metadata": {}, "cell_type": "markdown", "source": ["### Find (almost) empty samples\n", "\n", "\n", "as e.g. discussed in https://www.kaggle.com/c/tensorflow-speech-recognition-challenge/discussion/44017"]}, {"metadata": {"collapsed": true}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["import os\n", "import numpy as np\n", "from scipy.io import wavfile\n", "\n", "from tqdm import tqdm\n", "\n", "import pandas as pd\n", "\n", "import IPython.display as ipd\n", "\n", "import re\n", "\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt"]}, {"metadata": {}, "cell_type": "markdown", "source": ["directories with input data"]}, {"metadata": {"collapsed": true}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["audio_paths = [\n", "    \"../input/train/audio\",\n", " #  \"../input/test/audio\",\n", "]"]}, {"metadata": {}, "cell_type": "markdown", "source": ["find all files to process"]}, {"metadata": {"collapsed": true}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["wav_fnames = []\n", "\n", "for audio_path in audio_paths:\n", "    for dir_name, dirs, files in os.walk(audio_path):\n", "                \n", "        for fname in files:\n", "            \n", "            if fname.endswith(\".wav\"):\n", "                wav_fnames.append(os.path.join(dir_name,fname))"]}, {"metadata": {}, "cell_type": "markdown", "source": ["loop over the sound files"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["max_diffs = []\n", "speakers = []\n", "\n", "with tqdm(total = len(wav_fnames), mininterval = 1, unit = \"files\") as progbar:\n", "\n", "    for fname in wav_fnames:\n", "        # read the .wav file\n", "        sample_rate, samples = wavfile.read(fname)\n", "        \n", "        # convert to float in order to avoid underflow\n", "        # when subtracting...\n", "        samples = samples.astype('float32')\n", "        \n", "        max_diffs.append(max(samples) - min(samples))\n", "        \n", "        # extract speaker name\n", "        mo = re.match(\"([0-9a-f]{8})_.*\\.wav$\", os.path.basename(fname))\n", "        if mo:\n", "            speakers.append(mo.group(1))\n", "        else:\n", "            speakers.append(None)\n", "        \n", "        progbar.update()\n", "\n", "# create a Pandas dataframe\n", "max_diffs = pd.DataFrame(dict(max_diff = max_diffs, \n", "                              fname = wav_fnames[:len(max_diffs)],\n", "                              speaker = speakers))"]}, {"metadata": {}, "cell_type": "markdown", "source": ["sort data such that files the smallest differences are first"]}, {"metadata": {"collapsed": true}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["max_diffs.sort_values('max_diff', ascending=True, inplace=True)\n", "max_diffs.reset_index(inplace = True, drop = True);"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["max_diffs[0:50]"]}, {"metadata": {}, "cell_type": "markdown", "source": ["write the first few files out "]}, {"metadata": {"collapsed": true}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["max_diffs[:462].to_csv(\"least-amplitudes.csv\")"]}, {"metadata": {}, "cell_type": "markdown", "source": ["overall distribution of maximum differences"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["plt.figure(figsize = (12,10))\n", "\n", "plt.subplot(1,2,1)\n", "max_diffs['max_diff'][max_diffs['max_diff'] < 30].hist(bins = 100)\n", "plt.xlabel('max difference')\n", "\n", "plt.subplot(1,2,2)\n", "max_diffs['max_diff'].hist(bins = 100)\n", "plt.xlabel('max difference');"]}, {"metadata": {}, "cell_type": "markdown", "source": ["### listen to some of the first 500 samples "]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# noisy but understandable\n", "# maxdiff 363, index 499\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/up/72198b96_nohash_0.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "cell_type": "markdown", "source": ["#### speaker 712e4d58 has some peculiar noise \n", "but only in some cases \n", "\n", "Sounds like the encoding of the samples is broken..."]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# very noisy\n", "# maxdiff 10, index 24\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/go/712e4d58_nohash_4.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# very noisy (same speaker as before)\n", "# maxdiff 11, index 29\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/left/712e4d58_nohash_2.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# very noisy (same speaker as before)\n", "# maxdiff 9, index 8\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/eight/712e4d58_nohash_1.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# same speaker as before but clearly understandable\n", "# maxdiff 4969, index 5791\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/zero/712e4d58_nohash_4.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# different speaker, noisy\n", "# maxdiff 9, index 7\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/stop/7fd25f7c_nohash_1.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# noisy\n", "# maxdiff 11, index 29\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/left/712e4d58_nohash_2.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# noisy\n", "# maxdiff 16, index 51\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/right/e96a5020_nohash_3.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# noisy\n", "# maxdiff 25, index 100\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/off/e96a5020_nohash_1.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# noisy\n", "# maxdiff 29, index 113\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/up/ad63d93c_nohash_0.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# noisy\n", "# maxdiff 73, index 151\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/two/ced835d3_nohash_2.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# noisy\n", "# maxdiff 93, index 199\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/stop/ced835d3_nohash_0.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# noisy\n", "# maxdiff 106, index 251\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/five/ced835d3_nohash_4.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# noisy\n", "# maxdiff 137, index 300\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/off/f8f60f59_nohash_1.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# unrecognizeable\n", "# maxdiff 188, index 349\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/dog/fd395b74_nohash_0.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# unrecognizeable\n", "# maxdiff 240, index 400\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/nine/fd395b74_nohash_1.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# unrecognizeable\n", "# maxdiff 294, index 447\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/eight/742d6431_nohash_5.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# barely understandable\n", "# maxdiff 309, index 456\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/three/fd395b74_nohash_0.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# clear\n", "# maxdiff 314, index 462\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/go/ec5ab5d5_nohash_0.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# clear\n", "# maxdiff 333, index 476\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/on/9799379a_nohash_0.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["# perfectly understandable\n", "# maxdiff 420, index 549\n", "sample_rate, samples = wavfile.read(\"../input/train/audio/bed/26e9ae6b_nohash_1.wav\")\n", "ipd.Audio(samples, rate=sample_rate)"]}, {"metadata": {}, "cell_type": "markdown", "source": ["speaker 712e4d58 has some noisy files not but all are noisy"]}, {"metadata": {"scrolled": true}, "outputs": [], "execution_count": null, "cell_type": "code", "source": ["max_diffs[max_diffs.speaker == \"712e4d58\"]"]}], "metadata": {"kernelspec": {"name": "python3", "language": "python", "display_name": "Python 3"}, "language_info": {"nbconvert_exporter": "python", "name": "python", "mimetype": "text/x-python", "codemirror_mode": {"name": "ipython", "version": 3}, "pygments_lexer": "ipython3", "file_extension": ".py", "version": "3.5.4"}}, "nbformat_minor": 1, "nbformat": 4}