Проблемы со сжатием в формате MP3: квантование и размер файлаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Проблемы со сжатием в формате MP3: квантование и размер файла

Сообщение Anonymous »

Я пытаюсь реализовать алгоритм сжатия звука, подобный MP3, и выполнил общие шаги, но столкнулся с некоторыми проблемами на этапе квантования. Вот общий процесс, которому я следую:
  • Применить окно Хэннинга к аудио
  • Применить банк фильтров (mp3_forward_fbt ).
  • Применить дискретное косинусное преобразование (DCT).
  • Квантовать коэффициенты DCT.
  • Применить обратное Дискретное косинусное преобразование (IDCT).
  • Примените банк инверсных фильтров (mp3_reverse_fbt).
Процесс работает нормально, но я У меня возникли проблемы на этапе квантования. Когда я удаляю любое количество коэффициентов (для уменьшения данных), качество звука значительно ухудшается. Я также пытался преобразовать массив коэффициентов из числа с плавающей запятой в int32 или int16, но размер выходного файла остается таким же, как размер входного файла.
Я ищу информацию о том, что я могут отсутствовать или предложения по улучшению квантования и уменьшению размера файла. Вот код, который я использую:
import os
import numpy as np
import scipy.io.wavfile as wav
from scipy.fftpack import dct, idct
import mp3funcs as mp

file_path = os.path.abspath('Projekt_1/audio.wav')
fs, audio = wav.read(file_path)

left_audio = audio[:, 0]
right_audio = audio[:, 1]

window_size = 512
hop_size = window_size // 2
hanning_window = np.hanning(window_size)

def apply_hanning(audio):
num_frames = (len(audio) - window_size) // hop_size + 1
windowed_audio = np.zeros(len(audio), dtype=np.float64)

for i in range(num_frames):
start = i * hop_size
end = start + window_size
windowed_audio[start:end] += audio[start:end] * hanning_window

return windowed_audio

left_audio = apply_hanning(left_audio)
right_audio = apply_hanning(right_audio)

left_audio = mp.mp3_forward_fbt(left_audio)
right_audio = mp.mp3_forward_fbt(right_audio)

left_dct = dct(left_audio, type=2, n=None, axis=-1, norm='ortho')
right_dct = dct(right_audio, type=2, n=None, axis=-1, norm='ortho')

# quantization here
left_quant = []
right_quant = []

padding_needed_left = (32 - (len(left_quant) % 32)) % 32
left_quant = np.pad(left_quant, (0, padding_needed_left), mode='constant')

padding_needed_right = (32 - (len(right_quant) % 32)) % 32
right_quant = np.pad(right_quant, (0, padding_needed_right), mode='constant')

left_audio = idct(left_quant, type=2, n=None, axis=-1, norm='ortho')
right_audio = idct(right_quant, type=2, n=None, axis=-1, norm='ortho')

left_audio = mp.mp3_reverse_fbt(left_audio)
right_audio = mp.mp3_reverse_fbt(right_audio)

min_length = min(len(left_audio), len(right_audio))
left_audio = left_audio[:min_length]
right_audio = right_audio[:min_length]

audio = np.column_stack((left_audio, right_audio))

output_file_path = 'Projekt_1/output.wav'
wav.write(output_file_path, fs, audio.astype(np.int16))

# Test
print("Size difference:", os.path.getsize(output_file_path) - os.path.getsize(file_path))


Подробнее здесь: https://stackoverflow.com/questions/793 ... -file-size
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • DotNetZip (Ionic.Zip.dll) не работает со сжатием имени файла или папки на китайском языке.
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Загрузка API-файла формы Drupal с автоматическим сжатием
    Anonymous » » в форуме Php
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Квантование уменьшения цвета Python
    Anonymous » » в форуме Python
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Квантование уменьшения цвета Python
    Гость » » в форуме Python
    0 Ответы
    29 Просмотры
    Последнее сообщение Гость
  • Квантование KV-кэша в LLM
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»