From adf5d6d0202bb232833ad10fe0bada5ed5e95691 Mon Sep 17 00:00:00 2001 From: adamnsandle Date: Tue, 7 Dec 2021 12:32:04 +0000 Subject: [PATCH] fx example --- .../pyaudio-streaming-examples.ipynb | 9962 +---------------- utils_vad.py | 9 +- 2 files changed, 41 insertions(+), 9930 deletions(-) diff --git a/examples/pyaudio-streaming/pyaudio-streaming-examples.ipynb b/examples/pyaudio-streaming/pyaudio-streaming-examples.ipynb index 443e7b9..82956bf 100644 --- a/examples/pyaudio-streaming/pyaudio-streaming-examples.ipynb +++ b/examples/pyaudio-streaming/pyaudio-streaming-examples.ipynb @@ -26,15 +26,15 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "57bc2aac", "metadata": {}, "outputs": [], "source": [ "#!pip install numpy==1.20.2\n", - "#!pip install torch==1.8.1\n", + "#!pip install torch==1.9.0\n", "#!pip install matplotlib==3.4.2\n", - "#!pip install torchaudio==0.8.1\n", + "#!pip install torchaudio==0.9.0\n", "#!pip install soundfile==0.10.3.post1\n", "#!pip install pyaudio==0.2.11" ] @@ -49,7 +49,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "5a647d8d", "metadata": {}, "outputs": [], @@ -67,18 +67,10 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "725d7066", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Downloading: \"https://github.com/snakers4/silero-vad/archive/master.zip\" to /home/kaik/.cache/torch/hub/master.zip\n" - ] - } - ], + "outputs": [], "source": [ "model, utils = torch.hub.load(repo_or_dir='snakers4/silero-vad',\n", " model='silero_vad',\n", @@ -87,17 +79,15 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "1c0b2ea7", "metadata": {}, "outputs": [], "source": [ - "(get_speech_ts,\n", - " get_speech_ts_adaptive,\n", + "(get_speech_timestamps,\n", " save_audio,\n", " read_audio,\n", - " state_generator,\n", - " single_audio_stream,\n", + " VADIterator,\n", " collect_chunks) = utils" ] }, @@ -111,7 +101,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "5abc6330", "metadata": {}, "outputs": [], @@ -143,7 +133,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "a845356e", "metadata": {}, "outputs": [], @@ -167,43 +157,20 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "9d3d2c10", "metadata": {}, "outputs": [], "source": [ - "# Configure how long you want to record the audio\n", - "frames_to_record = 20 # frames_to_record * frame_duration_ms = recording duration\n", - "frame_duration_ms = 250" + "num_samples = 1536" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "3cb44a4a", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Started Recording\n", - "Stopped the recording\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "stream = audio.open(format=FORMAT,\n", " channels=CHANNELS,\n", @@ -216,7 +183,7 @@ "print(\"Started Recording\")\n", "for i in range(0, frames_to_record):\n", " \n", - " audio_chunk = stream.read(int(SAMPLE_RATE * frame_duration_ms / 1000.0))\n", + " audio_chunk = stream.read(num_samples)\n", " \n", " # in case you want to save the audio later\n", " data.append(audio_chunk)\n", @@ -226,9 +193,8 @@ " audio_float32 = int2float(audio_int16)\n", " \n", " # get the confidences and add them to the list to plot them later\n", - " vad_outs = validate(model, torch.from_numpy(audio_float32))\n", - " # only keep the confidence for the speech\n", - " voiced_confidences.append(vad_outs[:,1])\n", + " new_confidence = model(torch.from_numpy(audio_float32), 16000).item()\n", + " voiced_confidences.append(new_confidence)\n", " \n", "print(\"Stopped the recording\")\n", "\n", @@ -252,7 +218,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "05ef4100", "metadata": {}, "outputs": [], @@ -262,7 +228,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "d1d4cdd6", "metadata": {}, "outputs": [], @@ -298,7 +264,7 @@ "\n", " while continue_recording:\n", " \n", - " audio_chunk = stream.read(int(SAMPLE_RATE * frame_duration_ms / 1000.0))\n", + " audio_chunk = stream.read(num_samples)\n", " \n", " # in case you want to save the audio later\n", " data.append(audio_chunk)\n", @@ -308,10 +274,7 @@ " audio_float32 = int2float(audio_int16)\n", " \n", " # get the confidences and add them to the list to plot them later\n", - " vad_outs = validate(model, torch.from_numpy(audio_float32))\n", - " \n", - " # get the confidence value so that jupyterplot can process it\n", - " new_confidence = vad_outs[:,1].numpy()[0].item()\n", + " new_confidence = model(torch.from_numpy(audio_float32), 16000).item()\n", " voiced_confidences.append(new_confidence)\n", " \n", " pp.update(new_confidence)\n", @@ -322,9875 +285,13 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "1e398009", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Press Enter to stop the recording:\n" - ] - } - ], + "outputs": [], "source": [ "start_recording()" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "23984843", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { @@ -10209,7 +310,20 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.6" + "version": "3.7.10" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false } }, "nbformat": 4, diff --git a/utils_vad.py b/utils_vad.py index 1a03085..f8a7b0c 100644 --- a/utils_vad.py +++ b/utils_vad.py @@ -8,13 +8,10 @@ languages = ['ru', 'en', 'de', 'es'] def validate(model, - inputs: torch.Tensor, - **kwargs): + inputs: torch.Tensor): with torch.no_grad(): - outs = model(inputs, **kwargs) - if len(outs.shape) == 1: - return outs[1:] - return outs[:, 1] # 0 for noise, 1 for speech + outs = model(inputs) + return outs def read_audio(path: str,