Use RecordRTC or Wami adding audio on documents tool - refs BT#11060

ofaj
Angel Fernando Quiroz Campos 9 years ago
parent 810f8b5dcc
commit 574a044a0c
  1. 12
      main/document/document.php
  2. 173
      main/document/record_audio.php
  3. 197
      main/document/record_audio_wami.php
  4. 19
      main/document/show_content.php
  5. 22
      main/document/showinframes.php
  6. 71
      main/inc/ajax/record_audio_rtc.ajax.php
  7. 2
      main/inc/ajax/record_audio_wami.ajax.php
  8. 2
      main/inc/lib/WamiRecorder.php
  9. 190
      main/template/default/document/record_audio.tpl
  10. 2
      main/template/default/learnpath/record_voice.tpl

@ -1590,18 +1590,10 @@ if ($is_allowed_to_edit ||
}
// Record audio (nanogong)
if (api_get_setting('enable_nanogong') == 'true') {
if (api_get_setting('enable_record_audio') === 'true') {
$actionsLeft .= Display::url(
Display::return_icon('new_recording.png', get_lang('RecordMyVoice'), '', ICON_SIZE_MEDIUM),
api_get_path(WEB_CODE_PATH).'document/record_audio.php?'.api_get_cidreq().'&id='.$document_id
);
}
// Record audio (wami record)
if (api_get_setting('enable_wami_record') == 'true') {
$actionsLeft .= Display::url(
Display::return_icon('new_recording.png', get_lang('RecordMyVoice'), '', ICON_SIZE_MEDIUM),
api_get_path(WEB_CODE_PATH).'document/record_audio_wami.php?'.api_get_cidreq().'&id='.$document_id
api_get_path(WEB_CODE_PATH) . 'document/record_audio.php?' . api_get_cidreq() . '&id=' . $document_id
);
}

@ -2,13 +2,9 @@
/* For licensing terms, see /license.txt */
/**
* This file allows creating new svg and png documents with an online editor.
*
* @package chamilo.document
*
* @author Juan Carlos Raña Trabado herodoto@telefonica.net
* @since 5/mar/2011
*/
* This file allows record audio files.
* @package chamilo.document
*/
require_once '../inc/global.inc.php';
@ -19,28 +15,27 @@ $nameTools = get_lang('VoiceRecord');
api_protect_course_script();
api_block_anonymous_users();
$groupId = api_get_group_id();
$document_data = array();
if (isset($_GET['id'])) {
$document_data = DocumentManager::get_document_data_by_id(
$_GET['id'],
api_get_course_id(),
true
);
}
$document_data = DocumentManager::get_document_data_by_id($_GET['id'], api_get_course_id(), true);
if (empty($document_data)) {
if (api_is_in_group()) {
$group_properties = GroupManager::get_group_properties($groupId);
$document_id = DocumentManager::get_document_id(api_get_course_info(), $group_properties['directory']);
$document_data = DocumentManager::get_document_data_by_id($document_id, api_get_course_id());
}
if (api_is_in_group()) {
$group_properties = GroupManager::get_group_properties(api_get_group_id());
$document_id = DocumentManager::get_document_id(api_get_course_info(), $group_properties['directory']);
$document_data = DocumentManager::get_document_data_by_id($document_id, api_get_course_id());
}
}
$document_id = $document_data['id'];
$dir = $document_data['path'];
//make some vars
$wamidir=$dir;
if($wamidir=="/"){
$wamidir="";
}
$wamiurlplay = api_get_path(WEB_COURSE_PATH).api_get_course_path().'/document'.$wamidir."/";
$groupId = api_get_group_id();
$is_allowed_to_edit = api_is_allowed_to_edit(null, true);
// Please, do not modify this dirname formatting
@ -68,8 +63,10 @@ if (!is_dir($filepath)) {
$dir = '/';
}
//groups //TODO: clean
if (!empty($groupId)) {
$interbreadcrumb[] = array ("url" => "../group/group_space.php?".api_get_cidreq(), "name" => get_lang('GroupSpace'));
$noPHP_SELF = true;
$group = GroupManager :: get_group_properties($groupId);
$path = explode('/', $dir);
if ('/'.$path[1] != $group['directory']) {
@ -102,101 +99,43 @@ if (isset ($group)) {
// Interbreadcrumb for the current directory root path
$counter = 0;
if (isset($document_data['parents'])) {
foreach($document_data['parents'] as $document_sub_data) {
//fixing double group folder in breadcrumb
if (api_get_group_id()) {
if ($counter == 0) {
$counter++;
continue;
}
}
$interbreadcrumb[] = array('url' => $document_sub_data['document_url'], 'name' => $document_sub_data['title']);
$counter++;
}
}
Display :: display_header($nameTools, 'Doc');
echo '<div class="actions">';
echo '<a href="document.php?'.api_get_cidreq().'&id='.$document_id.'">'.Display::return_icon('back.png',get_lang('BackTo').' '.get_lang('DocumentsOverview'),'',ICON_SIZE_MEDIUM).'</a>';
echo '</div>';
?>
<script type="text/javascript">
function submitVoice() {
//lang vars
var lang_no_applet="<?php echo get_lang('NanogongNoApplet'); ?>";
var lang_record_before_save="<?php echo get_lang('NanogongRecordBeforeSave'); ?>";
var lang_give_a_title="<?php echo get_lang('NanogongGiveTitle'); ?>";
var lang_failled_to_submit="<?php echo get_lang('NanogongFailledToSubmit'); ?>";
var lang_submitted="<?php echo get_lang('NanogongSubmitted'); ?>";
// user and group id
var nano_user_id="<?php echo api_get_user_id(); ?>";
var nano_group_id="<?php echo api_get_group_id(); ?>";
var nano_session_id="<?php echo api_get_session_id(); ?>";
//path, url and filename
var filename = document.getElementById("audio_title").value+"_chnano_.wav";//adding name file, tag and extension
var filename = filename.replace(/\s/g, "_");//replace spaces by _
var filename = encodeURIComponent(filename);
var filepath="<?php echo urlencode($filepath); ?>";
var dir="<?php echo urlencode($dir); ?>";
var course_code="<?php echo urlencode($course_code); ?>";
//
var urlnanogong="../inc/lib/nanogong/receiver.php?filename="+filename+"&filepath="+filepath+"&dir="+dir+"&course_code="+course_code+"&nano_group_id="+nano_group_id+"&nano_session_id="+nano_session_id+"&nano_user_id="+nano_user_id;
var cookie="<?php echo 'ch_sid='.session_id(); ?>";
//check
var recorder
if (!(recorder = document.getElementById("nanogong"))) {
alert(lang_no_applet)
return
}
var duration = parseInt(recorder.sendGongRequest("GetMediaDuration", "audio")) || 0
if (duration <= 0) {
alert(lang_record_before_save)
return
}
if (!document.getElementById("audio_title").value) {
alert(lang_give_a_title)
return
}
//
var applet = document.getElementById("nanogong");
var ret = applet.sendGongRequest( "PostToForm", urlnanogong, "voicefile", cookie, "temp");//'PostToForm', postURL, inputname, cookie, filename
if (ret == null) {
alert(lang_failled_to_submit);
} else {
alert(lang_submitted+"\n"+ret);
$("#status").attr('value', '1');
foreach($document_data['parents'] as $document_sub_data) {
//fixing double group folder in breadcrumb
if (api_get_group_id()) {
if ($counter == 0) {
$counter++;
continue;
}
}
$interbreadcrumb[] = array('url' => $document_sub_data['document_url'], 'name' => $document_sub_data['title']);
$counter++;
}
}
</script>
<?php
echo '<div align="center">';
Display::display_icon('microphone.png', get_lang('PressRecordButton'),'','128');
echo '<br/>';
echo '<applet id="nanogong" archive="'.api_get_path(WEB_LIBRARY_PATH).'nanogong/nanogong.jar" code="gong.NanoGong" width="250" height="95" ALIGN="middle">';
//echo '<param name="ShowRecordButton" value="false" />'; // default true
// echo '<param name="ShowSaveButton" value="false" />'; //you can save in local computer | (default true)
//echo '<param name="ShowSpeedButton" value="false" />'; // default true
//echo '<param name="ShowAudioLevel" value="false" />'; // it displays the audiometer | (default true)
echo '<param name="ShowTime" value="true" />'; // default false
//echo '<param name="Color" value="#C0E0FF" />'; // default #FFFFFF
//echo '<param name="StartTime" value="10.5" />';
//echo '<param name="EndTime" value="65" />';
echo '<param name="AudioFormat" value="ImaADPCM" />';// ImaADPCM (more speed), Speex (more compression)|(default Speex)
//echo '<param name="SamplingRate" value="32000" />';//Quality for ImaADPCM (low 8000, medium 11025, normal 22050, hight 44100) OR Quality for Speex (low 8000, medium 16000, normal 32000, hight 44100) | (default 44100)
//echo '<param name="MaxDuration" value="60" />';
//echo '<param name="SoundFileURL" value="http://somewhere.com/mysoundfile.wav" />';//load a file |(default "")
echo '</applet>';
echo '<form name="form_nanogong">';
echo '<input placeholder="'.get_lang('InputNameHere').'" type="text" id="audio_title">';
echo '<input id="status" type="hidden" name="status" value="0">';
echo '<button class="upload" type="submit" value="'.get_lang('Send').'" onClick="submitVoice()" />'.get_lang('Send').'</button>';
echo '</form>';
echo '</div>';
Display :: display_footer();
//make some vars
$wamiuserid = api_get_user_id();
$htmlHeadXtra[] = '<script src="' . api_get_path(WEB_LIBRARY_JS_PATH) . 'rtc/RecordRTC.js"></script>';
$htmlHeadXtra[] = '<script src="' . api_get_path(WEB_LIBRARY_PATH) . 'wami-recorder/recorder.js"></script>';
$htmlHeadXtra[] = '<script src="' . api_get_path(WEB_LIBRARY_PATH) . 'wami-recorder/gui.js"></script>';
$htmlHeadXtra[] = '<script type="text/javascript" src="' . api_get_path(WEB_LIBRARY_PATH) . 'swfobject/swfobject.js"></script>';
$actions = Display::toolbarButton(
get_lang('BackTo') . ' ' . get_lang('DocumentsOverview'),
'document.php?' . api_get_cidreq() . "&id=$document_id",
'arrow-left',
'default',
[],
false
);
$template = new Template($nameTools);
$template->assign('directory', $wamidir);
$template->assign('user_id', api_get_user_id());
$layout = $template->get_template('document/record_audio.tpl');
$content = $template->fetch($layout);
$template->assign('actions', $actions);
$template->assign('content', $content);
$template->display_one_col_template();

@ -1,197 +0,0 @@
<?php
/* For licensing terms, see /license.txt */
/**
* This file allows record wav files.
*
* @package chamilo.document
*
* @author Juan Carlos Raña Trabado herodoto@telefonica.net
* @since 5/april/2012
*/
require_once '../inc/global.inc.php';
$_SESSION['whereami'] = 'document/voicerecord';
$this_section = SECTION_COURSES;
$nameTools = get_lang('VoiceRecord');
api_protect_course_script();
api_block_anonymous_users();
$document_data = DocumentManager::get_document_data_by_id($_GET['id'], api_get_course_id(), true);
if (empty($document_data)) {
if (api_is_in_group()) {
$group_properties = GroupManager::get_group_properties(api_get_group_id());
$document_id = DocumentManager::get_document_id(api_get_course_info(), $group_properties['directory']);
$document_data = DocumentManager::get_document_data_by_id($document_id, api_get_course_id());
}
}
$document_id = $document_data['id'];
$dir = $document_data['path'];
//make some vars
$wamidir=$dir;
if($wamidir=="/"){
$wamidir="";
}
$wamiurlplay = api_get_path(WEB_COURSE_PATH).api_get_course_path().'/document'.$wamidir."/";
$groupId = api_get_group_id();
$is_allowed_to_edit = api_is_allowed_to_edit(null, true);
// Please, do not modify this dirname formatting
if (strstr($dir, '..')) {
$dir = '/';
}
if ($dir[0] == '.') {
$dir = substr($dir, 1);
}
if ($dir[0] != '/') {
$dir = '/'.$dir;
}
if ($dir[strlen($dir) - 1] != '/') {
$dir .= '/';
}
$filepath = api_get_path(SYS_COURSE_PATH).$_course['path'].'/document'.$dir;
if (!is_dir($filepath)) {
$filepath = api_get_path(SYS_COURSE_PATH).$_course['path'].'/document/';
$dir = '/';
}
//groups //TODO: clean
if (!empty($groupId)) {
$interbreadcrumb[] = array ("url" => "../group/group_space.php?".api_get_cidreq(), "name" => get_lang('GroupSpace'));
$noPHP_SELF = true;
$group = GroupManager :: get_group_properties($groupId);
$path = explode('/', $dir);
if ('/'.$path[1] != $group['directory']) {
api_not_allowed(true);
}
}
$interbreadcrumb[] = array("url" => "./document.php?id=".$document_id.'&'.api_get_cidreq(), "name" => get_lang('Documents'));
if (!$is_allowed_in_course) {
api_not_allowed(true);
}
if (!($is_allowed_to_edit || $_SESSION['group_member_with_upload_rights'] ||
DocumentManager::is_my_shared_folder(api_get_user_id(), Security::remove_XSS($dir),api_get_session_id()))) {
api_not_allowed(true);
}
/* Header */
Event::event_access_tool(TOOL_DOCUMENT);
$display_dir = $dir;
if (isset ($group)) {
$display_dir = explode('/', $dir);
unset ($display_dir[0]);
unset ($display_dir[1]);
$display_dir = implode('/', $display_dir);
}
// Interbreadcrumb for the current directory root path
$counter = 0;
if (isset($document_data['parents'])) {
foreach($document_data['parents'] as $document_sub_data) {
//fixing double group folder in breadcrumb
if (api_get_group_id()) {
if ($counter == 0) {
$counter++;
continue;
}
}
$interbreadcrumb[] = array('url' => $document_sub_data['document_url'], 'name' => $document_sub_data['title']);
$counter++;
}
}
//make some vars
$wamiuserid = api_get_user_id();
Display :: display_header($nameTools, 'Doc');
echo '<div class="actions">';
echo '<a href="document.php?id='.$document_id.'">'.Display::return_icon('back.png',get_lang('BackTo').' '.get_lang('DocumentsOverview'),'',ICON_SIZE_MEDIUM).'</a>';
echo '</div>';
?>
<!-- swfobject is a commonly used library to embed Flash content https://ajax.googleapis.com/ajax/libs/swfobject/2.2/ -->
<script type="text/javascript" src="<?php echo api_get_path(WEB_LIBRARY_PATH) ?>swfobject/swfobject.js"></script>
<!-- Setup the recorder interface -->
<script type="text/javascript" src="<?php echo api_get_path(WEB_LIBRARY_PATH) ?>wami-recorder/recorder.js"></script>
<!-- GUI code... take it or leave it -->
<script type="text/javascript" src="<?php echo api_get_path(WEB_LIBRARY_PATH) ?>wami-recorder/gui.js"></script>
<script type="text/javascript">
function newNameRecord() {
location.reload(true)
}
function setupRecorder() {
var nospaces =document.getElementById("audio_title").value;
var audioname = nospaces.replace(/ /gi, "");
if(audioname==""){
return;
}else{
document.getElementById('audio_title').readOnly = true;
//document.getElementById('audio_title').style.display='none';
document.getElementById('audio_button').style.display='none';
Wami.setup({
id : "wami",
onReady : setupGUI
});
}
}
function setupGUI() {
var waminame = document.getElementById("audio_title").value+".wav";//adding name file and extension
var waminame_play=waminame;
var gui = new Wami.GUI({
id : "wami",
singleButton : true,
recordUrl : "<?php echo api_get_path(WEB_LIBRARY_PATH) ?>wami-recorder/record_document.php?waminame="+waminame+"&wamidir=<?php echo $wamidir; ?>&wamiuserid=<?php echo $wamiuserid; ?>",
playUrl : "<?php echo $wamiurlplay; ?>"+waminame_play,
buttonUrl : "<?php echo api_get_path(WEB_LIBRARY_PATH) ?>wami-recorder/buttons.png",
swfUrl : "<?php echo api_get_path(WEB_LIBRARY_PATH) ?>wami-recorder/Wami.swf"
});
gui.setPlayEnabled(false);
}
</script>
<div id="wami" style="margin-top:10px;"></div>
<div align="center" style="margin-top:150px;">
<form name="form_wami_recorder">
<input placeholder="<?php echo get_lang('InputNameHere'); ?>" type="text" id="audio_title"><br/>
<button type="button" value="" onclick="setupRecorder()" id="audio_button" /><?php echo get_lang('Activate'); ?></button>
<button type="button" value="" onclick="newNameRecord()" id="new_name" /><?php echo get_lang('Reload'); ?></button>
<?php echo Display :: return_icon('info3.gif', get_lang('WamiNeedFilename').' '.get_lang('WamiFlashDialog'), array('align' => 'absmiddle', 'hspace' => '3px'), false); ?>
</form>
</div>
<div align="center" id="audio_message_1" style="display:inline">
<?php Display::display_normal_message(get_lang('WamiNeedFilename').' '.get_lang('WamiStartRecorder'), false); ?>
</div>
<script>
if (navigator.appName == 'Microsoft Internet Explorer') {
document.getElementById('wami').style.marginLeft='400px';
}else{
document.getElementById('wami').style.marginLeft='510px';
}
</script>
<?php
Display :: display_footer();

@ -90,17 +90,12 @@ $browser_display_title = 'Documents - '.Security::remove_XSS($_GET['cidReq']).'
$file_url_web = api_get_path(WEB_COURSE_PATH).$_course['path'].'/document'.$header_file.'?'.api_get_cidreq();
$pathinfo = pathinfo($header_file);
if ($pathinfo['extension']=='wav' && preg_match('/_chnano_.wav/i', $file_url_web) && api_get_setting('enable_nanogong') == 'true'){
echo '<div align="center">';
echo '<br/>';
echo '<applet id="applet" archive="../inc/lib/nanogong/nanogong.jar" code="gong.NanoGong" width="160" height="95" >';
echo '<param name="SoundFileURL" value="'.$file_url_web.'" />';
echo '<param name="ShowSaveButton" value="false" />';
echo '<param name="ShowTime" value="true" />';
echo '<param name="ShowRecordButton" value="false" />';
echo '</applet>';
echo '</div>';
if ($pathinfo['extension']=='swf') {
$width='83%';
$height='83%';
} else {
if ($pathinfo['extension']=='swf') { $width='83%'; $height='83%';} else {$width='100%'; $height='100%';}
echo '<iframe border="0" frameborder="0" scrolling="no" style="width:'.$width.'; height:'.$height.';background-color:#ffffff;" id="mainFrame" name="mainFrame" src="'.$file_url_web.'?'.api_get_cidreq().'&amp;rand='.mt_rand(1, 1000).'"></iframe>';
$width='100%';
$height='100%';
}
echo '<iframe border="0" frameborder="0" scrolling="no" style="width:'.$width.'; height:'.$height.';background-color:#ffffff;" id="mainFrame" name="mainFrame" src="'.$file_url_web.'?'.api_get_cidreq().'&amp;rand='.mt_rand(1, 1000).'"></iframe>';

@ -300,11 +300,6 @@ if ($is_freemind_available) {
$execute_iframe = false;
}
$is_nanogong_available = $pathinfo['extension']=='wav' && preg_match('/_chnano_.wav/i', $file_url_web) && api_get_setting('enable_nanogong') == 'true';
if ($is_nanogong_available) {
$execute_iframe = false;
}
if (!$jplayer_supported && $execute_iframe) {
$htmlHeadXtra[] = '<script type="text/javascript">
@ -343,10 +338,8 @@ echo '<div class="text-center">';
$file_url = api_get_path(WEB_COURSE_PATH).$courseInfo['path'].'/document'.$header_file;
$file_url_web = $file_url.'?'.api_get_cidreq();
if (!$is_nanogong_available) {
if (in_array(strtolower($pathinfo['extension']) , array('html', "htm"))) {
echo '<a class="btn btn-default" href="'.$file_url_web.'" target="_blank">'.get_lang('CutPasteLink').'</a>';
}
if (in_array(strtolower($pathinfo['extension']), array('html', "htm"))) {
echo '<a class="btn btn-default" href="' . $file_url_web . '" target="_blank">' . get_lang('CutPasteLink') . '</a>';
}
if ($show_web_odf) {
@ -441,17 +434,6 @@ if ($is_freemind_available) {
<?php
}
if ($is_nanogong_available) {
$file_url_web = DocumentManager::generateAudioTempFolder($file_url_sys);
echo '<div align="center">';
echo '<a class="btn btn-default" href="'.$file_url_web.'" target="_blank"><em class="fa fa-download"></em> '.get_lang('Download').'</a>';
echo '<br/>';
echo '<br/>';
echo DocumentManager::readNanogongFile($to_url);
// Erase temp file in tmp directory when return to documents
echo '</div>';
}
if ($execute_iframe) {
if ($isChatFolder) {
$content = Security::remove_XSS(file_get_contents($file_url_sys));

@ -0,0 +1,71 @@
<?php
/* For licensing terms, see /license.txt */
require_once '../global.inc.php';
// Add security from Chamilo
api_protect_course_script();
api_block_anonymous_users();
$courseInfo = api_get_course_info();
if (!isset($_FILES['audio_blob'], $_REQUEST['audio_dir'])) {
api_not_allowed();
}
$file = $_FILES["audio_blob"];
$audioDir = Security::remove_XSS($_REQUEST['audio_dir']);
$userId = api_get_user_id();
if (empty($userId)) {
api_not_allowed();
}
$audioFileName = Security::remove_XSS($file['name']);
$audioFileName = Database::escape_string($audioFileName);
$audioFileName = api_replace_dangerous_char($audioFileName);
$audioFileName = disable_dangerous_file($audioFileName);
$audioDir = Security::remove_XSS($audioDir);
$dirBaseDocuments = api_get_path(SYS_COURSE_PATH) . $courseInfo['path'] . '/document';
$saveDir = $dirBaseDocuments . $audioDir;
if (!is_dir($saveDir)) {
DocumentManager::createDefaultAudioFolder($courseInfo);
}
$documentPath = $saveDir . '/' . $audioFileName;
$file['file'] = $file;
$result = DocumentManager::upload_document(
$file,
$audioDir,
$file['name'],
null,
0,
'overwrite',
false,
false
);
if (!empty($result) && is_array($result)) {
$newDocId = $result['id'];
$courseId = $result['c_id'];
/** @var learnpath $lp */
$lp = isset($_SESSION['oLP']) ? $_SESSION['oLP'] : null;
$lpItemId = isset($_REQUEST['lp_item_id']) && !empty($_REQUEST['lp_item_id']) ? $_REQUEST['lp_item_id'] : null;
if (!empty($lp) && empty($lpItemId)) {
$lp->set_modified_on();
$lpItem = new learnpathItem($lpItemId);
$lpItem->add_audio_from_documents($newDocId);
}
$data = DocumentManager::get_document_data_by_id($newDocId, $courseInfo['code']);
echo $data['document_url'];
exit;
}

@ -1,7 +1,7 @@
<?php
/* For licensing terms, see /license.txt */
require_once '../../../inc/global.inc.php';
require_once '../global.inc.php';
// Add security from Chamilo
api_protect_course_script();

@ -208,7 +208,7 @@ class WamiRecorder
var gui = new Wami.GUI({
id : \'wami\',
singleButton : true,
recordUrl: \'' . api_get_path(WEB_LIBRARY_PATH) . 'wami-recorder/record_document.php?waminame=\' + waminame + \'&wamidir=' . $wamidir . '&wamiuserid=' . $wamiuserid . '\',
recordUrl: \'' . api_get_path(WEB_AJAX_PATH) . 'record_audio_wami.ajax.php?waminame=\' + waminame + \'&wamidir=' . $wamidir . '&wamiuserid=' . $wamiuserid . '\',
playUrl: \'' . $wamiurlplay . '\' + waminame_play,
buttonUrl: \'' . api_get_path(WEB_LIBRARY_PATH) . 'wami-recorder/buttons.png\',
swfUrl: \'' . api_get_path(WEB_LIBRARY_PATH) . 'wami-recorder/Wami.swf\'

@ -0,0 +1,190 @@
<div class="alert alert-warning">
<span class="fa fa-warning fa-fw" aria-hidden="true"></span> {{ 'WamiNeedFilename'|get_lang }}
</div>
<div id="record-audio-recordrtc" class="row text-center">
<form>
<div class="row">
<div class="col-sm-4 col-sm-offset-4">
<div class="form-group">
<span class="fa fa-microphone fa-5x fa-fw" aria-hidden="true"></span>
<span class="sr-only">{{ 'RecordAudio'|get_lang }}</span>
</div>
<div class="form-group">
<input type="text" name="audio_title" id="audio-title-rtc" class="form-control" placeholder="{{ 'InputNameHere'|get_lang }}">
</div>
</div>
</div>
<div class="text-center">
<div class="form-groups">
<button class="btn btn-primary" type="button" id="btn-start-record">
<span class="fa fa-circle fa-fw" aria-hidden="true"></span> {{ 'StartRecordingAudio'|get_lang }}
</button>
<button class="btn btn-success" type="button" id="btn-stop-record" disabled>
<span class="fa fa-square fa-fw" aria-hidden="true"></span> {{ 'StopRecordingAudio'|get_lang }}
</button>
</div>
</div>
</form>
</div>
<div class="row" id="record-audio-wami">
<div class="col-sm-3 col-sm-offset-3">
<br>
<form>
<div class="form-group">
<input type="text" name="audio_title" id="audio-title-wami" class="form-control" placeholder="{{ 'InputNameHere'|get_lang }}">
</div>
<div class="form-group text-center">
<button class="btn btn-primary" type="button" id="btn-activate-wami">
<span class="fa fa-check fa-fw" aria-hidden=""></span> {{ 'Activate'|get_lang }}
</button>
</div>
</form>
</div>
<div class="col-sm-3">
<div id="record-audio-wami-container" class="wami-container"></div>
</div>
</div>
<script>
$(document).on('ready', function () {
function useRecordRTC() {
$('#record-audio-recordrtc').show();
var audioTitle = '';
var mediaConstraints = {audio: true},
recordRTC = null,
btnStart = $('#btn-start-record'),
btnStop = $('#btn-stop-record');
btnStart.on('click', function () {
audioTitle = $('#audio-title-rtc').val();
if (!$.trim(audioTitle)) {
return;
}
navigator.getUserMedia = navigator.getUserMedia ||
navigator.mozGetUserMedia ||
navigator.webkitGetUserMedia;
if (navigator.getUserMedia) {
navigator.getUserMedia(mediaConstraints, successCallback, errorCallback);
} else if (navigator.mediaDevices.getUserMedia) {
navigator.mediaDevices.getUserMedia(mediaConstraints)
.then(successCallback).error(errorCallback);
}
function successCallback(stream) {
recordRTC = RecordRTC(stream, {
numberOfAudioChannels: 1,
type: 'audio'
});
recordRTC.startRecording();
$('#audio-title-rtc').prop('readonly', true);
btnStop.prop('disabled', false);
btnStart.prop('disabled', true);
}
function errorCallback(error) {
alert(error.message);
}
});
btnStop.on('click', function () {
if (!recordRTC) {
return;
}
recordRTC.stopRecording(function (audioURL) {
var recordedBlob = recordRTC.getBlob(),
fileName = audioTitle,
fileExtension = '.' + recordedBlob.type.split('/')[1];
var formData = new FormData();
formData.append('audio_blob', recordedBlob, audioTitle + fileExtension);
formData.append('audio_dir', '{{ directory }}');
$.ajax({
url: '{{ _p.web_ajax }}record_audio_rtc.ajax.php',
data: formData,
processData: false,
contentType: false,
type: 'POST',
success: function (fileURL) {
if (!fileURL) {
return;
}
window.location.reload();
}
});
$('#audio-title-rtc').prop('readonly', false);
btnStop.prop('disabled', true);
btnStart.prop('disabled', false);
});
});
}
function useWami() {
$('#record-audio-wami').show();
var audioTitle = '';
$('#btn-activate-wami').on('click', function (e) {
e.preventDefault();
audioTitle = $('#audio-title-wami').val();
if (!$.trim(audioTitle)) {
return;
}
$('#audio-title-wami').prop('readonly', true);
$(this).prop('disabled', true);
Wami.setup({
id : "record-audio-wami-container",
onReady : setupGUI,
swfUrl: '{{ _p.web_lib }}wami-recorder/Wami.swf'
});
});
function setupGUI() {
var gui = new Wami.GUI({
id : 'record-audio-wami-container',
singleButton : true,
recordUrl : '{{ _p.web_ajax }}record_audio_wami.ajax.php?' + $.param({
waminame: audioTitle + '.wav',
wamidir: '{{ directory }}',
wamiuserid: {{ user_id }}
}),
buttonUrl : '{{ _p.web_lib }}wami-recorder/buttons.png',
buttonNoUrl: '{{ _p.web_img }}blank.gif',
onRecordFinish: function() {
window.location.reload();
}
});
gui.setPlayEnabled(false);
}
}
$('#record-audio-recordrtc, #record-audio-wami').hide();
var webRTCIsEnabled = navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.getUserMedia ||
navigator.mediaDevices.getUserMedia;
if (webRTCIsEnabled) {
useRecordRTC();
return;
}
useWami();
});
</script>

@ -93,7 +93,7 @@
var gui = new Wami.GUI({
id : 'record-audio-wami',
singleButton : true,
recordUrl : '{{ _p.web_lib }}wami-recorder/record_document.php?' + $.param({
recordUrl : '{{ _p.web_ajax }}record_audio_wami.ajax.php?' + $.param({
waminame: 'rec_' + (new Date()).getTime() + '.wav',
wamidir: '{{ cur_dir_path }}',
wamiuserid: {{ _u.user_id }},

Loading…
Cancel
Save