2011.09.01 08:30

3. HTML5 Audio

HTML5 2011.09.01 08:30
초창기 웹에서는 HTML에 기반한 하이퍼링크 문서를 전달하는 용도로 설계되었기 때문에 오디오나 비디오 콘텐츠에 대한 배려나 표준안이 존재하지 않았습니다. 결국 표준안의 부재는 플러그인 기술의 발전으로 이어졌고 오디오와 비디오 재생을 위해서 윈도우 미디어 플래이어나 혹은 ActiveX 기반의 기술을 사용하는 방법 혹은 Silverlight나 Flash와 같은 RIA 기술이 사용하기도 했습니다.

 하지만 HTML5에서는 기본적으로 이와 관련해서 이미 준비되어 있는 태그가 정의되어 있고 별도의 플러그인이 없이 재생할 수 있게 되어 있습니다.


물론 각 브라우저 마다 보여주는 룩앤필은 조금씩 다르긴 하지만 미디어 재생에 있어서 일반적으로는 그게 인터페이스가 다르지 않기 때문에 문제 될 것은 없습니다.
 그럼 오디오를 사용하기 위해서는 어떻게 해야 할까요?

사용하는 방법 자체는 아주 간단합니다.

<audio src="vincent.mp3" controls></audio>

위와 같이 한 줄이면 해결 됩니다.
 여기서 한 가지 주의 할 점이 있는데 아직 해결되지 않은 문제가 코덱에 있다는 점입니다. HTML5의 표준안에는 태그는 정의되어 있지만 코덱까지는 표준으로 정해져 있지 않다는 점입니다. 여기에는 코덱을 사용하기 위해서 라이선스를 어떻게 할 것인가 하는 근본적인 문제가 있습니다. MP3의 경우도 독일 호퍼 연구소가 라이선스를 가지고 있어서 결코 '무료'는 아니기 때문 입니다.

Browser .mp3 .wav .ogg
Mozzila Firefox 3.6
Opera 10.63
Google Chrome 8.0
Apple Safari 5.0.3 (with QuickTime)
Microsoft IE 9

위의 표에서 볼 수 있다시피 FireFox나 Opera의 경우는 MP3를 지원하지 않습니다. 그 대신 오픈 라이선스 코덱인 OGG를 지원하고 있습니다. 이에 반해서 Chrome, Safari, IE9 등에서는 모두 MP3를 기본으로 설정하고 있습니다.

 물론 공통 분모로 WAV 방식을 사용할 수 있지만 압축되지 않은 데이터를 웹에서 다루는 것은 결코 좋은 방법이 아닙니다. 결국 제 생각에는 시간이 지나서 한 쪽으로 코덱이 정리되기를 기대하는 것이 지금 웹 개발자들이 할 수 있는 최선입니다. 하지만 지금 당장 어느 한쪽을 선택하라고 한 다면 저는 MP3쪽의 손을 들어주고 싶습니다.

아래표는 오디오와 관련된 태크와 함께 사용할 수 있는 속성을 정리한 표입니다.

Attribute Value Description
controls *Boolean attribute You need this to make the native audio player appear. Otherwise, you would have to use DOM to control the audio element to play your music.
autoplay *Boolean attribute If this guy exists, the browser will just play your song or your speech without asking permission from your visitor.
loop *Boolean attribute Keep repeating your music
src url The URL of your audio file
preload none | metadata | auto This attribute was formerly known as "autobuffer" and it was an boolean attribute as "controls".

none - do not buffer audio file automatically.
metadata - only buffer the metadata of audio file.
auto - buffer audio file before it gets played.

Controls 태그는 오디오를 제어할 수 있는 컨트롤의 표시 여부를 AutoPlay는 자동 재생 그리고 Loop는 무한 반복 여부를 나타냅니다. 실제 미디어의 경로는 Src로 표시할 수 있으며 재생전에 미리 버퍼링을 시작할 것이지를 결정하는 속성이 preload 입니다.

<audio src="vincent.mp3" controls="true" loop="true" autoplay="true"></audio>

실제로 태그를 보면 정말 간단해 졌습니다. 이전의 경우에는 Object 태그를 사용해서 복잡하게 다루어야 했지만 지금의 경우는 훨씬 더 간단해 졌다는 것을 알 수 있습니다.
 한 가지 추천해 드리고 싶은 것은 아직 HTML5를 지원하는 웹 브라우저가 많지 않기 때문에 그런 브라우저에 대한 배려를 잊지 말아야 하는 다는 점입니다. 

 마지막으로 Java Script에서 오디오를 제어하고 싶을 때는

<audio id="player" src="vincent.mp3"></audio>
<div>
   <button onclick="document.getElementById('player').play()">Play</button>
   <button onclick="document.getElementById('player').pause()">Pause</button>
   <button onclick="document.getElementById('player').volume += 0.1">Vol+ </button>
    <button onclick="document.getElementById('player').volume -= 0.1">Vol- </button>
</div>


와 같이 하시면 됩니다.


김영욱 iwinkey@hotmail.com

현재 한국마이크로소프트에서 Evangelist로 근무하고 있으며 국내 유수의 대기업 프로젝트에 참여했던 경험과 Microsoft MVP로 다년간 활동했습니다.
올해는 컨슈머와 관련된 앱을 만드는 다양한 업체들을 발굴하고 지원하는 일을 맡고 있습니다.


HTML5 강좌 전체 목록
  1. HTML5 DocType의 정의
  2. HTML5 Header stuff
  3. Audio
  4. Video
  5. Canvas
    Canvas: Rectangle
    Canvas: Shadow
    Canvas: Path
    Canvas: Image
    Canvas: Text
  6. Web form 2.0
    Input Attr: Placeholder
    Input Attr: Autofocus
    Input Attr: Required field
    Input Attr: DataList
    Input Type: Search
    Input Type: Email, URL, Phone
    Input Type: Range
    Input Type: Number
    Input Type: Date
    Input Type: Color
  7. Towards Semantic Web
    Semantic <mark>
    Semantic <time>
    Semantic <meter>
    Semantic <progress>
    Semantic <section>
    Semantic <header>
    Semantic <footer>
    Semantic <nav>
    Semantic <article>
    Semantic <aside>
저작자 표시 변경 금지
신고