Skip to content

Naive implementation #6

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: develop
Choose a base branch
from

Conversation

ivanvikhrev
Copy link
Collaborator

Сконвертировал модель для аудио файлов длиной 10 мс и 20 мс. Стало известно несколько вещей:

  1. При конвертации модели мы указываем размер входа, например, для 10 с мы указываем параметр --input_shape "(1, 1000, 161). Соответственно, минимальный размер входа для модели мы можем указать (1, 1, 161), что соответствует 10 мс.
  2. С моделью для 10 мс не работают функции из features.py, похоже, в параметрах там указана минимальная длина аудиофайла и она соответствует 20 мс.
  3. Для модели 20 мс попытался реализовать простое разбиение исходного аудиофайла на блоки с поочередной их обработкой и далее склейкой обратно в целостный аудиофайл. Однако возникла проблема: выход модели длиннее на 160 фреймов, чем исходный аудиофайл. Так, для аудиофайла длиной 5 с и частотой дискретизации (sample rate) 16 кГц мы получаем массив данных размером (5*16000, 1) или (80000, 1). При разбиении на блоки по 20 мс получаем 250 блоков по 320 фреймов. А на выходе после инференса этот же блок уже имеет размер 480.
  4. При склеивании обратно "как есть" получаем замедленное аудио с плохим качеством. Если пытаться вырезать по 320 фреймов из начала, конца или середины страдает качество, но скорость получается нормальная.

@ivanvikhrev
Copy link
Collaborator Author

160 фреймов к выходу добавляется в любом случае, независимо от длины входа. Для модели на 10 секунд на вход подается массив (160000,1), а на выходе получаем (160160, 1)

for i in range(nblocks):
out = denoiser.denoise(data[i*block_size:(i+1)*block_size, 0]).reshape(-1, 1)
print(out.shape)
res = np.concatenate((res, out[:out.shape[0]]))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Накладывание текущего кадра на предыдущий

    if i > 0:
           print(i)
           tmpres = res[-160:]
           tmpres += out[:160]
           res[-160:] = tmpres
           res = np.concatenate((res, out[160:out.shape[0]]))
       else:
           res = np.concatenate((res, out[:out.shape[0]]))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants