[Bp2_2014w] javax.sound.sampled / Problem

Rony G. Flatscher Rony.Flatscher at wu.ac.at
Sat Jan 24 17:46:29 CET 2015


Lieber Herr Bintener,

Sie senden eine ooRexx-Nachricht an das Java-Objekt, aber auf der ooRexx-Seite wird vorher diese
Methode gefunden und ausgeführt! Also, wenn dies geschieht, kommt es nicht zu einer Weiterleitung
der Nachricht an Java, wie dies bei Ihnen bei "clip~start" der Fall ist. (Die Fehlermeldung, die Sie
erhalten, kommt von ooRexx, genauer von der Methode "start" in der ooRexx-Wurzelklasse ".Object".)

Wann immer ooRexx-Nachrichten an ein Java-Proxies geschickt werden, die z.B. in der
ooRexx-Wurzelklasse .Object gefunden werden (wie bei "start"), dann verwenden Sie stattdessen die
dafür erstellte Methode namens "bsf.dispatch(name_der_methode[, arg1, ..])". Stattdessen machen Sie
es so:

    clip~bsf.dispatch("start")    -- die Nachricht "start" soll direkt ans Java-Objekt geschickt werden

Vielleicht ist das eine gute Gelegenheit, noch einmal einen Blick auf das von mir ausgeteilte
A3-Referenzblatt zu werfen, wo Sie unter "BSF's instance Methods" diese Methode finden (sie ist ein
Synonym für die Instanzmethode "bsf.invoke").

Es ist die gleiche Problemstellung, die wir schon bei OLE kennengelernt haben (dort z.B. die
Nachrichten  "start", "class", für die es in der Wurzelklasse .Object Methoden gibt, die daher
gefunden und ausgeführt werden).

Mit freundlichem Gruß

Rony G. Flatscher



On 24.01.2015 17:30, Max Bintener wrote:
> Sehr geehrter Herr Prof. Dr. Flatscher,
>
> vielen Dank für den Hinweis! das Importieren der Klasse "javax.sound.sampled.DataLine$Info" hat
> nun problemlos funktioniert.
>
> Jedoch erscheint beim Versuch die Audiodatei abzuspielen erneut eine Fehlermeldung. Vermutlich
> habe ich die Zeile aus dem oben angeführten Java-Skript   (DataLine.Info info = new
> DataLine.Info(Clip.class, audioFormat)) falsch übersetzt und ein Abspielen der Audiodatei ist
> deswegen nicht möglich. 
>
> Hat vielleicht jemand den entscheidenden Tipp wie diese Zeile richtig zu Übersetzen ist?
>
> Hier das aktuelle Rexx-Skript:
>
> sound=.bsf~bsf.import("javax.sound.sampled.Clip")
> sound2=.bsf~bsf.import("javax.sound.sampled.AudioInputStream")
> sound3=.bsf~bsf.import("javax.sound.sampled.AudioSystem")
> sound4=.bsf~bsf.import("javax.sound.sampled.DataLine")
> sound5=.bsf~bsf.import("javax.sound.sampled.LineEvent")
> sound6=.bsf~bsf.import("javax.sound.sampled.LineListener")
> sound7=.bsf~bsf.import("javax.sound.sampled.DataLine$Info")
> file=.bsf~bsf.import("java.io.File")
>
>
> audioFile=file~new("C:\WINDOWS\Media\tada.wav")
>
> AudioInputStream=sound3~getAudioInputStream(audioFile)
>
> format=AudioInputStream~getFormat()
>
> info=sound7~new(sound, format)
>
> /* in der Java7-Dokumentation findet man diese Zeile(info=...) als : " *DataLine.Info
> <http://docs.oracle.com/javase/7/docs/api/javax/sound/sampled/DataLine.Info.html#DataLine.Info%28java.lang.Class,%20javax.sound.sampled.AudioFormat%29>*(Class
> <http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html><?> lineClass, AudioFormat
> <http://docs.oracle.com/javase/7/docs/api/javax/sound/sampled/AudioFormat.html> format)"
>    in dem oben angeführten Java-Skript lautet diese Zeile: " DataLine.Info info = new
> DataLine.Info(Clip.class, audioFormat)" */ 
>
> clip=sound3~getLine(info)
>
> clip~open(AudioInputStream)
>
> clip~start()
>
> clip~close()
>
> AudioInputStream~close()
>
> ::requires BSF.CLS
>
>
> ------------------------------------------------
>
> _Fehlercode_:
>
> Code Is Executing 
>        [ADDITIONAL]: [2] item(s)
>                          [BSF4ooRexx/routine/BSF(), error 3: Java exception occurred:
> [org.rexxla.bsf.engines.rexx.RexxException: BSF4ooRexx/routine/jniRexxRunProgram(), error 9:
>        *-* Compiled method START with scope "Object"
> Error 93 running testcode.code line 42:  Incorrect call to method
> Error 93.903:  Missing argument in method; argument 1 is required]]
>                          [org.rexxla.bsf.engines.rexx.RexxException at 16e3a7e]
>              [CODE]: [40.900]
>         [CONDITION]: [SYNTAX]
>       [DESCRIPTION]: []
>         [ERRORTEXT]: [Incorrect call to routine]
>       [INSTRUCTION]: [SIGNAL]
>           [MESSAGE]: [BSF4ooRexx/routine/BSF(), error 3: Java exception occurred:
> [org.rexxla.bsf.engines.rexx.RexxException: BSF4ooRexx/routine/jniRexxRunProgram(), error 9:
>        *-* Compiled method START with scope "Object"
> Error 93 running testcode.code line 42:  Incorrect call to method
> Error 93.903:  Missing argument in method; argument 1 is required]]
>           [PACKAGE]: [a Package]
>          [POSITION]: [895]
>           [PROGRAM]: [C:\Program Files (x86)\BSF4ooRexx\utilities\ooRexxTry.rxj]
>        [PROPAGATED]: [1]
>                [RC]: [40]
>       [STACKFRAMES]: [5] item(s)
>                          [       *-* Compiled routine BSF]
>                          [  1538 *-*   res=BSF( "invoke",
> "org.rexxla.bsf.engines.rexx.RexxEngine at 17d03c5", "APPLY" , a.1 , a.2 , a.3 , a.4 , a.5 , a.6 )]
>                          [  1538 *-* interpret code ")"       -- execute this dynamically created
> Rexx string]
>                          [   895 *-*      
> .mm.dir~rexxEngine~apply("testcode.code",0,0,.mm.dir~code_string,.nil,.nil)]
>                          [   954 *-* exec~run(arg_array)]
>         [TRACEBACK]: [5] item(s)
>                          [       *-* Compiled routine BSF]
>                          [  1538 *-*   res=BSF( "invoke",
> "org.rexxla.bsf.engines.rexx.RexxEngine at 17d03c5", "APPLY" , a.1 , a.2 , a.3 , a.4 , a.5 , a.6 )]
>                          [  1538 *-* interpret code ")"       -- execute this dynamically created
> Rexx string]
>                          [   895 *-*      
> .mm.dir~rexxEngine~apply("testcode.code",0,0,.mm.dir~code_string,.nil,.nil)]
>                          [   954 *-* exec~run(arg_array)]
>
>
>
>
>
> Besten Dank und mit freundlichen Grüßen,
>
> Max und Geo (G05)
>
>
> Am 24. Januar 2015 um 15:17 schrieb Rony G. Flatscher <Rony.Flatscher at wu.ac.at
> <mailto:Rony.Flatscher at wu.ac.at>>:
>
>     Liebe Studierende,
>
>     nachdem das hier zutage getrene Problem wahrscheinlich für niemanden wirklich lösbar ist,
>     gleich ein Feedback von mir:
>
>       * versuchen Sie statt dem Namen "javax.sound.sampled.DataLine.Info
>         <http://javax.sound.sampled.DataLine.Info>" den Namen "javax.sound.sampled.DataLine$Info"
>           o Hintergrund: in neueren Java-Versionen ist es möglich, dass Klassennamen in der
>             Dokumentation einen Punkt beinhalten, der aber im kompilierten Format verboten ist,
>             sodass der Java-Compiler den Punkt im Namen durch ein $-Zeichen ersetzt, somit wird
>             aus "DataLine.Info" nach dem Kompilieren die Klasse "DataLine$Info" (hab es gerade in
>             den Java7-Klassenbibliotheken nachgeprüft)
>
>       * noch eine Anmerkung, die Ihnen vielleicht graue Haare erspart: verwenden Sie in Rexx nie
>         doppelte Backslashes, das ist in C-basierten Sprachen und in Java notwendig, da dort ein
>         Backslash eine besondere Bedeutung hat; um einen Backslash als Backslash in einer
>         Zeichenkette zu definieren, müssen C-/Java-Programmierer zwei Backslashes verwenden.
>         Rexx-Programmierer müssen das nicht
>           o Also schreiben Sie statt |"C:\\WINDOWS\\Media\\tada.wav" in Rexx
>             "|||C:\WINDOWS\Media\tada.wav"||
>
>     Bitte lassen Sie es uns wissen, ob das geholfen hat.
>
>     Mit freundlichem Gruß
>
>     Rony G. Flatscher
>
>
>
>
>     On 24.01.2015 14:49, Max Bintener wrote:
>>     Hallo liebe Kollegen, liebe Kolleginnen,
>>
>>     ein Teil unseres Projektes soll die Wiedergabe von Soundelementen beinhalten.
>>
>>     Die von uns benutzte Klasse ist "javax.sound.sampled"
>>
>>     Wir haben auch ein entsprechendes Script ( in Java geschrieben) gefunden was die Wiedergabe
>>     von Sounds ermöglicht und wie folgt aussieht:
>>
>>     |*import *java.io.File;
>>
>>     *import *javax.sound.sampled.AudioInputStream;
>>     *import *javax.sound.sampled.AudioSystem;
>>     *import *javax.sound.sampled.Clip;
>>     *import *javax.sound.sampled.DataLine;
>>     *import *javax.sound.sampled.LineEvent;
>>     *import *javax.sound.sampled.LineListener;
>>
>>     /**
>>      * An example of loading and playing a sound using a Clip. This complete class
>>      * isn't in the book ;)
>>      */
>>     *public class *ClipTest {
>>
>>       *public static **void *main(String[] args) *throws *Exception {
>>
>>         // specify the sound to play
>>         // (assuming the sound can be played by the audio system)
>>         File soundFile = *new *File("||C:\\WINDOWS\\Media\\tada.wav");
>>         AudioInputStream sound = AudioSystem.getAudioInputStream(soundFile);
>>
>>         // load the sound into memory (a Clip)
>>         DataLine.Info info = |
>>     |*new D*ataLine.Info(Clip.class, |sound.getFormat());
>>     |    Clip clip = (Clip) AudioSystem.getLine(info);
>>         clip.open(sound);
>>
>>         // due to bug in Java Sound, explicitly exit the VM when
>>         // the sound has stopped.
>>         clip.addLineListener(*new *LineListener() {
>>           *public **void **update*(LineEvent event) {
>>             *if *(event.getType() == LineEvent.Type.STOP) {
>>               event.getLine().close();
>>               System.exit(0);
>>             }
>>           }
>>         });
>>
>>         // play the sound clip
>>         clip.start();
>>       }
>>     }        |
>>
>>
>>
>>
>>
>>     ------------------------------
>>
>>     Wir haben nun versucht dieses Script zu übersetzen um es in BSF4oorexx zu nutzen.
>>     Die verschiedenen Klassen konnten wir importieren und ein Soundelement anlegen, auf das wir
>>     zugreifen wollen. (C:\\WINDOWS\\Media\\tada.wav    -----> eine auf Windows gespeicherte
>>     Sounddatei.)
>>     Jedoch ist nun ein Problem bei der Übersetzung folgender Java-Zeile aufgetaucht: 
>>
>>     DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat)
>>
>>     beim Versuch die Klasse javax.sound.sampled.DataLine.Info
>>     <http://sound.sampled.DataLine.Info> zu importieren, erhalten wir eine Fehlermeldung, dass
>>     diese Klasse nicht gefunden werden kann, obwohl sie eigentlich im JRE enthalten sein müsste.
>>
>>     |
>>     |||
>>     |Hier unser bisheriger Versuch:|
>>     |
>>     sound=.bsf~bsf.import("javax.sound.sampled.Clip")
>>     sound2=.bsf~bsf.import("javax.sound.sampled.AudioInputStream")
>>     sound3=.bsf~bsf.import("javax.sound.sampled.AudioSystem")
>>     sound4=.bsf~bsf.import("javax.sound.sampled.DataLine")
>>     sound5=.bsf~bsf.import("javax.sound.sampled.LineEvent")
>>     sound6=.bsf~bsf.import("javax.sound.sampled.LineListener")
>>     sound7=.bsf~bsf.import("javax.sound.sampled.DataLine.Info
>>     <http://javax.sound.sampled.DataLine.Info>")
>>     file=.bsf~bsf.import("java.io.File")
>>
>>     |
>>     |audioFile=file~new("C:\\WINDOWS\\Media\\tada.wav")
>>
>>     AudioInputStream=sound3~getAudioInputStream(audioFile)
>>
>>     info=sound7~new(sound, AudioInputStream~getFormat())
>>
>>     clip= sound3~getLine(info)
>>     clip~open(AudioInputStream)
>>     clip~start()
>>     clip~stop()
>>     clip~close()
>>
>>
>>     ::requires BSF.CLS
>>     |
>>     |
>>     ...
>>
>>     |
>>     |
>>     |
>>     |Dabei erhalten wir folgende Fehlermeldung:
>>
>>     Code Is Executing 
>>            [ADDITIONAL]: [2] item(s)
>>                              [BSF4ooRexx/routine/BSF(), error 3: Java exception occurred:
>>     [org.rexxla.bsf.engines.rexx.RexxException: BSF4ooRexx/routine/jniRexxRunProgram(), error 9:
>>            *-* Compiled routine BSF
>>     Error 40 running testcode.code line 17:  Incorrect call to routine
>>     Error 40.900:  BSF4ooRexx/routine/BSF(), error 3: Java exception occurred:
>>     [org.apache.bsf.BSFException: BSF4ooRexx subfunction "loadClass": class
>>     'javax.sound.sampled.DataLine.Info <http://javax.sound.sampled.DataLine.Info>', threw
>>     exception: [org.apache.bsf.BSFException: [EngineUtils.loadClass()] unable to load class
>>     'javax.sound.sampled.DataLine.Info <http://javax.sound.sampled.DataLine.Info>']]]]
>>                              [org.rexxla.bsf.engines.rexx.RexxException at 114069b]
>>                  [CODE]: [40.900]
>>             [CONDITION]: [SYNTAX]
>>           [DESCRIPTION]: []
>>             [ERRORTEXT]: [Incorrect call to routine]
>>           [INSTRUCTION]: [SIGNAL]
>>               [MESSAGE]: [BSF4ooRexx/routine/BSF(), error 3: Java exception occurred:
>>     [org.rexxla.bsf.engines.rexx.RexxException: BSF4ooRexx/routine/jniRexxRunProgram(), error 9:
>>            *-* Compiled routine BSF
>>     Error 40 running testcode.code line 17:  Incorrect call to routine
>>     Error 40.900:  BSF4ooRexx/routine/BSF(), error 3: Java exception occurred:
>>     [org.apache.bsf.BSFException: BSF4ooRexx subfunction "loadClass": class
>>     'javax.sound.sampled.DataLine.Info <http://javax.sound.sampled.DataLine.Info>', threw
>>     exception: [org.apache.bsf.BSFException: [EngineUtils.loadClass()] unable to load class
>>     'javax.sound.sampled.DataLine.Info <http://javax.sound.sampled.DataLine.Info>']]]]
>>               [PACKAGE]: [a Package]
>>              [POSITION]: [895]
>>               [PROGRAM]: [C:\Program Files (x86)\BSF4ooRexx\utilities\ooRexxTry.rxj]
>>            [PROPAGATED]: [1]
>>                    [RC]: [40]
>>           [STACKFRAMES]: [5] item(s)
>>                              [       *-* Compiled routine BSF]
>>                              [  1538 *-*   res=BSF( "invoke",
>>     "org.rexxla.bsf.engines.rexx.RexxEngine at 1558dc", "APPLY" , a.1 , a.2 , a.3 , a.4 , a.5 , a.6 )]
>>                              [  1538 *-* interpret code ")"       -- execute this dynamically
>>     created Rexx string]
>>                              [   895 *-*      
>>     .mm.dir~rexxEngine~apply("testcode.code",0,0,.mm.dir~code_string,.nil,.nil)]
>>                              [   954 *-* exec~run(arg_array)]
>>             [TRACEBACK]: [5] item(s)
>>                              [       *-* Compiled routine BSF]
>>                              [  1538 *-*   res=BSF( "invoke",
>>     "org.rexxla.bsf.engines.rexx.RexxEngine at 1558dc", "APPLY" , a.1 , a.2 , a.3 , a.4 , a.5 , a.6 )]
>>                              [  1538 *-* interpret code ")"       -- execute this dynamically
>>     created Rexx string]
>>                              [   895 *-*      
>>     .mm.dir~rexxEngine~apply("testcode.code",0,0,.mm.dir~code_string,.nil,.nil)]
>>                              [   954 *-* exec~run(arg_array)]
>>
>>
>>
>>     |
>>     |Hat jemand von euch eine Idee wie wir diese Klasse trotzdem importieren können, bzw. weiß
>>     jemand wie die Zeile "DataLine.Info info = new DataLine.Info(SourceDataLine.class,
>>     audioFormat)" richtig in Rexx übersetzt wird?|
>>     |Oder hat vlt jemand einen ganz anderen Lösungsansatz gefunden?
>>
>>     |
>>     Besten Dank und mit freundlichen Grüßen,
>>
>>     Max und Geo (G05)
>>     |
>>     |
>>     |
>>
>>
>>
>>
>>
>>     |
>>
>>
>>
>>
>>
>>     _______________________________________________
>>     Bp2_2014w mailing list
>>     Bp2_2014w at alice.wu-wien.ac.at <mailto:Bp2_2014w at alice.wu-wien.ac.at>
>>     http://alice.wu-wien.ac.at/mailman/listinfo/bp2_2014w
>
>     -- 
>     --
>     __________________________________________________________________________________
>
>     Prof. Dr. Rony G. Flatscher
>     Department Informationsverarbeitung und Prozessmanagement
>     Institut für Betriebswirtschaftslehre und Wirtschaftsinformatik
>     D2-C 2.086
>     WU Wien
>     Welthandelsplatz 1
>     A-1020  Wien/Vienna, Austria/Europe
>
>     http://www.wu.ac.at
>     __________________________________________________________________________________
>
>
>
>
>
>
>     _______________________________________________
>     Bp2_2014w mailing list
>     Bp2_2014w at alice.wu-wien.ac.at <mailto:Bp2_2014w at alice.wu-wien.ac.at>
>     http://alice.wu-wien.ac.at/mailman/listinfo/bp2_2014w
>
>
>
>
> _______________________________________________
> Bp2_2014w mailing list
> Bp2_2014w at alice.wu-wien.ac.at
> http://alice.wu-wien.ac.at/mailman/listinfo/bp2_2014w

-- 
--
__________________________________________________________________________________

Prof. Dr. Rony G. Flatscher
Department Informationsverarbeitung und Prozessmanagement
Institut für Betriebswirtschaftslehre und Wirtschaftsinformatik
D2-C 2.086
WU Wien
Welthandelsplatz 1
A-1020  Wien/Vienna, Austria/Europe

http://www.wu.ac.at
__________________________________________________________________________________





-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alice.wu-wien.ac.at/pipermail/bp2_2014w/attachments/20150124/1a149372/attachment-0001.html>


More information about the Bp2_2014w mailing list