- Associate — перевод, произношение, транскрипция
- глагол ↓
- прилагательное ↓
- существительное ↓
- Мои примеры
- Словосочетания
- Примеры
- Что такое кодек MQA, или Разделяй частоты и властвуй
- Сохранить обертоны
- Аудиооригами
- Аудиофильская функциональность
- Русские Блоги
- Углубленный анализ Android Audio AudioTrack
- AudioTrack процесс строительства
- Построить собственный AudioTrack
- Построить AudioTrackJniStorage
- Инициализировать AudioTrack
Associate — перевод, произношение, транскрипция
глагол ↓
прилагательное ↓
существительное ↓
Мои примеры
Словосочетания
Примеры
He associates with strange people.
Он общается со странными людьми.
She associates herself with some pretty strange people.
Она связалась с довольно странной компанией.
I always associate the smell of those flowers with my childhood.
Аромат этих цветов всегда ассоциируется у меня с детством.
My mother used to warn me not to associate with riff-raff.
Моя мама часто предупреждала меня, чтобы я не общался со шпаной.
I don’t associate him with energetic sports.
У меня он не ассоциируется с подвижными видами спорта.
I no longer wish to be associated with people like him.
Я больше не желаю знаться с подобными ему людьми.
This happened the year before the war of our Associates.
Это случилось за год до войны наших союзников.
Her associates respected her for her hard work.
Коллеги уважали её за трудолюбие.
She started as an associate at the law firm.
Она начала в качестве помощника в этой юридической фирме.
Try not to associate with that riffraff.
Постарайся не общаться с этой сволочью.
He’s an associate member of the club but he hopes to become a full member soon.
Он является ассоциированным членом клуба, но надеется скоро стать его полноправным членом.
He had to consult his associate before continuing.
Прежде чем продолжить, ему пришлось посоветоваться с коллегой.
He did not associate himself with the pro-democracy movement.
Он не ассоциировал себя с этим движением за демократию.
I don’t appreciate your ritzy advice about whom I “should” associate with.
Мне не нравятся ваши чванливые советы по поводу того, с кем мне «следует» общаться.
Associates in the law firm bill at a lower rate than do partners.
Младшие сотрудники в юридической фирме берут по более низкой ставке, чем партнёры.
She was promoted from assistant editor to associate editor and may soon be promoted to senior editor.
Она прошла путь от младшего редактора до ответственного редактора, и вскоре её, может быть, назначат на должность старшего редактора.
Источник
Что такое кодек MQA, или Разделяй частоты и властвуй
Кто-то под новостями хай-энда понимает новодельную виниловую пластинку толщиной с пирог. Боб Стюарт, основатель Meridian Audio, с самого начала 80-х интересовался не фетишами, а вполне конкретными цифровыми технологиями, пускай и невидимыми в работе. DVD-Audio, DSP-колонки Meridian и вот — анонс формата MQA. «Мало вам DSD, опять новые декодеры заставят покупать» — уже слышен бубнеж скептиков. Однако попробуем разобраться, чего нам не хватало в классическом способе PCM и зачем сегодня понадобился еще один lossless.
Сохранить обертоны
В октябре 2014 года в Нью-йорке в рамках профессиональной выставки AES Convention был представлен доклад под названием «A Hierarchical Approach to Archiving and Distribution». В подстрочном переводе заголовок звучит немного дико — «Иерархический метод архивации и дистрибуции», но феодализм здесь ни при чем.
Боб Стюарт рассказывает об MQA на конференции во время мюнхенской выставки Munich High End в 2015 году
Если вы сравните записи 16 бит/48 кГц и 24 бит/96 кГц, вторая окажется более благозвучной. Это все знают. Но всякий, кто складировал аудио на хард-диске, в курсе, что увеличение разрядности, увы, кратно раздувает объем файла. 24-битовый трек займет в полтора раза больше места, чем на 16 бит. Если вы записываете звук с дискретизацией 96 кГц, то файл будет в два раза больше, чем на 48 кГц. Ну а для 192 кГц сами посчитаете. Один альбом, получается, потянет под 1,5, а то и 2 гигабайта, даже если его заархивировать во FLAC (т.е. уменьшить объем процентов на 40). При воспроизведении FLAC распаковывается в несжатый PCM-поток, который на 24/192 может достигать плотности передачи данных до 9,2 Мбит/с. Много это или мало?
Усилитель/беспроводной стриммер Bluesound Powernode 2 поддерживает декодирование MQA
У компакт-диска эта величина колеблется от 0,4 до 1,4 Мбит/с. Коллега DSD имеет 5,6 Мбит/с. Для DVD-изображения битрейт колеблется от 4 до 9,8 Мбит/с, но для цифрового телевидения стандартной четкости этот показатель гораздо ниже. Для Youtube и прочего стримвидео используют более эффективные кодеки типа H.264, позволяющие на 2,5 Мбит/с получить приемлемую HD-картинку разрешением 720p.
В любом случае битрейт стараются делать поменьше, потому что не каждый пользователь сидит на оптоволоконной линии. Словом, потому и интернет-радиостанции обходят идеи высокодискретного аудио десятой дорогой.
Аудиофильский плеер Pioneer XDP-100R стал первым портативным гаджетом с поддержкой MQA
При этом спектр подобных HD-фонограмм, при всем к ним уважении, оказывается практически пуст более чем наполовину. Таковы издержки линейного метода кодирования PCM. Жалко места, но и обертона сохранить очень хочется!
Наши ученые-докладчики на AES Convention, а речь идет о Роберте Стюарте и его коллеге Питере Крейвене, обратили внимание, что формально динамический диапазон тех самых ультразвуковых обертонов крайне невелик. А значит, оцифровать аудиопоток можно нелинейным способом, на основе определенной математической модели.
Суть кодирования MQA: информация свыше 48 кГц «прячется» в массив данных ниже шумового порога
Для демонстрации была приведена диаграмма музыкального фрагмента, записанного в максимальной разрядности 24 бит/192 кГц. Вертикальная ось графика Y отвечает за пиковый уровень музыкального сигнала и окружающего фонового шума, а горизонтальная X указывает на частоту полосы. В нашем случае, с частотой дискретизации 192 кГц, крайняя точка оси X имеет значение 96 кГц. С такими характеристиками мы зафиксируем полную картину происходящего при записи.
Повторение процедуры MQA — теперь аудиоданные с дискретностью 192 кГц и 96 кГц упакованы в файле с разрядностью 48 кГц
При этом на графике видно, что начиная с 55 кГц полезный сигнал практически сливается с шумом. Для иллюстрации примером послужил звук струнного оркестра, но Стюарт подчеркивает, что в целом все музыкальные исполнения укладываются в этот своеобразный «треугольник». Максимальная амплитуда сигнала наблюдается в басах и постепенно снижается до минимальных значений на ультразвуке. А теперь, внимание, — инкапсуляция!
Аудиооригами
В терминологии информатики и программирования инкапсуляция означает упаковку некой функции или данных в общем массиве. В нашем случае это выглядит следующим образом. C наивысшей частотой дискретизации 192 кГц оцифровывается лишь спектр свыше 48 кГц. Поскольку динамический диапазон сигнала здесь крошечный и едва отличается от шума, то и места оцифровка займет немного. Теперь этот участок просто переносится и включается (т.е. инкапсулируется) кодеком MQA в область ультразвуковых шумов между 24 и 48 кГц где-то ниже шумового порога, на уровне –130 дБ. Место абсолютно никому не нужное и не слышное, но, как видите, с помощью математики в нем можно прятать разные полезные вещи.
На выставке CES 2016 объявили о поддержке смартфоном HTC One A9 формата кодирования MQA
Что-то подобное проделывалось и на HDCD-дисках. Только тогда в шуме 16-битного сигнала кодировали данные четырех младших разрядов 20-битного аналогово-цифрового преобразователя. Здесь же мы имеем запись 24/96 с инкапсулированными полезными элементами из 24/192. Но и это еще не конец. Почему бы не сыграть в прятки еще раз?
Сетевые High-End-стриммеры Auralic Aries поддерживают декодирование MQA
В этот раз берем и кодируем участок от 24 до 48 кГц и прячем содеянное уже в базовую полосу ниже шумов квантования на –144 дБ. В итоге мы имеем аудиопоток с характеристиками 24 бит/48 кГц, из которого декодер MQA при воспроизведении восстановит весь хайрез с дискретизацией 192 кГц. Напоминает матрешку, но Боб Стюарт предпочитает японское прочтение этого феномена — «аудиооригами». Теперь только осталось дополнительно утрамбовать результат традиционным lossless-способом, как это делает FLAC и ему подобные компрессоры.
Аудиофильская функциональность
Таким образом, финальный продукт будет иметь битрейт чуть выше, чем у несжатого РСМ на компакт-диске. А с этим уже можно жить и распространять в реальном времени. При этом разработчик предусмотрел обратную совместимость. Файлы MQA воспроизведутся и без фирменных декодеров, просто будет отыгран лишь базовый поток 16 бит/48 кГц, а все потаенное отправится в дренаж. Собственно, аналогичный механизм действовал и с упомянутыми дисками HDCD. Их можно было слушать на обычных CD-плеерах, за вычетом магии фильтра Pacific Microsonics.
Meridian Exploper 2 — самое первое устройство, на котором работал MQA-декодер
Остается надеяться, что проект Meridian не постигнет такая же судьба. Во всяком случае, главным козырем MQA являются даже не аудиофильские качества (о них поговорим ниже), а функциональность. Рекорд-компания теперь может не дублировать издание в нескольких форматах. В рамках одного-единственного файла MQA-пользователь получает возможность выбирать уровень качества. Одним из первых интерес к новинке Meridian проявил крупный британский медиасервис 7digital.
И еще один аспект, теперь уже звуковой. Сейчас пока рано судить, ведь кулик всегда свое болото похвалит. Роберт Стюарт настаивает, что в случае прямой конвертации в MQA процесс оцифровки и декодирования по переходным характеристикам максимально приближен к человеческому восприятию аналогового звука. Очевидцы презентаций Meridian говорят только хорошее о демозаписях в MQA. Надеемся, в ближайшее время и у нас появится возможность сравнить один и тот же фрагмент в MQA и в теперь уже «старом добром» РСМ 24/192.
Источник
Русские Блоги
Углубленный анализ Android Audio AudioTrack
MediaPlayer и AudioTrack могут использоваться для воспроизведения звука, оба из которых предоставляют Java-API для разработчиков. Хотя все могут воспроизводить звук. Но есть еще большая разница между ними. Самое большое отличие заключается в том, что MediaPlayer может воспроизводить звуковые файлы в нескольких форматах. Такие как MP3. AAC, WAV, OGG. MIDI и т. Д.
MediaPlayer создаст соответствующий аудиодекодер в слое фреймворка. AudioTrack может воспроизводить только декодированный поток PCM. Предполагая, что это файл, он поддерживает только аудиофайлы в формате wav. Поскольку большинство аудиофайлов формата wav являются потоками PCM. AudioTrack не создает декодер. Таким образом, он может воспроизводить только файлы WAV, которые не нужно декодировать.
Конечно, между ними все еще существует тесная связь: MediaPlayer все равно создаст AudioTrack на уровне структуры и передаст поток декодированных данных PCM в AudioTrack. Затем AudioTrack передается AudioFlinger для микширования, а затем передается на оборудование для воспроизведения, поэтому MediaPlayer включает AudioTrack. Пример демонстрации с использованием AudioTrack для воспроизведения музыки:
Кажется, что большая часть сегодняшнего аудио — это 16-битный AudioTrack.MODE_STREAM // Установите тип режима, здесь установлен тип потока, второй MODE_STATIC, кажется, не имеет никакого эффекта); audio.play (); // Запуск аудиоустройства , Следующее может действительно начать воспроизведение аудиоданных. // Открывать mp3-файлы, читать данные, декодировать и опускать операции . byte [] buffer = new buffer [4096]; int count; while (true)/> // Закрыть и освободить ресурс audio.stop (); audio. релиз();
AudioTrack процесс строительства
Каждый аудиопоток соответствует экземпляру класса AudioTrack, и каждый AudioTrack будет зарегистрирован в AudioFlinger при его создании. AudioFlinger смешивает все AudioTracks (Mixer). А затем отправляется на AudioHardware для воспроизведения. Сейчас Android может создавать до 32 аудиопотоков одновременно, то есть. Микшер будет обрабатывать до 32 потоков данных AudioTrack одновременно.
with audio session. Use this constructor when the AudioTrack must be attached to a particular audio session. The primary use of the audio session ID is to associate audio effects to a particular instance of AudioTrack: if an audio session ID is provided when creating an AudioEffect, this effect will be applied only to audio tracks and media players in the same session and not to the output mix. When an AudioTrack is created without specifying a session, it will create its own session which can be retreived by calling the getAudioSessionId() method. If a non-zero session ID is provided, this AudioTrack will share effects attached to this session with all other media players or audio tracks in the same session, otherwise a new session will be created for this track if none is supplied.
the sample rate expressed in Hertz.
describes the configuration of the audio channels. SeeCHANNEL_OUT_MONO andCHANNEL_OUT_STEREO
the format in which the audio data is represented. SeeENCODING_PCM_16BIT andENCODING_PCM_8BIT
the total size (in bytes) of the buffer where audio data is read from for playback. If using the AudioTrack in streaming mode, you can write data into this buffer in smaller chunks than this size. If using the AudioTrack in static mode, this is the maximum size of the sound that will be played for this instance. SeegetMinBufferSize(int, int, int) to determine the minimum required buffer size for the successful creation of an AudioTrack instance in streaming mode. Using values smaller than getMinBufferSize() will result in an initialization failure.
streaming or static buffer. See MODE_STATIC andMODE_STREAM
Id of audio session the AudioTrack must be attached to
AudioTrack имеет два режима загрузки данных:
В этом режиме приложение непрерывно записывает поток аудиоданных в AudioTrack, и действие записи будет блокироваться до тех пор, пока поток данных не будет перенесен с уровня Java на собственный уровень и не будет одновременно добавлен в очередь воспроизведения. Этот режим подходит для воспроизведения больших аудиоданных, но этот режим также вызывает определенную задержку;
Перед воспроизведением сразу запишите все данные во внутренний буфер AudioTrack. Он подходит для воспроизведения аудиоданных с небольшим потреблением памяти и высокими требованиями к задержке.
1. Проверьте параметры звука;
2. Создайте объект AudioTrack (собственный);
3. Создайте объект AudioTrackJniStorage.
4. Вызовите функцию set для инициализации AudioTrack.
buffersize = frameCount * количество данных на кадр = frameCount * (количество каналов * количество данных на канал)
Построить собственный AudioTrack
Построить AudioTrackJniStorage
AudioTrackJniStorage — это контейнер для хранения аудиоданных, который представляет собой инкапсуляцию анонимной разделяемой памяти.
Инициализировать AudioTrack
Установите информацию о параметрах аудио для AudioTrack. В Android 4.4 добавлен параметр Transfer_type для указания метода передачи аудиоданных. В Android 4.4 определены 4 метода передачи данных:
TRANSFER_DEFAULT, // not specified explicitly; determine from the other parameters
TRANSFER_CALLBACK, // callback EVENT_MORE_DATA
TRANSFER_OBTAIN, // FIXME deprecated: call obtainBuffer() and releaseBuffer()
TRANSFER_SYNC, // synchronous write()
TRANSFER_SHARED, // shared memory
«Запрос на разгрузку, форсирование к прямому выводу»: «Нелинейный PCM, форсирование к прямому выводу»); flags = (audio_output_flags_t) // FIXME, почему мы не можем разрешить прямой и быстрый? ((Flags | AUDIO_OUTPUT_FLAG_DIRECT) &
AUDIO_OUTPUT_FLAG_FAST) ;> // разрешаем только глубокую буферизацию для типа музыкального потока, если (streamType! = AUDIO_STREAM_MUSIC) AUDIO_OUTPUT_FLAG_DEEP_BUFFER);> // проверка легальности выходного канала if (! audio_is_output_channel (channelMask) < ALOGE ("Недопустимая маска канала% # x", channelMask); return BAD_VALUE;>mChannelMask = channelMask; // Вычислить количество каналов uint32_t channelCount = popcount (channelMask); mChannelCount = channelCount; if (audio_is_linear_pcm (format) <) = channelCount * audio_bytes_per_sample (format); mFrameSizeAF = channelCount * sizeof (int16_t);>else Мы знаем, что все аудиоинтерфейсы, поддерживаемые системой, загружаются при запуске AudioPolicyService. И включил аудиовыход по умолчанию. При открытии аудиовыхода вызовите функцию AudioFlinger :: openOutput (), чтобы создать поток PlaybackThread для открытого в данный момент интерфейса аудиовыхода, одновременно назначьте глобально уникальное значение audio_io_handle_t для потока и сохраните его в элементах AudioFlinger в форме пар ключ-значение Переменная mPlaybackThreads. Здесь мы сначала получаем номер идентификатора потока PlaybackThread текущего интерфейса вывода звука, вызывая функцию AudioSystem :: getOutput () в соответствии с параметрами звука. В то же время он передается в функцию createTrack для создания трека. AudioTrack управляется Track в AudioFlinger. Поскольку между ними существует межпроцессное взаимодействие, для его поддержания необходим «мост». Средой связи является IAudioTrack. Функция createTrack_l кроме применяется для дорожки в AudioFlinger для AudioTrack. Он также построит мост IAudioTrack между ними. Получить аудио выход Получение аудиовыхода состоит в том, чтобы найти соответствующий аудиовыход AudioOutputDescriptor из открытого списка рассказчика описания аудиовыхода в соответствии с параметрами звука, такими как частота дискретизации, канал, формат и т. Д., И вернуть идентификационный номер аудиопотока аудиовыхода, созданного в AudioFlinger. , Предполагая, что не существует AudioOutputDescriptor, подходящий для текущих параметров вывода звука. Затем попросите AudioFlinger открыть новый аудиовыход, создать соответствующий поток воспроизведения для текущего аудиовыхода и вернуть номер идентификатора потока воспроизведения. Пожалуйста, обратитесь к подробному процессуПроцесс запуска сервиса Android AudioPolicyServiceОткройте раздел вывода в. Создать тему AudioTrackThread При инициализации AudioTrack, предполагая, что audioCallback имеет значение Null, будет создан поток AudioTrackThread. AudioTrack поддерживает два метода ввода данных: 1) Push-режим: пользователи активно пишут, MediaPlayerService обычно принимает этот режим; 2) Режим извлечения: поток AudioTrackThread активно получает данные от пользователя через функцию обратного вызова audioCallback. ToneGenerator использует этот метод. Подать заявку на трек Для воспроизведения аудио требуется AudioTrack для записи аудиоданных. В то же время AudioFlinger необходимо смешивать, поэтому необходимо установить канал передачи данных между AudioTrack и AudioFlinger, а AudioTrack и AudioFlinger принадлежат разным пространствам процессов. Система Android использует связь Binder для их построения. Мост между. IAudioTrack устанавливает связь между AudioTrack и AudioFlinger.В статическом режиме на AudioTrack создается анонимная общая память для хранения аудиоданных. В режиме потокового воспроизведения анонимная общая память создается на стороне AudioFlinger. Анонимная разделяемая память, создаваемая в этих двух режимах воспроизведения, отличается. Заголовок анонимной разделяемой памяти в потоковом режиме создает объект audio_track_cblk_t, чтобы координировать темп между производителем AudioTrack и потребителем AudioFlinger. createTrack — создание объекта Track в AudioFlinger. -2: * sessionId); if (sessionId! = NULL && * sessionId! = AUDIO_SESSION_OUTPUT_MIX)/> >> lSessionId = * sessionId;> else/> > ALOGV («createTrack () lSessionId:% d», lSessionId); // Создать трек track = thread- в найденном потоке PlaybackThread > createTrack_l (client, streamType, sampleRate, format, channelMask, frameCount, sharedBuffer, lSessionId, flags, tid, clientUid, & lStatus); // переместить цепочку эффектов в этот поток вывода, если эффект в том же сеансе ожидал // дорожку создается, если (lStatus == NO_ERROR && effectThread! = NULL) Эта функция сначала создает объект Client для процесса приложения в одноэлементном режиме, напрямую общаясь с процессом клиента Затем найдите соответствующий PlaybackThread в соответствии с идентификатором потока воспроизведения. И перенесите на него задачу создания дорожки. После того, как PlaybackThread создал дорожку, поскольку дорожка не имеет функции связи, ей также необходимо создать объект TrackHandle для службы связи агента. Построить объект Client По процессу пид. Создайте объект Client для клиента, запрашивающего воспроизведение звука. Переменная-член mClients AudioFlinger сохраняет объекты pid и Client в форме пар ключ-значение. Здесь клиентский объект, соответствующий pid, сначала извлекается, предполагая, что объект пуст. Новый клиентский объект создается для клиентского процесса. При построении объекта Client. Создается объект MemoryDealer, который используется для выделения разделяемой памяти. MemoryDealer — это класс инструментов. Используется для выделения разделяемой памяти. Каждый клиент имеет объект MemoryDealer, что означает, что каждый клиентский процесс выделяет общую память в своем собственном уникальном пространстве памяти. MemoryDealer создал анонимную общую память размером 2 * 1024 * 1024. Все аудиотреки, созданные этим клиентским процессом в AudioFlinger, являются выделенными буферами в этой общей памяти. Это показывает. Когда AudioTrack в процессе приложения запрашивает AudioFlinger для создания объекта Track в PlaybackThread, AudioFlinger сначала создает объект Client для процесса приложения и в то же время создает общую память размером 2M. При создании дорожки, дорожка будет выделять буфер в 2M общей памяти для воспроизведения аудио. Создать объект Track Здесь объект Track создается для AudioTrack. Track наследуется от TrackBase, поэтому при создании Track сначала запустите конструктор TrackBase. Процесс создания TrackBase в основном предназначен для выделения разделяемой памяти для воспроизведения аудио. В статическом режиме разделяемая память выделяется самим процессом приложения, но в потоковом режиме разделяемая память выделяется AudioFlinger. В статическом и потоковом режимах создаются объекты audio_track_cblk_t, единственное отличие Лежит, в потоковом режиме. Объект audio_track_cblk_t создается в начале разделяемой памяти. Далее продолжаем анализировать процесс строительства трека: В процессе создания TrackBase пространство памяти объекта audio_track_cblk_t выделяется по-разному в зависимости от того, создан ли объект Client и создан объект audio_track_cblk_t. В структуре трека. В соответствии с различными режимами воспроизведения, создайте разные прокси-объекты: В потоковом режиме одновременно выделяется буфер аудиоданных указанного размера, структура которого следующая: Мы знаем, что при создании объекта Client был создан объект инструмента выделения памяти MemoryDealer, и в то же время был создан фрагмент анонимной общей памяти размером 2M. Здесь используется объект MemoryDealer для выделения буфера указанного размера в этой анонимной общей памяти. Объект audio_track_cblk_t используется для координации темпа между производителем AudioTrack и потребителем AudioFlinger. Во время createTrack AudioFlinger применяет к соответствующей памяти, а затем возвращает AudioTrack через интерфейс IMemory, так что AudioTrack и AudioFlinger управляют одним и тем же audio_track_cblk_t, через который реализован кольцевой FIFO. AudioTrack записывает аудиоданные в FIFO, AudioFlinger считывает аудиоданные из FIFO и отправляет их в AudioHardware для воспроизведения после микшера. 1) AudioTrack является производителем данных FIFO; 2) AudioFlinger является потребителем данных FIFO; Объект Track отвечает только за связанные со звуком службы и не предоставляет вызывающий интерфейс Binder для преувеличивающих процессов, поэтому для завершения необходимо поручить службу связи другому объекту. В этом смысл TrackHandle. TrackHandle отвечает за проксирование сервисов связи Track. Это межпроцессный канал между Track и AudioTrack. AudioFlinger имеет несколько рабочих потоков, и каждый поток имеет несколько дорожек. Поток воспроизведения на самом деле является экземпляром MixerThread. MixerThread’s threadLoop (). Различные дорожки в потоке будут смешаны, и при необходимости действие ReSample (resampling) будет преобразовано в постоянную частоту дискретизации (44,1 КБ). Затем выведите аудиоданные через слой AudioHardware аудиосистемы. Ø Создание объекта AudioTrack через JNI в платформе или на уровне Java; Ø В соответствии с такими параметрами, как StreamType, найдите открытое устройство вывода звука. Предположим, что не найдено подходящего устройства вывода звука. Затем попросите AudioFlinger открыть новое устройство вывода звука; Ø AudioFlinger создает MixerThread для устройства вывода и возвращает идентификатор потока в AudioTrack в качестве возвращаемого значения getOutput (); Ø AudioTrack вызывает функцию AudioTralinger createTrack () для создания дорожки через механизм связывания. И создайте локальный объект TrackHandle Binder, одновременно верните прокси-объект IAudioTrack. Ø AudioFlinger регистрирует трек в MixerThread; Ø AudioTrack получает FIFO (audio_track_cblk_t), созданный в AudioFlinger через интерфейс IAudioTrack; Источник