av/cmd/audio-player/main.js

108 lines
3.1 KiB
JavaScript

/*
NAME
main.js
AUTHOR
Trek Hopton <trek@ausocean.org>
Alan Noble <alan@ausocean.org>
LICENSE
This file is Copyright (C) 2018 the Australian Ocean Lab (AusOcean)
It is free software: you can redistribute it and/or modify them
under the terms of the GNU General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your
option) any later version.
It is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License in gpl.txt.
If not, see [GNU licenses](http://www.gnu.org/licenses).
*/
// playFile will process and play the chosen target file.
function playFile() {
const input = event.target.files[0]
const reader = new FileReader()
reader.onload = event => {
bytes = new Uint8Array(event.target.result);
let dec = new Decoder();
// Decode adpcm to pcm.
let decoded = dec.decode(bytes);
// Convert raw pcm to wav TODO(Trek): make these configurable.
let wav = pcmToWav(new Uint8Array(decoded.buffer), 48000, 1, 16);
// Play wav data in player.
const blob = new Blob([wav], {
type: 'audio/wav'
});
const url = URL.createObjectURL(blob);
const audio = document.getElementById('audio');
const source = document.getElementById('source');
source.src = url;
audio.load();
audio.play();
}
reader.onerror = error => reject(error)
reader.readAsArrayBuffer(input)
}
// getQuery gets everything after the question mark in the URL.
function getQuery() {
let regex = new RegExp("\\?(.*)");
let match = regex.exec(window.location.href);
if (match == null) {
return '';
} else {
return decodeURIComponent(match[1].replace(/\+/g, " "));
}
}
// load gets the file from the given url and displays a link for download.
function load() {
let url = document.getElementById('url').value;
if (url == "") {
url = getQuery()
document.getElementById('url').value = url;
}
if (url[0] == '/') {
url = window.location.protocol + '//' + window.location.host + url;
}
if (url == "") {
return;
}
let request = new XMLHttpRequest();
request.responseType = "blob";
request.onreadystatechange = function () {
if (request.readyState === XMLHttpRequest.DONE) {
if (request.status === 200) {
console.log("request received");
data = request.response;
dataURL = URL.createObjectURL(data);
let link = document.getElementById("link");
link.href = dataURL;
link.download = "media.ts";
link.innerHTML = "Download";
} else {
console.log('There was a problem with the request. Status: ' + request.status);
}
}
}
request.open("GET", url, true);
request.send();
}