Я хотел бы применить режекторный фильтр (band stop filter) к коллекции mp3-файлов. Амплитуда должна быть уменьшена до нуля в одной или нескольких стоп-полосах и не изменяться в других местах.
Я надеюсь на простое и без потерь решение, работая непосредственно с mp3-файлами, избегая искажения фильтров, работающих на сэмплированный звук Поскольку mp3-файлы хранят musi c как данные «частота + амплитуда», алгоритм псевдо-языка может быть
load mp3 file
foreach audio channel
foreach frame
foreach (frequency/amplitude) pair
if 3500Hz < frequency < 7000Hz
amplitude := 0
save mp3 file
. Может кто-нибудь порекомендовать библиотеку и функции для такого доступа и модификации данных mp3, предпочтительно в (но не ограничиваясь) Python?
РЕДАКТИРОВАТЬ: Попытка сбора информации:
Согласно ссылка , аудиоданные в mp3 хранятся в кадрах 32 частотных поддиапазона (или частотных бина). Это то, что я имел в виду под парами «частота + амплитуда».
Согласно link , librosa.read
из библиотеки Librosa не поддерживает mp3 и возвращается к audioread
, что сэмплирование аудио Это то, чего я хочу избежать.
Кажется, есть библиотеки для разбора Python, C# и Java
https://formats.kaitai.io/id3v2_3/python.html
https://sourceforge.net/projects/csid3lib
https://github.com/mpatric/mp3agic
но я не могу сказать, позволяют ли они изменять другие поля, кроме тегов ID3, и записываю обратно файл mp3.