{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"![librosa-logo](https://librosa.org/images/librosa_logo_text.png)  \n# Audio and music processing in Python  \n### Documentation -> [here](https://librosa.org/doc/latest/index.html)\n```\nlibrosa is a python package for music and audio analysis. It provides the building blocks necessary to create music information retrieval systems.\n\nFor a quick introduction to using librosa, please refer to the Tutorial. For a more advanced introduction which describes the package design principles, please refer to the librosa paper at SciPy 2015.\n```","metadata":{"execution":{"iopub.status.busy":"2021-08-13T04:54:03.603848Z","iopub.execute_input":"2021-08-13T04:54:03.604222Z","iopub.status.idle":"2021-08-13T04:54:03.607439Z","shell.execute_reply.started":"2021-08-13T04:54:03.604191Z","shell.execute_reply":"2021-08-13T04:54:03.606627Z"}}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport librosa\nimport librosa.display","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-08-15T08:16:13.141446Z","iopub.execute_input":"2021-08-15T08:16:13.141936Z","iopub.status.idle":"2021-08-15T08:16:14.372705Z","shell.execute_reply.started":"2021-08-15T08:16:13.141833Z","shell.execute_reply":"2021-08-15T08:16:14.371517Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def convert_image_id_2_path(image_id: str, is_train: bool = True) -> str:\n    folder = \"train\" if is_train else \"test\"\n    return \"../input/g2net-gravitational-wave-detection/{}/{}/{}/{}/{}.npy\".format(\n        folder, image_id[0], image_id[1], image_id[2], image_id \n    )","metadata":{"execution":{"iopub.status.busy":"2021-08-15T08:16:14.376119Z","iopub.execute_input":"2021-08-15T08:16:14.377107Z","iopub.status.idle":"2021-08-15T08:16:14.386722Z","shell.execute_reply.started":"2021-08-15T08:16:14.377042Z","shell.execute_reply":"2021-08-15T08:16:14.38572Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"colors = (\"red\", \"green\", \"blue\")\nsignal_names = (\"LIGO Hanford\", \"LIGO Livingston\", \"Virgo\")\n\ntrain_df = pd.read_csv(\"../input/g2net-gravitational-wave-detection/training_labels.csv\")\ntrain_df.head(2)","metadata":{"execution":{"iopub.status.busy":"2021-08-15T08:16:14.389133Z","iopub.execute_input":"2021-08-15T08:16:14.390087Z","iopub.status.idle":"2021-08-15T08:16:14.945132Z","shell.execute_reply.started":"2021-08-15T08:16:14.390016Z","shell.execute_reply":"2021-08-15T08:16:14.943852Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# positive sample\np = np.load(convert_image_id_2_path(train_df[\"id\"][0]))\n# negative sample\nn = np.load(convert_image_id_2_path(train_df[\"id\"][1]))\n\nsamples = (p, n)\ntargets = (1, 0)","metadata":{"execution":{"iopub.status.busy":"2021-08-15T08:16:14.946791Z","iopub.execute_input":"2021-08-15T08:16:14.947316Z","iopub.status.idle":"2021-08-15T08:16:14.96524Z","shell.execute_reply.started":"2021-08-15T08:16:14.947229Z","shell.execute_reply":"2021-08-15T08:16:14.962996Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# How to use librosa.display\n\nwaveshow(y[, sr, max_points, x_axis, …])  \n> Visualize a waveform in the time domain.  \n> [Reference](https://librosa.org/doc/latest/generated/librosa.display.waveshow.html)  \n\nspecshow(data[, x_coords, y_coords, x_axis, …])  \n> Display a spectrogram/chromagram.  \n> [Reference](https://librosa.org/doc/latest/generated/librosa.display.specshow.html#librosa.display.specshow)","metadata":{}},{"cell_type":"markdown","source":"# Visualize Raw wave","metadata":{}},{"cell_type":"code","source":"for x, i in zip(samples, targets):\n    figure = plt.figure(figsize=(16, 7))\n    figure.suptitle(f'Raw wave (target={i})', fontsize=20)\n    for j in range(3):\n        axes = figure.add_subplot(3, 1, j+1)\n        librosa.display.waveshow(x[j], sr=2048, ax=axes, color=colors[j])\n        axes.set_title(signal_names[j], fontsize=12)\n        axes.set_xlabel('Time[sec]')\n    plt.tight_layout()\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2021-08-15T08:16:14.967237Z","iopub.execute_input":"2021-08-15T08:16:14.967734Z","iopub.status.idle":"2021-08-15T08:16:16.776935Z","shell.execute_reply.started":"2021-08-15T08:16:14.967676Z","shell.execute_reply":"2021-08-15T08:16:16.775921Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Digital Signal Processings in libsona\n- [STFT - Short-Time Fourier Transform](https://en.m.wikipedia.org/wiki/Short-time_Fourier_transform)\n- [CQT - Constant-Q Transform](https://en.wikipedia.org/wiki/Constant-Q_transform)\n- [Hybrid CQT](https://librosa.org/doc/main/generated/librosa.hybrid_cqt.html)\n- [Pseudo CQT](https://librosa.org/doc/main/generated/librosa.pseudo_cqt.html)\n- [VQT - Variable-Q transform](https://librosa.org/doc/main/generated/librosa.vqt.html)  \n\n## These is unuse method.\n  - [Melspectrogram - Mel Scale + spectrogram](https://en.wikipedia.org/wiki/Mel_scale)\n    > I think mel scale is not proper this probram because it is a scale made for humans.\n  - [Chroma feature](https://en.m.wikipedia.org/wiki/Chroma_feature)\n    > I think stft/cqt feature do not have to transform Chroma.\n\n## What is additional arguments such as `sr`, `hop_length`, `win_length` and so on.\n- sr (sampling rate): In this contest, sr=2048\\[Hz\\]. In datail, Read [here](https://www.kaggle.com/c/g2net-gravitational-wave-detection/data). \n- hop length: Length to make a single unit. I have no idea about proper value.\n> In principle, gravitational waves could exist at any frequency. However, very low frequency waves would be impossible to detect, and there is no credible source for detectable waves of very high frequency as well.  \n> from [Wikipedia: Gravitational wave](https://en.wikipedia.org/wiki/Gravitational_wave)\n- win length: window size. Default sample size.  \n\n#### [Reference](https://librosa.org/doc/0.6.3/glossary.html)","metadata":{"execution":{"iopub.status.busy":"2021-08-13T05:05:30.964813Z","iopub.execute_input":"2021-08-13T05:05:30.965281Z","iopub.status.idle":"2021-08-13T05:05:30.970177Z","shell.execute_reply.started":"2021-08-13T05:05:30.965247Z","shell.execute_reply":"2021-08-13T05:05:30.969099Z"}}},{"cell_type":"markdown","source":"# STFT - Short-Time Fourier Transform","metadata":{}},{"cell_type":"code","source":"for x, i in zip(samples, targets):\n    figure = plt.figure(figsize=(16, 7))\n    figure.suptitle(f'STFT (target={i})', fontsize=20)\n    for j in range(3):\n        axes = figure.add_subplot(3, 1, j+1)\n        X = librosa.stft(x[j], n_fft=4096, hop_length=64)\n        XdB = 20*np.log10(np.abs(X))\n        librosa.display.specshow(XdB, sr=2048, hop_length=64, fmin=20, fmax=500, ax=axes)\n        axes.set_title(signal_names[j], fontsize=20)\n    plt.tight_layout()\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2021-08-15T08:16:16.778235Z","iopub.execute_input":"2021-08-15T08:16:16.77879Z","iopub.status.idle":"2021-08-15T08:16:17.931904Z","shell.execute_reply.started":"2021-08-15T08:16:16.77874Z","shell.execute_reply":"2021-08-15T08:16:17.929651Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# CQT - Constant-Q Transform","metadata":{}},{"cell_type":"code","source":"for x, i in zip(samples, targets):\n    figure = plt.figure(figsize=(16, 7))\n    figure.suptitle(f'CQT (target={i})', fontsize=20)\n    for j in range(3):\n        axes = figure.add_subplot(3, 1, j+1)\n        X = librosa.cqt(x[j], sr=2048, fmin=20, hop_length=64, n_bins=32)\n        X_magnitude, X_phase = librosa.magphase(X)\n        librosa.display.specshow(X_magnitude, sr=2048, hop_length=64, fmin=20, fmax=500, ax=axes)\n        axes.set_title(signal_names[j], fontsize=12)\n    plt.tight_layout()\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2021-08-15T08:16:17.935062Z","iopub.execute_input":"2021-08-15T08:16:17.935982Z","iopub.status.idle":"2021-08-15T08:16:19.723771Z","shell.execute_reply.started":"2021-08-15T08:16:17.93579Z","shell.execute_reply":"2021-08-15T08:16:19.722572Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Hybrid CQT","metadata":{}},{"cell_type":"code","source":"for x, i in zip(samples, targets):\n    figure = plt.figure(figsize=(16, 7))\n    figure.suptitle(f'Hybrid CQT (target={i})', fontsize=20)\n    for j in range(3):\n        axes = figure.add_subplot(3, 1, j+1)\n        X = librosa.hybrid_cqt(x[j], sr=2048, fmin=20, hop_length=64, n_bins=32)\n        X_magnitude, X_phase = librosa.magphase(X)\n        librosa.display.specshow(X_magnitude, sr=2048, hop_length=64, fmin=20, fmax=500, ax=axes)\n        axes.set_title(signal_names[j], fontsize=12)\n    plt.tight_layout()\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2021-08-15T08:16:19.726665Z","iopub.execute_input":"2021-08-15T08:16:19.727128Z","iopub.status.idle":"2021-08-15T08:16:20.564394Z","shell.execute_reply.started":"2021-08-15T08:16:19.727085Z","shell.execute_reply":"2021-08-15T08:16:20.562577Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Pseudo CQT","metadata":{}},{"cell_type":"code","source":"for x, i in zip(samples, targets):\n    figure = plt.figure(figsize=(16, 7))\n    figure.suptitle(f'Pseudo CQT (target={i})', fontsize=20)\n    for j in range(3):\n        axes = figure.add_subplot(3, 1, j+1)\n        X = librosa.pseudo_cqt(x[j], sr=2048, fmin=20, hop_length=64, n_bins=32)\n        X_magnitude, X_phase = librosa.magphase(X)\n        librosa.display.specshow(X_magnitude, sr=2048, hop_length=64, fmin=20, fmax=500, ax=axes)\n        axes.set_title(signal_names[j], fontsize=12)\n    plt.tight_layout()\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2021-08-15T08:16:20.566151Z","iopub.execute_input":"2021-08-15T08:16:20.566636Z","iopub.status.idle":"2021-08-15T08:16:21.342513Z","shell.execute_reply.started":"2021-08-15T08:16:20.566592Z","shell.execute_reply":"2021-08-15T08:16:21.340962Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# VQT - Variable-Q transform","metadata":{}},{"cell_type":"code","source":"for x, i in zip(samples, targets):\n    figure = plt.figure(figsize=(16, 7))\n    figure.suptitle(f'VQT (target={i})', fontsize=20)\n    for j in range(3):\n        axes = figure.add_subplot(3, 1, j+1)\n        X = librosa.vqt(x[j], sr=2048, fmin=20, hop_length=64, n_bins=32)\n        X_magnitude, X_phase = librosa.magphase(X)\n        librosa.display.specshow(X_magnitude, sr=2048, hop_length=64, fmin=20, fmax=500, ax=axes)\n        axes.set_title(signal_names[j], fontsize=12)\n    plt.tight_layout()\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2021-08-15T08:16:21.344157Z","iopub.execute_input":"2021-08-15T08:16:21.344744Z","iopub.status.idle":"2021-08-15T08:16:22.31663Z","shell.execute_reply.started":"2021-08-15T08:16:21.344688Z","shell.execute_reply":"2021-08-15T08:16:22.314828Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Please give me your feedback, comment, and vote if you like.","metadata":{}}]}