12e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen/* 22e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * Copyright (C) 2009 The Android Open Source Project 32e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * 42e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * Licensed under the Apache License, Version 2.0 (the "License"); 52e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * you may not use this file except in compliance with the License. 62e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * You may obtain a copy of the License at 72e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * 82e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * http://www.apache.org/licenses/LICENSE-2.0 92e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * 102e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * Unless required by applicable law or agreed to in writing, software 112e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * distributed under the License is distributed on an "AS IS" BASIS, 122e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * See the License for the specific language governing permissions and 142e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen * limitations under the License. 152e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen */ 162e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 172e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenpackage com.android.effectstest; 182e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 192e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.app.Activity; 202e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.content.Context; 212e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.content.Intent; 222e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.os.Bundle; 232e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.util.Log; 242e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.view.KeyEvent; 252e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.view.Menu; 262e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.view.View.OnClickListener; 272e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.view.View; 282e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.view.ViewGroup; 292e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.widget.Button; 302e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.widget.TextView; 312e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.widget.EditText; 322e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.widget.SeekBar; 332e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.widget.ToggleButton; 342e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.widget.CompoundButton; 352e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.widget.CompoundButton.OnCheckedChangeListener; 362e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport java.nio.ByteOrder; 372e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport java.nio.ByteBuffer; 382e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport java.util.HashMap; 392e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport java.util.Map; 402e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 412e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.media.audiofx.BassBoost; 422e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.media.audiofx.AudioEffect; 432e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 442e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenpublic class BassBoostTest extends Activity implements OnCheckedChangeListener { 452e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 462e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private final static String TAG = "BassBoostTest"; 472e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 482e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private static int NUM_PARAMS = 1; 492e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 502e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private EffectParameter mStrength; 512e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private BassBoost mBassBoost = null; 522e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen ToggleButton mOnOffButton; 532e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen ToggleButton mReleaseButton; 542e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen EditText mSessionText; 552e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen static int sSession = 0; 562e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen EffectListner mEffectListener = new EffectListner(); 572e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private static HashMap<Integer, BassBoost> sInstances = new HashMap<Integer, BassBoost>(10); 582e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen String mSettings = ""; 592e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 602e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public BassBoostTest() { 612e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG, "contructor"); 622e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 632e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 642e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 652e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onCreate(Bundle icicle) { 662e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super.onCreate(icicle); 672e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 682e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen SeekBar seekBar; 692e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen TextView textView; 702e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 712e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen setContentView(R.layout.bassboosttest); 722e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 7351efddbd3bb304de2dd47fa8cd1114ac555958bbAlan Viverette mSessionText = findViewById(R.id.sessionEdit); 742e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mSessionText.setOnKeyListener(mSessionKeyListener); 752e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 762e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mSessionText.setText(Integer.toString(sSession)); 772e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 782e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReleaseButton = (ToggleButton)findViewById(R.id.bbReleaseButton); 792e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton = (ToggleButton)findViewById(R.id.bassboostOnOff); 802e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 812e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen getEffect(sSession); 822e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 832e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mBassBoost != null) { 842e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReleaseButton.setOnCheckedChangeListener(this); 852e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton.setOnCheckedChangeListener(this); 862e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 872e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen textView = (TextView)findViewById(R.id.bbStrengthMin); 882e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen textView.setText("0"); 892e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen textView = (TextView)findViewById(R.id.bbStrengthMax); 902e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen textView.setText("1000"); 912e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar = (SeekBar)findViewById(R.id.bbStrengthSeekBar); 922e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen textView = (TextView)findViewById(R.id.bbStrengthValue); 932e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mStrength = new BassBoostParam(mBassBoost, 0, 1000, seekBar, textView); 942e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar.setOnSeekBarChangeListener(mStrength); 952e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mStrength.setEnabled(mBassBoost.getStrengthSupported()); 962e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 972e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 982e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 992e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 1002e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onResume() { 1012e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super.onResume(); 1022e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1032e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1042e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 1052e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onPause() { 1062e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super.onPause(); 1072e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1082e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1092e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private View.OnKeyListener mSessionKeyListener 1102e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen = new View.OnKeyListener() { 1112e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public boolean onKey(View v, int keyCode, KeyEvent event) { 1122e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG, "onKey() keyCode: "+keyCode+" event.getAction(): "+event.getAction()); 1132e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (event.getAction() == KeyEvent.ACTION_DOWN) { 1142e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen switch (keyCode) { 1152e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen case KeyEvent.KEYCODE_DPAD_CENTER: 1162e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen case KeyEvent.KEYCODE_ENTER: 1172e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen try { 1182e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen sSession = Integer.parseInt(mSessionText.getText().toString()); 1192e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen getEffect(sSession); 1202e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mBassBoost != null) { 1212e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mStrength.setEffect(mBassBoost); 1222e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mStrength.setEnabled(mBassBoost.getStrengthSupported()); 1232e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1242e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } catch (NumberFormatException e) { 1252e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG, "Invalid session #: "+mSessionText.getText().toString()); 1262e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1272e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return true; 1282e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1292e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1302e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return false; 1312e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1322e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen }; 1332e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1342e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen // OnCheckedChangeListener 1352e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 1362e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (buttonView.getId() == R.id.bassboostOnOff) { 1372e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mBassBoost != null) { 1382e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mBassBoost.setEnabled(isChecked); 1392e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mStrength.updateDisplay(); 1402e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1412e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1422e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (buttonView.getId() == R.id.bbReleaseButton) { 1432e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (isChecked) { 1442e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mBassBoost == null) { 1452e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen getEffect(sSession); 1462e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mBassBoost != null) { 1472e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mStrength.setEffect(mBassBoost); 1482e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mStrength.setEnabled(mBassBoost.getStrengthSupported()); 1492e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1502e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1512e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } else { 1522e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mBassBoost != null) { 1532e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mStrength.setEnabled(false); 1542e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen putEffect(sSession); 1552e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1562e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1572e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1582e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1592e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1602e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private class BassBoostParam extends EffectParameter { 1612e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private BassBoost mBassBoost; 1622e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1632e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public BassBoostParam(BassBoost bassboost, int min, int max, SeekBar seekBar, TextView textView) { 1642e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super (min, max, seekBar, textView, "o/oo"); 1652e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1662e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mBassBoost = bassboost; 1672e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen updateDisplay(); 1682e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1692e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1702e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 1712e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void setParameter(Integer value) { 1722e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mBassBoost != null) { 1732e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mBassBoost.setStrength(value.shortValue()); 1742e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1752e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1762e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1772e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 1782e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public Integer getParameter() { 1792e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mBassBoost != null) { 1802e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(mBassBoost.getRoundedStrength()); 1812e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1822e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(0); 1832e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1842e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1852e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 1862e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void setEffect(Object effect) { 1872e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mBassBoost = (BassBoost)effect; 1882e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1892e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1902e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1912e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public class EffectListner implements AudioEffect.OnEnableStatusChangeListener, 1922e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen AudioEffect.OnControlStatusChangeListener, AudioEffect.OnParameterChangeListener 1932e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen { 1942e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public EffectListner() { 1952e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1962e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onEnableStatusChange(AudioEffect effect, boolean enabled) { 1972e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG,"onEnableStatusChange: "+ enabled); 1982e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1992e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onControlStatusChange(AudioEffect effect, boolean controlGranted) { 2002e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG,"onControlStatusChange: "+ controlGranted); 2012e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2022e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onParameterChange(AudioEffect effect, int status, byte[] param, byte[] value) { 2032e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen int p = byteArrayToInt(param, 0); 2042e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen short v = byteArrayToShort(value, 0); 2052e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2062e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG,"onParameterChange, status: "+status+" p: "+p+" v: "+v); 2072e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2082e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2092e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private int byteArrayToInt(byte[] valueBuf, int offset) { 2102e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen ByteBuffer converter = ByteBuffer.wrap(valueBuf); 2112e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen converter.order(ByteOrder.nativeOrder()); 2122e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return converter.getInt(offset); 2132e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2142e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2152e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private short byteArrayToShort(byte[] valueBuf, int offset) { 2162e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen ByteBuffer converter = ByteBuffer.wrap(valueBuf); 2172e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen converter.order(ByteOrder.nativeOrder()); 2182e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return converter.getShort(offset); 2192e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2202e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2212e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2222e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2232e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2242e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private void getEffect(int session) { 2252e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen synchronized (sInstances) { 2262e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (sInstances.containsKey(session)) { 2272e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mBassBoost = sInstances.get(session); 2282e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } else { 2292e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen try{ 2302e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mBassBoost = new BassBoost(0, session); 2312e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } catch (IllegalArgumentException e) { 2322e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.e(TAG,"BassBoost effect not supported"); 2332e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } catch (IllegalStateException e) { 2342e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.e(TAG,"BassBoost cannot get strength supported"); 2352e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } catch (UnsupportedOperationException e) { 2362e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.e(TAG,"BassBoost library not loaded"); 2372e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } catch (RuntimeException e) { 2382e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.e(TAG,"BassBoost effect not found"); 2392e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2402e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen sInstances.put(session, mBassBoost); 2412e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2422e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReleaseButton.setEnabled(false); 2432e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton.setEnabled(false); 2442e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2452e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mBassBoost != null) { 2462e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mSettings != "") { 2472e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mBassBoost.setProperties(new BassBoost.Settings(mSettings)); 2482e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2492e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mBassBoost.setEnableStatusListener(mEffectListener); 2502e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mBassBoost.setControlStatusListener(mEffectListener); 2512e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mBassBoost.setParameterListener(mEffectListener); 2522e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2532e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReleaseButton.setChecked(true); 2542e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReleaseButton.setEnabled(true); 2552e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2562e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton.setChecked(mBassBoost.getEnabled()); 2572e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton.setEnabled(true); 2582e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2592e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2602e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2612e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2622e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private void putEffect(int session) { 2632e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton.setChecked(false); 2642e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton.setEnabled(false); 2652e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen synchronized (sInstances) { 2662e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mBassBoost != null) { 2672e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mSettings = mBassBoost.getProperties().toString(); 2682e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mBassBoost.release(); 2692e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG,"BassBoost released"); 2702e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mBassBoost = null; 2712e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen sInstances.remove(session); 2722e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2732e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2742e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2752e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2762e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen} 277