Коя рамка трябва да използвам за възпроизвеждане на аудио файл (WAV, MP3, AIFF) в iOS с ниска латентност?

iOS има различни аудио рамки от по-високо ниво, което ви позволява просто да възпроизведете определен файл, до по-ниско ниво, което ви позволява да получите необработените PCM данни и всичко между тях. За нашето приложение просто трябва да възпроизвеждаме външни файлове (WAV, AIFF, MP3), но трябва да го правим в отговор на натискане на бутон и имаме нужда това забавяне да бъде възможно най-малко. (Това е за чакане на опашка в продукции на живо.)

Сега AVAudioPlayer и подобни работят за възпроизвеждане на прости файлови активи (чрез техния URL адрес), но неговата латентност при действителното стартиране на звука е твърде голяма. При по-големи файлове с дължина над пет минути, закъснението за стартиране на звука може да надхвърли една секунда, което го прави почти безполезен за синхронизиране при изпълнение на живо.

Сега знам, че неща като openAL могат да се използват за възпроизвеждане с много ниска латентност, но тогава сте затънали до кръста в аудио буфери, аудио източници, слушатели и т.н.

Въпреки това, някой знае ли за някакви рамки, които работят на по-високо ниво (т.е. възпроизвеждане на „MyBeddingTrack.mp3“) с много ниска латентност? Предварителното буфериране е добре. Просто спусъкът трябва да е бърз.

Бонус, ако можем да правим неща като задаване на началната и крайната точка на възпроизвеждането във файла, или да променим силата на звука, или дори да извършим заглушаване и т.н.


person Mark A. Donohoe    schedule 25.01.2013    source източник


Отговори (7)


следващият SO въпрос съдържа работещ код, който възпроизвежда файл с помощта на аудио модули и по-специално AudioFilePlayer. Въпреки че във въпроса се посочва, че не работи, за мен работи веднага - добавете само AUGraphStart(_graph) в края.

Свойството „ScheduledFilePrime“ на AudioFilePlayer посочва каква част от файла да се зареди, преди да започне възпроизвеждането. Може да искате да си поиграете с това.

Но както другите отбелязват, аудио модулите имат стръмна крива на обучение.

person fishinear    schedule 05.07.2013

Въпреки че рамката на Audio Queue е сравнително лесна за използване.. тя носи много DSP тежка работа зад кулисите (т.е. ако я снабдите с VBR/компресирано аудио.. тя автоматично я преобразува в PCM, преди да я възпроизведе на високоговорителя.. тя също се справя непрозрачно с много проблеми с нишките за крайния потребител).. което е добра новина, някой прави леко приложение, което не е в реално време.

Споменахте, че имате нужда от него за чакане на опашка в продукции на живо. Не съм сигурен дали това означава, че приложението ви е в реално време.. защото ако е така.. тогава Audio Queue ще се бори да задоволи вашите нужди. Добра статия за това е На Рос Бенчина. Изводът е, че не можете да си позволите да позволите на рамки или библиотеки на трети страни да правят нещо, което може да бъде потенциално скъпо зад кулисите, като заключване на нишки или маллокиране или освобождаване и т.н. и т.н., това просто е твърде скъпо и рисковано за разработване на аудио приложения в реално време .

Това е мястото, където се намесва рамката на аудио модула. Аудио опашката всъщност е изградена върху рамката на аудио модула (той автоматизира голяма част от работата си).. но аудио модулите ви доближават толкова близо до метала, колкото става с iOS. Той е толкова отзивчив, колкото искате, и може лесно да направи приложение в реално време. Audio Unit обаче има огромна крива на обучение. Около него има някои обвивки с отворен код, които го опростяват (вижте novocaine).

Ако бях на твое място.. поне бих прегледал обучение Core Audio.. това е книгата за всеки разработчик на основно аудио за iOS.. говори подробно за аудио опашки, аудио единици и т.н. и има отличен код примери..

От моя собствен опит.. Работих върху приложение за аудио в реално време, което имаше някои интензивни аудио изисквания.. Намерих рамката Audio Queue и си помислих, че е твърде хубаво, за да е истина.. моето приложение работеше, когато го прототипирах със светлинни ограничения .. но просто се задави при стрес тестване.. тогава трябваше да се потопя дълбоко в аудио модулите и да променя архитектурата и т.н. и т.н. (не беше красиво). моят съвет: работете с аудио опашка поне като въведение в аудио модулите.. придържайте се към него, ако отговаря на вашите нужди, но след това не се страхувайте да използвате аудио модули, ако стане ясно, че аудио опашката вече не отговаря на изискванията на приложението ви .

person abbood    schedule 03.02.2013

Най-ниската латентност, която можете да получите, е с аудио модули, RemoteIO.

Дистанционно I/O устройство

Устройството за отдалечен вход/изход (подтип kAudioUnitSubType_RemoteIO) се свързва към хардуера на устройството за вход, изход или едновременно въвеждане и изход. Използвайте го за възпроизвеждане, запис или едновременно въвеждане и извеждане с ниска латентност, където не е необходимо премахване на ехото.

Разгледайте тези уроци:

http://atastypixel.com/blog/using-remoteio-audio-unit/

http://atastypixel.com/blog/playing-audio-in-time-using-remote-io/

person EhTd    schedule 29.01.2013
comment
RemoteIO изглежда малко обезсърчително на пръв поглед, но очевидно е най-добрият избор за ниска латентност. Той също така позволява задаване на начални/крайни точки или подобни функции. - person Totoro; 18.02.2013

Имате нужда от звукова рамка на системата. Системната звукова рамка е създадена за неща като използване на интерфейсни звуци или бързи, отзивчиви звуци. Разгледайте тук .

person Linuxios    schedule 25.01.2013
comment
Не, това е за кратки звуци (и вибрации.) Както споменах във въпроса ми, файловете могат да бъдат много дълги, така че звуковата рамка на системата не е това, което трябва да се използва. Все още е добре да знам за това, благодаря! :) - person Mark A. Donohoe; 25.01.2013

AVAudioPlayer има prepareToPlay метод за предварително зареждане на своите аудио буфери. Това може значително да ускори времето за реакция.

person Joris Kluivers    schedule 25.01.2013
comment
Това може да работи за един звук, но всъщност имаме няколко звука, които бихме искали да задействаме. Освен това в документацията се посочва, че извикването на „Стоп“ или оставянето му да завърши възпроизвеждането отменя това, което означава, че ще трябва постоянно да го настройваме. Все пак това е добре за еднократни неща. - person Mark A. Donohoe; 25.01.2013

Сблъсках се със същия проблем като вас, но след известно проучване намерих страхотна рамка. В момента използвам звуковата рамка ObjectAL на kstenerud. Той е базиран на OpenAL и с добър документ. Можете да възпроизвеждате фонова музика и звуков ефект с множество слоеве.

Ето проект в github https://github.com/kstenerud/ObjectAL-for-iPhone Ето уеб сайта http://kstenerud.github.com/ObjectAL-for-iPhone/index.html

person NelsonPunch    schedule 25.01.2013
comment
Добре... от главната страница изглежда, че може да е адски готино! Благодаря! Копая сега. Въпросът за аудио опашката беше на път да получи отговор, но сега се бавя поради това. Ще ви кажа какво открих. - person Mark A. Donohoe; 25.01.2013
comment
Използвам го само за възпроизвеждане на фонова музика и звукови ефекти, но може да направи сложен звук. - person NelsonPunch; 29.01.2013

Бих използвал рамка за аудио опашка. https://developer.apple.com/library/mac/ipad/#documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/Introduction/Introduction.html

person user523234    schedule 25.01.2013
comment
Не знаех, че е на iOS! Сега ровя в техния пример SpeakHere. Не съм фен на това, че правят мостри от пълни приложения като този, защото сега ровите в куп глупости, несвързани с технологията (т.е. те имат измерватели на изгледа, които изобразяват в OpenGL ES. Наистина?! Имате ли нужда от това в < i>audio проба?! Това трябва да е в по-напреднала проба!) Освен това не е с активиран ARC, което означава, че трябва да се справя с много съвместимост и т.н. Все пак това изглежда най-много обещаващо досега. Може да опитам да опаковам това в моята собствена статична мини-библиотека, за да мога просто да го насоча към файлове и да тръгвам. - person Mark A. Donohoe; 25.01.2013
comment
(които наистина трябва да обмислят промяна на потребителското си име! LOL!)... знаете ли за ограничение за това колко аудио опашки може да има вашето приложение? Можем да имаме до 100 бутона на екрана и всички трябва да са готови в даден момент, но мисля, че прочетох, че има ограничение от 30 реплики. Не мога обаче да намеря къде го прочетох, така че не мога да потвърдя. - person Mark A. Donohoe; 26.01.2013
comment
Не съм сигурен в това... Тъй като се запознах малко с Audio Queue, докато правех проучване за последния си проект. И в крайна сметка използвах аудио модули вместо това. Може би някой друг може да се справи с това. - person user523234; 26.01.2013
comment
не съм сигурен за ограничението за това колко аудио опашки може да има вашето приложение.. но от друга страна има много неща, които са непрозрачни в света на аудио опашките.. и лесно можете да се окажете в ситуация, в която нещо просто не не работи и не можете да разберете защо с аудио опашки.. вижте моя отговор за повече подробности - person abbood; 04.02.2013