* Unified all renderers into common class 'ALAudioRenderer' * LWJGL and Android now implement the AL / ALC / EFX interfaces to provide a common OpenAL backend for jME * Added support for OpenAL Soft "Pause Device" extension, which allows the engine to pause the context while running in the background (currently requires OpenAL soft 1.16 and thus is Android only feature)
137 lines
4.6 KiB
Groovy
137 lines
4.6 KiB
Groovy
// OpenAL Soft r1.16
|
|
String openALSoftUrl = 'http://repo.or.cz/w/openal-soft.git/snapshot/e5016f814a265ed592a88acea95cf912c4bfdf12.zip'
|
|
String openALSoftZipFile = 'OpenALSoft.zip'
|
|
|
|
// OpenAL Soft directory the download is extracted into
|
|
// Typically, the downloaded OpenAL Soft zip file will extract to a directory
|
|
// called "openal-soft"
|
|
String openALSoftFolder = 'openal-soft'
|
|
|
|
//Working directories for the ndk build.
|
|
String openalsoftBuildDir = "${buildDir}" + File.separator + 'openalsoft'
|
|
String openalsoftBuildJniDir = openalsoftBuildDir + File.separator + 'jni'
|
|
String openalsoftBuildLibsDir = openalsoftBuildDir + File.separator + 'libs'
|
|
|
|
//Pre-compiled libs directory
|
|
String openalsoftPreCompiledLibsDir = 'libs' + File.separator + 'openalsoft'
|
|
|
|
// jME Android Native source files path
|
|
String openalsoftJmeAndroidPath = 'src/native/jme_openalsoft'
|
|
|
|
// Download external source files if not available
|
|
task downloadOpenALSoft(type: MyDownload) {
|
|
sourceUrl = openALSoftUrl
|
|
target = file(openALSoftZipFile)
|
|
}
|
|
|
|
// Unzip external source files
|
|
task unzipOpenALSoft(type: Copy) {
|
|
def zipFile = file(openALSoftZipFile)
|
|
def outputDir = file(".")
|
|
|
|
from zipTree(zipFile)
|
|
into outputDir
|
|
}
|
|
unzipOpenALSoft.dependsOn {
|
|
def zipFilePath = project.projectDir.absolutePath + File.separator + openALSoftZipFile
|
|
def zipFile = new File(zipFilePath)
|
|
// println "zipFile path: " + zipFile.absolutePath
|
|
// println "zipFile exists: " + zipFile.exists()
|
|
if (!zipFile.exists()) {
|
|
downloadOpenALSoft
|
|
}
|
|
}
|
|
|
|
// Copy external source files to jni directory
|
|
task copyOpenALSoft(type: Copy) {
|
|
def sourceDir = file(openALSoftFolder)
|
|
def outputDir = file(openalsoftBuildJniDir)
|
|
// println "copyOpenALSoft sourceDir: " + sourceDir
|
|
// println "copyOpenALSoft outputDir: " + outputDir
|
|
|
|
from sourceDir
|
|
into outputDir
|
|
}
|
|
copyOpenALSoft.dependsOn {
|
|
def openALSoftUnzipDir = new File(project.projectDir.absolutePath + File.separator + openALSoftFolder)
|
|
// println "openALSoftUnzipDir path: " + openALSoftUnzipDir.absolutePath
|
|
// println "openALSoftUnzipDir exists: " + openALSoftUnzipDir.isDirectory()
|
|
if (!openALSoftUnzipDir.isDirectory()) {
|
|
unzipOpenALSoft
|
|
}
|
|
}
|
|
|
|
// Copy jME Android native files to jni directory
|
|
task copyJmeOpenALSoft(type: Copy, dependsOn:copyOpenALSoft) {
|
|
def sourceDir = file(openalsoftJmeAndroidPath)
|
|
def outputDir = file(openalsoftBuildJniDir)
|
|
// println "copyJmeOpenALSoft sourceDir: " + sourceDir
|
|
// println "copyJmeOpenALSoft outputDir: " + outputDir
|
|
|
|
from sourceDir
|
|
into outputDir
|
|
}
|
|
|
|
task generateOpenAlSoftHeaders(type:Exec, dependsOn: copyJmeOpenALSoft) {
|
|
executable org.gradle.internal.jvm.Jvm.current().getExecutable('javah')
|
|
args '-d', openalsoftJmeAndroidPath
|
|
args '-classpath', project.projectClassPath
|
|
args "com.jme3.audio.android.AndroidAL"
|
|
args "com.jme3.audio.android.AndroidALC"
|
|
args "com.jme3.audio.android.AndroidEFX"
|
|
}
|
|
|
|
task buildOpenAlSoftNativeLib(type: Exec, dependsOn: generateOpenAlSoftHeaders) {
|
|
// println "openalsoft build dir: " + openalsoftBuildDir
|
|
// println "ndkCommandPath: " + project.ndkCommandPath
|
|
workingDir openalsoftBuildDir
|
|
executable rootProject.ndkCommandPath
|
|
args '-j8'
|
|
}
|
|
|
|
task updatePreCompiledOpenAlSoftLibs(type: Copy, dependsOn: buildOpenAlSoftNativeLib) {
|
|
def sourceDir = new File(openalsoftBuildLibsDir)
|
|
def outputDir = new File(openalsoftPreCompiledLibsDir)
|
|
// println "updatePreCompiledOpenAlSoftLibs sourceDir: " + sourceDir
|
|
// println "updatePreCompiledOpenAlSoftLibs outputDir: " + outputDir
|
|
|
|
from sourceDir
|
|
into outputDir
|
|
}
|
|
|
|
|
|
// Copy pre-compiled libs to build directory (when not building new libs)
|
|
task copyPreCompiledOpenAlSoftLibs(type: Copy) {
|
|
def sourceDir = file(openalsoftPreCompiledLibsDir)
|
|
def outputDir = file(openalsoftBuildLibsDir)
|
|
// println "copyStbiJmeFiles sourceDir: " + sourceDir
|
|
// println "copyStbiJmeFiles outputDir: " + outputDir
|
|
|
|
from sourceDir
|
|
into outputDir
|
|
}
|
|
|
|
if (rootProject.ndkExists) {
|
|
// build native libs and update stored pre-compiled libs to commit
|
|
compileJava.dependsOn { updatePreCompiledOpenAlSoftLibs }
|
|
} else {
|
|
// use pre-compiled native libs (not building new ones)
|
|
compileJava.dependsOn { copyPreCompiledOpenAlSoftLibs }
|
|
}
|
|
|
|
jar.into("lib") { from openalsoftBuildLibsDir }
|
|
|
|
// Helper class to wrap ant dowload task
|
|
class MyDownload extends DefaultTask {
|
|
@Input
|
|
String sourceUrl
|
|
|
|
@OutputFile
|
|
File target
|
|
|
|
@TaskAction
|
|
void download() {
|
|
ant.get(src: sourceUrl, dest: target)
|
|
}
|
|
}
|