オーディオファイルは、HTML5でビデオと同様に簡単に埋め込むことができます。 HTML5では、そのためにaudio
という独自の要素が用意されています。
<audio src="song.mp3"> ブラウザはこのaudio要素をサポートしていません。 </audio>
audio
要素にはsrc
属性を介して再生するファイルの名前が割り当てられます。ただし、ファイルはまだ再生されていません。そのためにはコントロール要素が必要です。
コントロール要素を表示するには、audio
要素にcontrols
属性を割り当てます。
<audio src="song.mp3" controls> ブラウザはこのaudio要素をサポートしていません。 </audio>
ブラウザ内では、次のように表示されるはずです:
controls
がない場合、audio
要素は表示されません。自分でJavaScriptを使って独自のコントロール要素を追加する場合には、属性を省略することが有用です。audio
要素の使用もまた問題があります。問題の原因はやはり、それぞれ異なるフォーマットをサポートしているブラウザです。次の表では、今現在の各ブラウザがどのフォーマットをサポートしているかを示しています。
ブラウザ | MP3 | OGG | WAV | AU/SND | AIF |
Firefox | いいえ | はい | はい | いいえ | いいえ |
Safari | はい | いいえ | はい | はい | はい |
Chrome | はい | はい | いいえ | いいえ | いいえ |
Opera | いいえ | はい | はい | はい | いいえ |
では、何をすればいいのでしょうか?audio
要素では、さまざまなフォーマットを指定するための追加のsource
要素を定義することができます。例:
<audio controls> <source src="song.mp3"> <source src="song.ogg"> </audio>
src
属性には、異なる形式のファイルが割り当てられます。controls
以外にも、audio
要素には追加の属性があります。その1つがautoplay
です。
<audio controls autoplay> <source src="song.mp3"> <source src="song.ogg"> </audio>
この属性を設定すると、オーディオファイルが読み込まれると自動的に再生が開始されます。通常はこの属性を設定しないで、訪問者にオーディオファイルの再生タイミングを自由に選択させるべきです。
さらに興味深いのはloop
属性です。この属性を設定すると、ファイルがループ再生されます。
ビデオの埋め込みと同様に、オーディオファイルにはtype
とmedia
の2つの属性があります。ここでも、該当するMIMEタイプやコーデックを指定できます。HTML5仕様にはtype
属性に対して次の典型的な設定がリストされています:
• type='audio/ogg; codecs=vorbis'
• type='audio/ogg; codecs=speex'
• type='audio/ogg; codecs=flac'
source
要素ではなく、audio
要素でのみこれらの属性を使用できることに注意してください。
Flash & Co. の埋め込み
Flashファイルは、以前のHTMLバージョンではembed
とobject
の組み合わせを使用して埋め込むことができました。その結果、非常に見栄えの悪い構文が生まれました。例えば、次のようになります:
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width="800" height="600"> <param name=movie value="intro.swf"> <param name=quality value=high> <embed src="intro.swf" quality=high pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="800" height="600"> </embed> </object>
これが、object
とembed
要素を通じた古典的な方法で、非常に長い間HTMLで使用されてきた方法です。
しかし、「古典的」という言葉でここを表現することは、W3Cによって過去に承認された方法であったことを意味しません。なぜなら、HTML 4ではInternet Explorerによって正しく解釈されたobject
要素が推奨された一方で、Netscape Navigatorはembed
要素を使用しました。この異なる解釈のため、object
とembed
要素の組み合わせが必要となりました。
HTML5では、アクティブコンテンツを埋め込むために公式にobject
とembed
の2つの要素が用意されています。embed
は、通常ブラウザプラグインが必要な非HTMLコンテンツの表示用のコンテナです。埋め込まれたコンテンツを表示するためには、通常ブラウザプラグインが必要です。
embed
を使用すると、例えばFlash動画を標準準拠で埋め込むことができます。以下はその見本です。どのように見えるかの例です:
<embed src="http://www.youtube.com/v/v1PgiBpTtao?fs=1&hl=de_DE" type="application/x-shockwave-flash" width="384" height="313" allowscriptaccess="always" allowfullscreen="true" />
embed
要素にはさまざまな属性を割り当てることができます。最も重要なのはもちろんsrc
属性です。なぜなら、そこで最終的に組み込むファイルを指定するからです。またtype
属性ではMIMEタイプが指定されます。
Flashの場合はapplication/x-shockwave-flash
となります。一方、LaTeXファイルを組み込みたい場合はapplication/x-latex
と記述します。組み込まれるファイルの幅と高さはwidth
とheight
で制御されます。
他にもHTML5には公式には属さない追加の属性があります。これらの属性により、使用されるプラグインを制御できます。前の例では、"Flash属性"のallowscriptaccess
とallowfullscreen
を使用して、スクリプトアクセスとフルスクリーンモードが可能であることが定義されています。同様に、Flash動画のクオリティを決定するquality
属性もあります。
<embed src="flash.swf" width="600" height="300" type="application/x-shockwave-flash" quality="high" />
object
要素
object
要素は、内容のコンテナとしてembed
と同様に機能します。ただし、embed
とは異なり、objectには3つの異なる内容モデルがあります。ブラウザが直接表示可能な画像であると認識すると、img
要素として扱います。参照されたオブジェクトがWebコンテンツである場合、その内容はiFrame内で表示されます。(iFrameについてはこのシリーズの後半で詳しく説明します)。他の内容の場合は、object
はembed
と同様に動作します。
以下の例は、object
要素を使用してFlash動画を組み込む方法を示しています。
<object type="application/x-shockwave-flash" data="http://www.youtube.com/v/BzYBY_9rnuA?version=3&hl=de_DE&rel=0" width="400" height="300"> <param name="allowscriptaccess" value="always" /> <param name="allowfullscreen" value="true" /> <p> In Ihrem Browser ist kein Flash-Plug-in vorhanden. </p> </object>
最後に、object
またはembed
を使用すべきかという問題があります。最初の見た目では、これら2つの要素はほぼ同じように見えます。実際、object
要素はembed
要素ができることはすべてできます。
コンテンツを組み込む場合(画像を除く)、通常はobject
要素を使うべきです。なぜなら、この要素は、組み込まれた要素が読み込めない場合に表示される代替コンテンツを指定できるからです。