SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Обработка голоса кодеком на
Си под Андроид? Сделано!
Константин Цховребов
Android Team Lead
NDK — что это?
NDK — зачем?
производительность
«низкий» уровень работы
сторонние библиотеки
общее ядро для разных платформ
сокрытие реализации
NDK != МАГИЯ
Если приложение написано
криво, то NDK не поможет
Многие вещи уже реализованы
нативно: cursor, canvas и другие
Реальная задача
Compress
User AudioRecord
File
Какие кодеки есть?

MPEG-1 Layer III (MP3)

Advanced Audio Codec (AAC)

Ogg Vorbis (OGG)

Free Lossless Audio Codec (FLAC)

GSM-FR

Adaptive multi rate (AMR)

G.723.1

G.729

Internet Low Bitrate Codec (iLBC)
Почему Opus?
CELT
SILK
OPUS
Первый релиз 6 декабря 2012
Почему Opus?
Почему Opus?
Почему Opus?

Bitrates from 6 kb/s to 510 kb/s

Sampling rates from 8 kHz (narrowband) to 48 kHz (fullband)

Frame sizes from 2.5 ms to 60 ms

Support for both constant bitrate (CBR) and variable bitrate (VBR)

Support for speech and music

Support for mono and stereo

Support for up to 255 channels (multistream frames)

Dynamically adjustable bitrate, audio bandwidth, and frame size

Good loss robustness and packet loss concealment (PLC)

Floating point and fixed-point implementation
Ogg
Все библиотеки OpenSource, но...
Подготовка проекта
1) Скачиваем NDK
https://developer.android.com/intl/ru/ndk/downloads/index.html
2) Скачиваем кодек Opus и доп. инструментарий OpusFile
http://www.opus-codec.org/downloads/
3) Скачиваем инструмент для упаковки в Ogg
https://xiph.org/downloads/
4) Создаем стандартную
новую папку для проекта
Подготовка проекта
В файл ./local.properties добавляем путь к NDK:
sdk.dir=/.../sdk
ndk.dir=/.../ndk/android-ndk-r11c
Подготовка проекта
Создаем стандартную структуру модуля с
дополнительной папкой jni
Подготовка проекта
app/build.gradle
android {
...
sources {
jni {
source {
}
}
jniLibs {
source {
srcDir 'src/main/libs'
}
}
}
...
}
Сборка нативных исходников
В папку jni складываем
загруженные проекты
Сборка нативных исходников
В папке jni создаем файл Application.mk и указываем
платформы, под которые нужна сборка:
APP_ABI := armeabi­v7a x86
(Либо all)
Сборка нативных исходников
В папке jni создаем файл Android.mk и описываем
процесс сборки:
#указываем корневую директорию
LOCAL_PATH := $(call my-dir)
#очищаем внутренние переменные
include $(CLEAR_VARS)
#имя модуля
LOCAL_MODULE := opusfile
Сборка нативных исходников
#С флаги для сборки кода
LOCAL_CFLAGS := -w -std=gnu99 -DANDROID_NDK ...
#С++ флаги для сборки кода
LOCAL_CPPFLAGS := -DBSD=1 -ffast-math -O2 -funroll-loops
#подключение вывода в стандартный лог андроида
LOCAL_LDLIBS := -llog
#разный режим сборки в зависимости от платформы
ifeq ($(TARGET_ARCH_ABI),armeabi)
LOCAL_ARM_MODE := thumb
else
LOCAL_ARM_MODE := arm
endif
Сборка нативных исходников
#пути ко всем заголовочным *.h файлам
LOCAL_C_INCLUDES := 
./opus/include 
./opus/silk 
./opus/silk/fixed 
./opus/celt 
./opus 
./opus/src 
./opusfile/src 
./opusfile/include 
./ogg/include
Сборка нативных исходников
#поиск исходников по папкам
OPUS_SRC_FILES := $(wildcard $(LOCAL_PATH)/opus/*/*.c)
OPUS_SRC_FILES += $(wildcard $(LOCAL_PATH)/opus/celt/*/*.c)
OPUS_SRC_FILES += $(wildcard $(LOCAL_PATH)/opus/silk/fixed/*.c)
OPUSFILE_SRC_FILES := $(wildcard $(LOCAL_PATH)/opusfile/src/*.c)
OGG_SRC_FILES := $(wildcard $(LOCAL_PATH)/ogg/src/*.c)
#пути ко всем найденным *.c файлам
LOCAL_SRC_FILES := $(OPUS_SRC_FILES)
LOCAL_SRC_FILES += $(OPUSFILE_SRC_FILES)
LOCAL_SRC_FILES += $(OGG_SRC_FILES)
#сборка .so библиотеки
include $(BUILD_SHARED_LIBRARY)
Сборка нативных исходников
Вызываем в папке jni команду
.../android-­ndk-­r11с/ndk­-build
и если все пройдет без ошибок, то в папке main появятся библиотеки
JNI (Java Native Interface)
Преимущества JNI
Аналоги:

Netscape Java Runtime Interface

Microsoft’s Raw Native Interface and COM/Java Interface
Двоичная (бинарная) совместимость
Как работать с JNI
1) Java интерфейс

с методами, отмеченными словом native

с подгрузкой нативной .SO библиотеки
2) Реализация методов в .С файле

с зависимостью <jni.h>

с хитрым именованием методов
Как работать с JNI
com.example.Sample.java
public native int getLength(String str);
SampleNativeImpl.c
JNI_EXPORT jint Java_com_example_Sample_getLength(
JNIEnv *env,
jobject jobj,
jstring str) {...}
*env – указатель на интерфейс;
jоbj – ссылка на объект, в котором описан нативный метод;
str – передаваемый аргумент;
Настройка JNI
package com.terrakok.opusfile;
import java.nio.ByteBuffer;
public class OpusHelper {
public native int startRecord(String path);
public native int writeFrame(ByteBuffer frame, int len);
public native void stopRecord();
public native int openOpusFile(String path);
public native int seekOpusFile(float position);
public native int isOpusFile(String path);
public native void closeOpusFile();
public native void readOpusFile(ByteBuffer buffer, int capacity, int[]
args);
public native long getTotalPcmDuration();
static {
System.loadLibrary("opusfile");
}
}
Настройка JNI
Создаем .../app/src/main/jni/audio.c, в котором важно следующее:
#include <jni.h>
#include <ogg/ogg.h>
#include <opus.h>
#include <opusfile.h>
JNIEXPORT int Java_com_terrakok_opusfile_OpusHelper_startRecord(JNIEnv
*env, jclass class, jstring path) {...}
Финальная сборка
Осталось добавить файл audio.c в сборочный конфиг Android.mk
LOCAL_SRC_FILES += ./audio.c
И повторно вызвать ndk-build
Теперь, вызывая методы класса OpusHelper, мы будем работать с
нативным кодом!
Где посмотреть?
https://bitbucket.org/terrakok/androidopustools
Хорошие новости
Android Studio 2.2
Improved C++ Support:

edit, build, and debug

use ndk-build or Cmake

and more
Еще хорошие новости
Спасибо!
Цховребов Константин
Telegram: @terrakok
Email: terrakok@mobileup.ru

Weitere ähnliche Inhalte

Was ist angesagt?

Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...Kristina Pomozova
 
Депрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчасДепрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчасRuslan Sharipov
 
Alex Shavtsov - Arch linux installing on Macbook Air.
Alex Shavtsov - Arch linux installing on Macbook Air. Alex Shavtsov - Arch linux installing on Macbook Air.
Alex Shavtsov - Arch linux installing on Macbook Air. Minsk Linux User Group
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ciАлександр Сигачев
 
Web весна 2013 лекция 3
Web весна 2013 лекция 3Web весна 2013 лекция 3
Web весна 2013 лекция 3Technopark
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Ontico
 
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.Badoo Development
 
2 х пр-ные серверы hp pro liant dl385
2 х пр-ные серверы hp pro liant dl3852 х пр-ные серверы hp pro liant dl385
2 х пр-ные серверы hp pro liant dl385Mikhail Ostroverkhiy
 
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Badoo Development
 
Безопасность без антивирусов 4
Безопасность без антивирусов 4Безопасность без антивирусов 4
Безопасность без антивирусов 4Positive Hack Days
 
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)Александр Сигачев
 
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo Development
 
Sphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатацияSphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатацияandreyborue
 
Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)
Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)
Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)Ontico
 
More Smoked CTFs для Leet Chicken, пожалуйста!
More Smoked CTFs для Leet Chicken, пожалуйста!More Smoked CTFs для Leet Chicken, пожалуйста!
More Smoked CTFs для Leet Chicken, пожалуйста!snowytoxa
 
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Ontico
 

Was ist angesagt? (19)

Perl in da shell
Perl in da shellPerl in da shell
Perl in da shell
 
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
 
Депрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчасДепрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчас
 
Alex Shavtsov - Arch linux installing on Macbook Air.
Alex Shavtsov - Arch linux installing on Macbook Air. Alex Shavtsov - Arch linux installing on Macbook Air.
Alex Shavtsov - Arch linux installing on Macbook Air.
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
 
Web весна 2013 лекция 3
Web весна 2013 лекция 3Web весна 2013 лекция 3
Web весна 2013 лекция 3
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
 
Введение в Docker
Введение в DockerВведение в Docker
Введение в Docker
 
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
 
2 х пр-ные серверы hp pro liant dl385
2 х пр-ные серверы hp pro liant dl3852 х пр-ные серверы hp pro liant dl385
2 х пр-ные серверы hp pro liant dl385
 
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
 
Безопасность без антивирусов 4
Безопасность без антивирусов 4Безопасность без антивирусов 4
Безопасность без антивирусов 4
 
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
 
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
 
Sphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатацияSphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатация
 
Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)
Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)
Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)
 
More Smoked CTFs для Leet Chicken, пожалуйста!
More Smoked CTFs для Leet Chicken, пожалуйста!More Smoked CTFs для Leet Chicken, пожалуйста!
More Smoked CTFs для Leet Chicken, пожалуйста!
 
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
 

Ähnlich wie Обработка голоса кодеком Си под Андройд? Сделано!

Xe4 launch мобильная разработка всеволод_леонов
Xe4 launch мобильная разработка всеволод_леоновXe4 launch мобильная разработка всеволод_леонов
Xe4 launch мобильная разработка всеволод_леоновЕкатерина Макарова
 
Scripting languages
Scripting languagesScripting languages
Scripting languagesLev Panov
 
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...Unigine Corp.
 
02 История Open-Source Hardware - Олег Садов
02 История Open-Source Hardware - Олег Садов02 История Open-Source Hardware - Олег Садов
02 История Open-Source Hardware - Олег СадовAlexander Chemeris
 
Видеохостинг своими руками
Видеохостинг своими рукамиВидеохостинг своими руками
Видеохостинг своими рукамиStanislavMalkin
 
"Подходы, используемые в разработке iOS-клиента Viber" Кирилл Лашкевич (Viber)
"Подходы, используемые в разработке iOS-клиента Viber" Кирилл Лашкевич (Viber)"Подходы, используемые в разработке iOS-клиента Viber" Кирилл Лашкевич (Viber)
"Подходы, используемые в разработке iOS-клиента Viber" Кирилл Лашкевич (Viber)AvitoTech
 
CUDA Course 2010 at MSU
CUDA Course 2010 at MSUCUDA Course 2010 at MSU
CUDA Course 2010 at MSUlarhat
 
Андрей Субботин "Автоматизация локализации iOS-приложений"
Андрей Субботин "Автоматизация локализации iOS-приложений"Андрей Субботин "Автоматизация локализации iOS-приложений"
Андрей Субботин "Автоматизация локализации iOS-приложений"Yandex
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикIT61
 
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...defcon_kz
 
Язык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelЯзык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelMikhail Kurnosov
 
Операционные системы
Операционные системыОперационные системы
Операционные системыyaevents
 
Root Conf2009 Fin
Root Conf2009 FinRoot Conf2009 Fin
Root Conf2009 FinLiudmila Li
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeIosif Itkin
 
Проникновение в Docker с примерами
Проникновение в Docker с примерамиПроникновение в Docker с примерами
Проникновение в Docker с примерамиДмитрий Столяров
 

Ähnlich wie Обработка голоса кодеком Си под Андройд? Сделано! (20)

Xe4 launch мобильная разработка всеволод_леонов
Xe4 launch мобильная разработка всеволод_леоновXe4 launch мобильная разработка всеволод_леонов
Xe4 launch мобильная разработка всеволод_леонов
 
Scripting languages
Scripting languagesScripting languages
Scripting languages
 
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко...
 
New Android NDK & JNI
New Android NDK & JNINew Android NDK & JNI
New Android NDK & JNI
 
02 История Open-Source Hardware - Олег Садов
02 История Open-Source Hardware - Олег Садов02 История Open-Source Hardware - Олег Садов
02 История Open-Source Hardware - Олег Садов
 
Node.js (RichClient)
 Node.js (RichClient) Node.js (RichClient)
Node.js (RichClient)
 
Видеохостинг своими руками
Видеохостинг своими рукамиВидеохостинг своими руками
Видеохостинг своими руками
 
"Подходы, используемые в разработке iOS-клиента Viber" Кирилл Лашкевич (Viber)
"Подходы, используемые в разработке iOS-клиента Viber" Кирилл Лашкевич (Viber)"Подходы, используемые в разработке iOS-клиента Viber" Кирилл Лашкевич (Viber)
"Подходы, используемые в разработке iOS-клиента Viber" Кирилл Лашкевич (Viber)
 
CUDA Course 2010 at MSU
CUDA Course 2010 at MSUCUDA Course 2010 at MSU
CUDA Course 2010 at MSU
 
JPHP
JPHPJPHP
JPHP
 
Андрей Субботин "Автоматизация локализации iOS-приложений"
Андрей Субботин "Автоматизация локализации iOS-приложений"Андрей Субботин "Автоматизация локализации iOS-приложений"
Андрей Субботин "Автоматизация локализации iOS-приложений"
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчик
 
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
 
Язык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelЯзык параллельного программирования Cray Chapel
Язык параллельного программирования Cray Chapel
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Операционные системы
Операционные системыОперационные системы
Операционные системы
 
Root Conf2009 Fin
Root Conf2009 FinRoot Conf2009 Fin
Root Conf2009 Fin
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
 
Docker penetration
Docker penetrationDocker penetration
Docker penetration
 
Проникновение в Docker с примерами
Проникновение в Docker с примерамиПроникновение в Docker с примерами
Проникновение в Docker с примерами
 

Обработка голоса кодеком Си под Андройд? Сделано!

Hinweis der Redaktion

  1. Титульник. Название доклада. ФИО. Компания
  2. Кратко. NDK — что это? В основном используется SDK, который позволяет писать код на Java, но бывают ситуации когда необходимо выполнить что-то написанное на Си или Си++. Для этих целей Google представила NDK, решающий эту задачу.
  3. Зачем? -увеличение производительности -низкий уровень работы с устройством -сторонние библиотеки (кодеки, sqlite, шифрование и тд) -общее ядро для разных платформ
  4. Когда не нужно: -NDK не магия. Производительность не вырастет, если кривая архитектура. -Многие вещи уже реализованы нативно (рисование на канвасе, некоторые структуры данных, cursor и другие) и свои нативные решения скорее всего не помогут
  5. Нельзя просто так взять и … Кокретная задача... почему она может возникнуть (запись голоса в хорошем качестве с минимальными задержками)… Нужно записать голос и, сжав его OPUS, упаковать в OGG и сохранить в файл.
  6. MPEG-1 Layer III (MP3) — проприетарный кодек аудиозаписей (музыка, аудиокниги и т. п.) для компьютерной техники и цифровых проигрывателей Advanced Audio Codec (AAC) — второй по распространенности проприетарный кодек, позиционируется как альтернатива MP3. Наибольшее распространение в связке с видеокодеком H.264 (AVC) получил в онлайн-видео (напр., флэш-видео на YouTube) Ogg Vorbis (OGG) — свободный кодек, широко используется в компьютерных играх и в файлообменных сетях для передачи музыки Free Lossless Audio Codec (FLAC) — свободный кодек, использующий сжатие без потерь. Альтернативные, менее распространённые lossless-кодеки: WavPack (WV), Monkey’s Audio (APE) и др. GSM-FR — первый цифровой стандарт кодирования речи, использованный в телефонах GSM Adaptive multi rate (AMR) — запись человеческого голоса в мобильных телефонах и других мобильных устройствах G.723.1 — один из базовых кодеков для приложений IP-телефонии G.729 — патентованный узкополосный кодек, который применяется для цифрового представления речи Internet Low Bitrate Codec (iLBC) — популярный свободный кодек для IP-телефонии (в частности, для Skype и Google Talk)
  7. Популярные кодеки и области применения. Вики Немного о xiph.org Что за OPUS? Пара слайдов с общей информацией Преимущества перед Vorbis, iLBC и остальными Пара слайдов с http://opus-codec.org/comparison/
  8. Ogg — что это? Данные с вики
  9. Ogg — что это? Данные с вики
  10. Ogg — что это? Данные с вики
  11. К делу! Сборка исходных кодов в .so под разные архитектуры Слайдов пять с описанием процесса.
  12. Теперь надо связать java код с нативным. Пара слов про JNI
  13. Теперь надо связать java код с нативным. Пара слов про JNI
  14. Теперь надо связать java код с нативным. Пара слов про JNI
  15. Теперь надо связать java код с нативным. Пара слов про JNI
  16. Теперь надо связать java код с нативным. Пара слов про JNI
  17. Теперь надо связать java код с нативным. Пара слов про JNI
  18. Теперь надо связать java код с нативным. Пара слов про JNI
  19. Теперь надо связать java код с нативным. Пара слов про JNI
  20. Теперь надо связать java код с нативным. Пара слов про JNI
  21. Теперь надо связать java код с нативным. Пара слов про JNI
  22. Теперь надо связать java код с нативным. Пара слов про JNI
  23. Теперь надо связать java код с нативным. Пара слов про JNI
  24. Теперь надо связать java код с нативным. Пара слов про JNI
  25. Теперь надо связать java код с нативным. Пара слов про JNI
  26. Теперь надо связать java код с нативным. Пара слов про JNI
  27. Теперь надо связать java код с нативным. Пара слов про JNI