跨浏览器 HTML5 音频播放器
Cross-browser HTML5 audio player
我正在使用 audio
标签播放 wav
音频,我的 url 是由 URL.createObjectURL()
生成的,而 url 就像 blob:http://localhost/9fa2ef06-ade6-4027-89f8-06cd2c176405
由于 url 没有扩展名,我对 safari 有一些疑问
以下代码适用于 chrome 而不适用于 safari(音频播放器已禁用)
<audio src="MY_BLOB_URL" type="audio/wav">
</audio>
以下代码适用于 safari,不适用于 chrome
<audio controls>
<source src="MY_BLOB_URL" type="audio/wav">
</audio>
我尝试了如下奇怪的代码,但找不到任何在两种浏览器上都能正常工作的方法
<audio src="MY_BLOB_URL" type="audio/wav">
<source src="MY_BLOB_URL" type="audio/wav">
</audio>
这是怎么回事?我怎样才能使用单一代码获得跨浏览器 HTML5 音频播放器?
我已经在 Windows PC 上使用 Chrome、Edge 和 Firefox 测试了以下代码。
希望它也适用于 Safari。
PS:对于未来的读者,此代码也适用于 MP3 blob(设置为 accept=".mp3"
)。
<!DOCTYPE html>
<html><head> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> </head>
<body>
<div style="z-index: 1; overflow:hidden; position: absolute; top: 100px; left: 50px">
<audio id="tag_Audio1" controls>
<source type="audio/wav">
</audio>
</div>
<br><br><br><br>
<div style="z-index: 1; overflow:hidden; position: absolute; top: 10px; left: 50px">
<p> Choose an WAV file...</p>
<input type="file" id="choose_media" accept=".wav" />
</div>
<script>
var file; var reader;
var tmpElement; //# is reference to aTag for holding image content.
var file_Blob; //# is reference to file BLOB (data of selected file).
const myAudio = document.getElementById("tag_Audio1");
document.getElementById("choose_media").addEventListener("change", onFile_Selected, false);
function onFile_Selected(evt)
{
file = evt.target.files[0]; //# access to selected file
reader = new FileReader();
reader.readAsDataURL(file); //# load selected file as Blob
reader.addEventListener("loadend", onFile_Loaded, false);
}
function onFile_Loaded(evt)
{
if (evt.target.readyState == FileReader.DONE)
{
//# remove any current SRC
myAudio.removeAttribute("src");
//# create blob
file_Blob = (window.URL || window.webkitURL).createObjectURL(file);
//# apply blob & test play
myAudio.setAttribute("src", file_Blob);
myAudio.load();
myAudio.play();
}
}
</script>
</body>
</html>
我正在使用 audio
标签播放 wav
音频,我的 url 是由 URL.createObjectURL()
生成的,而 url 就像 blob:http://localhost/9fa2ef06-ade6-4027-89f8-06cd2c176405
由于 url 没有扩展名,我对 safari 有一些疑问
以下代码适用于 chrome 而不适用于 safari(音频播放器已禁用)
<audio src="MY_BLOB_URL" type="audio/wav">
</audio>
以下代码适用于 safari,不适用于 chrome
<audio controls>
<source src="MY_BLOB_URL" type="audio/wav">
</audio>
我尝试了如下奇怪的代码,但找不到任何在两种浏览器上都能正常工作的方法
<audio src="MY_BLOB_URL" type="audio/wav">
<source src="MY_BLOB_URL" type="audio/wav">
</audio>
这是怎么回事?我怎样才能使用单一代码获得跨浏览器 HTML5 音频播放器?
我已经在 Windows PC 上使用 Chrome、Edge 和 Firefox 测试了以下代码。
希望它也适用于 Safari。
PS:对于未来的读者,此代码也适用于 MP3 blob(设置为 accept=".mp3"
)。
<!DOCTYPE html>
<html><head> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> </head>
<body>
<div style="z-index: 1; overflow:hidden; position: absolute; top: 100px; left: 50px">
<audio id="tag_Audio1" controls>
<source type="audio/wav">
</audio>
</div>
<br><br><br><br>
<div style="z-index: 1; overflow:hidden; position: absolute; top: 10px; left: 50px">
<p> Choose an WAV file...</p>
<input type="file" id="choose_media" accept=".wav" />
</div>
<script>
var file; var reader;
var tmpElement; //# is reference to aTag for holding image content.
var file_Blob; //# is reference to file BLOB (data of selected file).
const myAudio = document.getElementById("tag_Audio1");
document.getElementById("choose_media").addEventListener("change", onFile_Selected, false);
function onFile_Selected(evt)
{
file = evt.target.files[0]; //# access to selected file
reader = new FileReader();
reader.readAsDataURL(file); //# load selected file as Blob
reader.addEventListener("loadend", onFile_Loaded, false);
}
function onFile_Loaded(evt)
{
if (evt.target.readyState == FileReader.DONE)
{
//# remove any current SRC
myAudio.removeAttribute("src");
//# create blob
file_Blob = (window.URL || window.webkitURL).createObjectURL(file);
//# apply blob & test play
myAudio.setAttribute("src", file_Blob);
myAudio.load();
myAudio.play();
}
}
</script>
</body>
</html>