Zum Inhalt springen

Devilmarkus

Mitglieder
  • Gesamte Inhalte

    158
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Devilmarkus

  1. Mal was anderes: Kann man einem Applet sagen, es soll eine Datei auf dem Server löschen, wenn der Pfad mit temp/ beginnt? Der Ordner auf dem Server hat natürlich chmod 777 gesetzt. Ich möchte Useruploads erlauben, und diese sollen sofort wieder gelöscht werden auf dem Server, sobald die Datei geladen wurde.
  2. Oh ok, verstehe mich nicht Falsch bitte. Java ansich ist eine sehr geniale Sache. Nur wirklich schade, dass einige Sachen halt nicht multi-plattform tauglich sind, wie z.B. die Soundgeschichte. Das hat im übrigen nicht nur mich geärgert / enttäuscht sondern auch Freunde von mir, die versuchen, einige Sachen an ihr Linux anzupassen. Schade, dass es eben keine einheitlichen Implementationen gibt. Also nicht falsch verstehen bitte. Nur, wenn man halt etwas programmiert und dabei nicht auf externe Libraries zurückgreift, sondern Standard Java verwendet, mit Swing, AWT & Co, sollte man annehmen können, dass es halt sowohl auf Solaris, als auch Linux oder Mac oder wasauchimmer dasselbe ist. (Ausnahmen sind natürlich Systemspezifische Dinge wie Fonts) Das Problem beim Sound ist allerdings: - Das OS ansich unterstützt das Format. - Die Hardware & Treiber auch. - Die Java-OS Schnittstelle allerdings nicht. Beispiel: Mein Emulator (Screenshot: http://cpc-live.com/javacpc_desktop.png ) Läuft auf allen getesteten OS. Nur: Linux ist zu langsam wegen der schlechten Soundanbindung. Freunde von mir, die einige Dinge mit entwickeln, haben sich schon die Haare ausgerauft, weil der Code korrekt erscheint, aber die Implementierung quer schlägt.
  3. Was mir zu den nicht funktionierenden Applets sonst noch einfällt: Nicht jedes OS kann 8 bit unsigned stereo Samples spielen. Von 8bit signed Stereo ganz zu schweigen. Das liegt aber an Java / Soundanbindung und nicht an meinem Applets. Die Sound Implementierung in Java ist z.B. auf Linux unter aller Sau.
  4. Das Problem scheint im HTML code zu liegen. codebase="./" scheinen nicht alle Browser zu mögen?!? Aber ohne Fehlerlog kann ich Dir da nicht helfen. Die Laderoutine habe ich nun gepatched: int counter = 0; final BufferedInputStream bos = new BufferedInputStream(result); int bytesRead; int size = bos.available(); System.out.println("Found filesize is " + size + " bytes."); if (filesize < 2) { filesize = 5000000; } if (size < 2) { size = filesize; } ymdata = new int[size]; bytesRead = 0; boolean rebuild = false; while ((bytesRead = bos.read()) != -1) { try { if (counter >= ymdata.length) { int[] redo = new int[ymdata.length]; System.arraycopy(ymdata, 0, redo, 0, ymdata.length); ymdata = new int[counter + 4096]; if (!rebuild) { System.out.println("Read stream went wrong! " + "Filesize was too small. Enlarging buffer size"); } rebuild = true; System.arraycopy(redo, 0, ymdata, 0, redo.length); } ymdata[counter++] = bytesRead; } catch (Exception t) { } } result.close(); bos.close(); if (size == 5000000 || rebuild) { int[] check = new int[counter]; System.arraycopy(ymdata, 0, check, 0, check.length); ymdata = new int[counter]; System.arraycopy(check, 0, ymdata, 0, check.length); } So funktioniert das wenigstens schonmal.
  5. Hier mal ein Test auf einem befreundeten Rechner in UK: Java Plug-in 1.6.0_21 Using JRE version 1.6.0_21-b07 Java HotSpot Client VM User home directory = C:\Documents and Settings\kthacker ---------------------------------------------------- c: clear console window f: finalize objects on finalization queue g: garbage collect h: display this help message l: dump classloader list m: print memory usage o: trigger logging q: hide console Using 8 bit unsigned sound Initialized AY chip active! resync: start=0 resync: start=2205 Parameter read: FILE with value:CAMERTO.YM Opening CAMERTO.YM WebURL is: http://cpc-live.com/ymtest/CAMERTO.YM Loadname is: CAMERTO.YM Found filesize is 1380 bytes. Available filelength:381038 Datastream has 1380 bytes YM_RecCount 1274 YM_length 23808 Something went wrong. Retrying 1 times Opening CAMERTO.YM WebURL is: http://cpc-live.com/ymtest/CAMERTO.YM Loadname is: CAMERTO.YM Found filesize is 381038 bytes. Available filelength:381038 Datastream has 381038 bytes YM_RecCount 380932 YM_length 23808 Wieso muss die Datei 2x eingelesen werden? Warum wird da beim Ersten Versuch eine falsche Dateigrösse zurückgegeben?
  6. Ich habe ein paar Dinge in die Konsole schreiben lassen: Using 8 bit unsigned sound Initialized AY chip active! resync: start=0 resync: start=2205 Parameter read: FILE with value:CAMERTO.YM Opening CAMERTO.YM WebURL is: http://cpc-live.com/ymtest/CAMERTO.YM Loadname is: CAMERTO.YM Found filesize is 381038 bytes. Available filelength:381038 Datastream has 381038 bytes YM_RecCount 380932 YM_length 23808 Aber irgendwie funktioniert das nur bei mir korrekt. Der Link zum Applet ist http://cpc-live.com/ymtest und ich wette, bei ca. 60-70% aller Leute, die den Link testen, steht ein unterschiedlicher Wert in der "filesize". Hier meine Aktuelle Routine, wie ich die Datei lese: public void loadYM(final String loadname) { if (loadname == null) { return; } java.awt.EventQueue.invokeLater(new Runnable() { public void run() { System.out.println("Opening " + loadname); System.out.println("WebURL is: " + (url + loadname)); ymdata = null; System.gc(); InputStream result = null; File file = null; try { result = new URL(url + loadname).openStream(); System.out.println("Loadname is: " + loadname); } catch (Exception e) { // e.printStackTrace(); try { file = new File(loadname); result = new FileInputStream(file); } catch (Exception re) { return; } } int filesize = 0; if (loadname.toLowerCase().endsWith(".zip")) { try { YMPlayer.info.append("Opening compressed file...\r\n"); ZipInputStream str = new ZipInputStream(result); filesize = (int) str.getNextEntry().getSize(); result = str; System.out.println(result.toString() + " - " + filesize + " bytes..."); } catch (Exception e) { e.printStackTrace(); } } try { int counter = 0; // final BufferedInputStream bos = new BufferedInputStream(result); int bytesRead; int size = result.available(); System.out.println("Found filesize is " + size + " bytes."); if (filesize < 2) { filesize = 5000000; } if (size < 2) { size = filesize; } ymdata = new int[size]; bytesRead = 0; while ((bytesRead = result.read()) != -1) { try { ymdata[counter++] = bytesRead; } catch (Exception t) { } } result.close(); // bos.close(); if (size == 5000000) { int[] check = new int[counter]; System.arraycopy(ymdata, 0, check, 0, check.length); ymdata = new int[counter]; System.arraycopy(check, 0, ymdata, 0, check.length); } System.out.println("Available filelength:" + counter); if (ymdata[2] == 0x2d) { YMPlayer.info.append("LHA5 crunched file.\r\n"); ymdata = unLHA(loadname, ymdata); } loadYM(loadname, 1); } catch (final Exception iox) { iox.printStackTrace(); YMPlayer.info.append("Error: File too large / bad format.\r\n"); System.out.println("Error: File too large / bad format."); stop(); return; } } }); } Ich habe den BufferedInputStream wegkommentiert, aber auch mit BufferedInputStream funktioniert es nicht bei Allen.
  7. Kann mir denn jemand sagen, was ich im void LoadYM(final String loadname)... falsch mache? Wie gesagt, als Applet lädt er leider nicht immer das komplette File. Das int[] ist dann zu klein. Der Buffer allerdings (= new int[xxxxxx]) ist ausreichend gross angelegt. Der Fehler scheint hier zu liegen: try { int count = 0; final BufferedInputStream bos = new BufferedInputStream(result); while (bos.available() != 0) { try { ymdata[count++] = bos.read(); } catch (Exception t) { YMPlayer.info.append("Error: File too large / bad format.\r\n"); stop(); return; } } bos.close(); result.close(); int[] check = new int[count]; System.arraycopy(ymdata, 0, check, 0, check.length); ymdata = new int[count]; System.arraycopy(check, 0, ymdata, 0, check.length); if (ymdata[2] == 0x2d) { YMPlayer.info.append("LHA5 crunched file.\r\n"); ymdata = unLHA(loadname, ymdata); } loadYM(loadname, 1); } catch (final Exception iox) { iox.printStackTrace(); }
  8. Es wäre mir schon damit geholfen, einen Pseudo-Code zu haben, welcher aber nicht so Systemlastig ist. Ich habe es schon mit verschiedenen Threads versucht, aber immer wieder stockt der Player. (Sieht man an den Indeterminate'd ProgressBars und am "Scope" Display besonders) Hier mal der komplette Code AYControl: /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package Player.core; import Player.core.device.sound.*; import javax.swing.Timer; import java.awt.event.*; import java.io.*; import net.sourceforge.lhadecompressor.*; import java.net.URL; import java.util.zip.*; import java.util.Iterator; /** * * @author Markus */ public class AYControl { protected AY_3_8910 psg = new AY_3_8910(); protected final int[] PSG_VALUES = new int[]{ psg.BC2_MASK, psg.BC2_MASK | psg.BC1_MASK, psg.BC2_MASK | psg.BDIR_MASK, psg.BC2_MASK | psg.BDIR_MASK | psg.BC1_MASK }; protected static final int CYCLES_PER_SECOND = 1000000; protected static final int CYCLES_PER_SECOND_ST = 2000000; protected static final int AUDIO_TEST = 0x40000000; protected int audioAdd = psg.getSoundPlayer().getClockAdder(AUDIO_TEST, CYCLES_PER_SECOND); protected int audioCount = 0; ActionListener updateCycle = new ActionListener() { public void actionPerformed(ActionEvent e) { cycle(); } }; Timer cycleUpdate = new Timer(10, updateCycle); public void startScreener(){ if (screener == null) { screener = new Thread() { public void run() { Timer screenUpdate = new Timer(50, updateScreen); screenUpdate.start(); } ActionListener updateScreen = new ActionListener() { public void actionPerformed(ActionEvent e) { screenUpdate(); } }; public void screenUpdate() { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { if (JavaSound.painted) { JavaSound.painted = false; JavaSound.vu(JavaSound.vum); } } }); } }; screener.setPriority(Thread.MAX_PRIORITY); screener.start(); } } public void cycle() { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { for (int i = 0; i < CYCLES_PER_SECOND / 50; i++) { if ((audioCount += audioAdd) >= AUDIO_TEST) { try { psg.writeAudio(); audioCount -= AUDIO_TEST; } catch (Exception e) { e.printStackTrace(); } } } vSync(); } }); } Thread screener; public void play() { psg.setClockSpeed(CYCLES_PER_SECOND); psg.reset(); psg.getSoundPlayer().play(); } public boolean YM_Play; public void vSync() { if (!YMPlayer.p1.isShowing()) { try { System.exit(0); } catch (Exception e) { } } if (YM_Play) { playYM(); } } public void start() { YMPlayer.p1.setIndeterminate(true); YMPlayer.p2.setIndeterminate(true); YM_Play = true; cycleUpdate.start(); } public void stop() { YMPlayer.p1.setIndeterminate(false); YMPlayer.p2.setIndeterminate(false); YMPlayer.p1.setValue(0); YMPlayer.p2.setValue(YMPlayer.p2.getMaximum()); YM_Seconds = 0; YM_Minutes = 0; JavaSound.clear(); ymcount = 0; YM_Play = false; cycleUpdate.stop(); YMPlayer.stat.setText("Stopped..."); } public void pause() { YMPlayer.p1.setIndeterminate(false); YMPlayer.p2.setIndeterminate(false); YM_Play = false; cycleUpdate.stop(); YMPlayer.stat.setText("Paused at " + YM_Minutes + ":" + YM_Seconds); } int vcount = 0; int YM_Seconds = 0; int YM_Minutes = 0; int ymcount = 0; int YM_RecCount = 0; int YM_registers = 14; int YM_size; public void Slide(int pos){ ymcount = pos * 50 * YM_registers; } public int mountcheck = 0; public void playYM() { mountcheck++; if (mountcheck > 50){ mountcheck = 0; YMPlayer.playlist.setSelectedIndex(YMPlayer.index); } //int vcount, YM_Minutes, YM_Seconds, msecs vcount++; YM_size = (YM_RecCount / 50) / YM_registers; YMPlayer.ympos.setMaximum(YM_size); int lsec = 0, lmin = 0, lpos = 0; for (int i = 0; i < YM_size; i++) { lpos++; lsec++; if (lpos == 60) { lpos = 0; lmin++; lsec = 0; } } String llmin = ""; String llsec = ""; if (lsec < 10) { llsec = "0"; } if (lmin < 10) { llmin = "0"; } String length = "["+llmin + lmin + ":" + llsec + lsec+"]"; YM_size = (ymcount / 50) / YM_registers; lsec = 0; lmin = 0; lpos = 0; for (int i = 0; i < YM_size; i++) { lpos++; lsec++; if (lpos == 60) { lpos = 0; lmin++; lsec = 0; } } llmin = ""; llsec = ""; if (lsec < 10) { llsec = "0"; } if (lmin < 10) { llmin = "0"; } String posi = "["+llmin + lmin + ":" + llsec + lsec+"]"; YMPlayer.p1.setValue(ymcount); YMPlayer.p2.setValue(YM_RecCount - ymcount); YMPlayer.ympos.setValue((ymcount / 50) / YM_registers); if (vcount == 50) { vcount = 0; YMPlayer.stat.setText(length + posi); } String minutes = "" + YM_Minutes; if (YM_Minutes <= 9) { minutes = "0" + minutes; } String seconds = "" + YM_Seconds; if (YM_Seconds <= 9) { seconds = "0" + seconds; } String milliseconds = "" + (vcount * 2); if (vcount <= 4) { milliseconds = "0" + milliseconds; } if (YM_RecCount >= 1) { for (int i = 0; i < YM_registers; i++) { if (i == 13) { if (YM_Data[ymcount] != 0x0ff) { psg.setRegister(i, YM_Data[ymcount]); } } else { psg.setRegister(i, YM_Data[ymcount]); } ymcount++; } if (ymcount >= YM_RecCount) { YM_Minutes = 0; YM_Seconds = 0; ymcount = 0; if (webapplet.names != null && webapplet.names.length > 1) { YMPlayer.index++; if (YMPlayer.index >= webapplet.names.length) { YMPlayer.index = 0; } if (YMPlayer.index < webapplet.names.length) { String lo = webapplet.names[YMPlayer.index]; loadYM(lo); } } } } else { YM_Play = false; YMPlayer.info.append("Sorry, no playback-data in buffer\r\n"); } } String YMtitle = ""; String YMauthor = ""; String YMcreator = ""; boolean shouldcount = false; int begincount = 0; boolean YM_Interleaved = false; boolean oldYM = false; int YM_vbl = 0; public static String url = ""; public void loadYM(final String loadname) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { ymdata = null; System.gc(); ymdata = new int[400000]; InputStream result = null; File file = null; try { result = new URL(url + loadname).openStream(); } catch (Exception e) { // e.printStackTrace(); try { file = new File(loadname); result = new FileInputStream(file); } catch (Exception re) { return; } } if (loadname.toLowerCase().endsWith(".zip")) { try { YMPlayer.info.append("Opening compressed file...\r\n"); ZipInputStream str = new ZipInputStream(result); str.getNextEntry(); result = str; } catch (Exception e) { e.printStackTrace(); } } try { int count = 0; final BufferedInputStream bos = new BufferedInputStream(result); while (bos.available() != 0) { try { ymdata[count++] = bos.read(); } catch (Exception t) { YMPlayer.info.append("Error: File too large / bad format.\r\n"); stop(); return; } } bos.close(); result.close(); int[] check = new int[count]; System.arraycopy(ymdata, 0, check, 0, check.length); ymdata = new int[count]; System.arraycopy(check, 0, ymdata, 0, check.length); if (ymdata[2] == 0x2d) { YMPlayer.info.append("LHA5 crunched file.\r\n"); ymdata = unLHA(loadname, ymdata); } loadYM(loadname, 1); } catch (final Exception iox) { iox.printStackTrace(); } } }); } protected int[] ymdata; int checktimer = 0; public void loadYM(final String loadnames, int check) { System.out.println("Datastream has " + ymdata.length + " bytes"); YM_Data = new int[ymdata.length]; YM_DataInterleaved = new int[ymdata.length]; YM_Minutes = 0; YM_Seconds = 0; ymcount = 0; YMtitle = ""; YMauthor = ""; YMcreator = ""; shouldcount = false; begincount = 0; YM_RecCount = 0; int value0 = 0; int value1 = 0; int value2 = 0; int value3 = 0; boolean atari_st_mode = false; int YM_length = 0; YM_Interleaved = false; int ym_read_byte = 0; try { int len = ymdata.length; int ym_filepos = 0; while (ym_filepos < len) { ym_read_byte = ymdata[ym_filepos]; if (ym_filepos == 2) { if (ym_read_byte == 0x035 || ym_read_byte == 0x036 || ym_read_byte == 0x033 || ym_read_byte == 0x032) { if (ym_read_byte == 0x033 || ym_read_byte == 0x032) { YM_registers = 14; YM_Interleaved = true; oldYM = true; atari_st_mode = true; if (ym_read_byte == 0x032) { YMPlayer.info.append("opening YM2! file...\r\n"); } else { YMPlayer.info.append("opening YM3! file...\r\n"); } } if (ym_read_byte == 0x035) { YM_registers = 16; oldYM = false; YMPlayer.info.append("opening YM5! file...\r\n"); } if (ym_read_byte == 0x036) { YM_registers = 16; oldYM = false; YMPlayer.info.append("opening YM6! file...\r\n"); } } else { YMPlayer.info.append("Wrong format... Cannot playback!\r\n"); YM_Interleaved = false; YM_RecCount = 0; stop(); return; } } if (ym_filepos == 12) { value0 = ym_read_byte; } if (ym_filepos == 13) { value1 = ym_read_byte; } if (ym_filepos == 14) { value2 = ym_read_byte; } if (ym_filepos == 15) { value3 = ym_read_byte; } if (!oldYM && (ym_filepos == 19 && (ym_read_byte & 1) == 1)) { YMPlayer.info.append("Found an interleaved file of " + YM_registers + " registers.\r\n"); YM_Interleaved = true; } if (ym_filepos == 25) { if (ym_read_byte == 0x080) { atari_st_mode = true; } if (ym_read_byte == 0x058) { } } if (!oldYM && ym_filepos >= 34 && !shouldcount) { if (begincount > 2) { shouldcount = true; } if (ym_read_byte == 0 && begincount < 4) { begincount++; } if (begincount == 0) { if (ym_read_byte != 0) { char c = (char) ym_read_byte; YMtitle += c; } } if (begincount == 1) { if (ym_read_byte != 0) { char c = (char) (ym_read_byte); YMauthor += c; } } if (begincount == 2) { if (ym_read_byte != 0) { char c = (char) (ym_read_byte); YMcreator += c; } } } if (oldYM && ym_filepos >= 4 && !shouldcount) { YMtitle = "none"; YMauthor = "none"; YMcreator = "none"; shouldcount = true; } YMPlayer.p1.setString(YMtitle); YMPlayer.p2.setString(YMauthor); if (shouldcount) { if (!YM_Interleaved) { YM_Data[YM_RecCount] = ymdata[ym_filepos]; YM_RecCount++; } else { YM_DataInterleaved[YM_RecCount] = ymdata[ym_filepos]; YM_RecCount++; } } ym_filepos++; } if (!oldYM) { YM_length = (value0 * 256) + (value1 * 256) + (value2 * 256) + (value3); System.out.println("YM_RecCount " + YM_RecCount); System.out.println("YM_length " + YM_length); if (YM_RecCount < YM_length) { System.out.println("Something went wrong."); checktimer++; System.out.println("Retrying " + checktimer + " times"); if (checktimer < 5) { loadYM(loadnames); } else { checktimer = 0; } return; } checktimer = 0; YM_registers = (YM_RecCount / YM_length); if (YM_registers > 16) { YM_registers = 16; } YM_vbl = YM_length; } else { YM_vbl = YM_RecCount / YM_registers; } ymcount = 0; if (YM_Interleaved && !oldYM) { int counted = 0; for (int jk = 0; jk < YM_registers; jk++) { for (int ik = 0; ik < YM_length; ik++) { YM_Data[jk + ik * YM_registers] = YM_DataInterleaved[counted]; counted++; } } } else if (YM_Interleaved) { int counted = 0; for (int jk = 0; jk < YM_registers; jk++) { for (int ik = 0; ik < YM_RecCount / YM_registers; ik++) { YM_Data[(ik * YM_registers) + jk] = YM_DataInterleaved[counted]; counted++; } } } if (atari_st_mode) { YMPlayer.info.append("Atari ST tune found.\r\n"); psg.changeClockSpeed(CYCLES_PER_SECOND_ST); } else { YMPlayer.info.append("Amstrad CPC tune found.\r\n"); psg.changeClockSpeed(CYCLES_PER_SECOND); } YMPlayer.p2.setMaximum(YM_RecCount); YMPlayer.p1.setMaximum(YM_RecCount); stop(); start(); YMPlayer.info.append("Registers: " + (YM_registers) + "\r\n"); } catch (final Exception iox) { YMPlayer.info.append("can't read file !!!\r\n"); } YMPlayer.info.select(2000000, 2000000); YMPlayer.vol.setValue(YMPlayer.gainvol); } public int[] YM_Data = null; public int[] YM_DataInterleaved = null; LhaFile lhafile = null; protected final int[] unLHA(String name, int[] inpu) { int[] d = null; try { int BUFFSER_SIZE = 1024; // YMPlayer.info.append("Opening \"" + name + "\"...\r\n"); try { lhafile = new LhaFile(name); } catch (Exception e) { YMPlayer.info.append("Bad LHA format:" + e.getMessage() + "\r\n"); } Iterator iter = lhafile.entryIterator(); while (iter.hasNext()) { LhaEntry entry = (LhaEntry) iter.next(); File dst = entry.getFile(); // YMPlayer.info.append("EXTRACT FILE = " + entry.getFile() + "\r\n"); // YMPlayer.info.append(" METHOD = " + entry.getMethod() + "\r\n"); // YMPlayer.info.append(" COMPRESSED SIZE = " + entry.getCompressedSize() + "\r\n"); // YMPlayer.info.append(" ORIGINAL SIZE = " + entry.getOriginalSize() + "\r\n"); // YMPlayer.info.append(" TIME STAMP = " + entry.getTimeStamp()+"\r\n"); if (entry.getMethod().equals(LhaEntry.METHOD_SIG_LHD)) { dst.mkdirs(); } else { File parent = dst.getParentFile(); if (parent != null) { parent.mkdirs(); } InputStream in = new BufferedInputStream(lhafile.getInputStream(entry), BUFFSER_SIZE); d = new int[800000]; int po = 0; while (in.available() != 0) { d[po++] = in.read(); } int[] checkf = new int[po]; System.arraycopy(d, 0, checkf, 0, checkf.length); d = new int[po]; System.arraycopy(checkf, 0, d, 0, checkf.length); } } lhafile.close(); } catch (Exception e) { return inpu; } // System.out.println("d is " + d.length + " bytes."); return d; } } Übrigens ein Bug hier, welchen ich auch nicht weiss, wie zu beheben: Im Void LoadYM(String name): Wenn man den Player als Applet nutzt, lädt er etwas grössere Dateien nicht komplett. Das Resultierende byte[] (In diesem Fall int[]) ist zu klein. Kann mir hier jemand helfen?
  9. Hallo zusammen, ich hab mal wieder zugeschlagen, und einen Java-YM Player geschrieben. Dieser Player "sollte" einen cycle(); (void) eigentlich 100.000 x pro Sekunde ausführen aber das bekomme ich leider nicht hin. Kann mir jemand sagen, wie man soetwas bewerkstelligen kann, ohne die CPU Last unnötig hoch zu setzen? Ich verwende momentan eine etwas Unschöne javax.swing.timer Methode mit einer nicht so netten For- Schleife: Sieht so aus: ActionListener updateCycle = new ActionListener() { public void actionPerformed(ActionEvent e) { cycle(); } }; Timer cycleUpdate = new Timer(10, updateCycle); public void cycle() { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { for (int i = 0; i < CYCLES_PER_SECOND / 50; i++) { if ((audioCount += audioAdd) >= AUDIO_TEST) { try { psg.writeAudio(); audioCount -= AUDIO_TEST; } catch (Exception e) { e.printStackTrace(); } } } vSync(); } }); } Achja: CYCLES_PER_SECOND = 1000000 Das void vSync sollte 50x pro Sekunde aufgerufen werden, muss aber synchron zum Cycle laufen. Diese Methode ist wirklich nicht die netteste, aber funktioniert soweit. Test: Blue Angel 69 for Amstrad CPC Vielleicht kann mir jemand eine "Elegantere" Lösung geben? MfG Markus
  10. Hallo, dieses ist normal nicht meine Rubrik hier, und ich kann kein x86 Assembler. Ich programmiere normalerweise Java. Nun benötige ich allerdings ein kurzes x86 Assembler Beispiel für folgende Berechnung: (20*(40+1)) Ich möchte damit etwas testen. Nein, das ist keine Schulaufgabe Aus dem Alter bin ich raus. Ich möchte etwas in einem Delphi Programm testen, welches einige Sachen aus Assembler übernimmt. MfG Markus
  11. Also ich habe nun Folgendes: protected Process process; public void Launch(boolean direction) throws InterruptedException, IOException { String file = null; if (direction) { FileDialog filedia = new FileDialog((Frame) new Frame(), "Create DSK file", FileDialog.SAVE); filedia.setFile("*.dsk"); filedia.setVisible(true); String filename = filedia.getFile(); if (filename != null) { filename = filedia.getDirectory() + filedia.getFile(); file = filename; } } else { FileDialog filedia = new FileDialog((Frame) new Frame(), "Open DSK file", FileDialog.LOAD); filedia.setFile("*.dsk"); filedia.setVisible(true); String filename = filedia.getFile(); if (filename != null) { filename = filedia.getDirectory() + filedia.getFile(); file = filename; } } if (file == null) { return; } text.setText("SAMdisk GUI 1.0 (May 10 2010), by Markus Hohmann -- http://cpc-live.com/\r\n"); text.append("SAMdisk 3.0 (Jun 2 2009), by Simon Owen -- http://simonowen.com/samdisk/\r\n"); String ending = ""; if (!heads.isSelected()) { ending = "-h0"; } String drv = "a:"; String command = ""; if (gaps.isSelected()) { ending = ending + " --gaps"; } if (direction) { command = drv + " \"" + file + "\" " + ending; } else { command = "\"" + file + "\" " + drv + " " + ending; } process = Runtime.getRuntime().exec("tools/SamDisk.exe " + command); text.append("SamDisk.exe " + command + "\r\n"); text.select(20000000, 20000000); InputStream is = process.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line; jButton1.setEnabled(false); jButton2.setEnabled(true); progress.setIndeterminate(true); while ((line = br.readLine()) != null) { if (line != null) { text.append(line + "\r\n"); text.select(20000000, 20000000); } } br.close(); text.append("Done...\r\n"); text.select(20000000, 20000000); progress.setIndeterminate(false); jButton1.setEnabled(true); jButton2.setEnabled(false); prog = 0; process = null; } Das Problem: Fehlermeldungen und so spuckt diese Funktion aus. Beispiel: (Ausgabe in JTextField): 42 Tracks, Head 0 Dann werkelt er und findet dabei einen Fehler: Failed to read sector XX Wenns beendet ist: Done... Das Problem ist aber: Während das DOS Programm arbeitet, hat es eine Anzeige, was es grad tut.. Beispiel: Reading Track 6 Head 0 (Steigert sich dann je nach Fortschritt, bis zum Ende) Dieses wird nicht in dem JTextField angezeigt *grummel* Eventuell ist das ein OutputStream? Wenn ja, wie kann ich diesen Abfangen?
  12. Nun... ich versuche es nun so: protected void launch(String command) { try { convertStreamToString(Runtime.getRuntime().exec(command).getInputStream()); } catch (Exception e) { } } protected void convertStreamToString(InputStream is) throws IOException { if (is != null) { StringBuilder sb = new StringBuilder(); String line; try { BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); while ((line = reader.readLine()) != null) { sb.append(line).append("\r\n"); text.append(sb.toString()); System.out.println("running..."); } } finally { is.close(); } text.setText(sb.toString()); } else { text.setText("Error\r\n"); } } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { Thread runner = new Thread() { public void run() { launch("tools/SamDisk.exe test.dsk a: -h0"); } }; runner.start(); } Wobei "text" eine "TextArea" ist... Das Problem hier ist: Er zeigt mir nur beim Start kurz eine Meldung an. Das Programm aber liefert, während es läuft, Informationen an die DOS-Konsole. (Es beschreibt/liest Disketten und gibt währenddessen die Track Informationen aus) Jemand eine Idee, was ich ändern kann, damit ich 'während' der gesamte DOS-Prozess läuft, die Informationen erhalte?
  13. Hallo, ich habe folgende Frage: Mit dem Befehl Runtime.getRuntime().exec(String command); kann ich ja eine Anwendung ausführen. Ist es auch möglich, wenn diese Anwendung etwas in die DOS-Konsole schreibt, dieses abzufangen und in ein Java-Textfield zu schreiben? Wäre super wenn mir jemand sagen könnte, ob und wie das geht. Gruss, Markus
  14. Wie gesagt dieses Programm ist nur Spielerei. In dem Sprachsynthesizer, welchen ich in meinem Emulator verwende, benötige ich keinen "Converter" dort kann ich gezielt die 64 Phonemes einsetzen, da die Hardware ansich den Wert des abzuspielenden Phonemes an einen Port sendet. Dort verwende ich dann nur einen Code wie Diesen: public String Translate(String input){ String out=""; if (DEBUG) System.out.println("input:"+input); int len = input.length()/3; Phoneme = new String[len]; bytes = new int[len]; for (int i = 0; i < len; i++) { String got = input; Phoneme[i] = got.substring(0,2); input = input.substring(3); } for (int i = 0; i < len; i++){ try{ switch (hexValue(Phoneme[i])){ case 0: Phoneme[i] = "PA1"; break; case 1: Phoneme[i] = "PA2"; break; case 2: Phoneme[i] = "PA3"; break; case 3: Phoneme[i] = "PA4"; break; case 4: Phoneme[i] = "PA5"; break; case 5: Phoneme[i] = "OY"; break; case 6: Phoneme[i] = "AY"; break; case 7: Phoneme[i] = "EH"; break; case 8: Phoneme[i] = "KK3"; break; case 9: Phoneme[i] = "PP"; break; case 10: Phoneme[i] = "JH"; break; case 11: Phoneme[i] = "NN1"; break; case 12: Phoneme[i] = "IH"; break; case 13: Phoneme[i] = "TT2"; break; case 14: Phoneme[i] = "RR1"; break; case 15: Phoneme[i] = "AX"; break; case 16: Phoneme[i] = "MM"; break; case 17: Phoneme[i] = "TT1"; break; case 18: Phoneme[i] = "DH1"; break; case 19: Phoneme[i] = "IY"; break; case 20: Phoneme[i] = "EY"; break; case 21: Phoneme[i] = "DD1"; break; case 22: Phoneme[i] = "UW1"; break; case 23: Phoneme[i] = "AO"; break; case 24: Phoneme[i] = "AA"; break; case 25: Phoneme[i] = "YY2"; break; case 26: Phoneme[i] = "AE"; break; case 27: Phoneme[i] = "HH1"; break; case 28: Phoneme[i] = "BB1"; break; case 29: Phoneme[i] = "TH"; break; case 30: Phoneme[i] = "UH"; break; case 31: Phoneme[i] = "UW2"; break; case 32: Phoneme[i] = "AW"; break; case 33: Phoneme[i] = "DD2"; break; case 34: Phoneme[i] = "GG3"; break; case 35: Phoneme[i] = "VV"; break; case 36: Phoneme[i] = "GG1"; break; case 37: Phoneme[i] = "SH"; break; case 38: Phoneme[i] = "ZH"; break; case 39: Phoneme[i] = "RR2"; break; case 40: Phoneme[i] = "FF"; break; case 41: Phoneme[i] = "KK2"; break; case 42: Phoneme[i] = "KK1"; break; case 43: Phoneme[i] = "ZZ"; break; case 44: Phoneme[i] = "NG"; break; case 45: Phoneme[i] = "LL"; break; case 46: Phoneme[i] = "WW"; break; case 47: Phoneme[i] = "XR"; break; case 48: Phoneme[i] = "WH"; break; case 49: Phoneme[i] = "YY1"; break; case 50: Phoneme[i] = "CH"; break; case 51: Phoneme[i] = "ER1"; break; case 52: Phoneme[i] = "ER2"; break; case 53: Phoneme[i] = "OW"; break; case 54: Phoneme[i] = "DH2"; break; case 55: Phoneme[i] = "SS"; break; case 56: Phoneme[i] = "NN2"; break; case 57: Phoneme[i] = "HH2"; break; case 58: Phoneme[i] = "OR"; break; case 59: Phoneme[i] = "AR"; break; case 60: Phoneme[i] = "YR"; break; case 61: Phoneme[i] = "GG2"; break; case 62: Phoneme[i] = "EL"; break; case 63: Phoneme[i] = "BB2"; break; default: Phoneme[i]="ignore"; break; } } catch (Exception e){} } SpeechByte = ""; out="|"; for (int i = 0; i < len; i++) if (!Phoneme[i].equals("ignore")){ out+=Phoneme[i]+"|"; } say (out); return out; }
  15. @flashpixx: Wissen möchte ich eigentlich garnichts. Ich wollte nur mal diese "Spielerei" verbreiten. - Wegen des "Verstehens": Die Replacements sind annähernd wie die des Dk'tronics Sprachsynthesizers. Ich habe diesen Sprachsynthesizer auch in meinem CPC-Emulator, wo halt die Hardware angesteuert werden kann. Ein Beispiel: Dabei klingt die emulierte Sprachausgabe exakt dem Original.
  16. Interesse, eine "Deutsche" Konvertierung zu programmieren dafür? Hier der code für die Englische Umwandlung: (Recht simpel, sicherlich verbesserungsbedürftig) /* * To change this template, choose Tools | Templates * and open the template in the editor. */ /** * * @author Markus */ import java.util.*; public class Converter { public Converter() { } public Vector getWords(String s) { Vector vector = new Vector(); for (StringTokenizer stringtokenizer = new StringTokenizer(s, "()'\"\\!?{}/-"); stringtokenizer.hasMoreElements(); vector.addElement(stringtokenizer.nextToken().toLowerCase())) { } return vector; } public String getPhoneWord(String s) { s = replace(s, "*JASPO*", "JH|AA|SS|PP|OW"); s = replace(s, "*jaspo*", "JH|AA|SS|PP|OW"); s = replace(s, "*256*", "TT2|UW2|HH1|AA|NN1|DD1|RR2|EH|DD1|FF|IH|FF|TT2|IY|SS|IH|PA3|KK1|SS"); s = replace(s, "*A*", "EY|PA3"); s = replace(s, "*B*", "BB2|IY|PA3"); s = replace(s, "*C*", "SS|IY|PA3"); s = replace(s, "*D*", "DD1|IY|PA3"); s = replace(s, "*E*", "IY|PA3"); s = replace(s, "*F*", "EH|FF|PA3"); s = replace(s, "*G*", "JH|IY|PA3"); s = replace(s, "*H*", "EY|CH|PA3"); s = replace(s, "*I*", "AY|PA3"); s = replace(s, "*J*", "JH|EY|PA3"); s = replace(s, "*K*", "KK1|EY|PA3"); s = replace(s, "*L*", "EH|LL|PA3"); s = replace(s, "*M*", "EH|MM|PA3"); s = replace(s, "*N*", "EH|NG|PA3"); s = replace(s, "*O*", "OW|PA3"); s = replace(s, "*P*", "PP|IY|PA3"); s = replace(s, "*Q*", "KK1|YY2|UW2|PA3"); s = replace(s, "*R*", "AR|PA3"); s = replace(s, "*S*", "EH|SS|PA3"); s = replace(s, "*T*", "TT2|IY|PA3"); s = replace(s, "*U*", "YY1|UW2|PA3"); s = replace(s, "*V*", "VV|IY|PA3"); s = replace(s, "*W*", "DD1|AA|PA2|BB2|EL|YY1|UW2|PA3"); s = replace(s, "*X*", "EH|KK1|SS|PA3"); s = replace(s, "*Y*", "WW|AY|PA3"); s = replace(s, "*Z*", "ZZ|EH|PA2|DD2|PA3"); s = replace(s, "*while*", "WW|AY|LL"); s = replace(s, "*whil*", "WW|IH|LL"); s = replace(s, "*because*", "BB2|IY|KK3|OR|SS"); s = replace(s, "*1*", "WW|AO|NN1"); s = replace(s, "*2*", "TT2|UW2"); s = replace(s, "*3*", "FF|RR1|IY"); s = replace(s, "*4*", "FF|OR"); s = replace(s, "*5*", "FF|AY|PA3|VV"); s = replace(s, "*6*", "SS|IH|PA3|KK1|SS"); s = replace(s, "*7*", "SS|EH|PA3|VV|NN1"); s = replace(s, "*8*", "EY|PA3|TT2"); s = replace(s, "*9*", "NN2|AY|NN1"); s = replace(s, "*0*", "ZZ|IH|RR2|OW"); s = replace(s, "*their*", "TH|EH|ER2"); s = replace(s, "*you*", "YY1|UW2"); s = replace(s, "*measure*", "MM|EY|SH|OR"); s = replace(s, "*measur*", "MM|EY|SS|OR"); s = replace(s, "*human*", "HH1|IY|UW2|MM|AA|NN1"); s = replace(s, "*world*", "WW|OR|LL|DD1"); s = replace(s, "*year*", "YY1|IY|XR"); s = replace(s, "*cent*", "SS|EH|NN1|TT2"); s = replace(s, "*being*", "BB2|IH|IH|NG"); s = replace(s, "*ever*", "EH|PA3|VV|ER2"); s = replace(s, "*application*", "AA|PP|LL|IH|KK3|EY|SH|AX|NN1"); s = replace(s, "*evel*", "IY|PA3|VV|EH|LL"); s = replace(s, "*evil*", "IY|PA3|VV|IH|LL"); s = replace(s, "*ted*", "TT2|EH|DD1"); s = replace(s, "*want*", "WW|AA|NN1|TT2"); s = replace(s, "*charac*", "KK1|AE|RR2|AA|KK3"); s = replace(s, "*chine*", "CH|AY|NN1"); s = replace(s, "*have*", "HH1|AE|PA3|VV"); s = replace(s, "*over*", "OW|PA3|VV|ER2"); s = replace(s, "*ing*", "IH|NG"); s = replace(s, "*ince*", "IH|NN1|SS"); s = replace(s, "*nce*", "NN1|SS"); s = replace(s, "*ed", "EH|DD1"); s = replace(s, "*thought*", "TH|OW|TT2"); s = replace(s, "*though*", "TH|OW"); s = replace(s, "*through*", "TH|RR2|UW2"); s = replace(s, "*drought*", "DD2|RR2|OR|TT2"); s = replace(s, "*brought*", "BB2|RR2|OR|TT2"); s = replace(s, "*rough*", "|RR2|AX|FF"); s = replace(s, "*ough*", "AW|PA1|HH1"); s = replace(s, "*mould*", "MM|UH|PA2|DD2"); s = replace(s, "*ould*", "UH|PA2|DD2"); s = replace(s, "*uild*", "UW2|LL|DD1"); s = replace(s, "*eicest*", "SS|EH|SS|TT2"); s = replace(s, "*icest*", "AY|SS|EH|SS|TT2"); s = replace(s, "*igh*", "AY"); s = replace(s, "*cause*", "KK3|OR|SS"); s = replace(s, "*aus*", "OR|SS"); s = replace(s, "*cial*", "SS|AY|LL"); s = replace(s, "*tia*", "TT2|YR"); s = replace(s, "*tio*", "TT2|AY"); s = replace(s, "*one*", "WW|AO|NN1"); s = replace(s, "*lly*", "LL|IY"); s = replace(s, "*dis*", "DD1|IH|SS"); s = replace(s, "*que*", "KK2|WW"); s = replace(s, "*qu*", "KK2|WW"); s = replace(s, "*sky*", "SS|KK2|AY"); s = replace(s, "*fly*", "FF|LL|AY"); s = replace(s, "*ly*", "LL|IY"); s = replace(s, "*than*", "TH|AA|NN1"); s = replace(s, "*that*", "TH|AA|TT2"); s = replace(s, "*thee*", "TH|IY"); s = replace(s, "*the*", "TH|AX"); s = replace(s, "*them*", "TH|EH|MM"); s = replace(s, "*thence*", "TH|EH|NN1|SS"); s = replace(s, "*then*", "TH|EH|NN1"); s = replace(s, "*there*", "TH|XR"); s = replace(s, "*they*", "TH|AY"); s = replace(s, "*this*", "TH|IH|SS"); s = replace(s, "*thus*", "TH|AX|SS"); s = replace(s, "*abe*", "EY|BB1"); s = replace(s, "*ace*", "EY|PA2|SS"); s = replace(s, "*ade*", "EY|DD1"); s = replace(s, "*afe*", "EY|FF"); s = replace(s, "*age*", "EY|PA2|JH"); s = replace(s, "*ake*", "EY|PA3|KK1"); s = replace(s, "*ale*", "EY|LL"); s = replace(s, "*ame*", "EY|MM"); s = replace(s, "*ane*", "EY|NN1"); s = replace(s, "*ape*", "EY|PP"); s = replace(s, "*ase*", "EY|SS"); s = replace(s, "*aze*", "EY|ZZ"); s = replace(s, "*ate*", "EY|TT2|PA1"); s = replace(s, "*ave*", "EY|PA3|VV"); s = replace(s, "*azy*", "AA|ZZ|IY"); s = replace(s, "*ede*", "IY|DD1"); s = replace(s, "*eke*", "IY|PA3|KK1"); s = replace(s, "*eme*", "IY|MM"); s = replace(s, "*ere*", "IY|RR2"); s = replace(s, "*ese*", "IY|SS"); s = replace(s, "*ete*", "IY|TT2"); s = replace(s, "*iev*", "IH|EH|PA3|VV"); s = replace(s, "*eve*", "IY|PA3|VV"); s = replace(s, "*eze*", "IY|ZZ"); s = replace(s, "*ibe*", "AY|PA2|BB2"); s = replace(s, "*ice*", "AY|SS|SS"); s = replace(s, "*ide*", "AY|DD1"); s = replace(s, "*ife*", "AY|FF"); s = replace(s, "*ige*", "IH|PA3|GG3"); s = replace(s, "*ike*", "AY|KK2"); s = replace(s, "*ile*", "AY|LL"); s = replace(s, "*ime*", "AY|MM"); s = replace(s, "*ine*", "AY|NN1"); s = replace(s, "*ipe*", "AY|PP"); s = replace(s, "*ire*", "AY|RR2"); s = replace(s, "*ise*", "AY|SS"); s = replace(s, "*ite*", "AY|TT2"); s = replace(s, "*usive*", "UW1|SS|IH|PA3|VV"); s = replace(s, "*asive*", "EY|SS|IH|PA3|VV"); s = replace(s, "*ive*", "AY|PA3|VV"); s = replace(s, "*ize*", "AY|ZZ"); s = replace(s, "*obe*", "OW|PA2|BB2"); s = replace(s, "*ode*", "OW|DD1"); s = replace(s, "*oke*", "OW|PA2|KK1"); s = replace(s, "*ole*", "OW|LL"); s = replace(s, "*ome*", "OW|MM"); s = replace(s, "*one*", "OW|NN1"); s = replace(s, "*ope*", "OW|PP"); s = replace(s, "*ore*", "OR"); s = replace(s, "*pn*", "NN1"); s = replace(s, "*kn*", "NN1"); s = replace(s, "*th*", "TH"); s = replace(s, "*ch*", "CH"); s = replace(s, "*sh*", "SH"); s = replace(s, "*ck*", "KK2"); s = replace(s, "*or*", "OR"); s = replace(s, "*ose*", "OW|SS"); s = replace(s, "*ote*", "OW|TT2"); s = replace(s, "*ove*", "OW|PA3|VV"); s = replace(s, "*owe*", "OW"); s = replace(s, "*oze*", "OW|ZZ"); s = replace(s, "*ube*", "UW1|PA2|BB2"); s = replace(s, "*uce*", "UW1|SS|SS"); s = replace(s, "*ude*", "UW1|DD1"); s = replace(s, "*uge*", "UW1|PA2|JH"); s = replace(s, "*uke*", "UW1|PA3|KK1"); s = replace(s, "*ule*", "UW1|LL"); s = replace(s, "*ume*", "UW1|MM"); s = replace(s, "*une*", "UW1|NN1"); s = replace(s, "*upe*", "UW1|PP"); s = replace(s, "*ure*", "UW1|RR2"); s = replace(s, "*usa*", "AX|SS|AA"); s = replace(s, "use*", "YY1|UW2|SS"); s = replace(s, "*use*", "UW1|SS"); s = replace(s, "usu*", "YY1|UW2|SS|YY1|UH"); s = replace(s, "*ute*", "UW1|TT2"); s = replace(s, "*uze*", "UW1|ZZ"); s = replace(s, "*air*", "EH|XR"); s = replace(s, "*all *", "OR|LL|PA4"); s = replace(s, "*all*", "AA|LL"); s = replace(s, "*aria*", "EY|RR2|YR"); s = replace(s, "*imple*", "IH|MM|PP|LL"); s = replace(s, "*ear*", "IY|XR"); s = replace(s, "*eat*", "EY|TT2"); s = replace(s, "*ar*", "AR"); s = replace(s, "*ic*", "IH|KK3"); s = replace(s, "*er*", "ER2"); s = replace(s, "*ew*", "YY1|UW2"); s = replace(s, "*ind*", "IH|NN1|DD1"); s = replace(s, "*ow*", "OW"); s = replace(s, "*aa*", "AA|AR"); s = replace(s, "*ae*", "AA|AE"); s = replace(s, "*ai*", "EY"); s = replace(s, "*au*", "OR"); s = replace(s, "*ea*", "IY|AA"); s = replace(s, "*ee*", "IY"); s = replace(s, "*ei*", "EH|IH"); s = replace(s, "*eo*", "EH|OW"); s = replace(s, "*eu*", "YY1|UW2"); s = replace(s, "*ia*", "YR"); s = replace(s, "*ie*", "IY"); s = replace(s, "*is*", "IH|SS"); s = replace(s, "*io*", "ee|oo"); s = replace(s, "*oa*", "OW"); s = replace(s, "*oe*", "OW"); s = replace(s, "*oi*", "OY"); s = replace(s, "*oo*", "UW2"); s = replace(s, "*ou*", "AW"); s = replace(s, "*ua*", "AX|AE"); s = replace(s, "*ue*", "UW2"); s = replace(s, "*ui*", "UW2"); s = replace(s, "*bb*", "BB2"); s = replace(s, "*cc*", "KK1|SS"); s = replace(s, "*dd*", "DD"); s = replace(s, "*ff*", "FF"); s = replace(s, "*gg*", "GG1"); s = replace(s, "*ll*", "LL"); s = replace(s, "*mm*", "MM"); s = replace(s, "*nn*", "NN1"); s = replace(s, "*pp*", "PP"); s = replace(s, "*ss*", "SS"); s = replace(s, "*tt*", "TT1"); s = replace(s, "*zz*", "ZZ"); s = replace(s, "*my*", "MM|AY"); s = replace(s, "*we*", "WW|IY"); s = replace(s, "*to*", "TT2|UW2"); s = replace(s, "*or*", "OR"); s = replace(s, "ok", "OW|KK1|EY"); s = replace(s, "* ok *", "OW|KK1|EY"); s = replace(s, "* ok", "OW|KK1|EY"); s = replace(s, "*y*", "YY1"); s = replace(s, "*a*", "AA"); s = replace(s, "*e", "PA3"); s = replace(s, "*e*", "EH"); s = replace(s, "i*", "AY|PA3"); s = replace(s, "* i *", "PA4|AY|PA4"); s = replace(s, "*i*", "IH"); s = replace(s, "*o*", "OW"); s = replace(s, "*q*", "KK2|WW"); s = replace(s, "*u*", "UH"); s = replace(s, "*b*", "BB2"); s = replace(s, "c*", "KK2"); s = replace(s, "*c*", "SS"); s = replace(s, "d*", "DD1"); s = replace(s, "*d", "DD1"); s = replace(s, "*ds", "d|z"); s = replace(s, "*d*", "DD1"); s = replace(s, "*f*", "FF"); s = replace(s, "*g*", "GG1"); s = replace(s, "*h*", "HH1"); s = replace(s, "*j*", "JH"); s = replace(s, "*k*", "KK1"); s = replace(s, "l*", "LL"); s = replace(s, "*l*", "LL"); s = replace(s, "*m*", "MM"); s = replace(s, "*n*", "NN1"); s = replace(s, "*p*", "PP"); s = replace(s, "*r*", "RR2"); s = replace(s, "*s*", "SS"); s = replace(s, "*t*", "TT1"); s = replace(s, "*v*", "VV"); s = replace(s, "*w*", "WW"); s = replace(s, "*x*", "KK3|SS"); s = replace(s, "*z*", "ZZ"); s = replace(s, "* *", "PA4"); s = replace(s, "*.*", "PA4"); s = replace(s, "*,*", "PA4"); s = replace(s, "*;*", "PA4"); s = replace(s, "*:*", "PA4"); s = replace(s, "*-*", "PA3"); String s1 = ""; for (StringTokenizer stringtokenizer = new StringTokenizer(s, "[]"); stringtokenizer.hasMoreTokens() { s1 = s1 + stringtokenizer.nextToken(); if (stringtokenizer.hasMoreTokens()) { s1 = s1 + "|"; } } return s1+"|PA4|PA4|PA4|PA4|PA4|PA4|PA4|PA4"; } private String replace(String s, String s1, String s2) { String s3 = s; if (s1.startsWith("*") && s1.endsWith("*")) { boolean flag = false; s1 = s1.substring(1, s1.length() - 1); int i = 0; boolean flag1 = true; while (flag1) { int j = s.indexOf(s1, i); if (j >= 0) { boolean flag2 = true; for (int k = j; k >= 0; k--) { String s4 = s.substring(k, k + 1); if (s4.equals("[")) { flag2 = false; break; } if (s4.equals("]")) { break; } } if (flag2) { s3 = ""; if (j > 0) { s3 = s3 + s.substring(0, j); } s3 = s3 + "[" + s2 + "]"; if (j + s1.length() < s.length()) { s3 = s3 + s.substring(j + s1.length(), s.length()); } flag1 = false; flag = true; } else { i = j + 1; } } else { flag1 = false; } } if (flag) { s3 = replace(s3, "*" + s1 + "*", s2); } } else if (s1.endsWith("*")) { s1 = s1.substring(0, s1.length() - 1); if (s.startsWith(s1)) { s3 = "[" + s2 + "]" + s.substring(s1.length(), s.length()); } } else if (s1.startsWith("*")) { s1 = s1.substring(1, s1.length()); if (s.endsWith(s1)) { s3 = s.substring(0, s.length() - s1.length()) + "[" + s2 + "]"; } } else if (s.equals(s1)) { s3 = "[" + s2 + "]"; } return s3; } } [/code]
  17. Sollte nun funktionieren: JaSPO-256 Eventuell Browser-/Java Cache löschen.
  18. Schaue ich mir morgen mal an. Komisch, unter Linux geht es seltsamerweise... Ich schmeiss morgen mal die Layouts raus und ersetze sie gegen Standard-Layouts.
  19. Vielleicht Servicepack 3 dran schuld? http://cpc-live.com/JaSPO256.zip das Applet (Hat eine Main.class)
  20. Seltsam... !?? Welchen Browser verwendest Du? bei mir funzt das Applet im Firefox, IE8 und Safari. Ich hab mal eben fix den "codebase" geändert. 1x aktualisieren bitte.
  21. Wer ein wenig "Herumspielen" möchte: Ich habe, basierend auf den SPO256A-AL2 Speech Synthesizer Chip einen "kleinen" Sprachsynthesizer programmiert. Dieser verwendet fertige Samples, benötigt KEINE zusätzlichen Libraries und ist (abgesehen von den Sprachsamples) recht klein. Testen könnt Ihr ihn hier: JaSPO-256 Download auf Anfrage. (Ihr könnt auch im Quelltext herausfinden, wie die .jar Datei heisst) Viel Spass damit.
  22. Du füllst es doch schon mit Daten. Fülle einfach weiter und spiele dann ab, wenn der Buffer voll ist. Mal aus meinem Source zitiert: public void writeStereo(int a, int { a = a ^ 0x80; b = b ^ 0x80; switch (format) { case SoundUtil.ULAW: data[offset] = SoundUtil.ulawToUPCM8((byte) a); data[offset + 1] = SoundUtil.ulawToUPCM8((byte) ; break; case SoundUtil.PCM8: data[offset] = SoundUtil.ulawToPCM8((byte) a); data[offset + 1] = SoundUtil.ulawToPCM8((byte) ; break; case SoundUtil.UPCM8: data[offset] = (byte) a; data[offset + 1] = (byte) b; break; } if ((offset += 2) == data.length) { line.write(data, 0, data.length); offset = 0; } updates++; } }[/code] Hier ist "data" mein Buffer...
  23. Übrigens: Einen "Live" Test meines Effektes kann man hier hören: CPCWiki People Network - Devilmarkus's webcpc - Go West (Digiblaster) (Einfach auf das Schwarze PNG "Start Here" klicken und einen Moment warten...)
  24. Ich weiss, dass ich Mono auf 2 Lautsprechern wiedergebe. Aber durch die Verzögerung im rechten Kanal erreiche ich eine Art Raumklang ----- Auf Anhieb fällt mir nur grad auf, dass Du einen sehr kleinen Buffer verwendest. Ausserdem: Ändere mal: af = new AudioFormat(frequency, 8, 2, true, false); zu: af = new AudioFormat(frequency, 8, 2, false, false); Das sollte das Knacken beheben! (In allen Fällen ändern)
  25. Hier ein Beispiel des Buffers: http://cpc-live.com/silkworm.zip Das CPC-MDL wird Mono abgespielt. Mit dem Buffer klingt es besser

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...