{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nfrom pathlib import Path\nimport matplotlib.pyplot as plt\nfrom tqdm import tqdm_notebook\nimport IPython\nimport IPython.display\nimport PIL\nimport time\nimport sklearn.metrics\nimport pickle\nimport random\nimport cv2\nimport librosa","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"!cp ../input/freesound-audio-tagging-2019/train_noisy/00097e21.wav 00097e21.wav \n!cp ../input/freesound-audio-tagging-2019/train_noisy/000b6cfb.wav 000b6cfb.wav\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# load csv\ndf_train = pd.read_csv(\"../input/freesound-audio-tagging-2019/train_curated.csv\")\ndf_test = pd.read_csv(\"../input/freesound-audio-tagging-2019/sample_submission.csv\")\ndf_noise = pd.read_csv(\"../input/freesound-audio-tagging-2019/train_noisy.csv\")\nlabels = df_test.columns[1:].tolist()\n\nfor label in labels:\n    df_train[label] = df_train['labels'].apply(lambda x: label in x)\n    df_noise[label] = df_noise['labels'].apply(lambda x: label in x)\n    \nprint(df_train.shape, df_noise.shape, df_test.shape)\ndf_train.head(10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_class = pd.read_csv(\"../input/freesound-additional/freesound_class.csv\")\ndf_class.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import librosa\nimport librosa.display\n\nSR = 44100\nMELS = 128\nHOP = 347\nN_FFT = 128*20\nFMIN = 20\nFMAX = 44100//2\ndef read_audio(pathname):\n    y, sr = librosa.load(pathname, sr=SR)\n    return y\n\ndef audio_to_melspectrogram(audio):\n    spectrogram = librosa.feature.melspectrogram(audio, \n                                                 sr=SR,\n                                                 n_mels=MELS,\n                                                 hop_length=HOP,\n                                                 n_fft=N_FFT,\n                                                 fmin=FMIN,\n                                                 fmax=FMAX)\n    spectrogram = librosa.power_to_db(spectrogram)\n    spectrogram = spectrogram.astype(np.float32)\n    return spectrogram\n\ndef show_melspectrogram(mels, title='Log-frequency power spectrogram'):\n    librosa.display.specshow(mels, x_axis='time', y_axis='mel', \n                             sr=SR, hop_length=HOP,\n                            fmin=FMIN, fmax=FMAX)\n    plt.colorbar(format='%+2.0f dB')\n    plt.title(title)\n    plt.show()\n    \n\ndef show_wavmel(wav, mels):\n    plt.figure(figsize=(12,3))\n    plt.subplot(1,2,1)\n    plt.plot(np.arange(len(wav))/SR, wav)\n    plt.ylim([-1,1])\n    plt.title('Waveform')\n    plt.xlabel('Time')\n    plt.ylabel('Amplitude')\n    plt.subplot(1,2,2)\n    librosa.display.specshow(mels, x_axis='time', y_axis='mel', \n                             sr=SR, hop_length=HOP,\n                            fmin=FMIN, fmax=FMAX)\n    plt.colorbar(format='%+2.0f dB')\n    plt.title('Log mel spectrogram')\n    plt.show()\n\ndef read_as_melspectrogram(pathname, debug_display=False):\n    x = read_audio(pathname)\n    mels = audio_to_melspectrogram(x)\n    if debug_display:\n        IPython.display.display(IPython.display.Audio(x, rate=SR))\n        show_melspectrogram(mels)\n    return mels","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# train curatedの例\nidx = np.random.randint(0,len(df_train))\nidx = 0\npath_idx = \"../input/freesound-audio-tagging-2019/train_curated/{}\".format(df_train['fname'][idx])\nwav_idx = read_audio(path_idx)\nclass_en = \"\"\nclass_ja = \"\"\nfor i in range(80):\n    if df_train[labels[i]][idx]==1:\n        class_en += \"{} \".format(df_class['en'][i])\n        class_ja += \"{} \".format(df_class['ja'][i])\nprint(\"file: {}, class: {}/{}\".format(df_train['fname'][idx], class_en, class_ja))\nmel_idx = read_as_melspectrogram(path_idx)\nshow_wavmel(wav_idx[:len(wav_idx2)]*10, mel_idx)\nIPython.display.Audio(data=wav_idx*5, rate=SR)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"idx2 = df_train[df_train['fname']=='023935e1.wav'].index.values[0]\nprint(idx2)\npath_idx2 = \"../input/freesound-audio-tagging-2019/train_curated/{}\".format(df_train['fname'][idx2])\nwav_idx2 = read_audio(path_idx2)\nclass_en = \"\"\nclass_ja = \"\"\nfor i in range(80):\n    if df_train[labels[i]][idx2]==1:\n        class_en += \"{} \".format(df_class['en'][i])\n        class_ja += \"{} \".format(df_class['ja'][i])\nprint(\"file: {}, class: {}/{}\".format(df_train['fname'][idx], class_en, class_ja))\nmel_idx2 = read_as_melspectrogram(path_idx2)\nshow_wavmel(wav_idx2, mel_idx2)\nIPython.display.Audio(data=wav_idx2, rate=SR)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"mel_idx_tmp = mel_idx[:,:mel_idx2.shape[1]]\nmel_idx_tmp[0,0] = mel_idx2.max()\nwav_mix = wav_idx[:len(wav_idx2)]*0.6*10 + wav_idx2 * 0.4\nshow_wavmel(wav_mix, mel_idx_tmp)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"mel_idx_tmp = mel_idx2\nmel_idx_tmp[40:70] = \nshow_wavmel(wav_idx2, mel_idx_tmp)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"wav_mix = wav_idx[:len(wav_idx2)] * 0.6 + wav_idx2 * 0.4\nmel_mix = audio_to_melspectrogram(wav_mix)\nmel_mix[0,0] = mel_idx.min()\nshow_wavmel(wav_mix, mel_mix)\nIPython.display.Audio(data=wav_mix, rate=SR)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(mel_idx.shape, mel_idx2.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# train noisyの例\nidx = np.random.randint(0,len(df_noise))\npath_idx = \"../input/freesound-audio-tagging-2019/train_noisy/{}\".format(df_noise['fname'][idx])\nwav_idx = read_audio(path_idx)\nclass_en = \"\"\nclass_ja = \"\"\nfor i in range(80):\n    if df_noise[labels[i]][idx]==1:\n        class_en += \"{} \".format(df_class['en'][i])\n        class_ja += \"{} \".format(df_class['ja'][i])\nprint(df_noise['labels'][idx])\nprint(\"file: {}, class: {}/{}\".format(df_noise['fname'][idx], class_en, class_ja))\nmel_idx = read_as_melspectrogram(path_idx)\nshow_wavmel(wav_idx, mel_idx)\nIPython.display.Audio(data=wav_idx, rate=SR)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}