У меня есть 32-битные данные потока с плавающей запятой с одним каналом и 20 выборками в секунду. Я хочу сжать данные (каждые х часов) и декодировать их, когда это необходимо, и получить данные. Я выбрал алгоритм Vorbis (я знаю, что это с потерями). Я использовал gstreamer-1.0 vorbisen c для кодирования и vorbisde c для декодирования.
конвейер кодирования
appsrc->rawaudioparse->audioconvert->vorbisenc->oggmux->filesink
Я установил rawaudioparse свойства, подобные этому:
g_object_set(G_OBJECT(parser) , "pcm-format", GST_AUDIO_FORMAT_F32LE,
"num-channels", 1,
"sample-rate", ?,
NULL);
и vorbisen c качество, подобное этому:
g_object_set(G_OBJECT(vorbisenc), "quality", ?, NULL);
Я поставил вопросительный знак, потому что я тестировал с другими значениями, которые я объясню ниже.
Не удалось установить конвейер декодирования
filesrc->oggdemux->vorbisdec->audioconvert->audioresample->appsink
любое свойство или ограничение для конвейера декодирования.
Я проверил, чтобы увидеть сжатие и точность данных после декодирования. Но с другой частотой дискретизации и качеством кодирования я получаю действительно странный результат. некоторые данные после декодирования даже не имеют отношения к моим данным !!!!
, например:
частота дискретизации: 8000, качество: 0,6 => отлично работает
образец скорость: 8000: 0,8 => бессмысленные данные
частота дискретизации: 16000: 0: => отлично работает
частота дискретизации: 16000: 0,9 => отлично
частота дискретизации: 16000, качество: 0,9 данных * 5,1 => бессмысленные данные
Я не могу понять связь между качеством кодирования, частотой дискретизации и данными. Кто-нибудь может объяснить это?