17848314dd1123b795423acd5099f1037527d1910Martin Hibdon/*
27848314dd1123b795423acd5099f1037527d1910Martin Hibdon * Copyright (C) 2007 The Android Open Source Project
37848314dd1123b795423acd5099f1037527d1910Martin Hibdon *
47848314dd1123b795423acd5099f1037527d1910Martin Hibdon * Licensed under the Apache License, Version 2.0 (the "License");
57848314dd1123b795423acd5099f1037527d1910Martin Hibdon * you may not use this file except in compliance with the License.
67848314dd1123b795423acd5099f1037527d1910Martin Hibdon * You may obtain a copy of the License at
77848314dd1123b795423acd5099f1037527d1910Martin Hibdon *
87848314dd1123b795423acd5099f1037527d1910Martin Hibdon *      http://www.apache.org/licenses/LICENSE-2.0
97848314dd1123b795423acd5099f1037527d1910Martin Hibdon *
107848314dd1123b795423acd5099f1037527d1910Martin Hibdon * Unless required by applicable law or agreed to in writing, software
117848314dd1123b795423acd5099f1037527d1910Martin Hibdon * distributed under the License is distributed on an "AS IS" BASIS,
127848314dd1123b795423acd5099f1037527d1910Martin Hibdon * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137848314dd1123b795423acd5099f1037527d1910Martin Hibdon * See the License for the specific language governing permissions and
147848314dd1123b795423acd5099f1037527d1910Martin Hibdon * limitations under the License.
157848314dd1123b795423acd5099f1037527d1910Martin Hibdon */
167848314dd1123b795423acd5099f1037527d1910Martin Hibdon
177848314dd1123b795423acd5099f1037527d1910Martin Hibdonpackage com.android.speechrecorder;
187848314dd1123b795423acd5099f1037527d1910Martin Hibdon
197848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport android.app.Activity;
207848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport android.os.Bundle;
217848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport android.os.Handler;
227848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport android.speech.srec.Recognizer;
237848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport android.speech.srec.WaveHeader;
247848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport android.speech.srec.MicrophoneInputStream;
257848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport android.util.Log;
267848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport android.view.View;
277848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport android.view.View.OnClickListener;
287848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport android.widget.Button;
297848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport android.widget.RadioButton;
307848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport android.widget.TextView;
317848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport java.io.BufferedWriter;
327848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport java.io.ByteArrayOutputStream;
337848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport java.io.File;
347848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport java.io.FileFilter;
357848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport java.io.FileOutputStream;
367848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport java.io.FileWriter;
377848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport java.io.IOException;
387848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport java.io.InputStream;
397848314dd1123b795423acd5099f1037527d1910Martin Hibdonimport java.io.OutputStream;
407848314dd1123b795423acd5099f1037527d1910Martin Hibdon
417848314dd1123b795423acd5099f1037527d1910Martin Hibdonpublic class SpeechRecorderActivity extends Activity {
427848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private static final String TAG = "SpeechRecorderActivity";
437848314dd1123b795423acd5099f1037527d1910Martin Hibdon
447848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private static final int DURATION_SEC = 7;
457848314dd1123b795423acd5099f1037527d1910Martin Hibdon
467848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private Handler mHandler;
477848314dd1123b795423acd5099f1037527d1910Martin Hibdon
487848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private TextView mCommand;
497848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private TextView mStatus;
507848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private Button mRecord;
517848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private Button mRedo;
527848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private RadioButton m8KHz;
537848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private RadioButton m11KHz;
547848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private RadioButton mCall;
557848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private RadioButton mDialNanp;
567848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private RadioButton mDialPairs;
577848314dd1123b795423acd5099f1037527d1910Martin Hibdon
587848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private InputStream mMicrophone;
597848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private ByteArrayOutputStream mBaos;
607848314dd1123b795423acd5099f1037527d1910Martin Hibdon
617848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private File mUtterance;
627848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private int mSampleRate;
637848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private Thread mThread;
647848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private boolean mStoppedListening;
657848314dd1123b795423acd5099f1037527d1910Martin Hibdon
667848314dd1123b795423acd5099f1037527d1910Martin Hibdon    @Override
677848314dd1123b795423acd5099f1037527d1910Martin Hibdon    protected void onCreate(Bundle icicle) {
687848314dd1123b795423acd5099f1037527d1910Martin Hibdon        super.onCreate(icicle);
697848314dd1123b795423acd5099f1037527d1910Martin Hibdon
707848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mHandler = new Handler();
717848314dd1123b795423acd5099f1037527d1910Martin Hibdon
727848314dd1123b795423acd5099f1037527d1910Martin Hibdon        setContentView(R.layout.recorder);
737848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mCommand = (TextView) findViewById(R.id.commandText);
747848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mStatus = (TextView) findViewById(R.id.statusText);
757848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mRecord = (Button) findViewById(R.id.recordButton);
767848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mRedo = (Button) findViewById(R.id.redoButton);
777848314dd1123b795423acd5099f1037527d1910Martin Hibdon        m8KHz = (RadioButton)findViewById(R.id.codec8KHzRadioButton);
787848314dd1123b795423acd5099f1037527d1910Martin Hibdon        m11KHz = (RadioButton)findViewById(R.id.codec11KHzRadioButton);
797848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mCall = (RadioButton)findViewById(R.id.callRadioButton);
807848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mDialNanp = (RadioButton)findViewById(R.id.dialNanpRadioButton);
817848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mDialPairs = (RadioButton)findViewById(R.id.dialPairsRadioButton);
827848314dd1123b795423acd5099f1037527d1910Martin Hibdon
837848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mCommand.setText("Please click 'Record' to begin");
847848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mRecord.setOnClickListener(new OnClickListener() {
857848314dd1123b795423acd5099f1037527d1910Martin Hibdon            public void onClick(View v) {
8662db451fb742f17669300b9915b9f446f43361ceJoe Onorato                if (false) {
877848314dd1123b795423acd5099f1037527d1910Martin Hibdon                    Log.d(TAG, "mRecord.OnClickListener.onClick");
887848314dd1123b795423acd5099f1037527d1910Martin Hibdon                }
897848314dd1123b795423acd5099f1037527d1910Martin Hibdon
907848314dd1123b795423acd5099f1037527d1910Martin Hibdon                setupRecording();
917848314dd1123b795423acd5099f1037527d1910Martin Hibdon            }
927848314dd1123b795423acd5099f1037527d1910Martin Hibdon        });
937848314dd1123b795423acd5099f1037527d1910Martin Hibdon
947848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mRedo.setEnabled(false);
957848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mRedo.setOnClickListener(new OnClickListener() {
967848314dd1123b795423acd5099f1037527d1910Martin Hibdon            public void onClick(View v) {
9762db451fb742f17669300b9915b9f446f43361ceJoe Onorato                if (false) {
987848314dd1123b795423acd5099f1037527d1910Martin Hibdon                    Log.d(TAG, "mRedo.onClickListener.onClick");
997848314dd1123b795423acd5099f1037527d1910Martin Hibdon                }
1007848314dd1123b795423acd5099f1037527d1910Martin Hibdon
1017848314dd1123b795423acd5099f1037527d1910Martin Hibdon                mUtterance.delete();
1027848314dd1123b795423acd5099f1037527d1910Martin Hibdon
1037848314dd1123b795423acd5099f1037527d1910Martin Hibdon                setupRecording();
1047848314dd1123b795423acd5099f1037527d1910Martin Hibdon            }
1057848314dd1123b795423acd5099f1037527d1910Martin Hibdon        });
1067848314dd1123b795423acd5099f1037527d1910Martin Hibdon
1077848314dd1123b795423acd5099f1037527d1910Martin Hibdon        m8KHz.setText("PCM/16bit/8KHz");
1087848314dd1123b795423acd5099f1037527d1910Martin Hibdon        m11KHz.setText("PCM/16bit/11KHz");
1097848314dd1123b795423acd5099f1037527d1910Martin Hibdon        m11KHz.setChecked(true);
1107848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mCall.setChecked(true);
1117848314dd1123b795423acd5099f1037527d1910Martin Hibdon    }
1127848314dd1123b795423acd5099f1037527d1910Martin Hibdon
1137848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private void setupRecording() {
1147848314dd1123b795423acd5099f1037527d1910Martin Hibdon        Log.d(TAG, "setupRecording");
1157848314dd1123b795423acd5099f1037527d1910Martin Hibdon        // disable buttons
1167848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mRedo.setEnabled(false);
1177848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mRecord.setEnabled(false);
1187848314dd1123b795423acd5099f1037527d1910Martin Hibdon        m8KHz.setFocusable(false);
1197848314dd1123b795423acd5099f1037527d1910Martin Hibdon        m11KHz.setFocusable(false);
1207848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mCall.setFocusable(false);
1217848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mDialNanp.setFocusable(false);
1227848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mDialPairs.setFocusable(false);
1237848314dd1123b795423acd5099f1037527d1910Martin Hibdon
1247848314dd1123b795423acd5099f1037527d1910Martin Hibdon        // find the first utterance not covered
1257848314dd1123b795423acd5099f1037527d1910Martin Hibdon        String[] utterances = mCall.isChecked() ? mCallUtterances :
1267848314dd1123b795423acd5099f1037527d1910Martin Hibdon            mDialNanp.isChecked() ? mDialNanpUtterances :
1277848314dd1123b795423acd5099f1037527d1910Martin Hibdon            mDialPairs.isChecked() ? mDialPairsUtterances :
1287848314dd1123b795423acd5099f1037527d1910Martin Hibdon                null;
1297848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mUtterance = null;
1307848314dd1123b795423acd5099f1037527d1910Martin Hibdon        int index = -1;
1317848314dd1123b795423acd5099f1037527d1910Martin Hibdon        for (int i = 0; i < utterances.length; i++) {
1327848314dd1123b795423acd5099f1037527d1910Martin Hibdon            File u = new File(getDir("recordings", MODE_PRIVATE),
1337848314dd1123b795423acd5099f1037527d1910Martin Hibdon                    utterances[i].toLowerCase().replace(' ', '_') + ".wav");
1347848314dd1123b795423acd5099f1037527d1910Martin Hibdon            if (!u.exists()) {
1357848314dd1123b795423acd5099f1037527d1910Martin Hibdon                mUtterance = u;
1367848314dd1123b795423acd5099f1037527d1910Martin Hibdon                index = i;
1377848314dd1123b795423acd5099f1037527d1910Martin Hibdon                break;
1387848314dd1123b795423acd5099f1037527d1910Martin Hibdon            }
1397848314dd1123b795423acd5099f1037527d1910Martin Hibdon        }
1407848314dd1123b795423acd5099f1037527d1910Martin Hibdon
1417848314dd1123b795423acd5099f1037527d1910Martin Hibdon        // check if done
1427848314dd1123b795423acd5099f1037527d1910Martin Hibdon        if (mUtterance == null) {
1437848314dd1123b795423acd5099f1037527d1910Martin Hibdon            mCommand.setText("Finished: Thank You!");
1447848314dd1123b795423acd5099f1037527d1910Martin Hibdon            return;
1457848314dd1123b795423acd5099f1037527d1910Martin Hibdon        }
1467848314dd1123b795423acd5099f1037527d1910Martin Hibdon        Log.d(TAG, "going to record " + mUtterance.toString());
1477848314dd1123b795423acd5099f1037527d1910Martin Hibdon
1487848314dd1123b795423acd5099f1037527d1910Martin Hibdon        // fix up UI
1497848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mCommand.setText("Say: \"" + utterances[index] + "\"");
1507848314dd1123b795423acd5099f1037527d1910Martin Hibdon        final String status = "item " + (index + 1) + "/" + utterances.length;
1517848314dd1123b795423acd5099f1037527d1910Martin Hibdon
1527848314dd1123b795423acd5099f1037527d1910Martin Hibdon        // start the microphone
1537848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mSampleRate = m8KHz.isChecked()? 8000 :
1547848314dd1123b795423acd5099f1037527d1910Martin Hibdon                m11KHz.isChecked() ? 11025 :
1557848314dd1123b795423acd5099f1037527d1910Martin Hibdon                11025;
1567848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mBaos = new ByteArrayOutputStream(mSampleRate * 2 * 20);
1577848314dd1123b795423acd5099f1037527d1910Martin Hibdon        try {
1587848314dd1123b795423acd5099f1037527d1910Martin Hibdon            mMicrophone = new MicrophoneInputStream(mSampleRate, mSampleRate * 15);
1597848314dd1123b795423acd5099f1037527d1910Martin Hibdon
1607848314dd1123b795423acd5099f1037527d1910Martin Hibdon//            mMicrophone = logInputStream(mUtterance.toString(), mMicrophone, mSampleRate);
1617848314dd1123b795423acd5099f1037527d1910Martin Hibdon        } catch (IOException e) {
1627848314dd1123b795423acd5099f1037527d1910Martin Hibdon
1637848314dd1123b795423acd5099f1037527d1910Martin Hibdon        }
1647848314dd1123b795423acd5099f1037527d1910Martin Hibdon
1657848314dd1123b795423acd5099f1037527d1910Martin Hibdon        // post a number of delayed events to update the UI and to stop recording
1667848314dd1123b795423acd5099f1037527d1910Martin Hibdon        // after a few seconds.
1677848314dd1123b795423acd5099f1037527d1910Martin Hibdon        for (int i = 0; i <= DURATION_SEC; i++) {
1687848314dd1123b795423acd5099f1037527d1910Martin Hibdon            final int remain = DURATION_SEC - i;
1697848314dd1123b795423acd5099f1037527d1910Martin Hibdon            mHandler.postDelayed(new Runnable() {
1707848314dd1123b795423acd5099f1037527d1910Martin Hibdon                public void run() {
1717848314dd1123b795423acd5099f1037527d1910Martin Hibdon                    if (remain > 0) {
1727848314dd1123b795423acd5099f1037527d1910Martin Hibdon                        mStatus.setText(status + "  Recording... " + remain);
1737848314dd1123b795423acd5099f1037527d1910Martin Hibdon                    }
1747848314dd1123b795423acd5099f1037527d1910Martin Hibdon                    else {
1757848314dd1123b795423acd5099f1037527d1910Martin Hibdon                        mStatus.setText(status);
1767848314dd1123b795423acd5099f1037527d1910Martin Hibdon                        stopRecording();
1777848314dd1123b795423acd5099f1037527d1910Martin Hibdon                    }
1787848314dd1123b795423acd5099f1037527d1910Martin Hibdon                }
1797848314dd1123b795423acd5099f1037527d1910Martin Hibdon            }, i * 1000);
1807848314dd1123b795423acd5099f1037527d1910Martin Hibdon        }
1817848314dd1123b795423acd5099f1037527d1910Martin Hibdon
1827848314dd1123b795423acd5099f1037527d1910Martin Hibdon        // now start a thread to store the audio.
1837848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mStoppedListening = false;
1847848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mThread = new Thread() {
1857848314dd1123b795423acd5099f1037527d1910Martin Hibdon            public void run() {
1867848314dd1123b795423acd5099f1037527d1910Martin Hibdon                Log.d(TAG, "run audio capture thread");
1877848314dd1123b795423acd5099f1037527d1910Martin Hibdon                byte buffer[] = new byte[512];
1887848314dd1123b795423acd5099f1037527d1910Martin Hibdon                while (!mStoppedListening) {
1897848314dd1123b795423acd5099f1037527d1910Martin Hibdon                    try {
1907848314dd1123b795423acd5099f1037527d1910Martin Hibdon                        int rtn = 0;
1917848314dd1123b795423acd5099f1037527d1910Martin Hibdon                        rtn = mMicrophone.read(buffer, 0, 512);
1927848314dd1123b795423acd5099f1037527d1910Martin Hibdon                        if (rtn > 0) mBaos.write(buffer, 0, rtn);
1937848314dd1123b795423acd5099f1037527d1910Martin Hibdon                    } catch (IOException e) {
1947848314dd1123b795423acd5099f1037527d1910Martin Hibdon                    }
1957848314dd1123b795423acd5099f1037527d1910Martin Hibdon                }
1967848314dd1123b795423acd5099f1037527d1910Martin Hibdon            }
1977848314dd1123b795423acd5099f1037527d1910Martin Hibdon        };
1987848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mThread.start();
1997848314dd1123b795423acd5099f1037527d1910Martin Hibdon
2007848314dd1123b795423acd5099f1037527d1910Martin Hibdon        // to avoid the button click
2017848314dd1123b795423acd5099f1037527d1910Martin Hibdon        try {
2027848314dd1123b795423acd5099f1037527d1910Martin Hibdon            Thread.sleep(100);
2037848314dd1123b795423acd5099f1037527d1910Martin Hibdon        } catch (InterruptedException ie) {
2047848314dd1123b795423acd5099f1037527d1910Martin Hibdon        }
2057848314dd1123b795423acd5099f1037527d1910Martin Hibdon
2067848314dd1123b795423acd5099f1037527d1910Martin Hibdon    }
2077848314dd1123b795423acd5099f1037527d1910Martin Hibdon
2087848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private void stopRecording() {
2097848314dd1123b795423acd5099f1037527d1910Martin Hibdon        Log.d(TAG, "stopRecording");
2107848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mStoppedListening = true;
2117848314dd1123b795423acd5099f1037527d1910Martin Hibdon        try {
2127848314dd1123b795423acd5099f1037527d1910Martin Hibdon            mThread.join();
2137848314dd1123b795423acd5099f1037527d1910Martin Hibdon        } catch (InterruptedException e) {
2147848314dd1123b795423acd5099f1037527d1910Martin Hibdon
2157848314dd1123b795423acd5099f1037527d1910Martin Hibdon        }
2167848314dd1123b795423acd5099f1037527d1910Martin Hibdon        try {
2177848314dd1123b795423acd5099f1037527d1910Martin Hibdon            OutputStream out = new FileOutputStream(mUtterance.toString());
2187848314dd1123b795423acd5099f1037527d1910Martin Hibdon            try {
2197848314dd1123b795423acd5099f1037527d1910Martin Hibdon                byte[] pcm = mBaos.toByteArray();
2207848314dd1123b795423acd5099f1037527d1910Martin Hibdon                Log.d(TAG, "byteArray length " + pcm.length);
2217848314dd1123b795423acd5099f1037527d1910Martin Hibdon                WaveHeader hdr = new WaveHeader(WaveHeader.FORMAT_PCM,
2227848314dd1123b795423acd5099f1037527d1910Martin Hibdon                        (short)1, mSampleRate, (short)16, pcm.length);
2237848314dd1123b795423acd5099f1037527d1910Martin Hibdon                hdr.write(out);
2247848314dd1123b795423acd5099f1037527d1910Martin Hibdon                out.write(pcm);
2257848314dd1123b795423acd5099f1037527d1910Martin Hibdon            } finally {
2267848314dd1123b795423acd5099f1037527d1910Martin Hibdon                out.close();
2277848314dd1123b795423acd5099f1037527d1910Martin Hibdon                mMicrophone.close();
2287848314dd1123b795423acd5099f1037527d1910Martin Hibdon                mBaos.close();
2297848314dd1123b795423acd5099f1037527d1910Martin Hibdon            }
2307848314dd1123b795423acd5099f1037527d1910Martin Hibdon        } catch (IOException e) {
2317848314dd1123b795423acd5099f1037527d1910Martin Hibdon
2327848314dd1123b795423acd5099f1037527d1910Martin Hibdon
2337848314dd1123b795423acd5099f1037527d1910Martin Hibdon        } finally {
2347848314dd1123b795423acd5099f1037527d1910Martin Hibdon        }
2357848314dd1123b795423acd5099f1037527d1910Martin Hibdon
2367848314dd1123b795423acd5099f1037527d1910Martin Hibdon        // stop the recording
2377848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mRecord.setEnabled(true);
2387848314dd1123b795423acd5099f1037527d1910Martin Hibdon
2397848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mRedo.setEnabled(true);
2407848314dd1123b795423acd5099f1037527d1910Martin Hibdon
2417848314dd1123b795423acd5099f1037527d1910Martin Hibdon        mCommand.setText("Got it!");
2427848314dd1123b795423acd5099f1037527d1910Martin Hibdon    }
2437848314dd1123b795423acd5099f1037527d1910Martin Hibdon
2447848314dd1123b795423acd5099f1037527d1910Martin Hibdon
2457848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private final static String[] mCallUtterances = new String[] {
2467848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Adam Varro",
2477848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Alex Lloyd",
2487848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Amod Karve",
2497848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Ana Maria Lopez",
2507848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Ben Sigelman",
2517848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Chris Vennard",
2527848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Dana Pogoda",
2537848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Daryl Pregibon",
2547848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Davi Robison",
2557848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call David Barrett Kahn",
2567848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call David Hyman",
2577848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Douglas Gordin",
2587848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Gregor Rothfuss",
2597848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call James Sheridan",
2607848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Jason Charo",
2617848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Jeff Reynar",
2627848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Joel Ward",
2637848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call John Milton",
2647848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Lajos Nagy",
2657848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Lori Sobel",
2667848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Martin Jansche",
2677848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Meghan McGarry",
2687848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Meghan Shakar",
2697848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Nilka Thomas",
2707848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Pedro Colijn",
2717848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Pramod Adiddam",
2727848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Rajeev Sivaram",
2737848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Rich Armstrong",
2747848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Robin Watson",
2757848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Call Sam Morales",
2767848314dd1123b795423acd5099f1037527d1910Martin Hibdon    };
2777848314dd1123b795423acd5099f1037527d1910Martin Hibdon
2787848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private final static String[] mDialPairsUtterances = new String[] {
2797848314dd1123b795423acd5099f1037527d1910Martin Hibdon        // all possible pairs
2807848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 000 000 0000",
2817848314dd1123b795423acd5099f1037527d1910Martin Hibdon
2827848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 101 010 1010",
2837848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 111 111 1111",
2847848314dd1123b795423acd5099f1037527d1910Martin Hibdon
2857848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 202 020 2020",
2867848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 212 121 2121",
2877848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 222 222 2222",
2887848314dd1123b795423acd5099f1037527d1910Martin Hibdon
2897848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 303 030 3030",
2907848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 313 131 3131",
2917848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 323 232 3232",
2927848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 333 333 3333",
2937848314dd1123b795423acd5099f1037527d1910Martin Hibdon
2947848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 404 040 4040",
2957848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 414 141 4141",
2967848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 424 242 4242",
2977848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 434 343 4343",
2987848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 444 444 4444",
2997848314dd1123b795423acd5099f1037527d1910Martin Hibdon
3007848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 505 050 5050",
3017848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 515 151 5151",
3027848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 525 252 5252",
3037848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 535 353 5353",
3047848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 545 454 5454",
3057848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 555 555 5555",
3067848314dd1123b795423acd5099f1037527d1910Martin Hibdon
3077848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 606 060 6060",
3087848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 616 161 6161",
3097848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 626 262 6262",
3107848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 636 363 6363",
3117848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 646 464 6464",
3127848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 656 565 6565",
3137848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 666 666 6666",
3147848314dd1123b795423acd5099f1037527d1910Martin Hibdon
3157848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 707 070 7070",
3167848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 717 171 7171",
3177848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 727 272 7272",
3187848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 737 373 7373",
3197848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 747 474 7474",
3207848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 757 575 7575",
3217848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 767 676 7676",
3227848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 777 777 7777",
3237848314dd1123b795423acd5099f1037527d1910Martin Hibdon
3247848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 808 080 8080",
3257848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 818 181 8181",
3267848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 828 282 8282",
3277848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 838 383 8383",
3287848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 848 484 8484",
3297848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 858 585 8585",
3307848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 868 686 8686",
3317848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 878 787 8787",
3327848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 888 888 8888",
3337848314dd1123b795423acd5099f1037527d1910Martin Hibdon
3347848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 909 090 9090",
3357848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 919 191 9191",
3367848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 929 292 9292",
3377848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 939 393 9393",
3387848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 949 494 9494",
3397848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 959 595 9595",
3407848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 969 696 9696",
3417848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 979 797 9797",
3427848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 989 898 9898",
3437848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 999 999 9999",
3447848314dd1123b795423acd5099f1037527d1910Martin Hibdon
3457848314dd1123b795423acd5099f1037527d1910Martin Hibdon    };
3467848314dd1123b795423acd5099f1037527d1910Martin Hibdon
3477848314dd1123b795423acd5099f1037527d1910Martin Hibdon
3487848314dd1123b795423acd5099f1037527d1910Martin Hibdon    private final static String[] mDialNanpUtterances = new String[] {
3497848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 211",
3507848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 411",
3517848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 511",
3527848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 811",
3537848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 911",
3547848314dd1123b795423acd5099f1037527d1910Martin Hibdon        // random numbers
3557848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 653 5763",
3567848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 263 9072",
3577848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 202 9781",
3587848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 379 8229",
3597848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 874 9139",
3607848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 236 0163",
3617848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 656 7455",
3627848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 474 5254",
3637848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 348 8687",
3647848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 629 8602",
3657848314dd1123b795423acd5099f1037527d1910Martin Hibdon
3667848314dd1123b795423acd5099f1037527d1910Martin Hibdon        //"Dial 272 717 8405",
3677848314dd1123b795423acd5099f1037527d1910Martin Hibdon        //"Dial 949 516 0162",
3687848314dd1123b795423acd5099f1037527d1910Martin Hibdon        //"Dial 795 117 7190",
3697848314dd1123b795423acd5099f1037527d1910Martin Hibdon        //"Dial 493 656 3767",
3707848314dd1123b795423acd5099f1037527d1910Martin Hibdon        //"Dial 588 093 9218",
3717848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 511 658 3690",
3727848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 440 301 8489",
3737848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 695 713 6744",
3747848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 581 475 8712",
3757848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 981 388 3579",
3767848314dd1123b795423acd5099f1037527d1910Martin Hibdon
3777848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 840 683 3346",
3787848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 303 467 7988",
3797848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 649 504 5290",
3807848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 184 577 4229",
3817848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 212 286 3982",
3827848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 646 258 0115",
3837848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 427 482 6852",
3847848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 231 809 9260",
3857848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 681 930 4301",
3867848314dd1123b795423acd5099f1037527d1910Martin Hibdon        "Dial 246 650 8339",
3877848314dd1123b795423acd5099f1037527d1910Martin Hibdon    };
3887848314dd1123b795423acd5099f1037527d1910Martin Hibdon}
389