我尝试播放mp3文件。如果我在本地网络服务器上更改文件的路径,则此方法有效,但如果我在Android设备上运行此操作,则不会播放声音,也不会显示错误。
我很不确定找不到mp3文件,但我仍然不知道如何修复它。
这是 Html
<body>
<audio id="successSound" src="/android_asset/www/sound/successSound.mp3" type="audio/mpeg" ></audio>
<audio id="errorSound" src="/android_asset/www/sound/errorSound.mp3" type="audio/mpeg" ></audio>
<!-- some more UI -->
</body>
这是 Javascript
document.getElementById('errorSound').play();
是文件结构
phonyapp
`-- www
`-- index.html
|-- sound
| |-- errorSound.mp3
| `-- successSound.mp3
|-- res
`-- spec
修改1
我试过
<audio id="successSound" src="sound/successSound.mp3" type="audio/mpeg" ></audio>
这适用于我本地网络服务器上的chrome,但不适用于Android。
我试过
<audio id="successSound" src="http://html5multimedia.com/media/sayHello.mp3" type="audio/mpeg" ></audio>
这很有用,但我需要播放本地文件
答案 0 :(得分:41)
HTML5 API提供的播放方法对于播放网络上可用的媒体文件非常有用。 Phonegap提供播放本地媒体文件的媒体插件。我检查了你的代码并通过进行以下更改成功播放了声音。请在最后检查。
1.将以下行添加到config.xml
<gap:plugin name="org.apache.cordova.media" />
2.更换index.html中的行
<button onclick="document.getElementById('successSound').play()">Play successSound local</button>
<button onclick="document.getElementById('errorSound').play()">Play errorSound local</button>
这些行
<button onclick="playAudio('successSound')">Play successSound local</button>
<button onclick="playAudio('errorSound')">Play errorSoundlocal</button>
3.将以下函数添加到js / index.js
function playAudio(id) {
var audioElement = document.getElementById(id);
var url = audioElement.getAttribute('src');
var my_media = new Media(url,
// success callback
function () { console.log("playAudio():Audio Success"); },
// error callback
function (err) { console.log("playAudio():Audio Error: " + err); }
);
// Play audio
my_media.play();
}
答案 1 :(得分:4)
使用此代码
<body>
<audio id="successSound" src="file:///android_asset/www/sound/successSound.mp3" type="audio/mpeg" ></audio>
<audio id="errorSound" src="file///android_asset/www/sound/errorSound.mp3" type="audio/mpeg" ></audio>
<!-- some more UI -->
</body>
答案 2 :(得分:0)
您是否尝试删除代码中的/android_asset/www/
部分?您的应用程序就像一个网站,它认为它的根目录是www文件夹本身。
编辑: 我会编辑评论。代码没有以某种方式显示。
答案 3 :(得分:0)
如果您使用的是本地文件,请尝试使用src="file:///yourpath/sayHello.mp3"
答案 4 :(得分:0)
我有同样的问题,最后让它工作,我的问题与我的媒体变量的范围有关。我按照以下方式工作:
(function () {
"use strict";
var media;
document.addEventListener('deviceready', onDeviceReady.bind(this), false);
function onDeviceReady() {
media = new Media("/android_asset/www/sounds/wat is je wens.mp3", null, function (e) {
alert('Media Error');
alert(JSON.stringify(e));
});
alert('deviceready')
};
function onStart() {
media.play();
alert('yay')
}
};
基本上我通过在onDeviceReady之外声明媒体变量的范围来确保它是全局的,但是在deviceready事件之前没有调用Media。
答案 5 :(得分:0)
`` // Audio player
//
var my_media = null;
var mediaTimer = null;
// Play audio
//
function playAudio(src) {
// Create Media object from src
my_media = new Media(src, onSuccess, onError);
// Play audio
my_media.play();
// Update my_media position every second
if (mediaTimer == null) {
mediaTimer = setInterval(function() {
// get my_media position
my_media.getCurrentPosition(
// success callback
function(position) {
if (position > -1) {
setAudioPosition((position) + " sec");
}
},
// error callback
function(e) {
console.log("Error getting pos=" + e);
setAudioPosition("Error: " + e);
}
);
}, 1000);
}
}
// onSuccess Callback
//
function onSuccess() {
console.log("playAudio():Audio Success");
}
function stopAudio() {
if (my_media) {
my_media.stop();
}
clearInterval(mediaTimer);
mediaTimer = null;
}
// onError Callback
//
function onError(error) {
}
// Set audio position
//
function setAudioPosition(position) {
document.getElementById('audio_position').innerHTML = position;
}