{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import librosa\nimport librosa.display\nimport pandas as pd\nimport numpy as np\nfrom scipy import stats\nimport scipy.signal\nimport IPython\nfrom IPython.display import Audio, IFrame, display\nimport numpy as np\nimport io\nimport librosa\nimport warnings\nwarnings.filterwarnings('ignore')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"data1, sr = librosa.load('../input/birdsong-recognition/train_audio/aldfly/XC2628.mp3', mono=True, offset=0)\ndata2, sr = librosa.load('../input/birdsong-recognition/train_audio/bkcchi/XC278350.mp3', mono=True, offset=0)\ndata3, sr = librosa.load('../input/birdsong-recognition/train_audio/rthhum/XC319183.mp3', mono=True, offset=0)\ndata4, sr = librosa.load('../input/birdsong-recognition/train_audio/tunswa/XC389638.mp3', mono=True, offset=0)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"display(Audio(data1, rate=sr))\ndisplay(Audio(data2, rate=sr))\ndisplay(Audio(data3, rate=sr))\ndisplay(Audio(data4, rate=sr))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def calculateThreshold(data,sr = 22050):\n    window = int(len(data)/sr)\n    dataSeries=pd.Series(data.tolist())\n    runningMin=dataSeries.rolling(window).min()\n    runningMax=dataSeries.rolling(window).max()\n    minMax=runningMax-runningMin\n    minMax=minMax.tolist()\n    minMax=[minMax for minMax in minMax if str(minMax) != 'nan']\n    threshold=np.quantile(minMax,0.25)\n    return(threshold)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def removeDataTwoBands(arr, threshold):\n    index = 0;\n    for i in range(len(arr)):\n        if arr[i]>threshold or arr[i]<-threshold:\n            continue\n        else:\n            arr[index] = arr[i]\n            index += 1\n    return arr[0:index]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def isolateNoise(data, threshold):\n    toList = data.tolist()\n    removeHighIntensity = removeDataTwoBands(toList, threshold)\n    return np.array(removeHighIntensity, dtype=float)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def getHighIntensityFrequencies(spectData):\n    frequencies = []\n    for i in range(186,spectData.shape[0]):\n        for j in range(spectData.shape[1]):\n            if spectData[i,j] > 0:\n                frequencies.append(i)\n    return(frequencies)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def getBandLimits(spectData):\n    highIntensityFreq = getHighIntensityFrequencies(spectData)\n    highIntensityHz=list(map(lambda x: x*11000/spectData.shape[0],highIntensityFreq))\n    center = float(stats.mode(highIntensityHz)[0])\n    sd = np.std(highIntensityHz)\n    lowcut = center - sd\n    highcut = center + sd\n    return(lowcut,highcut)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from scipy.signal import butter, lfilter\n\ndef bandpassFilter(data, lowcut, highcut, sr, order=5):\n    nyq = 0.5 * sr\n    low = lowcut / nyq\n    high = highcut / nyq\n    b, a = butter(order, [low, high], btype='band')\n    result = lfilter(b, a, data)\n    return result","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def removeDataOneBand(arr, threshold):\n    index = 0;\n    for i in range(len(arr)):\n        if arr[i]<threshold and arr[i]>-threshold:\n            continue\n        else:\n            arr[index] = arr[i]\n            index += 1\n    return arr[0:index]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def isolateBirdCall(data, threshold):\n    toList = data.tolist()\n    result = removeDataOneBand(toList, threshold)\n    return np.array(result, dtype=float)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def fragmentData(data):\n    if len(data)>sr:\n        threshold=calculateThreshold(data)\n        birdCall = isolateBirdCall(data, threshold)\n    else:\n        birdCall = data\n    return display(Audio(birdCall, rate=sr))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"fragmentData(data1)\nfragmentData(data2)\nfragmentData(data3)\nfragmentData(data4)","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}