00001 /******************************************************************************* 00002 The content of this file includes portions of the AUDIOKINETIC Wwise Technology 00003 released in source code form as part of the SDK installer package. 00004 00005 Commercial License Usage 00006 00007 Licensees holding valid commercial licenses to the AUDIOKINETIC Wwise Technology 00008 may use this file in accordance with the end user license agreement provided 00009 with the software or, alternatively, in accordance with the terms contained in a 00010 written agreement between you and Audiokinetic Inc. 00011 00012 Apache License Usage 00013 00014 Alternatively, this file may be used under the Apache License, Version 2.0 (the 00015 "Apache License"); you may not use this file except in compliance with the 00016 Apache License. You may obtain a copy of the Apache License at 00017 http://www.apache.org/licenses/LICENSE-2.0. 00018 00019 Unless required by applicable law or agreed to in writing, software distributed 00020 under the Apache License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES 00021 OR CONDITIONS OF ANY KIND, either express or implied. See the Apache License for 00022 the specific language governing permissions and limitations under the License. 00023 00024 Version: <VERSION> Build: <BUILDNUMBER> 00025 Copyright (c) <COPYRIGHTYEAR> Audiokinetic Inc. 00026 *******************************************************************************/ 00027 00028 // AkAndroidSoundEngine.h 00029 00030 /// \file 00031 /// Main Sound Engine interface, specific Android. 00032 00033 #pragma once 00034 00035 #include <AK/SoundEngine/Common/AkTypes.h> 00036 #include <AK/Tools/Common/AkPlatformFuncs.h> 00037 #include <SLES/OpenSLES.h> 00038 #include "SLES/OpenSLES_Android.h" 00039 #include <jni.h> 00040 00041 00042 /// Platform specific initialization settings 00043 /// \sa AK::SoundEngine::Init 00044 /// \sa AK::SoundEngine::GetDefaultPlatformInitSettings 00045 /// - \ref soundengine_initialization_advanced_soundengine_using_memory_threshold 00046 struct AkPlatformInitSettings 00047 { 00048 // Threading model. 00049 AkThreadProperties threadLEngine; ///< Lower engine threading properties 00050 AkThreadProperties threadBankManager; ///< Bank manager threading properties (its default priority is AK_THREAD_PRIORITY_NORMAL) 00051 AkThreadProperties threadMonitor; ///< Monitor threading properties (its default priority is AK_THREAD_PRIORITY_ABOVENORMAL). This parameter is not used in Release build. 00052 00053 // Memory. 00054 AkReal32 fLEngineDefaultPoolRatioThreshold; ///< 0.0f to 1.0f value: The percentage of occupied memory where the sound engine should enter in Low memory mode. \ref soundengine_initialization_advanced_soundengine_using_memory_threshold 00055 AkUInt32 uLEngineDefaultPoolSize;///< Lower Engine default memory pool size 00056 00057 AkUInt32 uSampleRate; ///< Sampling Rate. Set to 0 to get the native sample rate. Default value is 0. 00058 AkUInt16 uNumRefillsInVoice; ///< Number of refill buffers in voice buffer. Defaults to 4. 00059 AkChannelMask uChannelMask; ///< use AK_SPEAKER_SETUP_STEREO 00060 bool bRoundFrameSizeToHWSize;///< Used when hardware-preferred frame size and user-preferred frame size (AkInitSettings.uNumSamplesPerFrame) are not compatible. 00061 /// If true (default) the sound engine will initialize to a multiple of the HW setting, close to the user setting. 00062 /// If false, the user setting is used as is, regardless of the HW preference (might incur a performance hit). 00063 00064 SLObjectItf pSLEngine; ///< OpenSL engine reference for sharing between various audio components. 00065 JavaVM* pJavaVM; ///< Active JavaVM for the app, used for internal system calls. Usually provided through the android_app structure given at startup or the NativeActivity. This parameter needs to be set to allow the sound engine initialization. 00066 jobject jNativeActivity; ///< NativeActivity instance for this application. Usually provided through the android_app structure, or through other means if your application has an overridden activity. 00067 ///< This is optional. However, not providing this object will prevent the background music muting when player start his own music in an external player. 00068 }; 00069 00070 struct AkInitSettings; 00071 00072 /// Used with \ref AK::SoundEngine::AddSecondaryOutput to specify the type of secondary output. 00073 enum AkAudioOutputType 00074 { 00075 AkOutput_None = 0, ///< Used for uninitialized type, do not use. 00076 AkOutput_Dummy, ///< Dummy output, simply eats the audio stream and outputs nothing. 00077 AkOutput_Main, ///< Main output. This cannot be used with AddSecondaryOutput, but can be used to query information about the main output (GetSpeakerConfiguration for example). 00078 AkOutput_NumBuiltInOutputs, ///< Do not use. 00079 AkOutput_Plugin ///< Specify if using Audio Device Plugin Sink. 00080 }; 00081 00082 namespace AK 00083 { 00084 namespace SoundEngine 00085 { 00086 /// Get instance of OpenSL created by the sound engine at initialization. 00087 /// \return NULL if sound engine is not initialized 00088 AK_EXTERNAPIFUNC( SLObjectItf, GetWwiseOpenSLInterface )(); 00089 00090 /// Gets specific settings for the fast audio path on Android. Call this function after AK::SoundEngine::GetDefaultSettings and AK::SoundEngine::GetPlatformDefaultSettings to modify settings for the fast path. 00091 /// in_pfSettings.pJavaVM and in_pfSettings.jNativeActivity must be filled properly prior to calling GetFastPathSettings. 00092 /// The fast path constraints are: 00093 /// -The sample rate must match the hardware native sample rate 00094 /// -The number of samples per frame must be a multiple of the hardware buffer size. 00095 /// Not fulfilling these constraints makes the audio hardware less efficient. 00096 /// In general, using the fast path means a higher CPU usage. Complex audio designs may not be feasible while using the fast path. 00097 AKRESULT GetFastPathSettings(AkInitSettings &in_settings, AkPlatformInitSettings &in_pfSettings); 00098 }; 00099 };