Chamilo is a learning management system focused on ease of use and accessibility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
chamilo-lms/main/template/default/learnpath/record_voice.tpl

265 lines
8.3 KiB

<script type="text/javascript" src="{{ _p.web_library_js_path }}rtc/RecordRTC.js"></script>
<script type="text/javascript" src="{{ _p.web_lib }}swfobject/swfobject.js"></script>
<script type="text/javascript" src="{{ _p.web_lib }}wami-recorder/recorder.js"></script>
<script type="text/javascript" src="{{ _p.web_lib }}wami-recorder/gui.js"></script>
<div id="rtc">
<audio class="skip" id="audio" autoplay="" loop="" controls=""></audio>
<span id="progress-info"></span>
<br />
<a id="record" class="btn btn-danger" >{{ 'RecordAudio' | get_lang }}</a>
<button id="stop" class="btn" disabled="">{{ 'StopRecordingAudio' | get_lang }}</button>
</div>
<div id="wami" style="float:left">
<a id="record-wami" class="btn btn-info">{{ 'ActivateAudioRecorder' | get_lang }}</a>
<br />
<div id="wami-recorder">
</div>
<div id="start-recording" class="alert" style="display:none">
{{ "StartSpeaking" | get_lang }}
</div>
</div>
<div id="nanogong">
<applet id="nanogongApplet" archive="{{ _p.web_lib }}nanogong/nanogong.jar" code="gong.NanoGong" width="250" height="95">
<param name="ShowTime" value="true" />
<param name="AudioFormat" value="ImaADPCM" />
</applet>
<form name="form_nanogong">
<input id="status" type="hidden" name="status" value="0">
<button class="upload" type="submit" value="{{ 'Send' | get_lang }}" onclick="submitVoice()">
{{ 'Send' | get_lang }}
</button>
</form>
<span id="nanogong_result"></span>
</div>
<span id="record-result"></span>
<div class="clear"></div>
<script>
function checkNanoGongEnable() {
var nanogongEnabled = {{ enable_nanogong }};
if (nanogongEnabled != 1) {
return false;
}
return recorder = document.getElementById("nanogongApplet");
}
function checkWamiEnable() {
var wamiEnabled = {{ enable_wami }};
if (wamiEnabled != 1) {
return false;
}
if (swfobject.hasFlashPlayerVersion("1")) {
return true;
} else {
return false;
}
}
function submitVoice() {
// lang vars
var lang_no_applet = "{{ 'NanogongNoApplet' | get_lang }}";
var lang_record_before_save = "{{ 'NanogongRecordBeforeSave' | get_lang }}";
var lang_give_a_title = "{{ 'NanogongGiveTitle' | get_lang }}";
var lang_failled_to_submit = "{{ 'NanogongFailledToSubmit' | get_lang }}";
var lang_submitted = "{{'NanogongSubmitted' | get_lang }}";
// user and group id
//path, url and filename
var filename = "{{ filename }}"; //adding name file, tag and extension
var filename = encodeURIComponent(filename);
var fileInput = 'file';
var urlNanoGong = "{{ _p.web_lib }}nanogong/upload_nanogong_file.php?lp_item_id={{ lp_item_id }}&filename="+filename+"&file_field="+fileInput+"&cidReq={{ course_code }}&path={{ cur_dir_path }}";
var cookie= "ch_sid=" + "{{ php_session_id }}";
// Check
var recorder;
if (!(recorder = document.getElementById("nanogongApplet"))) {
alert(lang_no_applet);
return
}
var duration = parseInt(recorder.sendGongRequest("GetMediaDuration", "audio")) || 0
if (duration <= 0) {
alert(lang_record_before_save);
return;
}
var ret = recorder.sendGongRequest("PostToForm", urlNanoGong, fileInput, cookie, filename);
if (ret == null) {
alert(lang_failled_to_submit);
} else {
alert(lang_submitted);
$("#status").attr('value', '1');
}
}
function setupRecorder() {
$('#wami-recorder').css('margin-bottom', '150px');
Wami.setup({
id : "wami",
onReady : setupGUI,
swfUrl : "{{ _p.web_lib }}wami-recorder/Wami.swf"
});
}
function setupGUI() {
var uniq = 'rec_' + (new Date()).getTime() + ".wav";
var gui = new Wami.GUI({
id : "wami-recorder",
singleButton : true,
recordUrl : "{{ _p.web_lib }}wami-recorder/record_document.php?lp_item_id={{ lp_item_id }}&waminame="+uniq+"&wamidir={{ cur_dir_path }}&wamiuserid={{ _u.user_id }}",
buttonUrl : "{{ _p.web_lib }}wami-recorder/buttons.png",
buttonNoUrl : "{{ _p.web_img }}blank.gif",
onRecordStart : function() {
$('#start-recording').show();
},
onRecordFinish: function() {
$('#start-recording').hide();
window.location.reload();
},
onError : function() {
}
});
gui.setPlayEnabled(true);
}
var rtcEnabled = false;
$(document).ready(function() {
var isChrome = navigator.webkitGetUserMedia;
$('#rtc').hide();
$('#wami').hide();
$('#nanogong').hide();
if (rtcEnabled && isChrome) {
$('#rtc').show();
} else if (checkNanoGongEnable()) {
$('#nanogong').show();
} else if (checkWamiEnable()) {
$('#wami').show();
var recordWami = $('#record-wami');
recordWami.on('click', function() {
setupRecorder();
return false;
});
} else {
$('#record-result').html("{{ 'RecordIsNotAvailable' | get_lang }}");
}
// Start web RTC code
var format = 'webm'; // or wav
var record = $('#record');
var stop = document.getElementById('stop');
var preview = document.getElementById('audio');
var progressInfo = document.getElementById('progress-info');
var previewBlock = document.getElementById('preview');
function postBlob(blob, fileType, fileName) {
// FormData
var formData = new FormData();
formData.append(fileType + '-filename', fileName);
formData.append(fileType + '-blob', blob);
// progress-bar
var hr = document.createElement('hr');
progressInfo.appendChild(hr);
var strong = document.createElement('strong');
strong.innerHTML = fileType + ' upload progress: ';
progressInfo.appendChild(strong);
var progress = document.createElement('progress');
progressInfo.appendChild(progress);
// POST the Blob
$.ajax({
url:'{{ _p.web_ajax }}lp.ajax.php?a=record_audio&lp_item_id={{ lp_item_id }}',
data: formData,
processData: false,
contentType: false,
type: 'POST',
success:function(fileURL) {
window.location.reload();
progressInfo.appendChild(document.createElement('hr'));
var mediaElement = document.createElement(fileType);
mediaElement.src = fileURL;
mediaElement.controls = true;
var uniq = 'id' + (new Date()).getTime();
mediaElement.id = uniq;
$(previewBlock).html('');
previewBlock.appendChild(mediaElement);
mediaElement.play();
$(progressInfo).html('');
window.location.reload();
}
});
}
var recordAudio, recordVideo;
record.on('click', function() {
record.disabled = true;
var myURL = (window.URL || window.webkitURL || {});
if (navigator.getUserMedia) {
navigator.getUserMedia({
audio: true,
video: false
},
function(stream) {
if (window.IsChrome) stream = new window.MediaStream(stream.getAudioTracks());
preview.src = myURL.createObjectURL(stream);
console.log(preview.src);
preview.play();
recordAudio = RecordRTC(stream, {
type: 'audio'
});
recordAudio.startRecording();
/*recordVideo = RecordRTC(stream, {
type: 'video'
});*/
//recordVideo.startRecording();
stop.disabled = false;
},
function(err) {
console.log("The following error occured: " + err);
return false;
});
}
});
stop.onclick = function() {
record.disabled = false;
stop.disabled = true;
var fileName = Math.round(Math.random() * 99999999) + 99999999;
recordAudio.stopRecording();
postBlob(recordAudio.getBlob(), 'audio', fileName + '.' + format);
//recordVideo.stopRecording();
//PostBlob(recordVideo.getBlob(), 'video', fileName + '.webm');
preview.src = '';
};
// End web RTC code
});
</script>