Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1238)

Unified Diff: webrtc/modules/audio_processing/test/py_quality_assessment/quality_assessment/results.js

Issue 2721023002: Javascript audio player for the exported HTML file. (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/audio_processing/test/py_quality_assessment/quality_assessment/results.js
diff --git a/webrtc/modules/audio_processing/test/py_quality_assessment/quality_assessment/results.js b/webrtc/modules/audio_processing/test/py_quality_assessment/quality_assessment/results.js
new file mode 100644
index 0000000000000000000000000000000000000000..f5492c985c3d8dc672d0aef49248dc583ccbf043
--- /dev/null
+++ b/webrtc/modules/audio_processing/test/py_quality_assessment/quality_assessment/results.js
@@ -0,0 +1,190 @@
+// Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree. An additional intellectual property rights grant can be found
+// in the file PATENTS. All contributing project authors may
+// be found in the AUTHORS file in the root of the source tree.
+
+/**
+ * Inspector UI class.
+ * @constructor
+ */
+function Inspector() {
+ this._audio_player = new Audio();
janssonWebRTC 2017/03/02 10:19:33 The snake_case looks like a carry over from python
AleBzk 2017/03/02 11:06:11 Done.
AleBzk 2017/03/02 11:06:11 Done.
+ this._inspector_node = document.createElement('div');
+ this._div_noise_generator = document.createElement('div');
+ this._div_noise_parameters = document.createElement('div');
+ this._button_play_audio_in = document.createElement('button');
+ this._button_play_audio_out = document.createElement('button');
+ this._button_play_audio_ref = document.createElement('button');
+ this._button_stop_audio = document.createElement('button');
+
+ this._selected_item = null;
+ this._audio_in_url = null;
+ this._audio_out_url = null;
+ this._audio_ref_url = null;
+}
+
+/**
+ * Initialize.
+ */
+Inspector.prototype.init = function() {
+ window.event.stopPropagation();
+
+ // Create inspector UI.
+ this._build_inspector();
+ var body = document.getElementsByTagName('body')[0];
+ body.appendChild(this._inspector_node);
+
+ // Bind click handler.
+ var self = this;
+ var items = document.getElementsByClassName('score');
+ console.debug('number of "score" items: ' + items.length);
janssonWebRTC 2017/03/02 10:19:33 This is the only place where you have used the con
AleBzk 2017/03/02 11:06:11 Done.
AleBzk 2017/03/02 11:06:11 Thanks, it's the second :) I'll remove the line.
+ for (var index = 0; index < items.length; index++) {
+ items[index].onclick = function() {
+ self.open_inspector(this);
+ };
+ }
+
+ // Bind pressed key handlers.
+ var self = this;
+ window.onkeyup = function(e) {
+ var key = e.keyCode ? e.keyCode : e.which;
+ switch (key) {
+ case 49:
janssonWebRTC 2017/03/02 10:19:33 Since there are so few key bindings, maybe include
AleBzk 2017/03/02 11:06:11 Done.
+ self.play_audio_in();
+ break;
+ case 50:
+ self.play_audio_out();
+ break;
+ case 51:
+ self.play_audio_ref();
+ break;
+ case 83:
+ case 115:
+ self.stop_audio();
+ break;
janssonWebRTC 2017/03/02 10:19:33 Unnecessary break.
AleBzk 2017/03/02 11:06:11 True, but isn't it safer to keep it? If someone ad
janssonWebRTC 2017/03/02 12:03:20 That's true, will leave it up to you.
+ }
+ };
+};
+
+/**
+ * Open the inspector.
+ * @param {DOMElement} target: score element that has been clicked.
+ */
+Inspector.prototype.open_inspector = function(target) {
+ if (this._selected_item != null) {
+ this._selected_item.classList.remove('selected');
+ }
+ this._selected_item = target;
+ this._selected_item.classList.add('selected');
+
+ var target = this._selected_item.querySelector('.noise-desc');
+ var noise_name = target.querySelector('input[name=noise_name]').value;
+ var noise_params = target.querySelector('input[name=noise_params]').value;
+ var audio_in = target.querySelector('input[name=audio_in]').value;
+ var audio_out = target.querySelector('input[name=audio_out]').value;
+ var audio_ref = target.querySelector('input[name=audio_ref]').value;
+
+ this._div_noise_generator.innerHTML = noise_name;
+ this._div_noise_parameters.innerHTML = noise_params;
+
+ this._audio_in_url = audio_in;
+ this._audio_out_url = audio_out;
+ this._audio_ref_url = audio_ref;
+};
+
+/**
+ * Play APM audio input signal.
+ * @param {string} url
+ */
+Inspector.prototype.play_audio_in = function(url) {
janssonWebRTC 2017/03/02 10:19:33 url is unused.
AleBzk 2017/03/02 11:06:11 Done.
+ this._play(this._audio_in_url);
+};
+
+/**
+ * Play APM audio output signal.
+ * @param {string} url
+ */
+Inspector.prototype.play_audio_out = function(url) {
janssonWebRTC 2017/03/02 10:19:33 url is unused.
AleBzk 2017/03/02 11:06:11 Done.
+ this._play(this._audio_out_url);
+};
+
+/**
+ * Play APM audio reference signal.
+ * @param {string} url
+ */
+Inspector.prototype.play_audio_ref = function(url) {
janssonWebRTC 2017/03/02 10:19:32 url is unused.
AleBzk 2017/03/02 11:06:11 Done.
+ this._play(this._audio_ref_url);
+};
+
+/**
+ * Stop playing audio.
+ */
+Inspector.prototype.stop_audio = function() {
+ this._audio_player.pause();
+};
+
+/**
+ * Play audio file from url.
+ * @param {string} url
+ */
+Inspector.prototype._play = function(url) {
+ if (url == null) {
+ alert('Select a score firts.');
janssonWebRTC 2017/03/02 10:19:33 firts > first
AleBzk 2017/03/02 11:06:11 Done.
+ return;
+ }
+
+ this._audio_player.src = url;
+ this._audio_player.play();
+};
+
+/**
+ * Build inspector.
+ */
+Inspector.prototype._build_inspector = function() {
+ var self = this;
+
+ this._inspector_node.setAttribute('class', 'inspector');
+ this._inspector_node.innerHTML = '<div class="property noise-generator">' +
janssonWebRTC 2017/03/02 10:19:33 Maybe you could use document.createElement() here
AleBzk 2017/03/02 11:06:11 Thanks for your comment. I used createElement() fo
janssonWebRTC 2017/03/02 12:03:20 Ah right, I get your point.
+ '<div class="name">noise generator</div>' +
+ '</div>' +
+ '<div class="property noise-parmas">' +
+ '<div class="name">parameters</div>' +
+ '</div>' +
+ '<div class="buttons"></div>';
+
+ // Add value nodes.
+ function add_value_node(node, parent_selector) {
+ node.setAttribute('class', 'value');
+ node.innerHTML = '-';
+ var parent_node = self._inspector_node.querySelector(parent_selector);
+ parent_node.appendChild(node);
+ }
+ add_value_node(this._div_noise_generator, 'div.noise-generator');
+ add_value_node(this._div_noise_parameters, 'div.noise-parmas');
+
+ // Add buttons.
+ var buttons_node = this._inspector_node.querySelector('div.buttons');
+ function add_button(node, caption, callback) {
+ node.innerHTML = caption;
+ buttons_node.appendChild(node);
+ node.onclick = callback.bind(self);
+ }
+ add_button(this._button_play_audio_in, 'A_in (<strong>1</strong>)',
+ this.play_audio_in);
+ add_button(this._button_play_audio_out, 'A_out (<strong>2</strong>)',
+ this.play_audio_out);
+ add_button(this._button_play_audio_ref, 'A_ref (<strong>3</strong>)',
+ this.play_audio_ref);
+ add_button(this._button_stop_audio, '<strong>S</strong>top', this.stop_audio);
+};
+
+/**
+ * Instance and initialize the inspector.
+ */
+function initialize() {
+ var inspector = new Inspector();
+ inspector.init();
+}

Powered by Google App Engine
This is Rietveld 408576698