16-бітна ІКМ

16-бітові формати також бувають знакові і беззнакові, однак беззнаковий 16-бітний формат використовується рідко Головною відмінністю є порядок, в якому 2 байта 16-бітного відліку записуються у файл (Ця ж проблема виникає при використанні менш поширених 24І 32-бітних вибірок)

формату MSB

B форматі MSB першим слід старший байт, за ним молодший Цей формат широко застосовується в аудіофайл для компютерів Macintosh і Amiga, де використовуються процесори сімейства Motorola 680×0 Такий порядок запису байтів

також узгоджується з мережевим форматом, застосовуваним багатьма стандартами

Internet

Лістинг 105 Класи для 16-бітної ІКМ

class DecompressPcm16MsbSigned: public AbstractDecompressor {

public:

DecompressPcm16MsbSigned(AudioAbstract &ampa): AbstractDecompressor(a) {

/ / Кодування: 16-бітна MSB ІКМ

cerr &lt&lt &quotEncoding: 16-bit MSB PCM\n"

}

size_t GetSamples(AudioSample *buffer, size_t length)

}

Для підвищення ефективності роботи 16-бітна версія методу GetSamples просто зчитує байти в буфер, після чого перетворює кожну пару байтів в один відлік Врахуємо, що даний фрагмент коду програми володіє абсолютною переносимістю: ми не робили ніяких припущень про порядок байтів, використовуваному в компютері, на якому запущена програма Ця функція буде працювати при будь-якому розмірі даних типу AudioSample, що перевищує 16 біт

Лістинг 106 Реалізація методів для 16-бітної ІКМ

size_t DecompressPcm16MsbSigned::GetSamples(AudioSample *buffer, size_t length) {

AudioByte *byteBuff =

reinterpret_cast&ltAudioByte *&gt(buffer) size_t read = ReadBytes(byteBuff,length*2)/2 for(long i=read-1 i&gt=0 i–) {

short s = static_cast&ltAudioSample&gt(byteBuff[2*i]) &lt&lt 8 s |= static_cast&ltAudioSample&gt(byteBuff[2*i+1]) &amp 255 buffer[i] = static_cast&ltAudioSample&gt(s)

&lt&lt ((sizeof(AudioSample)-2)*8)

}

return read

}

формату LSB

B випадку LSB формату спочатку записується молодший байт, а потім старший Такий порядок запису байтів широко поширений в форматах, що використовуються в операційних системах MS DOS, OS / 2 і Microsoft Windows, що працюють на процесорах сімейства Intel 80×86

Лістинг 105 Класи для 16-бітної ІКМ (продовження)

class DecompressPcm16LsbSigned: public AbstractDecompressor {

public:

DecompressPcm16LsbSigned(AudioAbstract &ampa) i

AbstractDecompressor(a) {

/ / Кодування :16-бітна LSB ІКМ

cerr &lt&lt &quotEncoding: 16-bit LSB PCM\n"

}

size_t GetSamples(AudioSample *buffer, size_t length)

}

Лістинг 106 Реалізація методів для 16-бітної ІКМ (продовження)

size_t DecompressPcm16LsbSigned::GetSamples(AudioSample *buffer, size_t length) {

AudioByte *byteBuff =

reinterpret_cast&ltAudioByte *&gt(buffer) size_t read = ReadBytes(byteBuff,length*2)/2 for(long i=read-1 i&gt=0 i–) {

short s = static_cast&ltAudioSample&gt(byteBuff[2*i+1]) &lt&lt 8 s |= static_cast&ltAudioSample&gt(byteBuff[2*i]) &amp 255 buffer[i] = static_cast&ltAudioSample&gt(s)

&lt&lt ((sizeof(AudioSample)-2)*8)

}

return read

}

Глава 11 Нелінійні звукові формати

Лінійні формати запису звуку, в деякому розумінні, є примітивними Слух людини влаштований так, що ми практично нечутливі до невеликих спотворень гучних звуків, зате дуже добре помічаємо ті ж спотворення в більш тихих звуках Однак при використанні ІКМ рівень похибки не залежить від величини амплітуди

He будемо забувати, що величина, використовувана нами для запису вибірки, всього лише код Варто уважніше придивитися до цих кодів і подумати, чи не можна перевизначити їх так, щоб підвищилася якість звуку, який ми зможемо записати за допомогою того ж обсягу даних Ця ідея лягла в основу декількох методів, які є альтернативою простий ІКМ

Кращим варіантом кодування, що застосовується при обробці звуку, завжди залишиться лінійна ІКМ Незалежно від того, які маніпуляції ви проводите змішуєте два звуку шляхом підсумовування або змінюєте рівень звучання за допомогою множення на постійний коефіцієнт ви працюєте в припущенні, що використовувана кодування лінійна Зате нелінійні формати стануть в нагоді для передачі та зберігання звуків

Джерело: Кінтцель Т Керівництво програміста по роботі зі звуком = A Programmers Guide to Sound: Пер з англ М: ДМК Пресс, 2000 432 с, іл (Серія «Для програмістів»)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*