Merged dev2 into master.
This commit is contained in:
85
htdocs/inactive.html
Normal file
85
htdocs/inactive.html
Normal file
@ -0,0 +1,85 @@
|
||||
<html>
|
||||
<!--
|
||||
|
||||
This file is part of OpenWebRX,
|
||||
an open-source SDR receiver software with a web UI.
|
||||
Copyright (c) 2013-2015 by Andras Retzler <randras@sdr.hu>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program 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 Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-->
|
||||
<head><title>OpenWebRX</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<style>
|
||||
html, body
|
||||
{
|
||||
font-family: "DejaVu Sans", Verdana, Geneva, sans-serif;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
img.logo
|
||||
{
|
||||
margin-top: 120px;
|
||||
}
|
||||
div.frame
|
||||
{
|
||||
text-align: left;
|
||||
margin:0px auto;
|
||||
width: 800px;
|
||||
}
|
||||
|
||||
div.panel
|
||||
{
|
||||
text-align: center;
|
||||
background-color:#777777;
|
||||
border-radius: 15px;
|
||||
padding: 12px;
|
||||
font-weight: bold;
|
||||
color: White;
|
||||
font-size: 13pt;
|
||||
/*text-shadow: 1px 1px 4px #444;*/
|
||||
font-family: sans;
|
||||
}
|
||||
|
||||
div.alt
|
||||
{
|
||||
font-size: 10pt;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
|
||||
body div a
|
||||
{
|
||||
color: #5ca8ff;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
span.browser
|
||||
{
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="frame">
|
||||
<img class="logo" src="gfx/openwebrx-logo-big.png" style="height: 60px;"/>
|
||||
<div class="panel">
|
||||
Sorry, the receiver is inactive due to internal error.
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -23,11 +23,13 @@
|
||||
<head>
|
||||
<title>OpenWebRX | Open Source SDR Web App for Everyone!</title>
|
||||
<script type="text/javascript">
|
||||
//Local variables
|
||||
client_id="%[CLIENT_ID]";
|
||||
ws_url="%[WS_URL]";
|
||||
rx_photo_height=%[RX_PHOTO_HEIGHT];
|
||||
//Global variables
|
||||
var client_id="%[CLIENT_ID]";
|
||||
var ws_url="%[WS_URL]";
|
||||
var rx_photo_height=%[RX_PHOTO_HEIGHT];
|
||||
var audio_buffering_fill_to=%[AUDIO_BUFSIZE];
|
||||
var starting_mod = "%[START_MOD]";
|
||||
var starting_offset_frequency = %[START_OFFSET_FREQ];
|
||||
</script>
|
||||
<script src="sdr.js"></script>
|
||||
<script src="openwebrx.js"></script>
|
||||
|
@ -988,6 +988,32 @@ function resize_waterfall_container(check_init)
|
||||
canvas_container.style.height=(window.innerHeight-e("webrx-top-container").clientHeight-e("openwebrx-scale-container").clientHeight).toString()+"px";
|
||||
}
|
||||
|
||||
|
||||
audio_server_output_rate=11025;
|
||||
audio_client_resampling_factor=4;
|
||||
|
||||
|
||||
function audio_calculate_resampling(targetRate)
|
||||
{ //both at the server and the client
|
||||
output_range_max = 12000;
|
||||
output_range_min = 8000;
|
||||
i = 1;
|
||||
while(true)
|
||||
{
|
||||
audio_server_output_rate = Math.floor(targetRate / i);
|
||||
if(audio_server_output_rate < output_range_min)
|
||||
{
|
||||
audio_client_resampling_factor = audio_server_output_rate = 0;
|
||||
divlog("Your audio card sampling rate ("+targetRate.toString()+") is not supported.<br />Please change your operating system default settings in order to fix this.",1);
|
||||
}
|
||||
if(audio_server_output_rate >= output_range_min && audio_server_output_rate <= output_range_max) break; //okay, we're done
|
||||
i++;
|
||||
}
|
||||
audio_client_resampling_factor=i;
|
||||
console.log("audio_calculate_resampling() :: "+audio_client_resampling_factor.toString()+", "+audio_server_output_rate.toString());
|
||||
}
|
||||
|
||||
|
||||
debug_ws_data_received=0;
|
||||
max_clients_num=0;
|
||||
|
||||
@ -1003,6 +1029,7 @@ function on_ws_recv(evt)
|
||||
{
|
||||
var stringData=arrayBufferToString(evt.data);
|
||||
if(stringData.substring(0,16)=="CLIENT DE SERVER") divlog("Acknowledged WebSocket connection: "+stringData);
|
||||
|
||||
}
|
||||
if(firstChars=="AUD")
|
||||
{
|
||||
@ -1021,6 +1048,7 @@ function on_ws_recv(evt)
|
||||
else if(fft_compression="adpcm")
|
||||
{
|
||||
fft_codec.reset();
|
||||
|
||||
var waterfall_i16=fft_codec.decode(new Uint8Array(evt.data,4));
|
||||
var waterfall_f32=new Float32Array(waterfall_i16.length-COMPRESS_FFT_PAD_N);
|
||||
for(var i=0;i<waterfall_i16.length;i++) waterfall_f32[i]=waterfall_i16[i+COMPRESS_FFT_PAD_N]/100;
|
||||
@ -1039,6 +1067,7 @@ function on_ws_recv(evt)
|
||||
{
|
||||
case "setup":
|
||||
waterfall_init();
|
||||
audio_preinit();
|
||||
break;
|
||||
case "bandwidth":
|
||||
bandwidth=parseInt(param[1]);
|
||||
@ -1154,7 +1183,7 @@ var mute = false;
|
||||
|
||||
var audio_received = Array();
|
||||
var audio_buffer_index = 0;
|
||||
var audio_resampler=new sdrjs.RationalResamplerFF(4,1);
|
||||
var audio_resampler;
|
||||
var audio_codec=new sdrjs.ImaAdpcm();
|
||||
var audio_compression="unknown";
|
||||
var audio_node;
|
||||
@ -1199,7 +1228,7 @@ function audio_prepare(data)
|
||||
audio_prepared_buffers.push(audio_rebuffer.take());
|
||||
audio_buffer_current_count_debug++;
|
||||
}
|
||||
if(audio_buffering && audio_prepared_buffers.length>audio_buffering_fill_to) audio_buffering=false;
|
||||
if(audio_buffering && audio_prepared_buffers.length>audio_buffering_fill_to) { console.log("buffers now: "+audio_prepared_buffers.length.toString()); audio_buffering=false; }
|
||||
}
|
||||
|
||||
|
||||
@ -1278,6 +1307,8 @@ var audio_buffer_progressbar_update_disabled=false;
|
||||
|
||||
var audio_buffer_total_average_level=0;
|
||||
var audio_buffer_total_average_level_length=0;
|
||||
var audio_overrun_cnt = 0;
|
||||
var audio_underrun_cnt = 0;
|
||||
|
||||
function audio_buffer_progressbar_update()
|
||||
{
|
||||
@ -1287,8 +1318,8 @@ function audio_buffer_progressbar_update()
|
||||
var overrun=audio_buffer_value>audio_buffer_maximal_length_sec;
|
||||
var underrun=audio_prepared_buffers.length==0;
|
||||
var text="buffer";
|
||||
if(overrun) text="overrun";
|
||||
if(underrun) text="underrun";
|
||||
if(overrun) { text="overrun"; console.log("audio overrun, "+(++audio_overrun_cnt).toString()); }
|
||||
if(underrun) { text="underrun"; console.log("audio underrun, "+(++audio_underrun_cnt).toString()); }
|
||||
if(overrun||underrun)
|
||||
{
|
||||
audio_buffer_progressbar_update_disabled=true;
|
||||
@ -1377,13 +1408,26 @@ function webrx_set_param(what, value)
|
||||
ws.send("SET "+what+"="+value.toString());
|
||||
}
|
||||
|
||||
function audio_init()
|
||||
function parsehash()
|
||||
{
|
||||
audio_debug_time_start=(new Date()).getTime();
|
||||
audio_debug_time_last_start=audio_debug_time_start;
|
||||
if(h=window.location.hash)
|
||||
{
|
||||
h.substring(1).split(",").forEach(function(x){
|
||||
harr=x.split("=");
|
||||
console.log(harr);
|
||||
if(harr[0]=="mod") starting_mod = harr[1];
|
||||
if(harr[0]=="freq") {
|
||||
console.log(parseInt(harr[1]));
|
||||
console.log(center_freq);
|
||||
starting_offset_frequency = parseInt(harr[1])-center_freq;
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//https://github.com/0xfe/experiments/blob/master/www/tone/js/sinewave.js
|
||||
audio_initialized=1; // only tell on_ws_recv() not to call it again
|
||||
function audio_preinit()
|
||||
{
|
||||
try
|
||||
{
|
||||
window.AudioContext = window.AudioContext||window.webkitAudioContext;
|
||||
@ -1394,6 +1438,28 @@ function audio_init()
|
||||
divlog('Your browser does not support Web Audio API, which is required for WebRX to run. Please upgrade to a HTML5 compatible browser.', 1);
|
||||
}
|
||||
|
||||
//we send our setup packet
|
||||
|
||||
parsehash();
|
||||
//needs audio_context.sampleRate to exist
|
||||
|
||||
audio_calculate_resampling(audio_context.sampleRate);
|
||||
audio_resampler = new sdrjs.RationalResamplerFF(audio_client_resampling_factor,1);
|
||||
ws.send("SET output_rate="+audio_server_output_rate.toString()+" action=start"); //now we'll get AUD packets as well
|
||||
|
||||
}
|
||||
|
||||
function audio_init()
|
||||
{
|
||||
if(audio_client_resampling_factor==0) return; //if failed to find a valid resampling factor...
|
||||
|
||||
audio_debug_time_start=(new Date()).getTime();
|
||||
audio_debug_time_last_start=audio_debug_time_start;
|
||||
|
||||
//https://github.com/0xfe/experiments/blob/master/www/tone/js/sinewave.js
|
||||
audio_initialized=1; // only tell on_ws_recv() not to call it again
|
||||
|
||||
|
||||
//on Chrome v36, createJavaScriptNode has been replaced by createScriptProcessor
|
||||
createjsnode_function = (audio_context.createJavaScriptNode == undefined)?audio_context.createScriptProcessor.bind(audio_context):audio_context.createJavaScriptNode.bind(audio_context);
|
||||
audio_node = createjsnode_function(audio_buffer_size, 0, 1);
|
||||
@ -1411,7 +1477,14 @@ function audio_init()
|
||||
audio_buffer = audio_context.createBuffer(xhr.response, false);
|
||||
audio_source.buffer = buffer;
|
||||
audio_source.noteOn(0);*/
|
||||
demodulator_analog_replace('nfm'); //needs audio_context.sampleRate to exist
|
||||
demodulator_analog_replace(starting_mod);
|
||||
if(starting_offset_frequency)
|
||||
{
|
||||
demodulators[0].offset_frequency = starting_offset_frequency;
|
||||
demodulators[0].set();
|
||||
mkscale();
|
||||
}
|
||||
|
||||
//hide log panel in a second (if user has not hidden it yet)
|
||||
window.setTimeout(function(){
|
||||
if(typeof e("openwebrx-panel-log").openwebrxHidden == "undefined" && !was_error)
|
||||
|
Reference in New Issue
Block a user