├── .gitignore ├── .gitmodules ├── .idea ├── codeStyles │ └── Project.xml ├── compiler.xml ├── gradle.xml ├── jarRepositories.xml ├── misc.xml └── vcs.xml ├── DelayEffect ├── .gitignore ├── CMakeLists.txt ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── ntrack │ │ └── audioroute │ │ └── delayeffect │ │ ├── EffectModule.kt │ │ └── MainActivity.kt │ ├── jni │ └── jni_bridge.cpp │ └── res │ ├── drawable-v24 │ └── ic_launcher_foreground.xml │ ├── drawable-xxhdpi │ └── ic_launcher.png │ ├── drawable │ └── ic_launcher_background.xml │ ├── layout │ └── activity_main.xml │ └── values │ ├── colors.xml │ ├── strings.xml │ └── styles.xml ├── Developer Guide.html ├── LICENSE ├── README.md ├── SimpleSynth ├── .!44864!ic_launcher-web.png ├── .!44883!ic_launcher-web.png ├── .classpath ├── .project ├── .settings │ └── org.eclipse.jdt.core.prefs ├── CMakeLists.txt ├── Makefile ├── build.gradle ├── ic_launcher-web.png ├── proguard-project.txt ├── project.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── ntrack │ │ └── audioroute │ │ └── simplesynth │ │ ├── Finger.java │ │ ├── Key.java │ │ ├── Piano.java │ │ ├── SimpleSynthActivity.java │ │ └── SimpleSynthModule.java │ ├── jni │ ├── Application.mk │ ├── SimpleSynthActivity.cpp │ ├── simplesynth.cpp │ └── simplesynth.h │ ├── libs │ └── android-support-v4.jar │ └── res │ ├── drawable-xxhdpi │ ├── app_icon.png │ ├── key_black.xml │ ├── key_black_depressed.xml │ ├── key_black_pressed.xml │ ├── key_white.xml │ ├── key_white_depressed.xml │ └── key_white_pressed.xml │ ├── layout │ └── activity_main.xml │ ├── menu │ └── main.xml │ ├── values-sw600dp │ └── dimens.xml │ ├── values-sw720dp-land │ └── dimens.xml │ ├── values-v11 │ ├── attrs.xml │ └── styles.xml │ ├── values-v14 │ └── styles.xml │ └── values │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml ├── Transformation sample ├── After │ ├── .gitignore │ ├── .idea │ │ ├── caches │ │ │ └── build_file_checksums.ser │ │ ├── codeStyles │ │ │ └── Project.xml │ │ ├── gradle.xml │ │ ├── misc.xml │ │ ├── runConfigurations.xml │ │ └── vcs.xml │ ├── OpenSLES_Synth │ │ ├── .!44864!ic_launcher-web.png │ │ ├── .!44883!ic_launcher-web.png │ │ ├── .classpath │ │ ├── .project │ │ ├── .settings │ │ │ └── org.eclipse.jdt.core.prefs │ │ ├── CMakeLists.txt │ │ ├── Makefile │ │ ├── build.gradle │ │ ├── ic_launcher-web.png │ │ ├── proguard-project.txt │ │ ├── project.properties │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ └── com │ │ │ │ └── ntrack │ │ │ │ └── audioroute │ │ │ │ └── demo_opensl_synth │ │ │ │ ├── Finger.java │ │ │ │ ├── Key.java │ │ │ │ ├── MyAppAudioModule.java │ │ │ │ ├── OpenSLSynthActivity.java │ │ │ │ └── Piano.java │ │ │ ├── jni │ │ │ ├── Android.mk │ │ │ ├── Application.mk │ │ │ ├── demo_opensl_synth.cpp │ │ │ ├── demo_opensl_synth.h │ │ │ └── demo_opensl_synthActivity.cpp │ │ │ ├── libs │ │ │ └── .gitignore │ │ │ └── res │ │ │ ├── drawable-xxhdpi │ │ │ ├── app_icon.png │ │ │ ├── key_black.xml │ │ │ ├── key_black_depressed.xml │ │ │ ├── key_black_pressed.xml │ │ │ ├── key_white.xml │ │ │ ├── key_white_depressed.xml │ │ │ └── key_white_pressed.xml │ │ │ ├── layout │ │ │ └── activity_main.xml │ │ │ ├── menu │ │ │ └── main.xml │ │ │ ├── values-sw600dp │ │ │ └── dimens.xml │ │ │ ├── values-sw720dp-land │ │ │ └── dimens.xml │ │ │ ├── values-v11 │ │ │ ├── attrs.xml │ │ │ └── styles.xml │ │ │ ├── values-v14 │ │ │ └── styles.xml │ │ │ └── values │ │ │ ├── dimens.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle ├── Before │ ├── .gitignore │ ├── .idea │ │ ├── caches │ │ │ └── build_file_checksums.ser │ │ ├── codeStyles │ │ │ └── Project.xml │ │ ├── gradle.xml │ │ ├── misc.xml │ │ ├── runConfigurations.xml │ │ └── vcs.xml │ ├── OpenSLES_Synth │ │ ├── .!44864!ic_launcher-web.png │ │ ├── .!44883!ic_launcher-web.png │ │ ├── .classpath │ │ ├── .project │ │ ├── .settings │ │ │ └── org.eclipse.jdt.core.prefs │ │ ├── CMakeLists.txt │ │ ├── Makefile │ │ ├── build.gradle │ │ ├── ic_launcher-web.png │ │ ├── proguard-project.txt │ │ ├── project.properties │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ └── com │ │ │ │ └── ntrack │ │ │ │ └── audioroute │ │ │ │ └── demo_opensl_synth │ │ │ │ ├── Finger.java │ │ │ │ ├── Key.java │ │ │ │ ├── OpenSLSynthActivity.java │ │ │ │ └── Piano.java │ │ │ ├── jni │ │ │ ├── Android.mk │ │ │ ├── Application.mk │ │ │ ├── demo_opensl_synth.cpp │ │ │ ├── demo_opensl_synth.h │ │ │ └── demo_opensl_synthActivity.cpp │ │ │ ├── libs │ │ │ └── android-support-v4.jar │ │ │ └── res │ │ │ ├── drawable-xxhdpi │ │ │ ├── app_icon.png │ │ │ ├── key_black.xml │ │ │ ├── key_black_depressed.xml │ │ │ ├── key_black_pressed.xml │ │ │ ├── key_white.xml │ │ │ ├── key_white_depressed.xml │ │ │ └── key_white_pressed.xml │ │ │ ├── layout │ │ │ └── activity_main.xml │ │ │ ├── menu │ │ │ └── main.xml │ │ │ ├── values-sw600dp │ │ │ └── dimens.xml │ │ │ ├── values-sw720dp-land │ │ │ └── dimens.xml │ │ │ ├── values-v11 │ │ │ ├── attrs.xml │ │ │ └── styles.xml │ │ │ ├── values-v14 │ │ │ └── styles.xml │ │ │ └── values │ │ │ ├── dimens.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle └── README ├── audioroute ├── CMakeLists.txt ├── build.gradle ├── gradle.properties ├── include │ └── audio_module.h ├── lib │ ├── arm64-v8a │ │ └── libaudiomodule.so │ ├── armeabi-v7a │ │ └── libaudiomodule.so │ ├── x86 │ │ └── libaudiomodule.so │ └── x86_64 │ │ └── libaudiomodule.so ├── maven-push.gradle ├── proguard-rules.txt └── src │ └── main │ ├── AndroidManifest.xml │ ├── aidl │ └── com │ │ └── ntrack │ │ └── audioroute │ │ ├── IAudiorouteClient.aidl │ │ ├── IAudiorouteService.aidl │ │ └── RemoteModule.java │ ├── java │ └── com │ │ └── ntrack │ │ └── audioroute │ │ ├── AudioModule.java │ │ ├── AudioModuleForegroundService.java │ │ ├── AudioRouteHostController.java │ │ ├── Audioroute.java │ │ ├── AudiorouteActivity.java │ │ ├── AudiorouteActivityController.java │ │ ├── AudiorouteException.java │ │ ├── UrlTask.java │ │ └── internal │ │ ├── OpenSlParams.java │ │ └── SharedMemoryUtils.java │ ├── jni │ ├── audio_module.h │ ├── internal │ │ ├── audio_module.cpp │ │ ├── audio_module_internal.cpp │ │ ├── audio_module_internal.h │ │ ├── audio_module_jni.cpp │ │ ├── audio_module_jni.h │ │ ├── audioroute.c │ │ ├── audioroute.h │ │ ├── shared_memory_internal.c │ │ ├── shared_memory_internal.h │ │ ├── shared_memory_utils.c │ │ ├── shared_memory_utils.h │ │ ├── simple_barrier.c │ │ └── simple_barrier.h │ └── opensl_stream │ │ ├── .gitignore │ │ ├── README.md │ │ ├── opensl_stream.c │ │ └── opensl_stream.h │ └── res │ ├── drawable-xhdpi │ └── audioroute_logo.png │ ├── values-v11 │ └── styles.xml │ ├── values-v14 │ └── styles.xml │ └── values │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── externals └── README ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── hostsample ├── .gitignore ├── CMakeLists.txt ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── audioroute │ │ └── hostsample │ │ ├── AppListActivity.kt │ │ ├── AudioEngine.kt │ │ ├── Finger.java │ │ ├── Key.java │ │ ├── MainActivity.kt │ │ ├── MyData.kt │ │ ├── Piano.java │ │ └── RecyclerViewAdapter.kt │ ├── jni │ ├── LiveEffectEngine.cpp │ ├── LiveEffectEngine.h │ ├── LockFreeQueue.h │ └── jni_bridge.cpp │ └── res │ ├── animator │ ├── zoomin.xml │ └── zoomout.xml │ ├── drawable-v24 │ └── ic_launcher_foreground.xml │ ├── drawable │ ├── eject.png │ ├── ic_launcher_background.xml │ ├── key_black.xml │ ├── key_black_depressed.xml │ ├── key_black_pressed.xml │ ├── key_white.xml │ ├── key_white_depressed.xml │ ├── key_white_pressed.xml │ ├── mic.png │ ├── piano.png │ ├── piano_on.png │ ├── plus_circle.png │ └── speakers.png │ ├── layout │ ├── activity_app_list.xml │ ├── activity_main.xml │ ├── activity_piano.xml │ └── list_item.xml │ ├── menu │ └── items.xml │ ├── mipmap-xxxhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ └── values │ ├── attrs.xml │ ├── colors.xml │ ├── strings.xml │ └── styles.xml └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | .externalNativeBuild 3 | .gradle 4 | .idea/workspace.xml 5 | Oboe/* 6 | LowpassSample/.DS_Store 7 | SimpleSynth/src/main/java/com/ntrack/audioroute/.DS_Store 8 | SimpleSynth/src/.DS_Store 9 | hostsamplekotlin/.DS_Store 10 | .idea/workspace.xml 11 | externals/.DS_Store 12 | .DS_Store 13 | delayeffect/src/main/.DS_Store 14 | delayeffect/src/.DS_Store 15 | delayeffect/.DS_Store 16 | .DS_Store 17 | delayeffect/.DS_Store 18 | *.iml 19 | .idea/caches 20 | .idea/modules.xml 21 | .idea/workspace.xml 22 | .idea/libraries 23 | audioroute/.idea/workspace.xml 24 | audioroute/include/* 25 | audioroute/lib/* 26 | mapping.zip 27 | audioroute/build.zip 28 | *.cxx 29 | non-repo 30 | local.properties 31 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "externals/oboe"] 2 | path = externals/oboe 3 | url = https://github.com/google/oboe.git 4 | -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 15 | 16 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 22 | 23 | -------------------------------------------------------------------------------- /.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /DelayEffect/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /DelayEffect/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # For more information about using CMake with Android Studio, read the 2 | # documentation: https://d.android.com/studio/projects/add-native-code.html 3 | 4 | # Sets the minimum version of CMake required to build the native library. 5 | 6 | cmake_minimum_required(VERSION 3.4.1) 7 | 8 | # Creates and names a library, sets it as either STATIC 9 | # or SHARED, and provides the relative paths to its source code. 10 | # You can define multiple libraries, and CMake builds them for you. 11 | # Gradle automatically packages shared libraries with your APK. 12 | 13 | include_directories(src/main/jni) 14 | include_directories(../audioroute/include) 15 | 16 | add_library( # Sets the name of the library. 17 | delayEffect 18 | 19 | # Sets the library as a shared library. 20 | SHARED 21 | 22 | # Provides a relative path to your source file(s). 23 | src/main/jni/jni_bridge.cpp 24 | ) 25 | 26 | # Searches for a specified prebuilt library and stores the path as a 27 | # variable. Because CMake includes system libraries in the search path by 28 | # default, you only need to specify the name of the public NDK library 29 | # you want to add. CMake verifies that the library exists before 30 | # completing its build. 31 | 32 | find_library( # Sets the name of the path variable. 33 | log-lib 34 | 35 | # Specifies the name of the NDK library that 36 | # you want CMake to locate. 37 | log 38 | ) 39 | 40 | 41 | # Specifies libraries CMake should link to your target library. You 42 | # can link multiple libraries, such as libraries you define in this 43 | # build script, prebuilt third-party libraries, or system libraries. 44 | 45 | target_link_libraries( # Specifies the target library. 46 | delayEffect 47 | 48 | # Links the target library to the log library 49 | # included in the NDK. 50 | ${log-lib} 51 | OpenSLES 52 | android 53 | atomic 54 | log 55 | ) 56 | -------------------------------------------------------------------------------- /DelayEffect/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | apply plugin: 'kotlin-android' 3 | apply plugin: 'kotlin-android-extensions' 4 | android { 5 | compileSdkVersion 34 6 | 7 | 8 | 9 | defaultConfig { 10 | applicationId "com.audioroute.delay" 11 | minSdkVersion 21 12 | targetSdkVersion 34 13 | versionCode 1 14 | versionName "1.0" 15 | 16 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 17 | 18 | } 19 | signingConfigs { 20 | config { 21 | keyAlias 'androiddebugkey' 22 | keyPassword 'android' 23 | storeFile file('../../private/codesigning/ntrack_debug_key.keystore') 24 | storePassword 'android' 25 | } 26 | } 27 | buildTypes { 28 | release { 29 | minifyEnabled false 30 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 31 | signingConfig signingConfigs.config 32 | } 33 | debug { 34 | minifyEnabled false 35 | jniDebuggable = true 36 | ndk { 37 | //abiFilters "armeabi-v7a". 38 | } 39 | } 40 | } 41 | 42 | externalNativeBuild { 43 | cmake { 44 | path "CMakeLists.txt" 45 | } 46 | } 47 | ndkVersion = '26.3.11579264' 48 | namespace 'com.audioroute.delay' 49 | 50 | } 51 | 52 | dependencies { 53 | implementation fileTree(include: ['*.jar'], dir: 'libs') 54 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 55 | implementation 'com.android.support:appcompat-v7:28.0.0' 56 | implementation 'com.android.support.constraint:constraint-layout:1.1.2' 57 | testImplementation 'junit:junit:4.12' 58 | androidTestImplementation 'com.android.support.test:runner:1.0.2' 59 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 60 | implementation 'com.android.support:support-annotations:28.0.0' 61 | // Switch which of the two lines below are commented to change from using the Maven version of the Audioroute lib to the one built from sources 62 | implementation project(':audioroute') 63 | //implementation 'com.ntrack.audioroute:audioroute:1.0.0' 64 | } 65 | -------------------------------------------------------------------------------- /DelayEffect/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /DelayEffect/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /DelayEffect/src/main/java/com/ntrack/audioroute/delayeffect/EffectModule.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 n-Track S.r.l. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.audioroute.delay 18 | 19 | import android.util.Log 20 | import com.ntrack.audioroute.AudioModule 21 | 22 | 23 | class EffectModule : AudioModule() { 24 | 25 | var ptr: Long = 0 26 | var channels: Int = 2 27 | 28 | init { 29 | System.loadLibrary("delayEffect") 30 | } 31 | 32 | override fun configure_module(name: String, handle: Long): Boolean { 33 | if (ptr != 0L) { 34 | throw IllegalStateException("Module has already been configured.") 35 | } 36 | ptr = configureNativeComponents(handle, channels) 37 | return ptr != 0L 38 | } 39 | 40 | override fun getInputChannels(): Int { 41 | return 2 42 | } 43 | 44 | override fun getOutputChannels(): Int { 45 | return 2 46 | } 47 | 48 | override fun release() { 49 | 50 | } 51 | 52 | fun setParameter(feedback: Float, time: Float) { 53 | if (ptr == 0L) { 54 | Log.d("Audioroute effect", "Module is not configured.") 55 | return 56 | } 57 | 58 | setParameter(ptr, feedback, time) 59 | } 60 | 61 | 62 | 63 | external fun configureNativeComponents(handle: Long, channels: Int): Long 64 | external fun setParameter(ptr: Long, feedback: Float, time: Float) 65 | 66 | } -------------------------------------------------------------------------------- /DelayEffect/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 13 | 19 | 22 | 25 | 26 | 27 | 28 | 34 | 35 | -------------------------------------------------------------------------------- /DelayEffect/src/main/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AudioRoute/AudioRoute-SDK/af01cc2a2f5a4d2a071f02b2c47720aa8ba0bdd9/DelayEffect/src/main/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /DelayEffect/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 18 | 19 |