Нотатки на полях "" (FAQ) "

Нотатки на полях "" (FAQ) "

Автор: Олександр Радзишевський


Часто поставлені питання (і відповіді) на навколозвукові теми технічного характеру

Зміст:

Алгоритми кодування аудіо:

Коротко про історію і характеристики стандартів MPEG.


Що таке CBR і VBR?

Які відмінності режимів CBR, VBR і ABR? (за допомогою кодера Lame)

Які методи кодування стерео інформації використовуються в алгоритмах MPEG (та інших)?

Які параметри віддають перевагу кодуванню MP3?

Які альтернативні MPEG-1 Layer III (MP3) алгоритми компресії існують?

Інші питання:

Чи можна перетворити з одного потокового формату аудіо даних на інший?


Чи можна перетворити WAV на MIDI, WAV на трекерний додаток?

Чи можна виділити з аудіо потоку звучання конкретного інструменту або голосу?

Які існують способи перетворення MIDI на WAV?

Який метод порівняння двох аудіо сигналів можна визнати найбільш точним?

Коротко про історію і характеристики стандартів MPEG.

MPEG розшифровується як «» Moving Picture Coding Experts Group «», дослівно - «» Група експертів з кодування рухомих зображень «». MPEG веде свою історію з січня 1988 року. Точніше, група MPEG була створена Міжнародною організацією стандартів (International Standards Organization або скорочено ISO) і Міжнародною електротехнічною комісією (International Electro-Technical Commission або скорочено IEC).

Група була утворена для створення стандартів кодування рухомих зображень і аудіо інформації. Починаючи з першого збору в травні 1988 року, група почала зростати і зросла до спільноти фахівців високого рівня. Зазвичай, у зборах MPEG беруть участь близько 350 фахівців з більш ніж 200 компаній. Зустрічі проводяться близько трьох разів на рік. Велика частина учасників MPEG - це індивідуальні фахівці, зайняті в тих чи інших наукових та академічних установах. Це з області історії. Тепер про практику. На сьогоднішній день MPEG розроблені такі стандарти і алгоритми:

  • MPEG-1 (листопад 1992) - стандарт кодування, зберігання і декодування рухомих зображень і аудіо інформації;
  • MPEG-2 (листопад 1994) - стандарт кодування для цифрового телебачення;
  • MPEG-4 - стандарт для мультимедіа програм: версія 1 (жовтень 1998) і версія 2 (грудень 1999);
  • MPEG-7 - універсалізований стандарт роботи з мультимедіа інформацією, призначений для обробки, фільтрації та управління мультимедіа інформацією.

По порядку.


1) Розгляньмо комплект MPEG-1. Цей комплект, відповідно до стандартів ISO, включає в себе три алгоритми різного рівня складності: Layer (рівень) I, Layer II і Layer III. Загальна структура процесу кодування однакова для всіх рівнів. Для кожного рівня визначено свій формат запису біт-потоку і свій алгоритм декодування. Алгоритми MPEG засновані в цілому на вивчених властивостях сприйняття звукових сигналів слуховим апаратом людини (тобто кодування проводиться з використанням так званої «» психоакустичної моделі «»).

Коротко про алгоритм кодування. Вхідний цифровий сигнал спочатку розкладається на частотні складові спектра. Потім цей спектр очищається від свідомо нечутних складових - низькочастотних шумів і найвищих гармонік, тобто фактично фільтрується. На наступному етапі проводиться значно складніший психоакустичний аналіз чутного спектру частот. Це робиться в тому числі з метою виявлення та видалення «замаскованих» частот (частот, які не сприймаються слуховим апаратом через їх приглушення іншими частотами). Після всіх цих маніпуляцій з цифрового аудіо сигналу виключається більше половини інформації. Потім, залежно від рівня складності використовуваного алгоритму, може бути також зроблений аналіз передбачуваності сигналу. Крім цього, базуючись на тому, що людське вухо здатне розрізняти напрямок звучання тільки середніх частот, то у випадку, коли кодується стерео сигнал, його можна перетворити на поєднаний стерео (joint stereo). Це означає, що фактично відбувається відділення верхніх і нижніх частот і їх кодування в моно варіанті (середні частоти залишаються в режимі стерео). Далі, в разі появи, наприклад, «тиші» в одному з каналів, «порожнє» місце заповнюється інформацією або підвищує якість іншого каналу, або просто не помістилася до цього. На довершення до всього проводиться стиснення вже готового біт-потоку спрощеним аналогом алгоритму Хаффмана (Huffman), що дозволяє також значно зменшити займаний потоком обсяг.

Комплект <unk> передбачений для кодування сигналів, оцифрованих з частотою дискретизації 32, 44.1 та 48 <unk> ц. Як було зазначено вище, комплект MPEG-1 має три рівні (Layer I, II і III). Ці рівні мають відмінності в забезпечуваному коефіцієнті стиснення і якості звучання одержуваних потоків. Layer I дозволяє сигнали 44.1 <unk> ц/16 біт зберігати без відчутних втрат якості при швидкості потоку 384 Кбіт/с, що становить 4-х кратний виграш в займаному обсязі; Layer II забезпечує таку ж якість при 194 Кбіт/с, а Layer III - при 128 (або 112). Виграш Layer III очевидний, але швидкість компресії при його використанні найнижча (треба зазначити, що при сучасних швидкостях процесорів це обмеження вже не помітно). Фактично, Layer III дозволяє стискати інформацію в 10-12 разів без відчутних втрат в якості.

2) Стандарт MPEG-2 був спеціально розроблений для кодування ТБ сигналів мовного телебачення, тому на розгляді MPEG-2 ми б не зупинялися, якби в квітні 1997 року цей комплект не отримав «продовження» у вигляді алгоритму MPEG-2 AAC (MPEG-2 Advanced Audio Coding - просунуте аудіо кодування). Стандарт MPEG-2 AAC став результатом кооперації зусиль інституту Fraunhofer, компаній Sony, NEC і Dolby. MPEG-2 AAC є технологічним приймачем MPEG-1. Існує кілька різновидів цього алгоритму: Homeboy AAC, AT&T a2b AAC, Liquifier AAC, Astrid/Quartex AAC и Mayah AAC. Найбільш високу якість звучання в порівнянні з MPEG-1 Layer III забезпечують дві передостанні реалізації. Всі наведені різновиди алгоритму AAC не є сумісними між собою.

Також, як і в комплекті аудіо стандартів кодування MPEG-1, в основі алгоритму AAC лежить психоакустичний аналіз сигналу. Разом з тим, алгоритм AAC має у своєму механізмі безліч доповнень, спрямованих на поліпшення якості вихідного аудіо сигналу. Зокрема, використовується інший тип перетворень, поліпшена обробка шумів, змінено банк фільтрів, а також поліпшено спосіб запису вихідного біт-потоку. Крім того, AAC дозволяє зберігати в закодованому аудіосигналі т. зв. «водяні знаки» (watermarks) - інформацію про авторські права. Ця інформація вбудовується в біт-потік при кодуванні таким чином, що знищити її стає неможливо не зруйнувавши цілісність аудіоданих. Ця технологія (в рамках Multimedia Protection Protocol) дозволяє контролювати поширення аудіоданих (що, до речі, є перешкодою на шляху поширення самого алгоритму і файлів, створених за допомогою нього). Слід зазначити, що алгоритм AAC не є назад сумісним (NBC - non backwards compatible) з рівнями MPEG-1 незважаючи на те, що він являє собою продовження (доопрацювання) MPEG-1 Layer I, II, III.

MPEG-2 AAC передбачає три різні профілі кодування: Main, LC (Low Complexity) и SSR (Scaleable Sampling Rate). Залежно від того, який профіль використовується під час кодування, змінюється час кодування та якість цифрового потоку. Найвища якість звучання (при самій повільній швидкості компресії) забезпечує основний Main профіль. Це пов'язано з тим, що профіль Main включає в себе всі механізми аналізу та обробки вхідного потоку. Профіль LC спрощений, що позначається на якості звучання одержуваного потоку, сильно відбивається на швидкості компресії і, що більш важливо, декомпресії. Профіль SSR також є спрощеним варіантом профілю Main.


Говорячи про якість звуку, можна сказати, що потік AAC (Main) 96 Кбіт/с забезпечує якість звучання, аналогічне потоку MPEG-1 Layer III 128 Кбіт/с. При компресії AAC 128 Кбіт/с, якість звучання відчутно перевершує MPEG-1 Layer III 128 Кбіт/с.

3) Стандарт MPEG-4 - це особлива стаття. MPEG-4 не є просто алгоритмом стиснення, зберігання і передачі відео або аудіо інформації. MPEG-4 - це новий спосіб представлення інформації, це - об'єктно-орієнтоване подання мультимедіа даних. Стандарт оперує об'єктами, організовує з них ієрархії, класи та інше, вибудовує сцени і управляє їх передачею. Об'єктами можуть служити як звичайні аудіо або відео потоки, так і синтезовані аудіо і графічні дані (мова, текст, ефекти, звуки...). Такі сцени описуються спеціальною мовою. Не будемо зупинятися детально на цьому стандарті - це тема окремого обширного обговорення. Слід тільки сказати, що в якості засобів компресії аудіо в MPEG-4 використовується комплекс декількох стандартів аудіо кодування: алгоритм MPEG-2 AAC, алгоритм TwinVQ, а також алгоритми кодування мови HVXC (Harmonic Vector eXcitation Coding) - для бітрейтів 2-4 Кбіт/с і CELP (Code Excited Linear P. Крім того, MPEG-4 має безліч механізмів забезпечення масштабованості.

4) Стандарт MPEG-7, розробка якого ще не закінчена, взагалі докорінно відрізняється від усіх інших стандартів MPEG. Стандарт розробляється не для встановлення якихось рамок для передачі даних або типізації та опису даних якогось конкретно роду. Стандарт передбачений як описовий, призначений для регламентації характеристик даних будь-якого типу, аж до аналогових. Використання MPEG-7 передбачається в тісному зв'язку з MPEG-4. Випуск у світ MPEG-7 заплановано на 2001 рік.

Для зручності поводження зі стиснутими потоками, всі алгоритми MPEG розроблені таким чином, що дозволяють здійснювати декомпресію (відновлення) і відтворення потоку одночасно з його отриманням (download) - потокова декомпресія «на льоту» (stream playback). Ця можливість дуже широко використовуються в інтернеті, де швидкість передачі інформації обмежена, а з використанням подібних алгоритмів з'являється можливість обробляти інформацію прямо під час її отримання не чекаючи закінчення передачі.

Що таке CBR і VBR?

Як відомо, результатом кодування сигналу за допомогою такого алгоритму, як, наприклад, MPEG-1 Layer III (MP3) (або деяких інших алгоритмів), є біт-потік з фреймовою (блочною) структурою. Це пояснюється тим, що кодування вихідного потоку проводиться не цілком, а по частинах. Тобто фактично вихідний потік поділяється на блоки певної фіксованої довжини, потім кожен блок (кадр) окремо піддається кодуванню і результат (кодований блок інформації) направляється в результуючий потік (будь то файл або потік даних).


CBR (Constant Bit Rate - постійний бітовий) - це такий спосіб кодування вихідного аудіопотоку, при якому всі його блоки (кадри) кодуються з однаковими параметрами (з однаковим бітом). Іншими словами, бітова битка на всій протяжності (всіх кадрів) результуючого потоку є постійною.

VBR (Variable Bit Rate - змінний бітовий) - це такий спосіб кодування вихідного аудіопотоку, при якому кожен окремий блок (фрейм) кодується зі своїм бітом. Вибір бітового кадру, що оптимально підходить для кодування кадру, здійснюється самим кодером шляхом аналізу "складності сигналу" "в кожному окремому фреймі.

Які відмінності режимів CBR, VBR і ABR? (за допомогою кодера Lame)

Перш ніж почати розмову, уточнимо дві деталі:

1. Кодування в MP3 відбувається поблочно: кодований файл розбивається на фрейми (кадри) з однаковим інтервалом, кожен кадр кодується і записується у вихідний потік; таким чином, вихідний потік також має кадрову структуру.

2. Кадри можуть бути закодовані не на будь-якому бітові, а тільки на одному з тих, що входять до таблиці стандартних для MPEG1 Layer III бітів: 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320. Кодування на будь-яких проміжних бітах («freeformat») стандартом не передбачено.


Вступ

Люди, які використовують VBR у Lame, зазвичай аргументують це фразою: «» я хочу отримувати постійну якість, а не постійний бітрейт «». Дійсно, адже в музиці бувають прості пасажі, на які цілком вистачає і 128 Кбіт/сек (наприклад паузи між піснями), а бувають і складні, на яких людина з хорошим слухом, хорошою аудіо картою та іншою аудіоапаратурою почує дефекти компресії навіть на 320 Кбіт/сек. Насправді такий аргумент не зовсім рівнянний.

CBR

Навіть у режимі CBR, mp3-кодер може перерозподіляти біти в часі, виділяючи більшу або меншу кількість біт під час складного або простого пасажів, що дозволяє в цілому поліпшити якість звучання. Такий перерозподіл біт робиться за рахунок так званого резервуара біт: під час кодування простих пасажів кодер витрачає на них не весь заданий користувачем бітрейт, а лише близько 90%, близько 10% економиться в резервуарі для кодування складних місць (спочатку резервуар порожній). Під час кодування складних пасажів кодер буде використовувати всі 100% зазначеного біта і додавати додаткові біти з резервуара (якщо такі є, тобто якщо резервуар не порожній). На жаль, відповідно до стандарту, розмір резервуара обмежений. Це означає, що якщо простий сигнал триває досить довго, резервуар накопичує свій обсяг до певних максимально допустимих меж і далі кодування йде вже з використанням всіх 100% бітова. І зворотна ситуація: якщо складний сигнал триває досить довго, з резервуара (поступово) забираються всі зекономлені біти і далі кодування йде з використанням вже тепер всіх 100% біта.

ABR: Пояснення

Можна було б сказати що резервуар непогано справляється зі своїм основним обов'язком - накопичення «» зайвих «» бітів під час простих пасажів та їх видача в якості додаткових при кодуванні складних пасажів, якби не одне «» але «»: він володіє кінцевим і причому досить обмеженим розміром, що означає, що копити його можна лише до певних меж, і виймати, відповідно, теж, поки резервуар не спустошиться. Саме для того щоб прибрати цей головний недолік резервуара і був розроблений ABR.

Головна відмінність ABR від CBR в тому, що в CBR всі фрейми зобов'язані бути одного розміру (тобто бітрейт для всіх фреймів повинен бути однаковий), в ABR ж це обмеження знято, відповідно, існує можливість замість стандартного вельми обмеженого за розміром резервуара використовувати практично нескінченний "" віртуальний " Виглядає це приблизно наступним чином.

ABR: Механізм

Припустімо, що користувач вказав режим ABR і певний бітовий бітовий біт B (користувач може вказувати абсолютно будь-який битрейт від 32 до 320, навіть не зі стандартної сітки бітів, наприклад можна вказати в якості бажаного середнього біта 129). Кодер приймає кусок аудіо (кадр), який необхідно закодувати. Таким же чином, як і в CBR, визначає його складність (про це ми поговоримо нижче). Якщо пасаж складний, то кодер також бере на нього більше бітів, але вже не з резервуара (як в CBR), а просто на просто збільшуючи битрейт на необхідну кількість сходів (обраний бітрейт повинен входити в сітку стандартних), створюючи таким чином "віртуальний резервуар" "(підняти бітрейт тут можна - це не C. Що означає "віртуальний резервуар" "? Це просто: ми припустили, що вказаного користувачем біта B кодеру мало, йому потрібно K біт (K > B), тоді кодер підбирає такий мінімальний стандартний бітрейт N, при якому виконується: N > = K (такий вибір бітової пошти ми і називаємо "віртуальний резервуар" "). Потім відбувається кодування за допомогою K біт взятого шматка аудіо. Однак N > = K, тобто ми використовували менше біт, ніж є у взятому фреймі, так не будемо ж ми викидати ці зайві біти? Ось ці зайві біти ми і записуємо в уже справжній резервуар. Оскільки в ABR є можливість використовувати «» віртуальний резервуар «» не має сенсу будувати стандартний резервуар, тому коли прийде наступний шматок аудіо, для його кодування спочатку будуть використані біти з резервуара, а потім кодер вирішить який бітрейт необхідний далі. Іншими словами, якщо в CBR кодер весь час намагається накопичити якомога більше біт в резервуарі, то в ABR кодер навпаки, намагається позбутися біт в резервуарі, так як копити їх незачем - можна просто підняти бітрейт.

Прості пасажі кодуються меншою кількістю біт, на них береться приблизно 95% від зазначеного бітрейту B, але тепер залишок не відкладається в резервуар, кодер просто бере фрейм з меншим бітрейтом. Існуюча різниця (біти, що залишилися) записується в стандартний резервуар (не викидати біти, що залишилися...). Приклад. Припустимо прийшов «» простий «» пасаж. Тоді кодер бере всі біти (якщо такі є) в резервуарі (справжньому), потім шукає найближчий стандартний битрейт, при якому сумарна кількість біт, що отрималося для цього фрейму (всі біти з резервуара + взятий бітрейт), складе 95% від заданого користувачем бітрейту B, виробляє кодування, а зайві біти (якщо вони залишилися

ABR: Підсумок

Таким чином, використання резервуара в ABR відмінне від CBR. У CBR бітрейт змінювати не можна і резервуар спеціально коплять шляхом збереження там біт, які залишилися (були зекономлені) від кодування фрейму на заданому спочатку фіксованому бітові під час простого пасажу; якщо для кодування потрібні біти і резервуар порожній, нічого з цим вдіяти не можна і кодування йде просто на вказаному бітові на шкоду якості. У ABR бітова змінна і стандартний резервуар фактично не потрібні, однак оскільки підняття (опускання) бітьота відбувається обов'язково до певного табличногозначення, яке може виявитися вище необхідного кодеру кількості біт, то зайві біти, звичайно, не викидають, а зберігають у резервуарі. Іншими словами, в CBR накопичення стандартного резервуара - основне завдання, в ABR же є необмежений «» віртуальний резервуар «» і стандартний використовується тільки для зберігання зайвих біт, що утворилися в результаті різниці між табличними значеннями бітрейтів і реально необхідним бітрейтом.

VBR

VBR - змінний битрейт. Користувач вказує бажану якість. Lame спираючись на свою психоакустичну модель виділяє для кожного фрейму рівно ту кількість біт, яка необхідна для досягнення заданої якості. У вихідному потоці кадри відповідно мають різні битрейти (які завжди лягають у таблицю стандартних бітів). Використання резервуара в VBR абсолютно ідентичне ABR - туди потрапляють тільки невикористані хвостики фреймів.

Методи оцінки складності сигналу

Таким чином, основна відмінність CBR, ABR і VBR, як ви вже напевно зрозуміли з сказаного вище, полягає у використанні різних методів підрахунку необхідної для кодування кожного фрейму кількості біт.

Методи оцінки складності сигналу: метод 1 (VBR)

Перший метод заснований на обчисленні «» психоакустичного маскування «» і «» помилки кодування «». Цей метод використовується в VBR і теоретично повинен був би давати максимальну якість якби психоакустична модель Lame'a була ідеальна. В основі цього методу лежить дуже проста ідея: на кодування виділяється мінімальна кількість біт, необхідна для виконання умови: [Помилка _ кодування] < [порога_маскировки] (то бишь дефекты кодирования должны маскироваться основным сигналом и не должны быть различимы на слух).

Пояснення з приводу маскування. Основна маса «» аудіо компресорів з втратами «» використовує для стиснення аудіо сигналу особливості людського слуху (на противагу існують аудіокомпресори використовують особливості звуковироби), а саме його неідеальність. Можна вказати декілька основних «дефектів» слуху, які використовуються в стисненні звуку: 1) обмежений динамічний діапазон. Людина не чує слабких сигналів або інакше кажучи існує якийсь поріг чутності. 2) гучні сигнали (особливо шумові, а не тональні) мають маскуючу дію, при чому як у тимчасовій, так і в частотній області (якщо хтось «» жахнув «» з гармати ви можете і зовсім слух втратити 8-) ), тобто будь-який потужний, особливо шумовий сигнал певної частоти маскує досить слабкий сигнал, особливо якщо він лежить у близькому частотному діапазоні і такий замаскований сигнал можна не кодувати, адже людина його не чує. Поріг маскування може бути збільшений на кілька дециБелл зменшенням якості кодування (пояснення цьому: чим гірша якість кодування, тим більше артефактів і перешкод у звучанні, і тим більш потужний сигнал необхідний, щоб замаскувати ці перешкоди).

Плюс такого методу: теоретично максимальна якість. Мінуси: невисока швидкість а також те, що через не ідеальність психоакустичної моделі в Lame постійно занижується бітрейт, відповідно не рекомендується використовувати без фіксованої нижньої межі близько 112- 128 кБ/с, а отже режим VBR взагалі не рекомендується використовувати на низьких середніх бітрейтах. Резервуар у VBR мінімізовано, а отже не рекомендується використовувати обмеження бітового кадру зверху (пояснення: оскільки практично резервуара в VBR немає, якщо обмежити бітрейт зверху, то деяким фреймам зі "складною" "музикою може виявитися недостатньо біт для кодування звуку, оскільки додаткові біти взяти нізвідки - резервуара немає і бітрейт обмежений; такі фрейми будуть кодуватися тільки тією кількістю біт, яка є в наявності - тобто на максимально допустимому біті, що може призвести до поганої якості кодування).

Методи оцінки складності сигналу: метод 2 (ABR/CBR)

Другий метод заснований на обчисленні Perceptual Entropy (PE), що характеризує складність кодованого сигналу (чим складніше сигнал, тим PE більше). Цей метод використовується для кодування CBR і ABR. Механізм розрахунку складності сигналу за допомогою PE повністю відрізняється від механізму, використаного в VBR. Не вдаючись глибоко в подробиці слід сказати, що якщо в першому методі розрахунок складності сигналу проводився спираючись на властивості маскування, то в даному методі складність сигналу оцінюється шляхом спроби його передбачення: чим більш складний сигнал (огинаюча веде себе хаотично), тим важче він передбачуваний і, відповідно, тим більше біт потрібно для кодування сигналу. Під час кодування кодер намагається передбачити сигнал, потім порівнює передбачений сигнал з оригіналом, чим менш передбачений сигнал збігається з оригіналом, тим більше біт йде на кодування. Дуже важливо відзначити, що використовувані методи обчислення складності сигналу принципово впливають на відмінності використовуючих їх механізмів. Так, принципова різниця між ABR/CBR (що використовують метод опису) і VBR (який використовує метод 1, описаний вище) полягають ще й у тому, що вибір біта в ABR/CBR лежить не на кодері, а на користувачі, при цьому Lame лише додає/ Іншими словами, залежно від обрахованого PE, до вибраного користувачем бітового біта додається (або віднімається від нього) необхідне число біт, що реалізується за допомогою механізму роботи з резервуаром (віртуальним або справжнім). Таким чином, при використанні другого методу саме користувач вибирає бітовий бітовий (коли в VBR кодер вирішує величину бітового), PE лише коригує його за допомогою резервуара залежно від складності музики. Відбувається це приблизно наступним чином.

CBR. для кожного кадру виділяється «» основне «», постійна кількість біт, 90% від зазначеного біта і «» додаткове «», змінна. Прості пасажі кодуються за допомогою цих 90-а відсотків, а решта 10% відсотків накопичуються в резервуарі бітів (як було описано спочатку), аж до його заповнення, після чого на кодування простих пасажів йде весь бітрейт (так як економити біти нікуди). Складні пасажі кодуються використовуючи повний бітрейт плюс з резервуара вилучаються додаткові біти, якщо тільки в ньому ще є біти. Плюси: сумісність, мінуси: через малий розмір резервуара дуже часто нахапає додаткових біт для кодування складних місць.

ABR. При кодуванні ABR використання резервуара мінімізовано, він просто на-просто не потрібен, адже в ABR ми можемо використовувати фрейми з різним бітрейтом і, відповідно, не накопичувати біти в резервуарі (механізм роботи ABR пояснений на прикладі вище). Після обчислення PE і необхідної «» додаткової кількості «» біт, Lame просто вибирає мінімальний битрейт в який вкладається повна необхідна кількість біт (бітова біта вибирається з таблиці). Залишок біт не викидається, а накопичується в резервуарі.

Зауваження: неправильно було б думати, що в CBR і ABR зовсім не використовується психоакустика - звичайно ж це не так. Така річ як перерозподіл битів відведених на кодування фрейму між усіма частотними смугами лежить саме на психоакустиці.

Ув'язнення

Отже, коротко. CBR/ABR і VBR у Lame відрізняються різними методами підрахунку необхідного для кодування кількості біт і, як наслідок, різною «» філософією «» використання резервуара. У CBR і ABR основна кількість бітів, що виділяються на кодування кадру, визначається користувачем при запуску програми: ключами -b або --abr для CBR або ABR відповідно. Кількість додаткових біт необхідних для кодування складних місць розраховується за однаковою формулою на основі розрахунку PE. Різниця між CBR і ABR лише в тому, що в режимі CBR ітрейт постійний і можливості кодера з використання додаткових бітів з резервуара сильно обмежені розміром резервуара, в режимі ж ABR у кодера є можливість змінювати бітрейт, як би використовуючи "віртуальний резервуар" "необмежений

У VBR використовується абсолютно інший метод. Користувач задає якість, а LAME самостійно, на підставі психоакустичної моделі (часом не досконалої), розраховує кількість біт, необхідних для кодування з заданою якістю кожного окремого фрейму. Робота з резервуаром в ABR і VBR однакова.

Таким чином, в режимі VBR кодер сам вибирає бітовий бітовий кадр, в ABR/CBR кодер вибирає лише додаткову кількість біт до вказаного користувачем бітового біта.

Які методи кодування стерео інформації використовуються в алгоритмах MPEG (та інших)?

Існує кілька методів кодування стерео аудіо інформації в стандарті ISO11172-3 (MPEG-1 Layer 1,2,3).

Dual Channel. Цей режим передбачає кодування стерео каналів, як абсолютно незалежних. Іншими словами, в цьому режимі кодування аудіо інформації відбувається окремо в кожному каналі без використання кореляцій між ними. Як і випливає з назви, цей режим головним чином призначений для кодування двох паралельних але різних каналів (наприклад, мова англійською та німецькою мовами), а не стерео (тобто не два канали, що несуть інформацію про стерео картину). Цей режим не рекомендується використовувати для кодування стерео сигналу, оскільки існують програвачі (наприклад, madplay), які програють за замовчуванням тільки один канал якщо потік позначено як Dual Channel.

Stereo. Цей режим відрізняється від попереднього тільки тим, що в режимі Dual Stereo під час кодування для кожного каналу використовується свій резервуар (про це в обговоренні питання про відмінності ABR/VBR/CBR), а в цьому режимі обидва канали кодуються з використанням загального резервуара. Інших відмінностей між режимами немає.

Joint Stereo - це загальне визначення методів кодування стерео інформації, заснованих на використанні надлишковості останньої. Іншими словами, всі методи кодування, засновані на використанні кореляцій між двома стерео каналами, підпадають під визначення Joint Stereo.

При кодуванні в MPEG-1 є два різновиди цього методу.

MS Stereo. В даному режимі кодуються не лівий і правий канал, а їх сумарна складова і різнісна. При цьому перед кодуванням сигнал в кожному окремому фреймі розбивається на частотні смуги (що, власне, відбувається завжди, тобто не тільки в Joint Stereo). Потім проводиться обчислення сумарної і різностної складової каналів, що математично виглядає так: Mi = (Li + Ri )/sqrt (2), Si = (Li-Ri )/sqrt (2), де i - номер частотної смуги на які розбивається сигнал перед кодуванням, M і S - Mid (сума) і Side (різність) канали відповідно, L і R - лівий і При такому кодуванні про якусь деградацію якості говорити не доводиться, оскільки нічого крім найпростіших арифметичних операцій тут немає. Важко говорити про всі MP3-кодери, але саме так робиться в Lame Encoder в режимі VBR. У кодерах від Fraunhofer і в Lame CBR (можливо і в інших кодерах, оскільки цей метод описано в стандарті) в Joint Stereo застосовується додатковий механізм, званий «» Sparsing of side channel «». Суть цього методу полягає в більш жорсткому кодуванні side-каналу, на який, в цьому випадку, як правило, виділяється менша кількість біт, що призводить до деградації звучання в side каналі, але поліпшення якості кодування в mid.

Intensity Stereo. У цьому режимі у верхньому частотному діапазоні так само відбувається кодування загальної складової обох каналів, як і у випадку MS Stereo, але замість кодування різнісної складової у верхньому діапазоні частот відбувається просто реєстрація і запис потужностей сигналів у лівому і правому каналах у кожній частотній смузі починаючи з деякої визначеної. Іншими словами весь сигнал розбивається на смуги, фактичному кодуванню піддається тільки нижній діапазон частот side-каналу, а у верхньому частотному діапазоні починаючи з певної смуги відбувається не кодування сигналу в кожній смузі, а лише реєстрація потужностей сигналу в кожній смузі. Кодування стерео сигналу в нижньому частотному діапазоні здійснюється в режимі MS Stereo або просто Stereo.

Таким чином, в режимі Joint Stereo фактично відбувається кодування лише загальної складової каналів, а стерео на високих частотах «» відтворюється «» (якщо такий термін тут доречний, а краще «» синтезується «») у відповідному каналі шляхом множення загального сигналу на відомі (збережені при кодуванні) значення потужностей частотних ділянок у відповідному каналі

Можна припустити, що приблизно аналогічні методи кодування стерео аудіо інформації застосуючи "

Image

Publish modules to the "offcanvas" position.