Я пытаюсь выяснить, как уменьшить разрядность 16-битного файла WAV до 12 бит путем усечения данных и отбрасывания 4 младших значащих бит.Мое лучшее предположение заключается в том, что мне нужно преобразовать данные (которые, как представляется, в виде короткого целого числа со знаком) в 16-разрядное без знака и сдвинуть биты вправо на 4, а затем преобразовать обратно в короткое.
Но я действительно запутался в том, как это реализовать, я новичок в концепциях Python и DSP, поэтому, пожалуйста, потерпите меня.
import array
import numpy as np
import struct
from pydub import AudioSegment
sound = AudioSegment.from_file("original.wav")
# get raw data from the wav file
samples = sound.get_array_of_samples()
bitSamples = []
# iterate over the data
for i in range (0, len(samples)):
# convert to 16bit (?)
sixteen = struct.unpack('H', struct.pack('h', samples[i]))
# bitwise right shift
twelve = np.right_shift(sixteen, 4)
# populate new array
bitSamples.append(twelve)
shifted_samples_array = array.array(sound.array_type, bitSamples)
new_sound = sound._spawn(shifted_samples_array)
new_sound.export("out-depth.wav", format="wav")
Вот что я пробовал,но все, что, кажется, делает, это резко увеличивает громкость звука и делает его звучание крайне искаженным.
Чего я ожидаю достичь, так это в основном просто уменьшенный динамический диапазон (то есть промежуточное звено между 8-битным и 16-битным качеством звука).
Заранее благодарим за любую помощь.