Как убрать лишние звуки из аудио python
Перейти к содержимому

Как убрать лишние звуки из аудио python

  • автор:

Noise reduction in python using spectral gating

Noisereduce is a noise reduction algorithm in python that reduces noise in time-domain signals like speech, bioacoustics, and physiological signals. It relies on a method called «spectral gating» which is a form of Noise Gate. It works by computing a spectrogram of a signal (and optionally a noise signal) and estimating a noise threshold (or gate) for each frequency band of that signal/noise. That threshold is used to compute a mask, which gates noise below the frequency-varying threshold.

Audio Processing and Remove Silence using Python

Audio Processing Techniques like Play an Audio, Plot the Audio Signals, Merge and Split Audio, Change the Frame Rate, Sample Width and Channel, Silence Remove in Audio, Slow down and Speed up audio

Why this tutorial .

Many people are doing projects like Speech to Text conversion process and they needed some of the Audio Processing Techniques like

  • Play an audio
  • Plot the Audio Signals
  • Merge and Split Audio Contents
  • Slow down and Speed up the Audio — Speed Changer
  • Change the Frame Rate, Channels and Sample Width
  • Silence Remove

Even after exploring many articles on Silence Removal and Audio Processing, I couldn’t find an article that explained in detail, that’s why I am writing this article. I hope this article will help you to do such tasks like Data collection and other works.

Why Python .

Python is a general purpose programming language. Hence, you can use the programming language for developing both desktop and web applications. Also, you can use Python for developing complex scientific and numeric applications.

Python is designed with features to facilitate data analysis and visualization. You can take advantage of the data analysis features of Python to create custom big data solutions without putting extra time and effort. At the same time, the data visualization libraries and APIs provided by Python help you to visualize and present data in a more appealing and effective way.

Many Python developers even use Python to accomplish Artificial Intelligence (AI), Machine Learning(ML), Deep Learning(DL), Computer Vision(CV) and Natural Language Processing(NLP) tasks.

Requirements and Installation

  • Of course, We need Python 3.5 or above
  • Install Pydub, Wave, Simple Audio and webrtcvad Packages

Listen Audio

People who wants to listen their Audio and play their audio without using tool slike VLC or Windows Media Player

Create a file named “listenaudio.py” and paste the below contents in that file

Here is the gist for Listen Audio . . .

Plot Audio Signal

Plotting the Audio Signal makes you to visualize the Audio frequency. This will help you to decide where we can cut the audio and where is having silences in the Audio Signal

Here is the gist for plotting the Audio Signal . . . . . .

In the Graph, the horizontal straight lines are the silences in Audio

Split Audio Files

This helps you to Split Audio files based on the Duration that you set.

Threshold value usually in milliseconds. (1 Sec = 1000 milliseconds). By Adjusting the Threshold value in the code, you can split the audio as you wish.

Here I am splitting the audio by 10 Seconds.

Here is the gist for Split Audio Files . . .

You can get the Audio files as chunks in “splitaudio” folder.

Merge Audio File

This helps you to merge audio from different audio files . . .

Here is the gist for Merge Audio content . . .

You can view the Merged audio in “Mergedaudio.wav” file

Speed Changer-Slow down and Speed up

Change the Speed of the Audio — Slow down or Speed Up

Create a file named “speedchangeaudio.py” and copy the below content

Normal Speed of Every Audio : 1.0. To Slow down audio, tweak the range below 1.0 and to Speed up the Audio, tweak the range above 1.0

Adjust the speed as much as you want in “speed_change” function parameter

Here is the gist for Slow down and Speed Up the Audio

You can see the Speed changed Audio in “changed_speed.wav”

Adjust the Frame Rate, Channels and Sample Width in Audio

This help you to preprocess the audio file while doing Data Preparation for “Speech to Text” projects etc . . .

Set Frame rate 8KHz as 8000, 16KHz as 16000, 44KHz as 44000

Set Channel : 1 is Mono and 2 is Stereo

Set Sample Width

1 : “8 bit Signed Integer PCM”,
2 : “16 bit Signed Integer PCM”,
3 : “32 bit Signed Integer PCM”,
4 : “64 bit Signed Integer PCM”

Here is the gist for Changing the Frame Rate, Channels and Sample Width

You can see the Frame Rate, Channels and Sample Width of Audio in “convertedrate.wav”

Silence Remove

Here we will Remove the Silence using Voice Activity Detector(VAD) Algorithm.

Basically the Silence Removal code reads the audio file and convert into frames and then check VAD to each set of frames using Sliding Window Technique. The Frames having voices are collected in seperate list and non-voices(silences) are removed. Hence, all frames which contains voices is in the list are converted into “Audio file”.

Create a file named “silenceremove.py” and copy the below contents

Set the aggressiveness mode, which is an integer between 0 and 3. 0 is the least aggressive about filtering out non-speech, 3 is the most aggressive.

How to remove/reduce noise from .wav audio file in python

I have a .wav audio file, I’m working on converting the audio to text. I need to reduce/remove noise to get more accurate result.

Please let me know how to go about it

2 Answers 2

You’re trying to convert a non- number into int,

Perhaps, you meant.

Darshan Jadav's user avatar

While converting to int a hex string which is without leading ‘0x’ specify the base manually. Like follows:

    The Overflow Blog
Related
Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.3.11.43304

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Name already in use

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Это простая обёртка на Python для шумоподавления RNNoise. Поддерживается только Python 3. Код основан на issue от snakers4 из репозитория RNNoise, за что ему отдельное спасибо.

RNNoise — это рекуррентная нейронная сеть с ячейками GRU, предназначенная для подаления шума в аудиозаписи в реальном времени (работает даже на Raspberry Pi). Стандартная модель обучена на 6.4Гб зашумленных аудиозаписей и полностью готова к использованию.

RNNoise написан на C и имеет методы для шумоподавления одного фрейма длиной 10 миллисекунд. Фрейм должен быть с частотой дискретизации 48000Гц, моно, 16 бит.

RNNoise_Wrapper упрощает работу с RNNoise:

  • избавляет от необходимости самому извлекать фреймы/кадры из аудиозаписи
  • снимает ограничения на параметры обрабатываемой wav аудиозаписи
  • скрывает все нюансы работы с библиотекой на C
  • избавляет от необходимости вручную компилировать RNNoise (только для Linux)
  • добавляет 2 новых бинарных файла с более качественными моделями, которые поставляются вместе с пакетом (только для Linux)

RNNoise_Wrapper содержит 2 новые более качественные модели (обученные веса и скомпилированные бинарники RNNoise для Linux). Для обучения использовался датасет от Microsoft DNS Challenge.

librnnoise_5h_ru_500k — обучена на 5 часах русской речи (с подмешиванием эмоциональной речи и пения на английском языке), полученной скриптом из репозитория с датасетом. Обученные веса находятся в train_logs/weights_5h_ru_500k.hdf5 , скомпилированный RNNoise в rnnoise_wrapper/libs/librnnoise_5h_ru_500k.so.0.4.1 (только для Linux)

librnnoise_5h_b_500k — обучена на 5 часах смешанной речи на английском, русском, немецком, французском, итальянском, испанском языках и мандаринского наречия китайского языка (с подмешиванием эмоциональной речи и пения на английском языке). Датасет для каждого языка предварительно был обрезан по самому наименьшему из них (меньше всего данных для русского языка, около 47 часов). Финальная обучающая выборка получена скриптом из репозитория с датасетом. Обученные веса находятся в train_logs/weights_5h_b_500k.hdf5 , скомпилированный RNNoise в rnnoise_wrapper/libs/librnnoise_5h_b_500k.so.0.4.1 (только для Linux)

librnnoise_default — стандартная модель от авторов RNNoise

Модели librnnoise_5h_ru_500k и librnnoise_5h_b_500k имеют практически одинаковое качество шумоподавления. librnnoise_5h_ru_500k больше всего подходит для работы с русской речью, а librnnoise_5h_b_500k — для смешанной речи либо речи на не русском языке, она более универсальна.

Сравнительные примеры работы новых моделей со стандартной доступны в test_audio/comparative_tests .

Данная обёртка на CPU Intel i7-10510U работает в 28-30 раз быстрее реального времени при шумоподавлении целой аудиозаписи, и в 18-20 раз быстрее реального времени при работе в потоковом режиме (т.е. обработки фрагментов аудио длиной 20 мс). При этом было задействовано только 1 ядро, нагрузка на которое составила около 80-100%.

Данная обёртка имеет следующие зависимости: pydub и numpy.

Установка с помощью pip:

ВНИМАНИЕ! Перед использованием обёртки, RNNoise необходимо скомпилировать. Если вы используете Linux или Mac, вы можете использовать заранее скомпилированный RNNoise (в ОС Ubuntu 19.10 64 bit), который поставляется с пакетом (он так же работает в Google Colaboratory). Если стандартный бинарный файл у вас не работает, попробуйте вручную скомпилировать RNNoise. Для этого необходимо сначала подготовить вашу ОС (предполагается, что gcc уже установлен):

После этого в папке rnnoise_wrapper/libs появится файл librnnoise_default.so.0.4.1 . Путь к данному бинарному файлу нужно передать при создании объекта класса RNNoise из данной обёртки (подробнее см. ниже).

Если вы используете Windows, то вам нужно вручную скомпилировать RNNoise. Вышеописанная инструкция не будет работать, воспользуйтесь данными ссылками: один, два. После компиляции путь к бинарному файлу нужно передать при создании объекта класса RNNoise из данной обёртки (подробнее см. ниже).

1. В коде Python

Подавление шума в аудиозаписи test.wav и сохранение результата как test_denoised.wav :

Подавление шума в потоковом аудио (размер буфера равен 20 миллисекунд, т.е. 2 фрейма) (в примере используется имитация потока путём обработки аудиозаписи test.wav по частям с сохранением результата как test_denoised_stream.wav ):

Класс RNNoise содержит следующие методы:

    : принимает имя .wav аудиозаписи, приводит её в поддерживаемый формат (16 бит, моно) и возвращает объект pydub.AudioSegment с аудиозаписью : принимает имя .wav аудиозаписи, объект pydub.AudioSegment (или байтовую строку с аудиоданными без заголовков wav) и сохраняет аудиозапись под переданным именем : принимает объект pydub.AudioSegment (или байтовую строку с аудиоданными без заголовков wav), приводит его к частоте дискретизации 48000 Гц, разбивает аудиозапись на фреймы (длиной 10 миллисекунд), очищает их от шума и возвращает объект pydub.AudioSegment (или байтовую строку без заголовков wav) с сохранением исходной частоты дискретизации : очистка только одного фрейма (длиной 10 мс, 16 бит, моно, 48000 Гц) от шума (обращение напрямую к бинарному файлу библиотеки RNNoise)

Подробная информация о поддерживаемых аргументах и работе каждого метода находится в комментариях в исходном коде этих методов.

По умолчанию используется модель librnnoise_5h_b_500k . При создании объекта класса RNNoise из обёртки с помощью аргумента f_name_lib можно указать другую модель (бинарник RNNoise):

  • librnnoise_5h_ru_500k или librnnoise_default для использования одной из комплектных моделей
  • полное/частичное имя/путь к скомпилированному бинарному файлу RNNoise

Особенности основного метода filter() :

  • для максимально качественной работы необходима аудиозапись длиной минимум 1 секунда, на которой присутсвует как голос, так и шум (причём шум в идеале должен быть до и после голоса). В противном случае качество шумоподавления будет хуже
  • в случае, если передаются части одной аудиозаписи (шумоподавление потоково аудио), то их длина должна быть не менее 10 мс и кратна 10 (т.к. библиотека RNNoise поддерживает только фреймы длиной 10 мс). Такой вариант работы на качество шумоподавления не влияет
  • если последний фрейм переданной аудиозаписи меньше 10 мс (или передана часть аудио длиной меньше 10 мс), то он дополняется нулями до необходимого размера. Из-за этого возможно небольшое увеличение длины итоговой аудиозаписи после шумоподавления
  • библиотека RNNoise дополнительно для каждого фрейма возвращает вероятность наличия голоса в этом фрейме (в виде числа от 0 до 1 ) и с помощью аргумента voice_prob_threshold можно отфильтровать фреймы по этому значению. Если вероятность ниже, чем voice_prob_threshold , то фрейм будет удалён из аудиозаписи

2. В качестве инструмента командной строки

  • input.wav — имя исходной .wav аудиозаписи
  • output.wav — имя .wav аудиофайла, в который будет сохранена аудиозапись после шумоподавления

Инструкция по обучению RNNoise на своих данных находится в TRAINING.md .

Если у вас возникнут вопросы или вы хотите сотрудничать, можете написать мне на почту: vladsklim@gmail.com или в LinkedIn.

About

A simple Python wrapper for audio noise reduction RNNoise. Simplifies work with it, adds new trained models and detailed instructions for training.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *