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.SeekBar; 322e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.widget.ToggleButton; 332e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.widget.CompoundButton; 342e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.widget.CompoundButton.OnCheckedChangeListener; 352e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.widget.ImageButton; 362e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.widget.ImageView; 372e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport java.util.HashMap; 382e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport java.util.Map; 392e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 402e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.media.audiofx.EnvironmentalReverb; 412e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.media.audiofx.AudioEffect; 422e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenimport android.media.AudioManager; 432e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 442e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissenpublic class EnvReverbTest extends Activity implements OnCheckedChangeListener, SeekBar.OnSeekBarChangeListener { 452e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 462e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private final static String TAG = "EnvReverbTest"; 472e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 482e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private static int NUM_PARAMS = 10; 492e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 502e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private EffectParameter[] mParameters = new EffectParameter[NUM_PARAMS]; 512e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private EnvironmentalReverb mReverb; 522e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen ToggleButton mOnOffButton; 532e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen ToggleButton mReleaseButton; 542e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen ToggleButton mAttachButton; 552e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private static HashMap<Integer, EnvironmentalReverb> sInstances = new HashMap<Integer, EnvironmentalReverb>(10); 562e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen static SimplePlayer sPlayerController = null; 572e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen SeekBar mSendLevelSeekBar; 582e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen TextView mSendLevelDisplay; 592e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen static float sSendLevel = linToExp(50,100); 602e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen static boolean sAttached = false; 612e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen String mSettings = ""; 622e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 632e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public EnvReverbTest() { 642e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG, "contructor"); 652e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 662e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 672e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 682e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onCreate(Bundle icicle) { 692e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super.onCreate(icicle); 702e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG, "onCreate"); 712e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen SeekBar seekBar; 722e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen TextView textView; 732e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen ToggleButton button; 742e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen setContentView(R.layout.envreverbtest); 752e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 762e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen ImageView playPause = (ImageView) findViewById(R.id.playPause1); 772e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen ImageView stop = (ImageView) findViewById(R.id.stop1); 782e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen textView = (TextView) findViewById(R.id.sessionText); 792e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (sPlayerController == null) { 802e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen sPlayerController = new SimplePlayer(this, R.id.playPause1, playPause, 812e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen R.id.stop1, stop, textView, 822e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen R.raw.mp3_sample, AudioManager.STREAM_MUSIC, 0); 832e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } else { 842e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen sPlayerController.set(this, R.id.playPause1, playPause, 852e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen R.id.stop1, stop, textView, 862e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen AudioManager.STREAM_MUSIC, 0); 872e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 882e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 892e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen // send level 902e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mSendLevelSeekBar = (SeekBar)findViewById(R.id.sendLevelSeekBar); 912e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mSendLevelDisplay = (TextView)findViewById(R.id.sendLevelValue); 922e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mSendLevelSeekBar.setMax(100); 932e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mSendLevelSeekBar.setOnSeekBarChangeListener(this); 942e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mSendLevelSeekBar.setProgress(expToLin(sSendLevel,100)); 952e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen sPlayerController.setAuxEffectSendLevel(sSendLevel); 962e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 972e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton = (ToggleButton)findViewById(R.id.rvbOnOff); 982e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReleaseButton = (ToggleButton)findViewById(R.id.rvbReleaseButton); 992e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mAttachButton = (ToggleButton)findViewById(R.id.attachButton); 1002e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1012e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen getEffect(0); 1022e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1032e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 1042e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton.setOnCheckedChangeListener(this); 1052e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReleaseButton.setOnCheckedChangeListener(this); 1062e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mAttachButton.setOnCheckedChangeListener(this); 1072e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1082e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen// button = (ToggleButton)findViewById(R.id.rvbBypass); 1092e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen// button.setChecked(false); 1102e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen// button.setOnCheckedChangeListener(this); 1112e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1122e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen // Room level 1132e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar = (SeekBar)findViewById(R.id.rvbParam1SeekBar); 1142e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen textView = (TextView)findViewById(R.id.rvbParam1Value); 1152e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[0] = new RoomLevelParam(mReverb, seekBar, textView); 1162e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar.setOnSeekBarChangeListener(mParameters[0]); 1172e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1182e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen // Room HF level 1192e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar = (SeekBar)findViewById(R.id.rvbParam2SeekBar); 1202e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen textView = (TextView)findViewById(R.id.rvbParam2Value); 1212e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[1] = new RoomHFLevelParam(mReverb, seekBar, textView); 1222e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar.setOnSeekBarChangeListener(mParameters[1]); 1232e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1242e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen // Decay time 1252e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar = (SeekBar)findViewById(R.id.rvbParam3SeekBar); 1262e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen textView = (TextView)findViewById(R.id.rvbParam3Value); 1272e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[2] = new DecayTimeParam(mReverb, seekBar, textView); 1282e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar.setOnSeekBarChangeListener(mParameters[2]); 1292e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1302e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen // Decay HF ratio 1312e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar = (SeekBar)findViewById(R.id.rvbParam4SeekBar); 1322e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen textView = (TextView)findViewById(R.id.rvbParam4Value); 1332e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[3] = new DecayHFRatioParam(mReverb, seekBar, textView); 1342e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar.setOnSeekBarChangeListener(mParameters[3]); 1352e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1362e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen // Reflections level 1372e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar = (SeekBar)findViewById(R.id.rvbParam5SeekBar); 1382e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen textView = (TextView)findViewById(R.id.rvbParam5Value); 1392e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[4] = new ReflectionsLevelParam(mReverb, seekBar, textView); 1402e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar.setOnSeekBarChangeListener(mParameters[4]); 1412e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1422e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen // Reflections delay 1432e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar = (SeekBar)findViewById(R.id.rvbParam6SeekBar); 1442e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen textView = (TextView)findViewById(R.id.rvbParam6Value); 1452e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[5] = new ReflectionsDelayParam(mReverb, seekBar, textView); 1462e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar.setOnSeekBarChangeListener(mParameters[5]); 1472e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1482e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen // Reverb level 1492e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar = (SeekBar)findViewById(R.id.rvbParam7SeekBar); 1502e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen textView = (TextView)findViewById(R.id.rvbParam7Value); 1512e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[6] = new ReverbLevelParam(mReverb, seekBar, textView); 1522e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar.setOnSeekBarChangeListener(mParameters[6]); 1532e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1542e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen // Reverb delay 1552e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar = (SeekBar)findViewById(R.id.rvbParam8SeekBar); 1562e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen textView = (TextView)findViewById(R.id.rvbParam8Value); 1572e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[7] = new ReverbDelayParam(mReverb, seekBar, textView); 1582e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar.setOnSeekBarChangeListener(mParameters[7]); 1592e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1602e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen // Diffusion 1612e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar = (SeekBar)findViewById(R.id.rvbParam9SeekBar); 1622e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen textView = (TextView)findViewById(R.id.rvbParam9Value); 1632e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[8] = new DiffusionParam(mReverb, seekBar, textView); 1642e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar.setOnSeekBarChangeListener(mParameters[8]); 1652e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1662e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen // Density 1672e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar = (SeekBar)findViewById(R.id.rvbParam10SeekBar); 1682e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen textView = (TextView)findViewById(R.id.rvbParam10Value); 1692e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[9] = new DensityParam(mReverb, seekBar, textView); 1702e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar.setOnSeekBarChangeListener(mParameters[9]); 1712e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1722e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1732e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 1742e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onResume() { 1752e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super.onResume(); 1762e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG, "onResume"); 1772e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1782e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1792e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 1802e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onPause() { 1812e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super.onPause(); 1822e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1832e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 1842e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen // OnCheckedChangeListener 1852e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 1862e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (buttonView.getId() == R.id.rvbOnOff) { 1872e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 1882e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReverb.setEnabled(isChecked); 1892e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG,"onCheckedChanged: rvbOnOff"); 1902e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen for (int i = 0 ; i < mParameters.length; i++) { 1912e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[i].updateDisplay(); 1922e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1932e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1942e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 1952e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (buttonView.getId() == R.id.rvbReleaseButton) { 1962e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (isChecked) { 1972e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb == null) { 1982e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen getEffect(0); 1992e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen for (int i = 0 ; i < mParameters.length; i++) { 2002e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[i].setEffect(mReverb); 2012e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[i].setEnabled(true); 2022e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2032e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2042e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } else { 2052e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 2062e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen for (int i = 0 ; i < mParameters.length; i++) { 2072e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mParameters[i].setEnabled(false); 2082e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2092e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen putEffect(0); 2102e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2112e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2122e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2132e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen// if (buttonView.getId() == R.id.rvbBypass) { 2142e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen// // REVERB_PARAM_BYPASS parametervalue is 11 in EffectEnvironmentalReverApi.h 2152e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen// if (mReverb != null) { 2162e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen// if (isChecked) { 2172e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen// mReverb.setParameter((int)11, (int)1); 2182e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen// } else { 2192e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen// mReverb.setParameter((int)11, (int)0); 2202e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen// } 2212e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen// } 2222e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen// } 2232e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (buttonView.getId() == R.id.attachButton) { 2242e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 2252e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (isChecked) { 2262e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen sPlayerController.attachAuxEffect(mReverb.getId()); 2272e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen sAttached = true; 2282e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } else { 2292e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen sPlayerController.attachAuxEffect(0); 2302e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen sAttached = false; 2312e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2322e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2332e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2342e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2352e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2362e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen // SeekBar.OnSeekBarChangeListener 2372e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) { 2382e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2392e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (seekBar != mSendLevelSeekBar) { 2402e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.e(TAG, "onProgressChanged called with wrong seekBar"); 2412e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return; 2422e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2432e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2442e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen sSendLevel = linToExp(progress,100); 2452e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (fromTouch) { 2462e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen sPlayerController.setAuxEffectSendLevel(sSendLevel); 2472e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2482e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen String text = Float.toString(sSendLevel); 2492e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mSendLevelDisplay.setText(text); 2502e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (!fromTouch) { 2512e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen seekBar.setProgress(progress); 2522e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2532e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2542e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2552e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen static float linToExp(int lin, int range) { 2562e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (lin == 0) return 0; 2572e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return (float)Math.pow((double)10,(double)72*(lin-range)/(20*range)); 2582e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2592e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2602e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen static int expToLin(float exp, int range) { 2612e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (exp == 0) return 0; 2622e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return (int)(20*range*Math.log10((double)exp)/72 + range); 2632e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2642e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2652e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onStartTrackingTouch(SeekBar seekBar) { 2662e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2672e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2682e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void onStopTrackingTouch(SeekBar seekBar) { 2692e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2702e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2712e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private class EnvReverbParam extends EffectParameter { 2722e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private EnvironmentalReverb mReverb; 2732e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2742e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public EnvReverbParam(EnvironmentalReverb reverb, int min, int max, SeekBar seekBar, TextView textView, String unit) { 2752e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super (min, max, seekBar, textView, unit); 2762e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReverb = reverb; 2772e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen updateDisplay(); 2782e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2792e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2802e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 2812e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void setParameter(Integer value) { 2822e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2832e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2842e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 2852e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public Integer getParameter() { 2862e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(0); 2872e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2882e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2892e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 2902e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void setEffect(Object reverb) { 2912e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReverb = (EnvironmentalReverb)reverb; 2922e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2932e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 2942e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2952e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private class RoomLevelParam extends EnvReverbParam { 2962e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 2972e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public RoomLevelParam(EnvironmentalReverb reverb, SeekBar seekBar, TextView textView) { 2982e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super (reverb, -9600, 0, seekBar, textView, "mB"); 2992e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3002e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 3012e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 3022e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void setParameter(Integer value) { 3032e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 3042e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReverb.setRoomLevel(value.shortValue()); 3052e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3062e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3072e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 3082e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 3092e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public Integer getParameter() { 3102e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 3112e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(mReverb.getRoomLevel()); 3122e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3132e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(0); 3142e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3152e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3162e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 3172e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private class RoomHFLevelParam extends EnvReverbParam { 3182e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 3192e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public RoomHFLevelParam(EnvironmentalReverb reverb, SeekBar seekBar, TextView textView) { 3202e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super (reverb, -4000, 0, seekBar, textView, "mB"); 3212e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3222e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 3232e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 3242e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void setParameter(Integer value) { 3252e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 3262e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReverb.setRoomHFLevel(value.shortValue()); 3272e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3282e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3292e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 3302e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 3312e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public Integer getParameter() { 3322e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 3332e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(mReverb.getRoomHFLevel()); 3342e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3352e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(0); 3362e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3372e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3382e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 3392e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private class DecayTimeParam extends EnvReverbParam { 3402e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 3412e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public DecayTimeParam(EnvironmentalReverb reverb, SeekBar seekBar, TextView textView) { 3422e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super (reverb, 200, 4000, seekBar, textView, "ms"); 3432e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3442e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 3452e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 3462e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void setParameter(Integer value) { 3472e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 3482e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReverb.setDecayTime(value.intValue()); 3492e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3502e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3512e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 3522e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 3532e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public Integer getParameter() { 3542e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 3552e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return mReverb.getDecayTime(); 3562e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3572e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(0); 3582e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3592e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3602e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 3612e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private class DecayHFRatioParam extends EnvReverbParam { 3622e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 3632e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public DecayHFRatioParam(EnvironmentalReverb reverb, SeekBar seekBar, TextView textView) { 3642e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super (reverb, 100, 1000, seekBar, textView, "permilles"); 3652e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3662e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 3672e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 3682e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void setParameter(Integer value) { 3692e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 3702e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReverb.setDecayHFRatio(value.shortValue()); 3712e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3722e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3732e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 3742e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 3752e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public Integer getParameter() { 3762e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 3772e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(mReverb.getDecayHFRatio()); 3782e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3792e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(0); 3802e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3812e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3822e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 3832e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private class ReflectionsLevelParam extends EnvReverbParam { 3842e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 3852e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public ReflectionsLevelParam(EnvironmentalReverb reverb, SeekBar seekBar, TextView textView) { 3862e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super (reverb, -9600, 0, seekBar, textView, "mB"); 3872e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3882e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 3892e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 3902e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void setParameter(Integer value) { 3912e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 3922e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReverb.setReflectionsLevel(value.shortValue()); 3932e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3942e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 3952e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 3962e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 3972e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public Integer getParameter() { 3982e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 3992e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(mReverb.getReflectionsLevel()); 4002e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4012e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(0); 4022e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4032e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4042e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 4052e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private class ReflectionsDelayParam extends EnvReverbParam { 4062e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 4072e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public ReflectionsDelayParam(EnvironmentalReverb reverb, SeekBar seekBar, TextView textView) { 4082e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super (reverb, 0, 65, seekBar, textView, "ms"); 4092e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4102e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 4112e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 4122e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void setParameter(Integer value) { 4132e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 4142e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReverb.setReflectionsDelay(value.intValue()); 4152e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4162e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4172e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 4182e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 4192e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public Integer getParameter() { 4202e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 4212e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return mReverb.getReflectionsDelay(); 4222e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4232e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(0); 4242e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4252e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4262e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 4272e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private class ReverbLevelParam extends EnvReverbParam { 4282e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 4292e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public ReverbLevelParam(EnvironmentalReverb reverb, SeekBar seekBar, TextView textView) { 4302e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super (reverb, -9600, 2000, seekBar, textView, "mB"); 4312e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4322e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 4332e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 4342e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void setParameter(Integer value) { 4352e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 4362e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReverb.setReverbLevel(value.shortValue()); 4372e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4382e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4392e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 4402e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 4412e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public Integer getParameter() { 4422e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 4432e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(mReverb.getReverbLevel()); 4442e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4452e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(0); 4462e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4472e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4482e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 4492e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private class ReverbDelayParam extends EnvReverbParam { 4502e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 4512e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public ReverbDelayParam(EnvironmentalReverb reverb, SeekBar seekBar, TextView textView) { 4522e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super (reverb, 0, 65, seekBar, textView, "ms"); 4532e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4542e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 4552e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 4562e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void setParameter(Integer value) { 4572e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 4582e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReverb.setReverbDelay(value.intValue()); 4592e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4602e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4612e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 4622e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 4632e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public Integer getParameter() { 4642e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 4652e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return mReverb.getReverbDelay(); 4662e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4672e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(0); 4682e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4692e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4702e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 4712e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private class DiffusionParam extends EnvReverbParam { 4722e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 4732e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public DiffusionParam(EnvironmentalReverb reverb, SeekBar seekBar, TextView textView) { 4742e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super (reverb, 0, 1000, seekBar, textView, "permilles"); 4752e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4762e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 4772e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 4782e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void setParameter(Integer value) { 4792e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 4802e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReverb.setDiffusion(value.shortValue()); 4812e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4822e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4832e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 4842e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 4852e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public Integer getParameter() { 4862e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 4872e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(mReverb.getDiffusion()); 4882e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4892e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(0); 4902e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4912e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4922e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 4932e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private class DensityParam extends EnvReverbParam { 4942e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 4952e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public DensityParam(EnvironmentalReverb reverb, SeekBar seekBar, TextView textView) { 4962e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen super (reverb, 0, 1000, seekBar, textView, "permilles"); 4972e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 4982e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 4992e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 5002e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public void setParameter(Integer value) { 5012e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 5022e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReverb.setDensity(value.shortValue()); 5032e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 5042e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 5052e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 5062e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen @Override 5072e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen public Integer getParameter() { 5082e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 5092e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(mReverb.getDensity()); 5102e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 5112e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen return new Integer(0); 5122e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 5132e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 5142e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 5152e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private void getEffect(int session) { 5162e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen synchronized (sInstances) { 5172e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (sInstances.containsKey(session)) { 5182e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReverb = sInstances.get(session); 5192e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } else { 5202e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen try{ 5212e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReverb = new EnvironmentalReverb(0, session); 5222e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } catch (IllegalArgumentException e) { 5232e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.e(TAG,"Reverb effect not supported"); 5242e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } catch (UnsupportedOperationException e) { 5252e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.e(TAG,"Reverb library not loaded"); 5262e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } catch (RuntimeException e) { 5272e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.e(TAG,"Reverb effect not found"); 5282e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 5292e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG, "new reverb: "+mReverb); 5302e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen sInstances.put(session, mReverb); 5312e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 5322e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 5332e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReleaseButton.setEnabled(false); 5342e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton.setEnabled(false); 5352e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mAttachButton.setEnabled(false); 5362e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 5372e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mSettings != "") { 5382e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReverb.setProperties(new EnvironmentalReverb.Settings(mSettings)); 5392e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 5402e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReleaseButton.setChecked(true); 5412e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReleaseButton.setEnabled(true); 5422e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton.setChecked(mReverb.getEnabled()); 5432e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton.setEnabled(true); 5442e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mAttachButton.setChecked(false); 5452e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mAttachButton.setEnabled(true); 5462e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (sAttached) { 5472e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mAttachButton.setChecked(true); 5482e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen sPlayerController.attachAuxEffect(mReverb.getId()); 5492e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 5502e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 5512e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 5522e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen 5532e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen private void putEffect(int session) { 5542e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton.setChecked(false); 5552e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mOnOffButton.setEnabled(false); 5562e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mAttachButton.setChecked(false); 5572e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mAttachButton.setEnabled(false); 5582e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen synchronized (sInstances) { 5592e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen if (mReverb != null) { 5602e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mSettings = mReverb.getProperties().toString(); 5612e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReverb.release(); 5622e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen Log.d(TAG,"Reverb released, settings: "+mSettings); 5632e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen mReverb = null; 5642e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen sInstances.remove(session); 5652e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 5662e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 5672e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen } 5682e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen} 569