SlideShare a Scribd company logo
Обработка голоса кодеком на
Си под Андроид? Сделано!
Константин Цховребов
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

More Related Content

What's hot

Perl in da shell
Perl in da shellPerl in da shell
Perl in da shell
Anton Ovchinnikov
 
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
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
 
Введение в Docker
Введение в DockerВведение в Docker
Введение в Docker
Кузьмицкий Александр
 
Эволюция 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 dl385
Mikhail 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)
Александр Сигачев
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
Badoo Development
 
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON
 
Sphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатацияSphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатацияandreyborue
 
More Smoked CTFs для Leet Chicken, пожалуйста!
More Smoked CTFs для Leet Chicken, пожалуйста!More Smoked CTFs для Leet Chicken, пожалуйста!
More Smoked CTFs для Leet Chicken, пожалуйста!
snowytoxa
 
Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)
Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)
Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)Ontico
 
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Ontico
 

What's hot (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)
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
 
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
 
Sphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатацияSphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатация
 
More Smoked CTFs для Leet Chicken, пожалуйста!
More Smoked CTFs для Leet Chicken, пожалуйста!More Smoked CTFs для Leet Chicken, пожалуйста!
More Smoked CTFs для Leet Chicken, пожалуйста!
 
Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)
Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)
Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)
 
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
 

Similar to Обработка голоса кодеком на Си под Андроид. Сделано / Константин Цховребов (MobileUp)

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.
 
New Android NDK & JNI
New Android NDK & JNINew Android NDK & JNI
New Android NDK & JNI
Stfalcon Meetups
 
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 MSU
larhat
 
Андрей Субботин "Автоматизация локализации 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: Genode
Iosif Itkin
 
Проникновение в Docker с примерами
Проникновение в Docker с примерамиПроникновение в Docker с примерами
Проникновение в Docker с примерами
Дмитрий Столяров
 
Docker penetration
Docker penetrationDocker penetration
Docker penetration
Badoo Development
 

Similar to Обработка голоса кодеком на Си под Андроид. Сделано / Константин Цховребов (MobileUp) (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 с примерами
Проникновение в Docker с примерамиПроникновение в Docker с примерами
Проникновение в Docker с примерами
 
Docker penetration
Docker penetrationDocker penetration
Docker penetration
 

More from Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Обработка голоса кодеком на Си под Андроид. Сделано / Константин Цховребов (MobileUp)

Editor's Notes

  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