WebAudio

Сырых Максим, СКБ Контур

Фантастический WebAudio и где его искать юзать

Максим Сырых для #uraljs №3

bit.ly/uraljs-webaudio

<audio>

Элемент <audio>

			<audio src="src.wav">
			    Ваш браузер не поддерживает элемент audio
			</audio>
		

Поддерживаемые форматы

Chrome Firefox Safari IE 9+
WebM + VP8/VP9 + Vorbis/Opus + + +
Ogg + Theora + Vorbis/Opus + +
MP4 + H.264 + AAC/MP3 + + + +
MP3 + + + +
WAVE + PCM + + +
FLAC 51+

Элемент <source>

			<audio>
			    <source src="example.webm" type="audio/webm">
			    <source src="example.mp4" type="audio/mp4">
			</audio>
		

DEMO: <audio>

			let audio = document.createElement('audio')
		  audio.src = 'sounds/tag-audio-demo.mp3'
			 
			let btnMute = document.getElementById('tag-audio-demo--mute')
			let playMute = document.getElementById('tag-audio-demo--play')
			let pauseMute = document.getElementById('tag-audio-demo--pause')
		

DEMO: <audio>

			btnMute.onClick = e => {
				audio.muted = !audio.muted
			}
			 
			playMute.onClick = () => { audio.play() }
			pauseMute.onClick = () => { audio.pause() }
		

DEMO: <audio>

Web Audio API

DEMO

  1. DEMO 1
  2. DEMO 2
  3. DEMO 3

node.connect()

node.connect(node)

			const myAudio = document.querySelector('audio')
			const context = new AudioContext()
			 
			const source = context.createMediaElementSource(myAudio)
			const gainNode = context.createGain()
			const delayNode = context.createDelay(5.0)
		

node.connect(node)

			...
			source.connect(delayNode)
			delayNode.connect(gainNode)
			gainNode.connect(context.destination)
		

Типы узлов

  1. Источники и выходы звука
  2. Фильтры
  3. Анализаторы
  4. ...

Источники звука

  1. MediaElementAudioSourceNode

MediaStreamAudioSourceNode

			const context = new AudioContext()
			navigator.getUserMedia(
				{ audio: true, video: false },
				stream => {
					const source = context.createMediaStreamSource(stream)
				}
			)
		

Источники звука

  1. MediaElementAudioSourceNode
  2. MediaStreamAudioSourceNode
  3. AudioBufferSourceNode

Demo: Synth

Oscillator 1

Output :
Freq :

Oscillator 2

Output :
Freq :

Oscillator 3

Output :
Freq :

Oscillator 4

Output :
Freq :

Фильтры

Gain \ усилитель

			const context = new AudioContext()
			const gainNode = context.createGain()
			 
			gainNode.gain.value = 0 // muted
			gainNode.gain.value = 1 // 100% volume
			gainNode.gain.value = 3 // 300% volume
		

Delay \ задержка

			const context = new AudioContext()
			const delayNode = context.createDelay(1.0)
		

BiquadFilterNode

			const context = new AudioContext()
			const biquadFilter = context.createBiquadFilter()
			biquadFilter.type = "bandpass"
			biquadFilter.frequency.value = 1000
			biquadFilter.Q.value = 100
			biquadFilter.gain.value = 25
		

BiquadFilterNode \ Типы

Возможности

  1. Точная синхронизация

<audio>

  1. Музыка играет

Web Audio

MIDI

Смотреть еще

  1. Документация: AudioContext
  2. Интро в Web Audio от html5rocks
  3. Демо: модульный синтезатор
  4. Демо: Tonecraft by DinahMoe
  5. Еще больше демок
  6. Tone.JS – фреймворк

bit.ly/uraljs-webaudio

tech.skbkontur.ru/talks

Вопросы

Максим Сырых

syryh_m@kontur.ru