Spielen Sie MP3-Medien mit phonegap/Cordova
Mein problem:
Ich benutze den Media Klasse von Cordova.
Die MP3-Datei nur einmal gespielt (das erste mal).
Code:
Fügen Sie diesen code in der Cordova-Starter-Projekt zu reproduzieren mein problem:
var playCounter = 0;
function playMP3(){
console.log("playMP3() counter " + playCounter);
var my_media = new Media("app/www/test.mp3");//ressource buildAction == content
my_media.play();
playCounter++;
}
[...]
<p onclick="playMP3();">Click to Play MP3</p>
VS output:
[...]
GapBrowser_Navigated :: /app/www/index.html
'UI Task' (Managed): Loaded 'System.ServiceModel.Web.dll'
'UI Task' (Managed): Loaded 'System.ServiceModel.dll'
Log:"onDeviceReady. You should see this message in Visual Studio's output window."
'UI Task' (Managed): Loaded 'Microsoft.Xna.Framework.dll'
Log:"playMP3() counter 0"
'UI Task' (Managed): Loaded 'System.SR.dll'
Log:"media on status :: {\"id\": \"fa123123-bc55-a266-f447-8881bd32e2aa\", \"msg\": 1, \"value\": 1}"
A first chance exception of type 'System.ArgumentException' occurred in mscorlib.dll
Log:"media on status :: {\"id\": \"fa123123-bc55-a266-f447-8881bd32e2aa\", \"msg\": 1, \"value\": 2}"
Log:"media on status :: {\"id\": \"fa123123-bc55-a266-f447-8881bd32e2aa\", \"msg\": 2, \"value\": 2.141}"
Log:"media on status :: {\"id\": \"fa123123-bc55-a266-f447-8881bd32e2aa\", \"msg\": 1, \"value\": 4}"
Log:"playMP3() counter 1"
A first chance exception of type 'System.ArgumentException' occurred in mscorlib.dll
A first chance exception of type 'System.IO.IOException' occurred in mscorlib.dll
A first chance exception of type 'System.IO.IsolatedStorage.IsolatedStorageException' occurred in mscorlib.dll
Log:"media on status :: {\"id\": \"2de3388c-bbb6-d896-9e27-660f1402bc2a\", \"msg\": 9, \"value\": 5}"
Meine Config:
- cordova-1.6.1.js
- Lumia 800
- WP 7.5 (7.10.7740.16)
WorkAround (Art):
- Desaktivieren Sie die app (den Bildschirm auszuschalten)
- reaktivieren der app (schalten Sie den Bildschirm)
- -> Sie erhalten eine weitere Chance.
Jede Hilfe ist willkommen, da ich gesperrt bin auf diesem seit Tagen, und ich fand keine nützliche information überall.
Auch, Können Sie mir sagen, ob dieser code funktioniert auf Ihrem config ?
.
.
.
Update: fügen Sie einen demo-code, Cordova 1.8.0rc1
mithilfe einer globalen var. Halten Sie die Instanz am Leben.
Ergebnis
- Die test2.mp3 gespielt wird, und kann die Wiedergabe in Ordnung.
- den test.mp3 ist nicht überhaupt gespielt hat.
- Es ist die erste Datei, die Sie spielen, das wird funktionieren.
Code
function onDeviceReady()
{
document.getElementById("welcomeMsg").innerHTML += "Cordova is ready! version=" + window.device.cordova;
console.log("onDeviceReady. You should see this message in Visual Studio's output window.");
my_media = new Media("app/www/test.mp3");//ressource buildAction == content
my_media2 = new Media("app/www/test2.mp3");//ressource buildAction == content
}
var playCounter = 0;
var my_media = null;
function playMP3(){
console.log("playMP3() counter " + playCounter);
my_media.play();
playCounter++;
}
var my_media2 = null;
function playMP32(){
console.log("playMP32() counter " + playCounter);
my_media2.play();
playCounter++;
}
</script>
[...]
<p onclick="playMP3();">Click to Play MP3</p>
<p onclick="playMP32();">Click to Play MP3 2</p>
VS output:
Log:"onDeviceReady. You should see this message in Visual Studio's output window."
INFO: startPlayingAudio could not find mediaPlayer for 71888b14-86fe-4769-95c9-a9bb05d5555b
Log:"playMP32() counter 0"
INFO: startPlayingAudio could not find mediaPlayer for 71888b14-86fe-4769-95c9-a9bb05d5555b
Log:"playMP32() counter 1"
Log:"playMP3() counter 2"
INFO: startPlayingAudio could not find mediaPlayer for b60fa266-d105-a295-a5be-fa2c6b824bc1
A first chance exception of type 'System.ArgumentException' occurred in System.Windows.dll
Error: El parámetro es incorrecto.
Log:"playMP32() counter 3"
INFO: startPlayingAudio could not find mediaPlayer for 71888b14-86fe-4769-95c9-a9bb05d5555b
.
.
.
Update: Cordova-2.0.0
Ich die aktualisierten Apache bug-report mit einem Testfall für die 2.0.0.
Kann jemand reproduzieren ?
link zu bug-Bericht:
https://issues.apache.org/jira/browse/CB-941
- Ich habe versucht, mit die Letzte version (1.8 rc1) von GitHub. Gleiche problem.
- Hinweis: das problem ist das gleiche mit dem 1.8, aber die Fehler sind differents.
- Wenn Sie kümmern sich um die Ausgabe habe ich davon berichtet, das von Apache : issues.apache.org/jira/browse/CB-941
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich sehe, Sie sind immer ein IsolatedStorageException auf das zweite klicken, was macht mich denken, dass die Datei offen gehalten wird durch die erste
Media
Instanz, die verhindert, dass Sie wieder zugegriffen.Schlage ich vor, um sicherzustellen, dass Sie entweder nur eine Instanz von
Media
pro-Datei oder sehen Sie ob es einen Weg gibt, Sie zu entsorgen die alte Instanz der ersten.Hier ist was ich versuchen würde (aber das habe ich noch nicht getestet):
fast vergessen ... das funktioniert für meine Zwecke. Hoffe es hilft 😉
WP7.5/Cordova 1.9.0
VORAUSSETZUNG: funktioniert Nur mit .wav-Dateien soweit ich weiß. Ich hatte meine konvertieren .mp3-Dateien, wie Sie werfen hässliche Ausnahmen.
PLUGIN:C#:
Javascript:Plugin:
Javascript:Nutzung:
Natürlich, die Position Ihrer Datei (www - /audio -/), Namen (Datei1, etc.) und Referenznamen (item1, etc) sind, was Sie wollen. Wie bei den meisten, viele Möglichkeiten zur Verbesserung dieser code...fühlen Sie sich frei. Mein use-case vor und lädt fünf .wav-Dateien reichen in der Größe von 28k - 364k und spielt Sie den ganzen Benutzer Spiel spielen.
Ich bin nicht sicher, es ist die richtige Antwort, da ich es nicht ausprobiert, aber halte es wie ein brain-storming.
erstellen Sie zuerst Ihre audio mit
var my_media = new Media(src, onSuccess, onError);
ctor und auf Erfolg nur spielen und auf Fehler versuchen Sie zunächst, es zu veröffentlichen mitmedia.release
code.Gut, wenn Sie wissen, eine andere Veranstaltung oder Aktion zu lösen, es wäre mehr angemessen.
Edit : ich habe gerade bemerkt es, Sie nicht mit
stop
für Medien können Sie auch versuchen, es zu benutzen, wenn es erforderlich ist, zum Beispiel Anfang derplayMP3()
wenn die Medien nicht null zu stoppen versuchen Sie es zuerst.Cheers.
Ich denke, dass das Problem vielleicht mit der Einschränkung, dass Silverlight kann nur ein Medien-Instanz pro Seite...und da PG/Cordova ist im wesentlichen ein single-page-webBrowser-Instanz, kann es nur ein Medien-Instanz. Ich bin Herumspielen mit dem Bau eines XNA-SoundEffect-plugin um dieses Problem.
war ein bug Cordova
https://issues.apache.org/jira/browse/CB-941
gelöst purpulecabbage in seinem repo von gitHub. siehe Kommentar auf bug-report.