Get started adding Resonance Audio to your Daydream and Cardboard apps in Android Studio.
This guide helps you set up your development environment and tour the Resonance Audio features used in a sample virtual reality app.
Note: Resonance Audio is packaged as “Google VR Audio” in the Google VR SDK for Android. Access Resonance Audio capabilities using GvrAudio
components, as shown in this guide.
Hardware requirements:
Daydream: You’ll need a Daydream-ready phone and a Daydream View.
Cardboard: You’ll need an Android device running Android 4.4 ‘Kit Kat’ (API level 19) or higher and a Cardboard viewer.
You’ll need headphones to experience the sample app’s spatial audio.
Software requirements:
Android Studio version 2.3.3 or higher.
Android SDK 7.1.1 ‘Nougat’ (API level 25) or higher.
In Android Studio, go to Preferences > Appearance and Behavior ** > **System Settings > Android SDK to review or update installed SDKs.
Google VR SDK for Android version 1.80.0 or higher.
Extract the downloaded Google VR SDK into a convenient location.
Open Android Studio and select Open an existing Android Studio project.
Select the directory where you extracted the Google VR SDK.
In the Project window, find the sdk-treasurehunt module in gvr-android-sdk > samples.
Connect your phone to your machine using a USB cable.
In Android Studio, select Run > Run… and select the samples-sdk-treasurehunt target. Android Studio compiles and runs the application on your phone.
Put your phone into your viewer and use the app. Make sure to wear headphones to experience the app’s spatial audio.
The Treasure Hunt app uses Resonance Audio to render realistic spatial audio.
You can walk through the TreasureHuntActivity
code in the sample app to explore the Resonance Audio API.
TreasureHuntActivity
The Resonance Audio engine is initialized in the TreasureHuntActivity
onCreate()
method.
gvrAudioEngine =
new GvrAudioEngine(this, GvrAudioEngine.RenderingMode.BINAURAL_HIGH_QUALITY);
Note that the audio engine constructor lets you specify a rendering quality mode.
Pausing and resuming audioTreasureHuntActivity
handles app pause or resume events in onPause()
and onResume
. Within these methods, the Resonance Audio engine also pauses and resumes.
Sound files can be streamed during playback or preloaded into memory before playback.
Perform preloading in a separate thread in order to avoid blocking the main thread.
new Thread(
new Runnable() {
@Override
public void run() {
// Preload the sound file
gvrAudioEngine.preloadSoundFile(SOUND_FILE);
}
})
.start();
Creating, positioning, and playing audio for sound objects
In TreasureHuntActivity
, a sound object represents spatial audio for the moving cube that users look for and collect.
The same thread used for preloading the sound file in TreasureHuntActivity
is used for setting up the sound object:
public void onSurfaceCreated(EGLConfig config) {
[...]
new Thread(
new Runnable() {
@Override
public void run() {
// Preload the sound file
gvrAudioEngine.preloadSoundFile(SOUND_FILE);
// Create the 'sourceId' sound object.
// You can create multiple sound objects using the same sound file.
sourceId = gvrAudioEngine.createSoundObject(SOUND_FILE);
// Set the sound object position relative to the room model.
gvrAudioEngine.setSoundObjectPosition(
sourceId, modelPosition[0], modelPosition[1], modelPosition[2]);
// Start audio playback of the sound object sound file at the
// cube model position. You can update the sound object position
// whenever the cube moves during run time.
gvrAudioEngine.playSound(sourceId, true /* looped playback */);
}
})
.start();
}
Making the sound object respond to model and user head movements
In TreasureHuntActivity
, when the cube moves during run time, the sound object that represents the cube audio moves with it.
protected void updateModelPosition() {
[...]
// Update the sound location to match the new cube position.
if (sourceId != GvrAudioEngine.INVALID_ID) {
gvrAudioEngine.setSoundObjectPosition(
sourceId, modelPosition[0], modelPosition[1], modelPosition[2]);
}
On each frame update, TreasureHuntActivity
gets the latest user head position quaternion and passes it to the audio engine for rendering the sound object’s spatial audio.
public void onNewFrame(HeadTransform headTransform) {
[...]
// Update the 3d audio engine with the most recent head rotation.
headTransform.getQuaternion(headRotation, 0);
gvrAudioEngine.setHeadRotation(
headRotation[0], headRotation[1], headRotation[2], headRotation[3]);
//Update the GVR Audio engine on each frame update.
gvrAudioEngine.update()
}
Using the Resonance Audio SDK in your own projects
To use Resonance Audio in your own projects, set up dependencies.
If you are using ProGuard in your app, add rules to ensure that it does not obfuscate any SDK code.
Setting up Resonance Audio dependenciesjcenter()
repository location is declared.Declare an Android Gradle plugin dependency:
Google VR SDK projects: Use gradle:2.3.3
or higher.
Google VR NDK projects: Use gradle-experimental:0.9.3
or higher.
allprojects {
repositories {
google()
jcenter()
}
}
dependencies {
// The Google VR SDK requires version 2.3.3 or higher.
classpath 'com.android.tools.build:gradle:2.3.3'
// The Google VR NDK requires experimental version 0.9.3 or higher.
// classpath 'com.android.tools.build:gradle-experimental:0.9.3'
}
Add Resonance Audio to other dependencies in your module level build.gradle files. As an example, review the dependencies
declared for the Treasure Hunt app in gvr-android-sdk > samples > sdk-treasurehunt > build.gradle.
dependencies {
// Adds Google VR spatial audio support
compile 'com.google.vr:sdk-audio:1.80.0'
// Required for all Google VR apps
compile 'com.google.vr:sdk-base:1.80.0'
}
For more information, see Add Build Dependencies in the Android Studio guide.
If you are using ProGuard to minimize your app’s APK file, make sure that ProGuard does not obfuscate any Google VR SDK or NDK code. This makes it easier to debug stack traces in release builds.
Add the Google VR ProGuard proguard-gvr.txt rules to your module level build.gradle file:
android {
...
buildTypes {
release {
minifyEnabled true
proguardFiles.add(file('../../proguard-gvr.txt'))
}
}
}
Next Steps
Review the Resonance Audio API reference documentation for complete details on Resonance Audio capabilities that you can use in your own projects.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4