ОТКРЫТЫЙ КОД ВЫПОЛНЕННОГО ЗАДАНИЯ

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное

Учреждение высшего образования

«МГУТУ им.К.Г.Разумовского (Первый казачий университет)»

Университетский колледж информационных технологий

ПРАКТИЧЕСКОЕ ЗАДАНИЕ

специальность 09.02.05 «Прикладная информатика (по отраслям)»

Группа ПИ-306
Студент Потапов А.И.
Преподаватель Кузьменко С.Ю.

Москва

2018

ТЕОРИТИЧЕСКАЯ ЧАСТЬ

Audio

Благодаря тегу <audio>, появившемуся в HTML5, можно очень просто добавлять звук на сайт. В javascript работать со звуком позволяет соответствующий класс Audio, а проверить поддержку формата звукового файла в браузере - метод canPlayType.

Если в HTML есть тег <audio>, доступ к соответствующему объекту Audio можно получить через имя тега

var audio = document.getElementsByTagName('audio')[index];

или через id

 var audio = document.getElementById('my-audio-id');

Объект Audio также можно создать в js.

 Создание объекта Audio в javascript

var aud = new Audio();

aud.src = 'sound.ogg';

//или

var aud = new Audio('sound.ogg');

или

$('audio').attr('src', 'audio_file.mp3')

*** Используется один из поддерживаемых форматов (mp3, wav, ogg)

Воспроизведение звука и пауза:

myaudio.play(); //воспроизведение звука

myaudio.pause(); // пауза

// после паузы воспроизведение продолжится с места остановки

myaudio.play();

Как остановить воспроизведение audio

Команды stop нет, и чтобы остановить воспроизведение звукового файла, нужно два действия - пауза и задание нулевого значения для свойства currentTime- текущее время:

// Функция stop для Audio:

HTMLAudioElement.prototype.stop = function()

{

this.pause();

this.currentTime = 0.0;

}

...

myaudio.stop(); // использование

События audio

loadeddata - данные загружены

Используем событие loadeddata , чтобы начать воспроизведение большого звукового файла после окончания загрузки:

var loaded = false;

var aud = new Audio();

aud.addEventListener('loadeddata', function() {

loaded = true;

aud.play();

 }, false);

aud.src = 'background.ogg';

Обработчик события окончания загрузки записан раньше, т.к. он должен быть доступен во время загрузки файла, которая начинается сразу после задания src.

error - обработка ошибки загрузки

aud.addEventListener('error' , function() {

alert('ошибка загрузки файла');

}, false);

aud.src = 'nofile.ogg';

onended - окончание воспроизведения

Длительность звукового файла

var audio = document.createElement('audio');

audio.src = 'mus3.mp3';

var time = audio.duration; // time=NaN

Свойство duration может быть недоступно, если не завершена загрузка метаданных, правильно:

audio.addEventListener('loadedmetadata', function() {

time = audio.duration;

});

Изменение свойств audio

Используем свойство muted - кнопки включения и выключения звука на странице:

<html>

<body>

<input type="button" onclick="aud.muted=true" value="Выключить" />

<input type="button" onclick="aud.muted=false" value="Включить" />

</body>

</html>

Хотелось бы выключать фоновый звук, когда посетитель сайта переключается на другое окно или вкладку браузера. Важно, что выражение muted=true сработает, если будет выполняться после завершения загрузки звукового файла, т.е. его следует поместить в обработчик события loadeddata:

var loaded = false;

var aud = new Audio();

aud.addEventListener('loadeddata', function() {

aud.muted = true;

}, false);

aud.src = 'background.ogg';

aud.play();

Поддержка элемента Audio и форматов звуковых файлов

Для проверки поддержки форматов звуковых файлов браузером используется метод canPlayType с параметром  текстовым значением MIME-типа.

audio.canPlayType('audio/ogg');

Можно явно указать кодек:

 audio.canPlayType('audio/ogg; codecs="vorbis"');

canPlayType возвращает одно из 3 значений:

probably - наверное

maybe - может быть

"" (пустая строка) - формат не поддерживается

Пример проверки поддержки формата mp3

Можете проверить, Opera не поддерживает формата mp3

var audio = new Audio();

var canPlayMmp3 = !!audio.canPlayType && audio.canPlayType('audio/mp3') != "";

if(!canPlayMmp3) {

 document.write('mp3 не поддерживается!<br />');

}

*** "!!" преобразует объект строки в логический тип

Пример проверки поддержки audio и форматов файлов

<script>

function check_audio() {

 var elem = document.createElement('audio'), bool = false;

 try {

 if ( bool = !!elem.canPlayType ) {

 bool = new Boolean(bool);

 bool.ogg = elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,'');

 bool.mp3 = elem.canPlayType('audio/mpeg;').replace(/^no$/,'');

 bool.wav = elem.canPlayType('audio/wav; codecs="1"').replace(/^no$/,'');

 bool.m4a = (elem.canPlayType('audio/x-m4a;') || elem.canPlayType('audio/aac;')).replace(/^no$/,'');

 }

 }

 catch(e) {

 }

 return bool;

}

var b = check_audio();

if(!b) {

 document.write('Audio не поддерживается');

}

else {

 var formats = ['ogg', 'mp3', 'wav', 'm4a'];

 for(var i = 0; i < formats.length; i++) {

 document.write(formats[i] + ' - ' + b[formats[i]] + '<br />');

 }

}

</script>

Если функция check_audio возвращает false, браузер не поддерживает элемент audio. Если элемент audio поддерживается, проверяется возможность использования форматов файлов ogg, mpeg, wav и m4a.

ПРАКТИЧЕСКАЯ ЧАСТЬ

HTML код

<!DOCTYPE html>

<html>

<head>

<title>Hello</title>

<link rel="stylesheet" type="text/css" href="style.css">

<script type="text/javascript" src="script.js"></script>

</head>

<body>

<div id="content">

<input type="button" value="go" id="bttngo">

<input type="file" id="thefile" accept="audio/*" />

<canvas id="canvas"></canvas>

<audio id="audio" controls></audio>

</div>

</body>

</html>

CSS код

#bttngo{

position: fixed;

top: 5px;

left: 10px;

z-index: 100;

}

#thefile {

position: fixed;

top: 30px;

left: 10px;

z-index: 100;

}

 

#canvas {

position: fixed;

left: 0;

top: 0;

width: 100%;

height: 100%;

}

 

audio {

position: fixed;

left: 10px;

bottom: 10px;

width: calc(100% - 20px);

}

JS код

window.onload = function() {

 

var file = document.getElementById("thefile");

var audio = document.getElementById("audio");

var bttn = document.getElementById("bttngo");

bttn.onclick = function() {

var files = file.files;

audio.src = URL.createObjectURL(files[0]);

audio.load();

audio.play();

var context = new AudioContext();

var src = context.createMediaElementSource(audio);

var analyser = context.createAnalyser();

var canvas = document.getElementById("canvas");

canvas.width = window.innerWidth;

canvas.height = window.innerHeight;

var ctx = canvas.getContext("2d");

 

src.connect(analyser);

analyser.connect(context.destination);

 

analyser.fftSize = 256;

 

var bufferLength = analyser.frequencyBinCount;

console.log(bufferLength);

 

var dataArray = new Uint8Array(bufferLength);

 

var WIDTH = canvas.width;

var HEIGHT = canvas.height;

 

var barWidth = (WIDTH / bufferLength) * 2.5;

var barHeight;

var x = 0;

 

function renderFrame() {

requestAnimationFrame(renderFrame);

 

x = 0;

 

analyser.getByteFrequencyData(dataArray);

 

ctx.fillStyle = "#000";

ctx.fillRect(0, 0, WIDTH, HEIGHT);

 

for (var i = 0; i < bufferLength; i++) {

   barHeight = dataArray[i];

       

   var r = barHeight + (25 * (i/bufferLength));

   var g = 250 * (i/bufferLength);

   var b = 50;

 

   ctx.fillStyle = "rgb(" + r + "," + g + "," + b + ")";

   ctx.fillRect(x, HEIGHT - barHeight, barWidth, barHeight);

 

   x += barWidth + 1;

}

}

 

audio.play();

renderFrame();

};

};


 

ЗАДАНИЕ ДЛЯ ВЫПОЛНЕНИЯ

Добавить кнопку выключения звука.


 

ОТКРЫТЫЙ КОД ВЫПОЛНЕННОГО ЗАДАНИЯ

HTML код

<!DOCTYPE html>

<html>

<head>

<title>Hello</title>

<link rel="stylesheet" type="text/css" href="style.css">

<script type="text/javascript" src="script.js"></script>

</head>

<body>

<div id="content">

    <input type="button" value="mute" id="mute">

    <input type="button" value="go" id="bttngo">

    <input type="file" id="thefile" accept="audio/*" />

    <canvas id="canvas"></canvas>

    <audio id="audio" controls></audio>

</div>

</body>

</html>

CSS код

#mute{

position: fixed;

top: 5px;

left: 10px;

z-index: 100; 

}

#bttngo{

position: fixed;

top: 30px;

left: 10px;

z-index: 100;

}

#thefile {

position: fixed;

top: 55px;

left: 10px;

z-index: 100;

}

 

#canvas {

position: fixed;

left: 0;

top: 0;

width: 100%;

height: 100%;

}

 

audio {

position: fixed;

left: 10px;

bottom: 10px;

width: calc(100% - 20px);

}

JS код

window.onload = function() {

var mute = 0;

var file = document.getElementById("thefile");

var audio = document.getElementById("audio");

var bttn = document.getElementById("bttngo");

var mut = document.getElementById("mute");

bttn.onclick = function() {

var files = file.files;

audio.src = URL.createObjectURL(files[0]);

audio.load();

audio.play();

var context = new AudioContext();

var src = context.createMediaElementSource(audio);

var analyser = context.createAnalyser();

var canvas = document.getElementById("canvas");

canvas.width = window.innerWidth;

canvas.height = window.innerHeight;

var ctx = canvas.getContext("2d");

 

src.connect(analyser);

analyser.connect(context.destination);

 

analyser.fftSize = 256;

 

var bufferLength = analyser.frequencyBinCount;

console.log(bufferLength);

 

var dataArray = new Uint8Array(bufferLength);

 

var WIDTH = canvas.width;

var HEIGHT = canvas.height;

 

var barWidth = (WIDTH / bufferLength) * 2.5;

var barHeight;

var x = 0;

 

mut.onclick = function() {

if (mute == 0) {

   audio.volume=0;

   mut.value = "unmute";

   mute = 1;

}else if (mute == 1) {

   audio.volume=1;

   mut.value = "mute";

   mute = 0;

}

}

 

function renderFrame() {

requestAnimationFrame(renderFrame);

 

x = 0;

 

analyser.getByteFrequencyData(dataArray);

 

ctx.fillStyle = "#000";

ctx.fillRect(0, 0, WIDTH, HEIGHT);

 

for (var i = 0; i < bufferLength; i++) {

   barHeight = dataArray[i];

       

   var r = barHeight + (25 * (i/bufferLength));

   var g = 250 * (i/bufferLength);

   var b = 50;

 

   ctx.fillStyle = "rgb(" + r + "," + g + "," + b + ")";

   ctx.fillRect(x, HEIGHT - barHeight, barWidth, barHeight);

 

   x += barWidth + 1;

}

 }

 

audio.play();

renderFrame();

};

};


Дата добавления: 2019-02-22; просмотров: 146; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!