Завьялов Александр, Яндекс
Завьялов Александр
Руководитель группы разработки КЛ
if (document.createElement('audio').canPlayType) {// ...} else {alert('<audio> не поддерживается!');}
<audio src="sound.mp3" autoplay></audio><audio src="sound.mp3" autoplay loop></audio><audio src="sound.mp3" controls></audio><audio src="sound.mp3" controls preload="none"></audio><audio src="sound.mp3" controls preload="auto"></audio><audio src="sound.mp3" controls preload="metadata"></audio><audio controls><source src="sound.ogg" type="audio/ogg"><source src="sound.mp3" type="audio/mp3"><a href="sound.mp3" download>Скачать!</a><audio>
Firefox
Chrome
Yandex Browser
Safari
<audio src="sound.mp3" id="player" controls></audio><script>const player = document.getElementById('player');player.play();player.pause();player.canPlayType('audio/mp3'); // 'probably', 'maybe', ''player.src = 'new_sound.mp3';player.load();</script>
const AudioContext = window.AudioContext || window.webkitAudioContext;if (AudioContext) {// ...} else {alert('Ваш браузер не поддерживает Web Audio API');}
const gainNode = context.createGain();gainNode.gain.value = 0.5;source.connect(gainNode);gainNode.connect(destination);
const delayNode = context.delayNode();delayNode.delayTime.value = 0.5; // пол секундыsource.connect(delayNode);delayNode.connect(destination);
// Создаем контекст, источник и приемникconst context = new AudioContext();const source = context.createBufferSource();source.buffer = getBufferFromUrl(someUrl);const destination = context.destination;
// Создаем модули и конфигурируем ихconst gainNode = context.createGain();const delayNode = context.createDelay();gainNode.gain.value = 0.5;delayNode.delayTime.value = 0.75;
// Описываем необходимую нам схему и воспроизводимsource.connect(gainNode);gainNode.connect(delayNode);delayNode.connect(gainNode);gainNode.connect(destination);source.start(0);
const convolverNode = context.createConvolver();const impulseResponse = ... ;convolverNode.buffer = impulseResponse;
const filterNode = context.createBiquadFilter();filterNode.type = 'lowpass';filterNode.frequency.value = 1000;filterNode.Q.value = 1;filterNode.gain.value = 300;
const pannerNode = context.createPanner();pannerNode.setPosition(pos.x, pos.y, pos.z);pannerNode.setOrientation(vec.x, vec.y, vec.z);pannerNode.setVelocity(dx/dt, dy/dt, dz/dt);context.listener.setPosition(pos.x, pos.y, pos.z);context.listener.setOrientation(vec.x, vec.y, vec.z);context.listener.setVelocity(dx/dt, dy/dt, dz/dt);
if (window.speechSynthesis) {// ...} else {alert('Speech Synthesis API не поддерживается');}
// Создаем фразу и воспроизводим ееconst msg = new SpeechSynthesisUtterance('Is Yandex the best?');window.speechSynthesis.speak(msg);// Меняем голосconst voices = window.speechSynthesis.getVoices();msg.voice = voices[10];msg.rate = 1; // Скорость от 0 до 10msg.pitch = 2; // Высота от 0 до 2msg.text = 'Yes, of course';msg.lang = 'en-US';
SpeechSynthesisVoice {voiceURI: "Milena",name: "Milena",lang: "ru-RU",localService: true,default: true}
// Достижение границ слова или предложения// Достижение именованой метки в SSML разметке
const SpeechRecognition =window.SpeechRecognition || window.webkitSpeechRecognition;if (SpeechRecognition) {// ...} else {alert('Speech Recognition API не поддерживается');}
const recognition = new SpeechRecognition();recognition.lang = 'ru-RU';recognition.continuous = false;recognition.interimResults = false;recognition.maxAlternatives = 1;recognition.start();recognition.stop();
recognition.onstart = function() { }recognition.onend = function() { }recognition.onerror = function(event) {console.error(event);};recognition.onresult = function(event) {const result = event.results[0][0].transcript;//...}