HTML5 오디오
1. 개요
HTML5 오디오는 HTML5에서 소리 또는 오디오 스트림을 나타내는 `
-
웹 표준 -
웹 컴포넌트
웹 컴포넌트는 재사용 가능한 웹 UI 요소를 만들기 위한 웹 표준 기술로, 커스텀 요소, 섀도 DOM, HTML 템플릿을 핵심 요소로 하며, 스타일과 동작을 캡슐화하고 다양한 프레임워크와의 상호 운용성을 제공하며 웹 접근성 향상에 기여한다. -
웹 표준 -
웹 워커
웹 워커는 웹 페이지의 메인 스레드와 독립적으로 백그라운드에서 스크립트를 실행하여 사용자 인터페이스 응답성을 유지하면서 무거운 작업 처리를 가능하게 하는 기술이다. -
웹 프로그래밍 -
자바스크립트
자바스크립트는 웹 페이지에 동적인 기능을 추가하기 위해 개발된 프로그래밍 언어로, 초기에는 라이브스크립트라 불렸으나 자바의 인기에 힘입어 변경되었고, ECMAScript로 표준화되어 웹 브라우저와 Node.js 등 다양한 환경에서 활용되지만, 오라클의 상표권 소유로 논란이 있다. -
웹 프로그래밍 -
블레이저 (웹 프레임워크)
블레이저는 마이크로소프트가 개발한 웹 프레임워크로, .NET을 사용하여 웹 애플리케이션을 구축하며, C#과 Razor 구문을 사용해 컴포넌트를 만들고, 서버 측 및 클라이언트 측 렌더링을 모두 지원한다. -
HTML5 -
구글 스위피
구글 스위피는 구글에서 개발한 웹 서비스로, SWF 파일을 JSON으로 직렬화한 후 자바스크립트를 통해 SVG로 변환하여 애니메이션을 구현하는 기술이었으나 2016년 7월 1일 서비스가 종료되었다. -
HTML5 -
웹 스토리지
웹 스토리지는 웹 브라우저에서 클라이언트 측에 데이터를 저장하는 API로, 쿠키와 유사하지만 더 큰 저장 용량을 제공하며 로컬 스토리지와 세션 스토리지로 구분된다.
2. `<audio>` 요소
`
2.1. 속성
`
* 전역 속성: accesskey, class, contenteditable, contextmenu, dir, draggable, dropzone, hidden, id, lang, spellcheck, style, tabindex, title, translate
* autoplay = "autoplay" 또는 "" (빈 문자열) 또는 비어있음: 사용자 에이전트가 중단 없이 오디오 스트림을 즉시 자동 재생하도록 지시한다.
* preload = "none" 또는 "metadata" 또는 "auto" 또는 "" (빈 문자열) 또는 비어있음: 오디오 스트림 자체 또는 해당 메타데이터의 낙관적인 다운로드가 가치가 있는지에 대한 힌트를 사용자 에이전트에게 제공한다.
* "none": 사용자가 오디오 스트림을 필요로 하지 않거나 불필요한 트래픽을 최소화하는 것이 바람직하다는 힌트를 사용자 에이전트에게 제공한다.
* "metadata": 사용자가 오디오 스트림을 필요로 하지 않지만, 해당 메타데이터(재생 시간 등)를 가져오는 것이 바람직하다는 힌트를 사용자 에이전트에게 제공한다.
* "auto": 전체 오디오 스트림을 낙관적으로 다운로드하는 것이 바람직하다는 힌트를 사용자 에이전트에게 제공한다.
* controls = "controls" 또는 "" (빈 문자열) 또는 비어있음: 사용자 에이전트에게 오디오 스트림 재생을 제어하기 위한 사용자 인터페이스를 노출하도록 지시한다.
* loop = "loop" 또는 "" (빈 문자열) 또는 비어있음: 오디오 스트림이 끝에 도달하면 사용자 에이전트에게 오디오 스트림의 시작 부분으로 되돌아가도록 지시한다.
* mediagroup = 문자열: 사용자 에이전트에게 여러 비디오 및/또는 오디오 스트림을 함께 연결하도록 지시한다.
* muted = "muted" 또는 "" (빈 문자열) 또는 비어있음: 잠재적으로 사용자 기본 설정을 재정의하는 오디오 스트림의 기본 상태를 나타낸다.
* src = 공백으로 묶일 수 있는 비어 있지 않은 URL: 오디오 스트림의 URL이다.
2.2. 지원 브라우저
대부분의 최신 웹 브라우저가 audio영어 요소를 지원한다.
| PC 환경 | 모바일 환경 |
|---|---|
3. 지원되는 오디오 코딩 형식
HTML5 비디오와 마찬가지로, HTML5 오디오의 채택은 자유 형식과 특허가 적용되는 형식의 지지자 사이에서 논쟁이 있었다. 2007년, W3C는 모든 주요 브라우저 공급업체에서 허용하는 형식이 부족하다는 이유로 Vorbis 사용 권장 사항을 철회했다.
애플과 마이크로소프트는 AAC와 MP3를 지원한다. 반면 모질라와 오페라는 Ogg 및 WebM 컨테이너에서 자유롭고 개방적이며 로열티가 없는 Vorbis 형식을 지원하며, MP3 및 AAC의 특허 제약 특성을 비판한다. 구글은 지금까지 모든 일반적인 형식에 대한 지원을 제공해 왔다.
제한된 길이의 대부분의 AAC 파일은 인터넷 익스플로러, 사파리, 크롬에서 기본적으로 지원되고, 파이어폭스 및 오페라에서는 OS에서 지원하는 MPEG-4 컨테이너(.mp4, .m4a)로 래핑된다. 길이가 무한한 대부분의 AAC 라이브 스트림은 크롬, 사파리, 파이어폭스 및 엣지에서 지원되는 오디오 데이터 전송 스트림 컨테이너(.aac, .adts)에 래핑된다.
많은 브라우저는 WAV 컨테이너에서 압축되지 않은 PCM 오디오도 지원한다.
2012년에는 로열티가 없는 무료 개방형 Opus 형식이 출시되어 IETF에 의해 표준화되었다. 모질라, 구글, 오페라 및 엣지에서 지원된다.
3.1. 주요 오디오 코덱
| 형식 | 컨테이너 | MIME 유형 | 크롬 | 인터넷 익스플로러 | 엣지 | 파이어폭스 | 오페라 | 사파리 |
|---|---|---|---|---|---|---|---|---|
| PCM | WAV | audio/wav | ||||||
| MP3 | MP3 | audio/mpeg | ||||||
| AAC | MP4 | audio/mp4 | ||||||
| ADTS | audio/aac audio/aacp | |||||||
| Vorbis | Ogg | audio/ogg | Web Media Extensions와 함께 v17에서 지원 | |||||
| WebM | audio/webm | Web Media Extensions와 함께 v17에서 지원 | ||||||
| Opus | Ogg | audio/ogg | Web Media Extensions와 함께 v17에서 지원 | |||||
| WebM | audio/webm | Web Media Extensions와 함께 v17에서 지원 | ||||||
| CAF | audio/x-caf | |||||||
| FLAC | FLAC | audio/flac | ||||||
| Ogg | audio/ogg | Web Media Extensions와 함께 v17에서 지원 |
HTML5 오디오에서 사용되는 주요 오디오 코덱은 다음과 같다.
* [[MP3]]: 널리 사용되는 손실 압축 오디오 형식이다. 대부분의 브라우저에서 지원된다.
* [[Advanced Audio Coding|AAC]]: MP3보다 향상된 음질을 제공하는 손실 압축 오디오 형식이다. 주로 MPEG-4 컨테이너(.mp4, .m4a)에 사용되며, 대부분의 브라우저에서 지원된다.
* [[Vorbis]]: 자유 오픈 소스 오디오 형식으로, Ogg 컨테이너에 주로 사용된다. 모질라 파이어폭스, 오페라, 크롬 등에서 지원된다.
* [[오푸스 (오디오 포맷)|Opus]]: 자유 오픈 소스 오디오 형식으로, 뛰어난 압축 효율과 낮은 지연 시간을 제공한다. WebM, Ogg 컨테이너 등에 사용되며, 모질라, 구글, 오페라, 엣지 등에서 지원된다.
* [[펄스 부호 변조|PCM]]: 압축되지 않은 오디오 형식으로, WAV 컨테이너에 주로 사용된다.
* [[FLAC]]: 무손실 오디오 코덱으로 크롬, 엣지, 파이어폭스, 오페라, 사파리에서 지원된다.
3.2. 브라우저별 지원 현황
HTML5 비디오와 마찬가지로, HTML5 오디오의 채택은 무료 형식과 특허가 적용되는 형식의 지지자 사이에서 양극화되었다. 애플과 마이크로소프트는 AAC와 이전 MP3를 지원한다. 모질라와 오페라는 Ogg 및 WebM 컨테이너에서 자유롭고 개방적이며 로열티가 없는 Vorbis 형식을 지원하고 "비자유"가 보장되는 MP3 및 AAC의 특허 제약 특성을 비판한다. 구글은 지금까지 모든 일반적인 형식에 대한 지원을 제공해 왔다.
제한된 길이의 대부분의 AAC 파일은 인터넷 익스플로러, 사파리 및 크롬에서 기본적으로 지원되고 파이어폭스 및 오페라의 OS에서 지원되는 MPEG-4 컨테이너(.mp4, .m4a)로 래핑된다. 길이가 무한한 대부분의 AAC 라이브 스트림은 크롬, 사파리, 파이어폭스 및 엣지에서 지원되는 오디오 데이터 전송 스트림 컨테이너(.aac, .adts)에 래핑된다.
많은 브라우저는 WAV 컨테이너에서 압축되지 않은 PCM 오디오도 지원한다.
2012년에는 로열티가 없는 무료 개방형 오푸스 형식이 출시되어 IETF에 의해 표준화되었다. 모질라, 구글, 오페라 및 엣지에서 지원된다.
다음 표는 `<audio>` 요소에 대한 오디오 코딩 형식의 현재 지원 상태를 나타낸다.
4. Web Audio API
W3C에서 개발한 Web Audio API는 웹 애플리케이션에서 오디오를 처리하고 합성하기 위한 고수준 자바스크립트 API이다. 오디오 노드를 연결하여 오디오 라우팅 그래프를 구성하는 방식으로 작동한다. 실제 처리는 주로 최적화된 어셈블리/C/C++ 코드로 구현되지만, 자바스크립트를 이용한 직접 처리 및 합성도 지원된다.
모질라 파이어폭스 브라우저는 2010년에 유사한 오디오 데이터 API를 구현하여 2011년 출시된 버전 4부터 제공했지만, 모질라는 이것이 표준이 아니며 사용 중단되었음을 알리고, 대신 Web Audio API를 사용할 것을 권장한다. [https://oampo.github.com/Audiolet/ Audiolet]과 같은 일부 자바스크립트 오디오 처리 및 합성 라이브러리는 두 API를 모두 지원한다.
W3C 오디오 작업 그룹은 모질라에서 개발한 미디어 스트림 처리 API 명세 또한 고려하고 있다. 이 API는 오디오 믹싱 및 처리 외에도 HTML 요소와의 동기화, 오디오 및 비디오 스트림 캡처, 그리고 이러한 미디어 스트림의 피어 투 피어 라우팅을 포함하는 보다 일반적인 미디어 스트리밍을 다룬다.
4.1. 지원 브라우저
5. Web Speech API
웹 음성 API는 웹 애플리케이션에 음성 인식 및 음성 합성 기능을 제공하는 API이다. 음성 인식은 사용자의 음성을 텍스트로 변환하고, 음성 합성은 텍스트를 음성으로 변환하여 재생한다.
웹 음성 API는 키보드 사용 없이 웹 애플리케이션에 대한 대체 입력 방법을 제공하는 것을 목표로 한다. 개발자는 이 API를 통해 웹 앱에 컴퓨터 마이크에서 음성을 텍스트로 변환하는 기능을 제공할 수 있다. 녹음된 오디오는 텍스트 변환을 위해 음성 서버로 전송되며, 이후 텍스트가 사용자에게 표시된다. API 자체는 기반 음성 인식 구현에 관계없이 서버 기반 인식기와 내장 인식기 모두를 지원할 수 있다.
HTML 음성 인큐베이터 그룹은 브라우저에서 오디오-음성 기술을 균일하고 플랫폼 간 API 형태로 구현할 것을 제안했다. API는 음성 입력 API와 텍스트 음성 변환 API를 모두 포함한다.
구글은 2011년 3월 이 기능을 구글 크롬에 통합했다.
5.1. 지원 브라우저
웹 음성 API는 음성 합성 및 음성 인식으로 구성되며, 키보드나 마우스 이외의 입출력 수단을 제공한다.
| 기능 | 플랫폼 | 지원 브라우저 및 버전 |
|---|---|---|
| 음성 합성 | PC | 구글 크롬 33, 모질라 파이어폭스 49, 마이크로소프트 엣지, 오페라 21, 사파리 7 이상 |
| 모바일 | 구글 크롬 Android 33, 모질라 파이어폭스 61 (62부터 기본 설정으로 활성화), 마이크로소프트 엣지, iOS 사파리 7.1, Android WebView 33 이상 | |
| 음성 인식 | PC | 구글 크롬 25 ("webkit" 벤더 접두사 필요, 웹 서버를 통해 제공되지 않으면 사용 불가), 모질라 파이어폭스 44 (기본 설정에서는 비활성화) 이상 |
| 모바일 | 구글 크롬 Android ("webkit" 벤더 접두사 필요, 웹 서버를 통해 제공되지 않으면 사용 불가) 이상 |