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
732e2beaaee2a427598ced5067fc59f3ae9a98cf35Marco Nelissen        mSessionText = (EditText) 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