{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Audio file","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"!pip install nlpaug","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport librosa\nimport librosa.display as librosa_display\nimport IPython.display as ipd\nimport nlpaug\nimport nlpaug.augmenter.audio as naa\nimport matplotlib.pyplot as plt","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"perfal = '/kaggle/input/birdsong-recognition/train_audio/perfal/XC463087.mp3'\nlotduc = '/kaggle/input/birdsong-recognition/train_audio/lotduc/XC121426.mp3' \nrewbla = '/kaggle/input/birdsong-recognition/train_audio/rewbla/XC135672.mp3' \nwarvir = '/kaggle/input/birdsong-recognition/train_audio/warvir/XC192521.mp3' \nlecthr = '/kaggle/input/birdsong-recognition/train_audio/lecthr/XC141435.mp3' ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import IPython.display as ipd\ndata, sr = librosa.load(perfal)\nipd.Audio(data, rate=sr)\nlibrosa.display.waveplot(data.astype('float'), sr=sr,x_axis=None)\nplt.title('original')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Change pitch and speed","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"def pitch_speed(filename):\n    data, sr = librosa.load(filename)\n    pitch_speed = data.copy()\n    length_change = np.random.uniform(low=0.8, high = 1)\n    speed_fac = 1.0  / length_change\n    print(\"resample length_change = \",length_change)\n    tmp = np.interp(np.arange(0,len(pitch_speed),speed_fac),np.arange(0,len(pitch_speed)),pitch_speed)\n    minlen = min(pitch_speed.shape[0], tmp.shape[0])\n    pitch_speed *= 0\n    pitch_speed[0:minlen] = tmp[0:minlen]\n    librosa_display.waveplot(data, sr=sr, alpha=0.5)\n    librosa_display.waveplot(pitch_speed, sr=sr, color='r', alpha=0.25)\n    plt.title('augmented pitch and speed')\n    return ipd.Audio(data, rate=sr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pitch_speed(perfal)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pitch_speed(lotduc)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Change pitch only","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"def pitch(filename):\n    data, sr = librosa.load(filename)\n    y_pitch = data.copy()\n    bins_per_octave = 12\n    pitch_pm = 2\n    pitch_change =  pitch_pm * 2*(np.random.uniform())   \n    print(\"pitch_change = \",pitch_change)\n    y_pitch = librosa.effects.pitch_shift(y_pitch.astype('float64'), \n                                          sr, n_steps=pitch_change, \n                                          bins_per_octave=bins_per_octave)\n    librosa_display.waveplot(data, sr=sr, alpha=0.5)\n    librosa_display.waveplot(y_pitch, sr=sr, color='r', alpha=0.25)\n    plt.title('augmented pitch only')\n    plt.tight_layout()\n    plt.show()\n    return ipd.Audio(data, rate=sr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pitch(perfal)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pitch(lotduc)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Change speed only","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"def speed(filename):\n    data, sr = librosa.load(filename)\n#     speed_change = np.random.uniform(low=0.9,high=1.1)\n#     print(\"speed_change = \",speed_change)\n#     tmp = librosa.effects.time_stretch(data.astype('float64'), speed_change)\n#     minlen = min(data.shape[0], tmp.shape[0])\n#     data *= 0 \n#     data[0:minlen] = tmp[0:minlen]\n#     librosa.display.waveplot(data.astype('float'), sr=sr,x_axis=None)\n    aug = naa.SpeedAug()\n    augmented_data = aug.augment(data)\n\n    librosa_display.waveplot(data, sr=sr, alpha=0.5)\n    librosa_display.waveplot(augmented_data, sr=sr, color='r', alpha=0.25)\n    plt.title('augmented speed only')\n    plt.tight_layout()\n    plt.show()\n    return ipd.Audio(augmented_data, rate=sr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"speed(perfal)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"speed(lotduc)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# value augmentation","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"def augmentation(filename):\n    data, sr = librosa.load(filename)\n    y_aug = data.copy()\n    dyn_change = np.random.uniform(low=1.5,high=3)\n    print(\"dyn_change = \",dyn_change)\n    y_aug = y_aug * dyn_change\n    print(y_aug[:50])\n    print(data[:50])\n    librosa_display.waveplot(data, sr=sr, alpha=0.5)\n    librosa_display.waveplot(y_aug, sr=sr, color='r', alpha=0.25)\n    plt.title('amplify value')\n    return ipd.Audio(y_aug, rate=sr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"augmentation(perfal)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"augmentation(lotduc)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def add_noise(filename):\n    data, sr = librosa.load(filename)\n    y_noise = data.copy()\n    # you can take any distribution from https://docs.scipy.org/doc/numpy-1.13.0/reference/routines.random.html\n    noise_amp = 0.005*np.random.uniform()*np.amax(y_noise)\n    y_noise = y_noise.astype('float64') + noise_amp * np.random.normal(size=y_noise.shape[0])\n    librosa_display.waveplot(data, sr=sr, alpha=0.5)\n    librosa_display.waveplot(y_noise, sr=sr, color='r', alpha=0.25)\n    return ipd.Audio(y_noise, rate=sr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"add_noise(perfal)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"add_noise(lotduc)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# random shifting","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"def random_shift(filename):\n    data, sr = librosa.load(filename)\n    y_shift = data.copy()\n    timeshift_fac = 0.2 *2*(np.random.uniform()-0.5)  # up to 20% of length\n    print(\"timeshift_fac = \",timeshift_fac)\n    start = int(y_shift.shape[0] * timeshift_fac)\n    print(start)\n    if (start > 0):\n        y_shift = np.pad(y_shift,(start,0),mode='constant')[0:y_shift.shape[0]]\n    else:\n        y_shift = np.pad(y_shift,(0,-start),mode='constant')[0:y_shift.shape[0]]\n    librosa_display.waveplot(data, sr=sr, alpha=0.5)\n    librosa_display.waveplot(y_shift, sr=sr, color='r', alpha=0.25)\n    return ipd.Audio(y_shift, rate=sr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"random_shift(perfal)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"random_shift(lotduc)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Applying hpss","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"def hpss(filename):\n    data, sr = librosa.load(filename)\n    y_hpss = librosa.effects.hpss(data.astype('float64'))\n    print(y_hpss[1][:10])\n    print(data[:10])\n    librosa_display.waveplot(data, sr=sr, alpha=0.5)\n    librosa_display.waveplot(y_hpss[1], sr=sr, color='r', alpha=0.25)\n    plt.title('apply hpss')\n    return ipd.Audio(y_hpss[1], rate=sr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"hpss(perfal)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"hpss(lotduc)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Streching","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"def streching(filename):\n    data, sr = librosa.load(filename)\n    input_length = len(data)\n    streching = data.copy()\n    streching = librosa.effects.time_stretch(streching.astype('float'), 1.1)\n    if len(streching) > input_length:\n        streching = streching[:input_length]\n    else:\n        streching = np.pad(streching, (0, max(0, input_length - len(streching))), \"constant\")\n    librosa_display.waveplot(data, sr=sr, alpha=0.5)\n    librosa_display.waveplot(streching, sr=sr, color='r', alpha=0.25)\n    \n    plt.title('stretching')\n    return ipd.Audio(streching, rate=sr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"streching(perfal)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"streching(lotduc)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# cropping","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"def crop(filename):\n    data, sr = librosa.load(filename)\n    aug = naa.CropAug(sampling_rate=sr)\n    augmented_data = aug.augment(data)\n\n    librosa_display.waveplot(augmented_data, sr=sr, alpha=0.5)\n    librosa_display.waveplot(data, sr=sr, color='r', alpha=0.25)\n\n    plt.tight_layout()\n    plt.show()\n\n    return ipd.Audio(augmented_data, rate=sr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"crop(perfal)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"crop(lotduc)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Loudness Augmentation","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"def loudnessaug(filename):\n    data, sr = librosa.load(filename)\n    aug = naa.LoudnessAug(loudness_factor=(2, 5))\n    augmented_data = aug.augment(data)\n\n    librosa_display.waveplot(augmented_data, sr=sr, alpha=0.25)\n    librosa_display.waveplot(data, sr=sr, color='r', alpha=0.5)\n\n    plt.tight_layout()\n    plt.show()\n\n    return ipd.Audio(augmented_data,rate=sr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"loudnessaug(perfal)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"loudnessaug(lotduc)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Mask Augmentation","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"def mask(filename):\n    data, sr = librosa.load(filename)\n    aug = naa.MaskAug(sampling_rate=sr, mask_with_noise=False)\n    augmented_data = aug.augment(data)\n\n    librosa_display.waveplot(data, sr=sr, alpha=0.5)\n    librosa_display.waveplot(augmented_data, sr=sr, color='r', alpha=0.25)\n\n    plt.tight_layout()\n    plt.show()\n    \n    return ipd.Audio(augmented_data, rate=sr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"mask(perfal)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"mask(lotduc)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Shift Augmentation","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"def shift(filename):\n    data, sr = librosa.load(filename)\n    aug = naa.ShiftAug(sampling_rate=sr)\n    augmented_data = aug.augment(data)\n\n    librosa_display.waveplot(data, sr=sr, alpha=0.5)\n    librosa_display.waveplot(augmented_data, sr=sr, color='r', alpha=0.25)\n\n    plt.tight_layout()\n    plt.show()\n    \n    return ipd.Audio(augmented_data, rate=sr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"shift(perfal)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"shift(lotduc)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","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}