Codeschnipsel: Audio-Wiedergabe

Willkommen!

Wenn du im Nexave-Forum mitmachen möchtest, schreib an community@nexave.de. Wir haben die Registrierungsfunktion in unserem Diskussionsforum nämlich deaktiviert, weil sich praktisch nur noch Spammer und Werbebots registriert haben. Per E-Mail sind wir dir gern behilflich, einen Account anzulegen.
  • Ich bin gerade dabei, ein paar APIs auszuprobieren und hänge an dem Problem, meinem Pre einen Ton entlocken zu wollen...
    Damit habe ich's versucht:


    Code
    button1Keypress: function(event, inSender) {
    		this.audioPlayer = new Audio();
    		var file = Mojo.appPath + "audio/ton1.wav";
    		this.audioPlayer.src = file;
    		this.audioPlayer.autoplay = false; 
    		playSound: function(){
    		this.audioPlayer.play();
    		},
    },


    Der Code ist in die "main-assistant.js" eingetragen und diese ist wiederum in "sources.json" verlinkt.
    Tut aber nicht. Liegt die nicht-erfolgende Audiowiedergabe am Emulator oder an mir?

  • Der Emulator kann kein Audio, du musst das am Pre testen. Wenn es noch nicht klappt sag nochmal Bescheid, ich hab es hinbekommen. Die Codeschnipsel für Audioobjects auf der Website sind übrigens fehlerhaft, das hatte mich Stunden gekostet...

  • Der Emulator kann kein Audio, du musst das am Pre testen.


    Ahja, dann kann ich ja lange herumfrickeln, wenn der Emulator stumm ist :cursing:


    Zitat

    Wenn es noch nicht klappt sag nochmal Bescheid, ich hab es hinbekommen. Die Codeschnipsel für Audioobjects auf der Website sind übrigens fehlerhaft, das hatte mich Stunden gekostet...


    Dann sage ich mal vorsorglich "Bescheid" - ich hab' den Code aus der API-Dokumentation entnommen. Wenn der buggy ist, wird wohl auch auf einem echten Pre nix zu hören sein :oh-je:


    (Ist momentan aber egal, weil ich meine Anwendung in Ares zusammengezimmert habe und die gerade nicht mehr als ipkg speichern kann :cursing: )

  • Ok, also ich hab es wie gesagt mit AudioObjects gemacht. Sieht bei dir eigentlich auch schon ganz gut aus.. Lass dir aber gesagt sein, die sind momentan wohl mit 1.3.1 noch ein wenig buggy.. lags etc. Hab ich persönlich noch nicht so gemerkt.


    In die sources.json folgendes in die eckigen Klammern:

    Code
    {"source": "/usr/palm/frameworks/media/media.js"}


    Dann in meinem Scene-Assistant rufe ich folgendes in der setup()-Methode auf:

    Code
    var re = Mojo.appPath + "audio/re.wav";
    	this.rePlayer = new Audio();
    	this.rePlayer.src = re;
    	if (this.rePlayer.palm) {
    		this.rePlayer.mojo.audioClass = "media";
    	}
    	this.rePlayer.autoplay = false;


    Dann wo du es brauchst:

    Code
    this.rePlayer.play();


    Kannst du natürlich auch in eine Funktion setzen und weiter mit rumbasteln, aber so sollte er zumindest etwas abspielen und du kannst testen. Ich mache das ganze übrigens mit Eclipse, geht schneller, auch das starten auf dem Pre, und Ares ist glaub ich eher für GUI-Arbeit geeigneter.

  • Hm.. ok also du hast das neueste SDK? Wo genau liegt deine Audio-Datei die du spielen willst? Wo genau rufst du die play()-Methode auf, vielleicht liegt da ja eher das Problem?


    Versuch doch einfach mal

    Code
    this.rePlayer.autoplay = false;

    auszukommentieren, dann sollte er es ja sofort spielen. Oder du setzt die play()-Methode mal an eine andere Stelle..

  • Hm.. ok also du hast das neueste SDK? Wo genau liegt deine Audio-Datei die du spielen willst? Wo genau rufst du die play()-Methode auf, vielleicht liegt da ja eher das Problem?


    Versuch doch einfach mal

    Code
    this.rePlayer.autoplay = false;

    auszukommentieren, dann sollte er es ja sofort spielen. Oder du setzt die play()-Methode mal an eine andere Stelle..


    War/ist ein Versuch in Ares. Die Audio-Dateien liegen in einem Unterverzeichnis (also "Mojo.appPath" + "sounds/blafasel.wav"). Die Play-Methode rufe ich in "main.assistant.js" auf:

    Code
    button1Keypress: function(event, inSender) {
    		this.audioPlayer = new Audio();
    		var file = Mojo.appPath + "sounds/blafasel.wav";
    		this.audioPlayer.src = file;
    		this.audioPlayer.autoplay = false;
    		playSound: function(){
    		this.audioPlayer.play();
    		}
    }


    Auskommentieren der autoplay-Zeile führt zum gleichen (negativen) Ergebnis :(

  • Ok, Hauptsache die wav-Datei liegt auch da wo du sie angegeben hast, also im "sounds"-Ordner direkt im app-Quellverzeichnis.


    Also es ist leider schwer ohne ganzen Quellcode den Fehler zu finden, der kann ja überall liegen. Ich vermute ihn gar nicht mal beim Audio-Aufruf selber sondern irgendwo in deinen Funktionen. Hast du das ganze mal debugged? Versuch doch wie gesagt mal das abspielen in deiner Setup-Methode vom Scene-Assisant, wenn das funktioniert kannst du von da aus weiter.


    Des Weiteren musst du die play()-Methode gar nicht unbedingt in einer Funktion haben, versuchs einfach erstmal ohne die "playSound"-Methode drum herum.

  • Wenn in "Mojo.appPath" der richtige Pfad übergeben wird, sollte zumindest das stimmen...
    Den Ares-Debugger krieg' ich nicht zum Laufen; wenn ich auf "on" klicke, erscheit ca. 1 Sekunde lang "running", dann wieder "disconnected".

  • Mein Problem scheint tiefer zu liegen; ein einfaches


    Code
    button1Tap: function(event, inSender) {
    this.Controller.StageController.pushScene('Credits');
    this.controller.setWindowOrientation("free"); 
    }


    funktoniert auch nicht :oh-nein:

  • Hm sorry ich fürchte dann kann ich dir erstmal nicht weiter helfen, außer der Versicherung dass mein oben geposteter Code Audio-Dateien abspielt. ich fürchte dann musst du an anderer Stelle auf Fehlersuche gehen. ich würde dafür allerdings dann tiefergehend eher Eclipse empfehlen, ich hab es zwar selbst noch nicht getestet, aber Ares ist ja in beta, da klappt vielleicht alles noch nicht so recht. Das Grundgerüst kannst du ja übernehmen.

  • Das Problem habe ich zwschenzeitlich lösen können. Audio-Wiedergabe geht ganz simpel - wenn man's weiß:


    Code
    Mojo.Controller.getAppController().playSoundNotification("media", "sounds/piep.wav");


    Mehr braucht's nicht :rolleyes:

  • Das Problem habe ich zwschenzeitlich lösen können. Audio-Wiedergabe geht ganz simpel - wenn man's weiß:


    Code
    Mojo.Controller.getAppController().playSoundNotification("media", "sounds/piep.wav");


    Mehr braucht's nicht :rolleyes:

    Also ich garantiere dass meins auch geht ;)


    Deine jetzige Lösung ist nicht ganz so flexibel und wäre für meine Zwecke ein Ressourcenverschwender (da quasi bei wiederholter Nutzung dauernd die src wieder neu gesetzt wird, und wer weiß was noch alles neu instanziiert wird), aber für einmaliges abspielen ist es sicher super und simpel :thumbup:

  • Mein Problem scheint tiefer zu liegen; ein einfaches


    Code
    button1Tap: function(event, inSender) {
    this.Controller.StageController.pushScene('Credits');
    this.controller.setWindowOrientation("free"); 
    }


    funktoniert auch nicht :oh-nein:


    Bei "this.Controller.StageController" hasst du ein großes "C" bei controller geschrieben. Deshalb funktioniert der pushScene Aufruf nicht.