Структура для звуку в C + +

Серед цілей, які я ставив перед собою при написанні цієї книги, є і розробка набору інструментальних засобів для роботи зі звуком Ці інструменти повинні бути корисні в різних обчислювальних системах Щоб ви могли легко отримувати конкретні результати, у вас повинна бути можливість комбінування різних засобів роботи зі звуком У вас також не повинно викликати труднощів створення нових інструментальних засобів або модифікація наявних

Я вирішив скористатися методом створення програмних компонентів, які можна було б легко комбінувати Цей підхід як не можна краще відповідає принципам обєктно-орієнтованого програмування Оскільки мова C + + на даний момент є найбільш широко доступним обєктно мовою, я вирішив розробляти ці інструменти як набір класів C + + (Якщо ви мало знайомі з мовою C + +, то можете звернутися до додатка В У цьому додатку міститься короткий опис засобів C + + для програмістів, які знають С)

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

Як приклад я пропоную вам просту функцію main, яка зчитує з СIN аудіофайл формату AU і відтворює його за допомогою гучномовця

Лістинг 41 Програма playaucpp

Copyright © 1998 Tim Kientzle (лістинг Е1)

#include &ltfstream&gt

#include &quotauh&quot

#include &quotaplayerh&quot

/ / Пробуємо вибрати відповідну програму-програвач для

/ / Систем Win32, Macintosh або UNIX / NAS

#if defined(_WIN32)

#include &quotwinplayrh&quot typedef WinPlayer Player

#elif defined(macintosh)

#include &quotmacplayrh&quot typedef MacPlayer Player

#else

#include &quotnasplayrh&quot

typedef NasPlayer Player

#endif

int main() {

AuRead auRead (cin) / / Створюємо обєкт AuRead

Player player (& auRead) / / Зєднуємо вихід обєкта auRead

/ / З входом програми-програвача

playerPlay () / / Тепер запускаємо програму-

/ / Програвач

return 0

}

Файл це не єдине можливе джерело звукової інформації, також і гучномовець не єдине можливе пристрій виведення Нижче наведено ще один приклад, в якому синусоїда записується у вихідний файл формату AU Зверніть увагу: оскільки клас SineWave дозволяє генерувати вихідні файли будь-якого формату, необхідно вказати потрібний варіант Якщо вихідний формат не буде зазначений, то в обєктах sinewave і player стануть використовуватися значення, з деяких міркувань задані за замовчуванням

Лістинг 42 Програма sinetoaucpp

#include &quotsinewaveh&quot

#include &quotaplayerh&quot

#include &quotauh&quot

int main(int, char **) {

SineWave sinewave (440) / / Синусоїда 440 Гц

sinewaveSamplingRate (11025) / / Частота дискретизації 11025 Гц

AuWrite player (& sinewave) / / Підключаємо хвилю до програми-

/ / Програвачу

playerPlay()

return 0

}

У даного підходу є ряд переваг:

 ‰ Ð ¾ Ð ½   Р¾ Ð ± Ð »Ð ° ÐÐ ° ÐμÑ,   Р¸ Ñ Ð º л ÑŽÑ ‡ Ð ¸ Ñ, ÐμÐ »ÑŒÐ ½ Ð ¾ Ð ¹   Р¿ÐμÑ € ÐμÐ ½ Ð ¾ Ñ Ð ¸ Ð ¼ Ð ¾ Ñ Ñ, ью  Р• Ð Ð ¸ Ð ½ Ñ Ñ, Ð ² ÐμÐ ½ Ð ½ Ð ¾ Ð ¹   Р° Ð ¿Ð ¿Ð ° Ñ € Ð ° Ñ, Ð ½ Ð ¾ –

залежною частиною цієї програми є клас, який передає моментальні значення ІКМ на гучномовець Я переніс використовуваний у цій книзі код на три різні операційні системи (Windows, Mac OS і UNIX) з мінімальними змінами У нашому прикладі додатку playsnd – Всього 5% коду є апаратно залежною

 ‰ Ñ Ñ, Ð ¾  Р¾ Ñ ‡ ÐμÐ ½ ÑŒ  Р³ Ð ¸ Ð ± Ð º Ð ¸ Ð ¹  Р¿Ð ¾ ÐÑ .. Ð ¾ Ð ,  Р¼ Ð ¾ Ð ¶ Ð ½ Ð ¾  Р»ÐμÐ ³ Ð º Ð ¾ Â Ñ Ð ¾ Ð · ÐÐ ° Ð ² Ð ° Ñ, ÑŒ Â Ñ ​​€ Ð ° Ð · Ð ½ Ð ¾ Ð ¾ Ð ± Ñ € Ð ° Ð · Ð ½ Ñ <Ðμ  Рº Ð ¾ Ð ¼ Ð ± Ð ¸ Ð ½ Ð ° -

ції обєктів

 ‰ Ð ± Ð »Ð ° Ð ³ Ð ¾ ÐÐ ° Ñ € Ñ Ñ, Ð ¾ Ð ¼ у, Ñ ‡ Ñ, Ð ¾ Ð ¾ Ð ± ÑŠÐμÐ º Ñ, Ñ <Ð ½ Ðμ Ð ¾ Ñ, Ð'Ðμл ьР½ Ñ <Ðμ Ð ¿Ñ € Ð ¾ Ð ³ Ñ € Ð ° Ð ¼ Ð ¼ Ñ < , Ð ² Ñ Ðμ Ð ¾ Ð ± ÑŠÐμÐ º Ñ, Ñ <Ð ² Ð ¿Ð ¾ Ñ -

ледовательно можуть звертатися один до одного з запитами для визначення оптимальних параметрів Наприклад, клас SineWave, який просто виробляє синусоїду, може звертатися до обєктів, наступним за ним в послідовності, щоб зясувати оптимальну частоту дискретизації

І навпаки, клас, у завдання якого входить обмін даними з гучномовцем, може звертатися до обєктів, попереднім йому, щоб зясувати, які параметри для них краще

Як відомо, при роботі з C + + легко зіткнутися з несподіваними сюрпризами Стандарт ANSI зявився порівняно недавно, і не всі компілятори C + + задовольняють цим стандартом Хоча використані в цій книзі вихідні тексти були протестовані різними компіляторами в різних системах, я не можу гарантувати, що вони обовязково стануть працювати на вашому улюбленому компютері Крім того, мова C + + складніше ряду інших мов програмування Хоча я і намагався зробити вихідні тести програм у цій книзі настільки простими, наскільки це можливо, тим, хто не дуже добре знайомий з концепціями C + +, ймовірно, знадобиться звернутися до додатка В або прочитати кілька початкових глав хорошого підручника з C + +

Джерело: Кінтцель Т Керівництво програміста по роботі зі звуком = 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>

*

*