Запись аудио на собственном плеере средствами jQuery и HTML5
Сегодня мы обсудим как передать аудио-сообщение с помощью jQuery и HTML5.
База данных
Структура базы данных.
CREATE TABLE newsfeed( id INT PRIMARY KEY AUTO_INCREMENT, userUpdate TEXT, user_id_fk INT, audioMessage TEXT, status ENUM('0','1') DEFAULT '1');
JavaScript
Далее необходимо подключить JavaScript библиотеки.
<script src="recorderControl.js"></script> <script src="js/jquery.min.2.1.js"></script> //Jquery <script src="js/jquery.stopwatch.js"></script> //Jquery Stop Watch <script src="recorder.js"></script> <script type="text/javascript"> $(document).ready(function(){ ----- ----- ----- }); </script>
HTML код аудио плеера
Далее мы напишем код аудио плеера с помощью HTML5 элементов. Цифра 10 - это номер пользовательской сессии.
<div class="audioContainer"> <div class="audioProgress" id="audioProgress10'" style="width:0px"></div> <div class="audioControl audioPlay" rel="play" id="10"></div> <div class="audioTime" id="audioTime10'">00.00</div> <div class="audioBar"></div> <audio preload="auto" src="data:audio/mp3;base64,//sUxAAABAArMFRhgA.." type="audio/mpeg" class="a" id="audio10'"><source></audio> </div>
CSS для аудио плеера
audio{display:none} .audioContainer { height:50px;width:250px; border:solid 1px #dedede; position:relative; } .audioProgress { height:50px;float:left;background-color:#f2f2f2;z-index:800 } .audioControl { position: absolute;float:left;width:52px;height:48px;; } .audioTime { position: absolute;width: 45px;height: 20px;margin-left:199px;float:right; } .audioBar { height: 3px; background-color: #cc0000; position: absolute;width: 147px;margin-left: 53px; } .audioPlay { background:url('../images/play.png') no-repeat } .audioPause { background:url('../images/pause.png') no-repeat }
JavaScript
getAudioTimeByDec = function(cTime,duration) { var duration = parseInt(duration), currentTime = parseInt(cTime), left = duration - currentTime, second, minute; second = (left % 60); minute = Math.floor(left / 60) % 60; second = second < 10 ? "0"+second : second; minute = minute < 10 ? "0"+minute : minute; return minute+":"+second; }; $("body").on("click",".audioControl", function(e) { var ID=$(this).attr("id"); var progressArea = $("#audioProgress"+ID); var audioTimer = $("#audioTime"+ID); var audio = $("#audio"+ID); var audioCtrl = $(this); e.preventDefault(); var R=$(this).attr('rel'); if(R=='play') { $(this).removeClass('audioPlay').addClass('audioPause').attr("rel","pause"); audio.trigger('play'); } else { $(this).removeClass('audioPause').addClass('audioPlay').attr("rel","play"); audio.trigger('pause'); } audio.bind("timeupdate", function(e) { var audioDOM = audio.get(0); audioTimer.text(getAudioTimeByDec(audioDOM.currentTime,audioDOM.duration)); var audioPos = (audioDOM.currentTime / audioDOM.duration) * 100; progressArea.css('width',audioPos+"%"); if(audioPos=="100") { $("#"+ID).removeClass('audioPause').addClass('audioPlay').attr("rel","play"); audio.trigger('pause'); } }); });
Управляем аудио с помощью jQuery метода trigger().
Кнопка запуска записи
Простой HTML код.
<img src="images/Microphone.png" id="recordButton" class="recordOff"> <span id="recordHelp">Allow your microphone.</span> <div id="recordContainer" class="startContainer"> <div id="recordTime"> <span id="sw_m">00</span>:<span id="sw_s">00</span></div> <div id="recordCircle" class="startRecord"><div id="recordText">Record</div></div> </div>
CSS
#recordCircle { margin: 0px auto; font-weight: bold; cursor: pointer; width: 100px; height: 100px; text-align: center; -moz-border-radius: 50px; -webkit-border-radius: 50px; border-radius: 50px; }
Кнопка записи. JavaScript
Данный скрипт вызывает record.js для записи аудио.
$("body").on('click','.recordOn',function() { $("#recordContainer").toggle(); }); $("#recordCircle").mousedown(function() { $(this).removeClass('startRecord').addClass('stopRecord'); $("#recordContainer").removeClass('startContainer').addClass('stopContainer'); $("#recordText").html("Stop"); $.stopwatch.startTimer('sw'); // Старт таймера startRecording(this); // Начала записи }).mouseup(function() { $.stopwatch.resetTimer(); // Сброс таймера $(this).removeClass('stopRecord').addClass('startRecord'); $("#recordContainer").removeClass('stopContainer').addClass('startContainer'); $("#recordText").html("Record"); stopRecording(this); // Остановка записи });
record.js
Код преобразования аудио в формат Base64.
function uploadAudioBase64(audiosrc) { var dataString ='audiosrc='+audiosrc; $.ajax({ type: "POST", url: "uploadAudio.php", data: dataString, cache: false, success: function(html) { var ID = Number(new Date()); //Timestamp var A='<div class="audioContainer">' +'<div class="audioProgress" id="audioProgress'+ID+'" style="width:0px"></div>' +'<div class="audioControl audioPlay" rel="play" id="'+ID+'"></div>' +'<div class="audioTime" id="audioTime'+ID+'">00.00</div>' +'<div class="audioBar"></div>' +'<audio preload="auto" src="'+audiosrc+'" type="audio/mpeg" class="a" id="audio'+ID+'"><source></audio>' +'</div>'; var B='<div class="stbody"><div class="stimg ">' +'<a href="https://labs.9lessons.info/srinivas"><img src="http://www.gravatar.com/avatar/c9e85bd3f889cc998dd1bb71d832634b?d=mm&s=230" class="big_face " alt="You" ></a></div>' +'<div class="sttext"><div class="sttext_content"><span class="sttext_span"><b><a href="https://labs.9lessons.info/srinivas">You</a></b> </span>' +A +'</div></div></div>'; $(".recordingslist").prepend(B); } }); }
updateAudio.php
Помещаем аудио-данные в базу, предварительно преобразовав в Base64.
<?php include('db.php'); $session_id='1'; if($_POST['audiosrc'] && !empty($session_id)) { $audiosrc=$_POST['audiosrc']; $query=mysqli_query($db,"INSERT INTO `newsfeed` (`user_id_fk`, `audioMessage`) VALUES ( '$session_id', '$audiosrc')")or die(mysqli_error($db)); } ?>
Таким образом аудио будет сохранено в таблице.
db.php
Подключение к базе данных. Замените настройки на свои.
<?php define('DB_SERVER', 'localhost'); define('DB_USERNAME', 'username'); define('DB_PASSWORD', 'password'); define('DB_DATABASE', 'database'); $db = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD,DB_DATABASE) or die(mysqli_connect_error()); $path = "uploads/"; ?>
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: http://www.9lessons.info/2015/03/audio-recording-with-custom-audio.html
Перевел: Станислав Протасевич
Урок создан: 10 Апреля 2015
Просмотров: 13237
Правила перепечатки
5 последних уроков рубрики "jQuery"
-
Анимация набора текста на jQuery
Сегодня мы бы хотели вам рассказать о библиотеке TypeIt — бесплатном jQuery плагине. С её помощью можно имитировать набор текста. Если всё настроить правильно, то можно добиться очень реалистичного эффекта.
-
Временная шкала на jQuery
jQuery плагин для создания временной шкалы.
-
Заметка: Перезагрузка и редирект на JavaScript
Быстрая заметка, где вы сможете найти парочку JS сниппетов для перезагрузки и перенаправления пользователей через JavaScript.
-
Рисуем диаграмму Ганта
jQuery плагин для создания диаграммы Ганта.
-
AJAX и PHP: загрузка файла
Пример того как осуществить загрузку файла через PHP и jQuery ajax.