Робота з регуляторами гучності – РОЗРОБКА ІГОР ДЛЯ ОС ANDROID

Якщо у вас є телефон на Android, то знаєте, що при натисканні кнопок збільшення і зменшення гучності ви керуєте різними параметрами в залежності від того, яка програма в даний момент використовуєте При дзвінку ви регулюєте гучність голосу вашого абонента, у додатку You Tube – гучність звукового супроводу ролика, на головному екрані – гучність дзвінка

Початок традиційний – успадковуємо наш клас від Activity і реалізуємо в ньому інтерфейс OnTouchLi stener, щоб можна було обробляти торкання екрана У нашому класі є два члена: SoundPool і покажчик на звуковий ефект, який буде завантажуватися і відтворюватися (ми встановили його початкове значення рівним -1, поки звуковий ефект ще не завантажено)

У методі OnCreateO ми робимо те, що виконували вже неодноразово: створюємо TextVi ew, реєструємо активність як OnTouchLi stener і встановлюємо TextVi ew в якості засоби відображення

Наступний рядок – привязка кнопок управління гучністю до музичного потоку Далі створюємо SoundPool і налаштовуємо його на одночасне відтворення 20 ефектів – цього має бути достатньо для більшості ігор Нарешті, отримуємо дескриптор Asset Fi 1 eDescri ptor для файлу explosi on ogg (поміщеного в каталог assets /) від AssetManager Для програвання звуку ми просто передаємо цей дескриптор методу SoundPool oad і зберігаємо отриманий покажчик Метод SoundPool load обробляє виключення (якщо при завантаженні виникли якісь проблеми, показуємо на екрані повідомлення про помилку)

У методі OnTouchO просто перевіряємо відрив пальця від дисплея, що означає факт торкання У цьому випадку, якщо звуковий ефект був завантажений успішно (тобто його вказівник не дорівнює -1), ми його відтворюємо

Якщо ми запустимо нашу маленьку активність і торкнемося до екрану, то почуємо звук вибуху Якщо ви почнете швидко барабанити по дисплею, то почуєте безліч вибухів, що перекривають один одного Буде досить важко перевищити ліміт у 20 одночасно відтворюваних ефектів Однак якщо це все ж відбудеться, один з звуків припиниться, щоб дати місце знову запрошенням

Зауважте – в цьому прикладі ми не вивантажуємо звук і не звільняємо ресурси SoundPool Це зроблено для стислості – зазвичай SoundPool вивантажується в методі onPause перед знищенням активності Памятайте – завжди необхідно вивантажувати з памяті все, що вам більше не потрібно

Хоча клас SoundPool дуже простий у використанні, є кілька моментів, на які варто звернути увагу

Метод SoundPool loadO виконує завантаження асинхронно Це означать, що вам доведеться трохи почекати перед викликом методу SoundPool pi ay, оскільки завантаження може ще не закінчитися На жаль, не існує універсального способу перевірити стан процесу завантаження ефекту Це можна зробити тільки при використанні SDK SoundPool версії 8, а нам необхідно забезпечити сумісність з усіма версіями Android Зазвичай це не є великою проблемою – ви можете завантажити інші активи до того, як звуковий ефект буде відтворений вперше

SoundPool має деякі проблеми при роботі з МРЗ-файлами і великими фрагментами (чия тривалість визначається як більше 5-6 секунд) Обидві неприємності не задокументовані, тому немає чіткого правила для визначення, викличе ваш звуковий фрагмент проблеми чи ні В якості загального правила я б запропонував відмовитися від МРЗ на користь формату OGG і використовувати якомога менші частоту дискретизації і тривалість, при яких якість звуку залишається прийнятним

ПРИМІТКА

Як і для всіх обговорених нами раніше API, функціональність SoundPool набагато ширше Я згадував, що ви можете відтворювати звукові ефекти циклічно Для цього ви отримуєте ID від методу SoundPoolplay, який ви можете використовувати для паузи або призупинити відтворення циклічного ефекту Вивчіть документацію по класу SoundPool на сайті Android Developers, якщо вам необхідна така функціональність

Джерело: Mario Zechner / Маріо Цехнер, «Програмування ігор під Android», пров Єгор Сидорович, Євген зазноби, Видавництво «Пітер»

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


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

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

Ваш отзыв

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

*

*