играйте аудио, в режиме реального времени используя opensl es и андроид ndk

То, что я хотел бы сделать, сделать запись голоса, обработать его как добавление некоторого эффекта к зарегистрированному аудио, и затем переиграть его максимально быстро использующий opensl. Я испытываю затруднения при нахождении информации о сети о выполнении чего-то вроде этого, таким образом, у меня на самом деле есть пара вопросов.

Я посмотрел на аудиосэмпл уроженца андроида и книгу, начинающую андроид ndk, который начал меня с opensl, но они действительно не помогли мне понять запись очень хорошо.

1) Таким образом, сначала, чтобы немедленно воспроизвести зарегистрированное аудио, я был бы в состоянии прочитать буфер от нити, которая играет аудио, в то время как то же самое время нить записи пишет буферу? Я знаю, что кто-то, вероятно, сойдет с ума об этой идее, потому что идея получить доступ к некоторому объекту в памяти двумя различными нитями в то же время могла привести к проблемам, но если нить записи удостоверена, чтобы всегда написать памяти только перед нитью аудио игры, то это было бы возможным правом?

2) Или воспроизвести в режиме реального времени, я буду использовать буферную очередь с двумя или тремя очень маленькими буферами и отзыв, который называют каждый раз, когда каждый переполнен, затем играйте тот буфер, в то время как следующий буфер заполнен нитью аудио записи? но я читал, и кто-то сказал, что отзывы не всегда называют (самая полезная связь, которую я нашел об этом: https://groups.google.com/forum/#! message/android-ndk/hLSygQrmcPI/qtwB76JNa_EJ). также, это означает, что разница во времени между зарегистрированным аудио и воспроизведенным аудио была бы размером буфера плюс время, которое требуется для отзыва, чтобы сообщить объекту записи начать делать запись использования следующего буфера. Я думаю, что был бы промежуток между тем, когда рекордер прекращает делать запись и когда это начинает делать запись снова.

3) Андроид, делающий запись буферной очереди, также, где у меня есть проблемы при понимании. Я должен использовать буферную очередь в андроиде, чтобы сделать запись аудио? или действительно ли возможно сделать запись непосредственно к буферу, не используя буферную очередь? У меня есть проблемы с этим, потому что четкий метод SLAndroidSimpleBufferQueueItf , на самом деле кажется, не работает. по-видимому, это - ошибка. и я, может казаться, не делаю запись по буферу после его уже бывший заполненный данными. так как четкий метод, кажется, не работает, как я могу сказать рекордер, который буферизуют в очереди, чтобы сделать запись к?

Я знаю, что это - своего рода партия, чтобы спросить, и я не сказал все, что я попробовал, но я надеялся, что кто-то имеет некоторый опыт с этим и может пролить некоторый свет для меня и кого-либо еще, у которого есть проблема при воспроизведении зарегистрированного аудио, в режиме реального времени используя opensl.

3
nl ja de
какая-либо почта или вклад в сообщество относительно этой работы??
добавлено автор nmxprime, источник
Привет, вы имели успех, чтобы осуществить это? I' m наличие той же самой проблемы.
добавлено автор Taras, источник

2 ответы

Я нашел в значительной степени точно, что я ищу. Способ воспроизвести зарегистрированное аудио в режиме реального времени состоит в том, чтобы использовать что-то названное кольцевой буфер (или круглый буфер), где в основном зарегистрированное аудио прочитано в него, в то время как воспроизведенное аудио читает все туда, где зарегистрированное аудио пишет.

http://audioprograming.wordpress.com/

OpenSL ES в Android все еще точно не поддерживает "Низкое время ожидания", поскольку есть все еще небольшая задержка, но это все еще работает действительно хорошо, это просто больше походит на небольшое эхо

5
добавлено
Поскольку это зависит от внедрения низкого уровня, ваше время ожидания изменится много от модели устройства до модели устройства - вероятно, от приемлемого на некоторых к абсолютно недопустимому на других. Это также изменится немного от управляемого, чтобы работать на том же самом устройстве.
добавлено автор Chris Stratton, источник
это - положительная сторона. i' ll должны сделать тест, чтобы найти, какие устройства приемлемы и которые не являются или позволяют пользователям решить себя, чтобы использовать его или нет
добавлено автор iedoc, источник
Извините за то, чтобы быть поздним, но проверяют это видео, как использовать openSLES, главным образом оптимизировать время ожидания. надежда это помогает: youtube.com/watch? v=d3kfEeMZ65c
добавлено автор Shrish, источник

Я понимаю, что этому ответили, и это - старый вопрос. Однако, чтобы разъясниться, на моей очереди воспроизведения, я не использую Ясный() . Я просто останавливаю воспроизведение и затем жду очереди, чтобы истощить при помощи GetState (государство) в петле, как так:

SLresult res;
SLAndroidSimpleBufferQueueState state = {0};
res = (*playbackBufferQueue)->GetState(playbackBufferQueue, &state);

while (state.count && (res == SL_RESULT_SUCCESS))  
{  
    prevState = state;
    res = (*m_playbackBufferQueue)->GetState(m_playbackBufferQueue, &state); 
   //Otherwise this will peg the CPU
    sleep(1);
}

И поддерживать низкое время ожидания вы имеете, используют "оптимальный" уровень и объем выборки, который вы подвергаете сомнению от Android. Можно ли сделать этот встроенный API использования требования? Конечно, не, не будьте глупы. Сделайте это на Яве и пасуйте назад его местному жителю:

int getBestPlaybackRate() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
        return Integer.parseInt(audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE));
    }
    return 0;
}
int getBestBufferSize() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
        return Integer.parseInt(audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER));
    }
    return 0;
}
1
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

Android Developers
Android Developers
4 476 участник(ов)

Общаемся на темы, посвященным Android-разработке, SDK, Kotlin, Realm и т.д.

Android Architecture
Android Architecture
2 186 участник(ов)

Русскоязычный чат по архитектуре в андроид приложениях. Подробнее: http://telegra.ph/Android-Architecture-12-24

rus-speaking/android
rus-speaking/android
1 705 участник(ов)

Основной чат по Android разработке (вопрос-ответ). ПРАВИЛА: bit.ly/andr-rules. NEWS: bit.ly/AnrdResId ЧАТЫ: Основной: bit.ly/andr-main IDE, сборка, Git, сервисы: bit.ly/andr-tools Оффтоп: bit.ly/andr-offtop Конференции, события: bit.ly/andr-events Вакансии, найм: bit.ly/andr-job Архитектура: bit.ly/andr-patterns Rx: bit.ly/andr-rx Тестирование: bit.ly/andr-test Kotlin: bit.ly/andr-kotlin Хаmarin: bit.ly/andr-xamarin За мат, спам, агрессию, предложения о работе, оффтоп в этом канале - бан на сутки и более ☢☢☢

Android Dev Подкаст
Android Dev Подкаст
1 325 участник(ов)

Комната для обсуждения Android Dev подкаста apptractor.ru/AndroidDev/ Общее обсуждение Android: https://t.me/android_ru Остальные чаты про Android: http://t.me/devChats Наши новости https://t.me/androiddevpodcast_news

Android Guards
Android Guards
602 участник(ов)

Обсуждение любых вопросов касающихся безопасности Android. - Защита системы и приложений - Уязвимости и эксплойты - Вредоносное ПО - Копание в кишках системы и приложений (RE)

Android JOB
Android JOB
466 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению Android (full-time, part-time, remote и разовые подработки)

AndroidDev :: Разработка. It's Android time now!
AndroidDev :: Разработка. It's Android time now!
458 участник(ов)

It's Android time now! Чат разработчиков Android. Вакансии, резюме и информацию о митапах размещать можно. Публикацию скрытой и явной рекламы ваших каналов и сайтов после получения разрешения от @olegushakov

Aandroid Talks!
Aandroid Talks!
212 участник(ов)

Чат об общих вопросах по ОС Android. Чат для разработки под андроид - pro.android: https://t.me/joinchat/AAAAAEKIFKnmRT9cMebb9w

Android Rus
Android Rus
68 участник(ов)