Наскільки поганий Android SoundPool? Яку альтернативу використовувати?


77

Я розглядав Android SoundPoolяк механізм реалізації звукових ефектів у своїй загальній бібліотеці розробки ігор. Це здавалося ідеальним.

Але трохи досліджень вказує на те, що всі види з помилок в SoundPool. Чи помилки SoundPoolвсе ще актуальні?

Оскільки я розробляю бібліотеку, будь-які помилки SoundPoolстають помилками в моїй бібліотеці, і я хочу ізолювати своїх користувачів від цього.

Тож моє питання в основному: який API я повинен використовувати для аудіо?

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

Мені потрібно вміти відтворювати розумну кількість одночасних звукових ефектів (принаймні 16, скажімо так) і мати ще більше відкритості. Звуки потрібно починати грати з низькою затримкою. WAVфайли повинні підтримуватися (MP3 / Ogg не має значення). Звукові ефекти повинні підтримувати безперебійне циклічне та динамічне індивідуальне регулювання гучності. Життєвий цикл програми Android повинен бути належним чином підтриманий.

Я чув, що десь існує обмеження в 1 Мб SoundPool, це, мабуть, прийнятно для кожного окремого звукового ефекту, але не для всіх буферів / звуків. Хтось може сказати мені, який саме ліміт?

Нарешті, мені також потрібно вміти відтворювати фонову музику в стислому форматі з низьким навантаженням на процесор. Я припускаю MediaPlayer, що для цього ідеально. Чи можна його використовувати паралельно з іншим API?

Я знаю, що кілька людей використовували MediaPlayerдля заповнення SoundPool. Але чи підтримує він функції, які мені потрібні?

Чи є якісь інші аудіо API, які я пропустив?


3
Я подивився на помилки, на які ви посилалися, і жодна з них не здається дуже катастрофічною. Можливо, мені чогось не вистачає, але я б сказав, просто використовуйте це, і, як ви виявите, про них повідомляють про помилки. Хвала вам за те, що ви робите домашнє завдання!
slf

@slf Я повинен зазначити, що це лише випадкові приклади - є повідомлення про помилки збоїв (як додатків, так і пристроїв) та помилок без звуку, що плавають в Інтернеті. Їх багато, але я не можу сказати, чи це тому, що SoundPoolце глючить, чи люди просто не використовують його правильно чи щось інше. Є кілька місць, які вказують на те, що деякі найгірші помилки стосуються пристроїв. І чи я можу проігнорувати лише один чи два старі пристрої? Або їх численні пристрої потребують багатьох різних обхідних шляхів? (Що у мене немає ресурсів для підтримки.)
Ендрю Рассел,

@AndrewRussell Що з цього вийшло? SoundPool не обробляє файли ogg розміром 90 КБ, що дає класичний 1М журнал - абсолютно дурний. У мене такі самі вимоги, як і у вас. Будемо вдячні за будь-які поради.
zaf

У мого додатка проблеми з відтворенням звуків на Samsung Galaxy S2, я погуглив і виявив, що винним є клас SoundPool. Перевірте це, щоб дізнатись більше про cocos2d-x.org/boards/10/topics/7980 , мабуть, у класу Soundpool проблеми з відтворенням звуків у двоядерних телефонах. Тож краще уникати цього ...
Arif Nadeem

@AndrewRussell Чи можу я запитати, що ти врешті зробив? Я деякий час бавився з бібліотекою, і поки що це працює не дуже добре
Efi G

Відповіді:


16

Просто щоб додати кілька останніх відгуків про це питання. Я вже деякий час використовую SoundPool у програмі з досить великою базою користувачів для звуків натискання клавіш. Наш варіант використання:

  • Повинен бути відтворений негайно
  • Паралельно до 3+ звуків
  • Ми використовуємо setRateповний асортимент[0.5f-2.0f]

Зараз я зіткнувся з двома основними проблемами, пов’язаними з пристроями, і вирішив зменшити свої втрати та відмовитися від SoundPool

  • Велика кількість пристроїв 4,4 LG (переважно лінійки LG G2 / G3) зазнала вихідного збою з їх реалізацією SoundPool. Це було виправлено в оновленні (врешті-решт), але ми все ще маємо багато користувачів з неоновленими пристроями
  • Наразі пристрої Sony Xperia мають усі види проблем із SoundPool, як повідомляють інші . У моєму випадку я виявив, що якщо ви використовуєте setRateз rate > 1.0fSoundPool, починаючи створювати винятки, поки ваша програма не вийде (і в процесі згоряє купу батареї).

TL; DR; Я більше не думаю, що це варте небезпеки / клопоту налагодження SoundPool


Абсурдно, що це все ще проблема. Якщо я коли-небудь повернуся до Android dev ( здригаюся ), то, пекло, я не використовую SoundPool. Прийнято.
Ендрю Рассел

В подальшому, подальші дії. Здається, на деяких з цих пристроїв проблеми заглиблюються глибше, ніж просто SoundPool. Регулювання швидкості відтворення на Xperia все ще має проблеми, коли я використовую AudioTrack. Але, з іншого боку, я, здається, можу обійти їх AudioTrack, а не справаSoundPool
Спаркі

2
@Sparky То що ви зараз використовуєте замість SoundPool? AudioTrackлише з власною реалізацією змішувача? Або будь-яка інша бібліотека?
богуміл

@Sparky та інші, хто має вхідні дані: з чим ви пішли як альтернатива саундпулу?
IcedDante

1
@Sparky допитливі розуми хочуть знати, що ти використовував замість цього ... розкрий нам свій секрет :-p
Хтось десь

9

Дотримуйтесь файлів OGG, і SoundPool зробить вас чудово. Природа мультиплатформеного звіра, який є Android, БУДЕ мати апаратні конфігурації, які не працюватимуть з кожною важливою програмою, як би старанно не намагалися програмісти.

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

Вибачте. Здається, це не відповідь, яку ви шукали. Удачі!


я не мав досвіду, що використання файлів OGG замість файлів MP3 буде працювати нормально. у мене були mp3-файли розміром 3 КБ, 3 КБ, 8 КБ, 16 КБ, 52 КБ і 52 КБ, кожен з яких прив'язаний до іншого жесту. я ніколи не міг завантажити їх усіх; що б не було останнім із найбільших 3 завантажених, результатом буде „AudioFlinger не зможе створити доріжку, статус: -12“. я спробував змінити їх усі на .ogg-файли, і у мене були точно такі ж результати.
john.k.doe

Гммм, розміри ваших файлів не повинні бути проблемою. Будь-які рішення?
SMBiggs

мені не потрібна була надзвичайно висока продуктивність, тому я пішов із гібридним підходом; менші файли (і я додав їх більше; їх зараз у мене 11) знаходяться в саундпулі (і всі вони, як не дивно, все ще є mp3), а більші файли отримують власний MediaPlayer. все ще здається багі; іноді один із файлів звукового пулу, здається, не завантажується, і я намагаюся діагностувати, чому. але жоден з них не перевищує 11 КБ.
john.k.doe

Чи використовуєте Ви служби або якісь інші теми? Можливо, ви створюєте більше однієї копії SoundPool або якогось менеджера? Моя реакція на ваш опис полягає в тому, що щось наступає на ноги іншої речі. Файли мають справді тривіальний розмір - це не повинно бути проблемою взагалі. Я пропоную зробити ваше питання своїм запитанням. Ви отримаєте більше уваги таким чином і зможете пояснити (та код поставки) детальніше.
SMBiggs

Скотте, я міг би це зробити, оскільки питання є більш складним, ніж це має місце. єдиним моїм змістом у моєму оригінальному коментарі було те, що зміна навіть невеликих файлів mp3 на файли ogg сама по собі не вирішила проблему, тоді як передача цих невеликих ресурсів до власних об’єктів MediaPlayer вирішила проблему. . у мене є час ...)
john.k.doe

3

ЗАМОВЛЕННЯ: У мене є невеликий досвід роботи з MediaPlayer, і я не маю успішного досвіду з іншими API, про які я згадую, і наступна інформація базується на тому, що я читав у DOC і що я читав із пошукових запитів Google.

Ви можете використовувати медіаплеєр (для фонової музики) з іншими аудіо API, оскільки MediaPlayer автоматично працює на власному потоці, але я вважаю, що він має високий рівень завантаження процесора, і я не думаю, що він би дуже добре стискав біти, але я не надто впевнений.

Є також JetPlayer http://developer.android.com/reference/android/media/JetPlayer.html, який здається великою роботою для ефективного використання, але він би дуже добре працював з відтворенням фонової музики, а потім відтворенням інших звуків за необхідності в грі. З того, що я прочитав про DOC, для цього потрібен файл MIDI (я думаю?), І ви вимикаєте та вмикаєте звуки доріжок, щоб він працював так, як ви хочете.

Мені подобається AudioTrack, оскільки він дає вам можливість редагувати звуки під час виконання, змінюючи частоти звуку, і SoundPool може робити те саме.

Хоча для вашої ситуації AudioTrack, здається, не буде працювати добре, оскільки для відтворення двох звуків потрібні будуть дві нитки, оскільки AudioTrack блокує (я майже впевнений).

А з SoundPool я думаю, що оскільки у вас 16 звуків, можливо, візьміть дві нитки з одним SoundPool у кожній нитці та застосуйте 8 звуків до кожного SoundPool. Насправді я не знаю, оскільки я ніколи навіть не пробував користуватися SoundPool.

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

І я насправді нічого не знаю про помилки SoundPool, оскільки я їх не досліджував.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.