| <!-- Copyright (c) 2014 The Chromium OS Authors. All rights reserved. --> |
| <!-- Use of this source code is governed by a BSD-style license that can be --> |
| <!-- found in the LICENSE file. --> |
| |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| <title>Audio Quality Test</title> |
| <script type="text/javascript" src="audio.js"></script> |
| <script type="text/javascript" src="source.js"></script> |
| <script type="text/javascript" src="recorder.js"></script> |
| <script type="text/javascript" src="analysis.js"></script> |
| <link rel="stylesheet" type="text/css" href="audio.css"> |
| </head> |
| <body> |
| <ul class="tab-page"> |
| <li id="play_tab" onclick="switchTab('play_tab')" class="selected"><a>Play</a></li> |
| <li id="record_tab" onclick="switchTab('record_tab')"><a>Record</a></li> |
| </ul> |
| <div id="play_div"> |
| <h1>Audio Source</h1> |
| <input type="radio" name="audio_source" value="sine" |
| onclick="setupSourceLayer('sine')"> Sine Tone |
| <input type="radio" name="audio_source" value="sweep" |
| onclick="setupSourceLayer('sweep')" checked> Sweep Tone |
| <input type="radio" name="audio_source" value="file" |
| onclick="setupSourceLayer('file')"> Load from file |
| <br> |
| <br> |
| <div id="source_layer" align="center"> |
| <div id="source_tone"> |
| <table style="width: 50%;"> |
| <tr> |
| <td class="tonegen-main-cell"> |
| <table style="width: 100%;"> |
| <tr> |
| <td width="50%">Frequency: (20 Hz ~ SampleRate / 2)</td> |
| <td width="30%">Duration</td> |
| <td class="sweep_tone">Log</td> |
| </tr> |
| <tr> |
| <td> |
| <input type="text" id="freq_start" size=5 maxlength=5 value=1000> Hz |
| <div class="sweep_tone"> |
| <input type="text" id="freq_end" size=5 maxlength=5 value=1000> Hz |
| </div> |
| </td> |
| <td> |
| <input type="text" id="tone_sec" size=5 maxlength=5 value=3> Seconds |
| </td> |
| <td class="sweep_tone"> |
| <input type="checkbox" id="sweep_log"> |
| </td> |
| </tr> |
| </table> |
| </td> |
| <td class="tonegen-vol-cell"> |
| <input type="range" min="0" max="20" value="20" id="left_gain" |
| onchange="gainChanged();"/> |
| <input type="range" min="0" max="20" value="20" id="right_gain" |
| onchange="gainChanged();"/> |
| <br> |
| <div id="gain_label"> |
| L(20) / R(20) |
| </div> |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div id="source_file"> |
| <input type="button" value="Local Audio File" onclick="loadAudioFile()" |
| style="font-size: large;"> |
| <br><br> |
| <div style="display:none"> |
| <input type=file id=audio_file onchange="changeAudioFile()"> |
| </div> |
| </div> |
| </div> |
| <hr> |
| <input type="checkbox" id="append_tone" checked> Append 1K Hz start tone and end tone |
| <br><br> |
| <button id="play_audio" class="btn-off" onclick="playAudioFile()"> |
| <div> |
| <span class="btn-off-text">Play</span> |
| <span class="btn-on-text">Stop Play</span> |
| </div> |
| </button> |
| </div> |
| <div id="record_div" style="display: none;"> |
| <h1> Record Samples </h1> |
| <input type="radio" name="record_source" value="audio_source" |
| onclick="setupRecordSource('audio')"> |
| Play Audio Source |
| <input type="radio" name="record_source" value="microphone" checked |
| onclick="setupRecordSource('microphone')"> |
| Microphone |
| <br><br> |
| <input type="checkbox" id="detect_tone" checked> Detect 1K Hz start tone and end tone |
| <input type="checkbox" id="auto_stop" checked> Auto stop when detected 1K Hz end tone |
| <br><br> |
| <button id="record_btn" class="btn-off" onclick="recordButtonClicked()"> |
| <div> |
| <span class="btn-off-text">Start Record</span> |
| <span class="btn-on-text">Stop Record</span> |
| </div> |
| </button> |
| <br><hr> |
| <table align="center"> |
| <tr> |
| <td> |
| <div style="overflow:auto; max-height: 250px;"> |
| <table id="record_list" align="center"> |
| </table> |
| </div> |
| </td> |
| </tr> |
| </table> |
| |
| </div> |
| |
| <h1> Frequency Response </h1> |
| <table align="center"> |
| <tr> |
| <td width=800> |
| <div id="curve_section"> |
| <canvas id='fr_canvas' width=800 height=300> |
| </div> |
| </td> |
| <td width=400 height=300 class="canvas_detail"> |
| <div id="curve_list" style="overflow:auto; max-height:300px;"> |
| <table id="curve_table" width=100% height=100%> |
| <tr> |
| <td colspan=1> |
| <input type="button" value="Load File" onClick="loadButtonClicked();"> |
| <div style="display:none"> |
| <input type=file id=sample_file onchange="loadSampleFile()"> |
| </div> |
| </td> |
| <td colspan=4> |
| <select id="noctaves"> |
| <option value="3">1/3</option> |
| <option value="4">1/4</option> |
| <option value="5" selected>1/5</option> |
| <option value="6">1/6</option> |
| <option value="7">1/7</option> |
| <option value="8">1/8</option> |
| <option value="9">1/9</option> |
| <option value="10">1/10</option> |
| </select> Octaves |
| <a id='export_csv'> |
| <input type="button" value="Export CSV" onClick="exportCSV();"> |
| </a> |
| </td> |
| </tr> |
| <tr> |
| <td>Show</td> |
| <td>File name</td> |
| <td width=50>Left</td> |
| <td width=50>Right</td> |
| <td>Remove</td> |
| </tr> |
| </table> |
| </div> |
| </td> |
| </tr> |
| </table> |
| |
| <div id="debug" style="display:none;"> |
| <h1>Debug</h1> |
| <a id='export_freq'> |
| <input type="button" value="Export Freq" onClick="exportFreq();"> |
| </a> |
| <a id='export_buffer'> |
| <input type="button" value="Export Buffer"> |
| </a> |
| </div> |
| |
| <div id="log" style="display:none;"> |
| <h1>Log</h1> |
| <pre id="log"></pre> |
| </div> |
| |
| </body> |
| </html> |