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.PresetReverb; 422e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.media.audiofx.AudioEffect; 432e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 442e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenpublic class PresetReverbTest extends Activity implements OnCheckedChangeListener { 452e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 462e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private final static String TAG = "PresetReverbTest"; 472e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 482e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private static int NUM_PARAMS = 1; 492e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 502e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private EffectParameter[] mParameters = new EffectParameter[NUM_PARAMS]; 512e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private PresetReverb mPresetReverb; 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, PresetReverb> sInstances = new HashMap<Integer, PresetReverb>(10); 582e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen String mSettings = ""; 592e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 602e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public PresetReverbTest() { 612e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG, "contructor"); 622e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 632e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 642e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private static String[] sPresetNames = { 652e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen "NONE", //PresetReverb.PRESET_NONE 662e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen "SMALLROOM", //PresetReverb.PRESET_SMALLROOM 672e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen "MEDIUMROOM", //PresetReverb.PRESET_MEDIUMROOM 682e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen "LARGEROOM", //PresetReverb.PRESET_LARGEROOM 692e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen "MEDIUMHALL", //PresetReverb.PRESET_MEDIUMHALL 702e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen "LARGEHALL", //PresetReverb.PRESET_LARGEHALL 712e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen "PLATE", //PresetReverb.PRESET_PLATE 722e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen }; 732e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 742e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 752e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onCreate(Bundle icicle) { 762e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super.onCreate(icicle); 772e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 782e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen setContentView(R.layout.presetreverbtest); 792e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 802e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mSessionText = (EditText) findViewById(R.id.sessionEdit); 812e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mSessionText.setOnKeyListener(mSessionKeyListener); 822e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 832e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mSessionText.setText(Integer.toString(sSession)); 842e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 852e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReleaseButton = (ToggleButton)findViewById(R.id.presetrvbReleaseButton); 862e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton = (ToggleButton)findViewById(R.id.presetrvbOnOff); 872e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 882e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen getEffect(sSession); 892e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 902e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mPresetReverb != null) { 912e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReleaseButton.setOnCheckedChangeListener(this); 922e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton.setOnCheckedChangeListener(this); 932e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen // Presets 942e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen SeekBar seekBar = (SeekBar)findViewById(R.id.presetrvbParam1SeekBar); 952e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen TextView textView = (TextView)findViewById(R.id.presetrvbParam1Value); 962e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[0] = new PresetParam(mPresetReverb, (short)0, (short)(sPresetNames.length - 1), seekBar, textView); 972e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar.setOnSeekBarChangeListener(mParameters[0]); 982e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 992e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1002e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1012e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 1022e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onResume() { 1032e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super.onResume(); 1042e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1052e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1062e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 1072e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onPause() { 1082e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super.onPause(); 1092e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1102e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1112e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private View.OnKeyListener mSessionKeyListener 1122e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen = new View.OnKeyListener() { 1132e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public boolean onKey(View v, int keyCode, KeyEvent event) { 1142e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (event.getAction() == KeyEvent.ACTION_DOWN) { 1152e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen switch (keyCode) { 1162e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen case KeyEvent.KEYCODE_DPAD_CENTER: 1172e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen case KeyEvent.KEYCODE_ENTER: 1182e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen try { 1192e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen sSession = Integer.parseInt(mSessionText.getText().toString()); 1202e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen getEffect(sSession); 1212e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mPresetReverb != null) { 1222e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen for (int i = 0 ; i < mParameters.length; i++) { 1232e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[i].setEffect(mPresetReverb); 1242e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[i].setEnabled(true); 1252e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[i].updateDisplay(); 1262e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1272e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1282e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } catch (NumberFormatException e) { 1292e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG, "Invalid session #: "+mSessionText.getText().toString()); 1302e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1312e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1322e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return true; 1332e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1342e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1352e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return false; 1362e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1372e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen }; 1382e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1392e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen // OnCheckedChangeListener 1402e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 1412e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (buttonView.getId() == R.id.presetrvbOnOff) { 1422e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mPresetReverb != null) { 1432e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mPresetReverb.setEnabled(isChecked); 1442e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen updateParams(); 1452e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1462e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1472e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (buttonView.getId() == R.id.presetrvbReleaseButton) { 1482e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (isChecked) { 1492e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mPresetReverb == null) { 1502e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen getEffect(sSession); 1512e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mPresetReverb != null) { 1522e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen for (int i = 0 ; i < mParameters.length; i++) { 1532e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[i].setEffect(mPresetReverb); 1542e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[i].setEnabled(true); 1552e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[i].updateDisplay(); 1562e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1572e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1582e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1592e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } else { 1602e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mPresetReverb != null) { 1612e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen for (int i = 0 ; i < mParameters.length; i++) { 1622e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[i].setEnabled(false); 1632e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1642e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen putEffect(sSession); 1652e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1662e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1672e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1682e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1692e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1702e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private class PresetParam extends EffectParameter { 1712e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private PresetReverb mPresetReverb; 1722e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1732e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public PresetParam(PresetReverb presetrvb, short min, short max, SeekBar seekBar, TextView textView) { 1742e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super (min, max, seekBar, textView, ""); 1752e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1762e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mPresetReverb = presetrvb; 1772e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen updateDisplay(); 1782e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1792e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1802e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 1812e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void setParameter(Integer value) { 1822e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mPresetReverb != null) { 1832e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mPresetReverb.setPreset(value.shortValue()); 1842e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1852e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1862e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1872e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 1882e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public Integer getParameter() { 1892e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mPresetReverb != null) { 1902e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(mPresetReverb.getPreset()); 1912e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1922e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(0); 1932e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1942e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1952e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 1962e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void displayValue(int value, boolean fromTouch) { 1972e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mValueText.setText(sPresetNames[value]); 1982e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (!fromTouch) { 1992e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mSeekBar.setProgress(value - mMin); 2002e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } else { 2012e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen updateParams(); 2022e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2032e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2042e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2052e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 2062e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void setEffect(Object presetrvb) { 2072e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mPresetReverb = (PresetReverb)presetrvb; 2082e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2092e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2102e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2112e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2122e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen protected void updateParams() { 2132e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen for (int i = 0 ; i < mParameters.length; i++) { 2142e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[i].updateDisplay(); 2152e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2162e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2172e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2182e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public class EffectListner implements AudioEffect.OnEnableStatusChangeListener, 2192e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen AudioEffect.OnControlStatusChangeListener, 2202e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen PresetReverb.OnParameterChangeListener 2212e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen { 2222e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public EffectListner() { 2232e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2242e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onEnableStatusChange(AudioEffect effect, boolean enabled) { 2252e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG,"onEnableStatusChange: "+ enabled); 2262e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2272e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onControlStatusChange(AudioEffect effect, boolean controlGranted) { 2282e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG,"onControlStatusChange: "+ controlGranted); 2292e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2302e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2312e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onParameterChange(PresetReverb effect, int status, int param, short value) { 2322e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG,"onParameterChange, status: "+status+" p: "+param+" v: "+value); 2332e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2342e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2352e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private int byteArrayToInt(byte[] valueBuf, int offset) { 2362e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen ByteBuffer converter = ByteBuffer.wrap(valueBuf); 2372e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen converter.order(ByteOrder.nativeOrder()); 2382e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return converter.getInt(offset); 2392e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2402e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2412e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private short byteArrayToShort(byte[] valueBuf, int offset) { 2422e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen ByteBuffer converter = ByteBuffer.wrap(valueBuf); 2432e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen converter.order(ByteOrder.nativeOrder()); 2442e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return converter.getShort(offset); 2452e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2462e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2472e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2482e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2492e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private void getEffect(int session) { 2502e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen synchronized (sInstances) { 2512e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (sInstances.containsKey(session)) { 2522e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mPresetReverb = sInstances.get(session); 2532e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } else { 2542e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen try{ 2552e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mPresetReverb = new PresetReverb(0, session); 2562e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } catch (IllegalArgumentException e) { 2572e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.e(TAG,"PresetReverb effect not supported"); 2582e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } catch (UnsupportedOperationException e) { 2592e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.e(TAG,"PresetReverb library not loaded"); 2602e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } catch (RuntimeException e) { 2612e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.e(TAG,"PresetReverb effect not found"); 2622e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2632e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen sInstances.put(session, mPresetReverb); 2642e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2652e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2662e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReleaseButton.setEnabled(false); 2672e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton.setEnabled(false); 2682e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2692e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mPresetReverb != null) { 2702e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mSettings != "") { 2712e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mPresetReverb.setProperties(new PresetReverb.Settings(mSettings)); 2722e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2732e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mPresetReverb.setEnableStatusListener(mEffectListener); 2742e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mPresetReverb.setControlStatusListener(mEffectListener); 2752e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mPresetReverb.setParameterListener(mEffectListener); 2762e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2772e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReleaseButton.setChecked(true); 2782e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReleaseButton.setEnabled(true); 2792e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2802e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton.setChecked(mPresetReverb.getEnabled()); 2812e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton.setEnabled(true); 2822e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2832e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2842e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2852e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private void putEffect(int session) { 2862e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton.setChecked(false); 2872e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton.setEnabled(false); 2882e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen synchronized (sInstances) { 2892e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mPresetReverb != null) { 2902e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mSettings = mPresetReverb.getProperties().toString(); 2912e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mPresetReverb.release(); 2922e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG,"PresetReverb released"); 2932e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mPresetReverb = null; 2942e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen sInstances.remove(session); 2952e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2962e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2972e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2982e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen} 299