Töne in BlueJ 1.4.2

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Töne in BlueJ 1.4.2

    Hi,
    mein Problem ist folgendes:
    Für die Schule muss ich eine Animation zu erstellen und hatte nun mich dran gemacht eine Pacman-Animation zu machen(Animation da wir nichts interaktives machen dürfen).
    Mir kam dabei die Idee Töne wie zb. ein Piepton einzubauen.
    Hab mich schon mit javax.sound.midi... rumgeschlagen bekomm damit aber nichts zu Stande.
    Kann mir jemand vielleicht eine Lösung dafür geben die einfacher zu verstehn ist als das hier?:
    java.sun.com/j2se/1.4.2/docs/api/

    Danke im vorraus
    Es ist gelogen,das PC Spiele die Jugendlichen beeinflußen.Hätte PACMAN das getan,würden wir Heute durch dunkle Räume irren,Pillen futtern und elektronische Musik hören!
  • hast du schon gegoogelt???
    ich will nur sagen dass die meisten java programmierer sehr viel googeln
    du bist schon auf dem richtigen weg hier eine kleine hilfe

    [google]sound tutorial java[/google]

    da sind tausende von links aber die ersten scheinen recht nützlich...
    ;)

    das ist ein recht nützliches link du musst es nur bei deiner aplication einfügen...
    java2s.com/Tutorial/Java/0120_…dwavfilewithAudioClip.htm
  • Also der code sieht so aus wo ich das einbauen will hoffe der reicht auch und ich muss nicht alle klassen dafür posten:



    Quellcode

    1. public class start
    2. {
    3. public boolean ja;
    4. public int xpos;
    5. public int g1p;
    6. public int gp;
    7. public pacman p1;
    8. public level1 l1;
    9. public Geist g;
    10. public Geist g1;
    11. public Geist g2;
    12. public Geist g3;
    13. public leiste leiste;
    14. public start()
    15. {
    16. l1=new level1();
    17. leiste=new leiste();
    18. p1=new pacman();
    19. g=new Geist(380,460,"blau");
    20. g1=new Geist(440,460,"lila");
    21. g2=new Geist(480,460,"gruen");
    22. g3=new Geist(540,460,"gelb");
    23. leiste.PunkteReset();
    24. ja=true;
    25. xpos=0;
    26. g1p=0;
    27. while (ja)
    28. {
    29. if (xpos==650){
    30. ja=false;
    31. }
    32. xpos=xpos+5;
    33. p1.los(5);
    34. if(g1.posx==20){
    35. if(g1p==30){
    36. }else{
    37. g1.laufv(-1);
    38. g1p=g1p+1;
    39. }
    40. }else{
    41. g1.laufh(1);
    42. g1.posx=g1.posx+1;
    43. }
    44. if(g.posx==80){
    45. if(gp==30){
    46. }else{
    47. g.laufv(-1);
    48. gp=gp+1;
    49. }
    50. }else{
    51. g.laufh(1);
    52. g.posx=g.posx+1;
    53. }
    54. [color=#ff0000] if (xpos==50){
    55. l1.k.unsichtbarMachen();
    56. leiste.p.unsichtbarMachen();
    57. leiste.p3.unsichtbarMachen();
    58. leiste.p4.unsichtbarMachen();
    59. leiste.p5.unsichtbarMachen();
    60. leiste.p6.unsichtbarMachen();
    61. }
    62. if (xpos==100){
    63. l1.k1.unsichtbarMachen();
    64. leiste.p.sichtbarMachen();
    65. leiste.p2.unsichtbarMachen();
    66. leiste.p3.sichtbarMachen();
    67. leiste.p4.sichtbarMachen();
    68. leiste.p6.sichtbarMachen();
    69. }
    70. if (xpos==150){
    71. l1.k2.unsichtbarMachen();
    72. leiste.p2.sichtbarMachen();
    73. leiste.p4.unsichtbarMachen();
    74. leiste.p6.sichtbarMachen();
    75. }
    76. if (xpos==200){
    77. l1.k3.unsichtbarMachen();
    78. leiste.p.unsichtbarMachen();
    79. leiste.p3.unsichtbarMachen();
    80. leiste.p5.sichtbarMachen();
    81. }
    82. if (xpos==250){
    83. l1.k4.unsichtbarMachen();
    84. leiste.p.sichtbarMachen();
    85. leiste.p1.unsichtbarMachen();
    86. leiste.p3.sichtbarMachen();
    87. }
    88. if (xpos==300){
    89. l1.k5.unsichtbarMachen();
    90. leiste.p4.sichtbarMachen();
    91. }
    92. if (xpos==350){
    93. l1.k6.unsichtbarMachen();
    94. leiste.p1.sichtbarMachen();
    95. leiste.p3.unsichtbarMachen();
    96. leiste.p4.unsichtbarMachen();
    97. leiste.p5.unsichtbarMachen();
    98. leiste.p6.unsichtbarMachen();
    99. }
    100. if (xpos==400){
    101. l1.k7.unsichtbarMachen();
    102. leiste.p1.sichtbarMachen();
    103. leiste.p3.sichtbarMachen();
    104. leiste.p4.sichtbarMachen();
    105. leiste.p5.sichtbarMachen();
    106. leiste.p6.sichtbarMachen();
    107. }
    108. if (xpos==450){
    109. l1.k8.unsichtbarMachen();
    110. leiste.p4.unsichtbarMachen();
    111. }[/color]
    112. }
    113. }
    114. }
    Alles anzeigen

    bei dem rotmakierten sollte jeweils ein ton auftauchen

    nicht meckern wenns es etwas chaotisch ist...arbeite erst seit einem drittel jahr mit java vorher mit basic^^
    Es ist gelogen,das PC Spiele die Jugendlichen beeinflußen.Hätte PACMAN das getan,würden wir Heute durch dunkle Räume irren,Pillen futtern und elektronische Musik hören!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von valvius ()

  • ok ich kenne mich jetzt aus nur ich wurde es selber einbauen und probieren ob das geht weil ich will dir nichts geben oder vorschlagen was nicht funktioniert, deswegen wurde ich schon die anderen klassen brauchen. aber schick mir ne private nachricht damit es nicht unübersichtlich wird.

    ist ok am anfang war ich auch so unordetlich, mit der zeit kennst du dich dann sleber nicht mehr aus und wirdst ordentlicher schreiben... ;D

    PS: was für ein format heat deine sound datei, die würde ich auch brauchen...
    auf rapidshare.com kannst du es rauflanden
  • Du solltest dich entscheiden ob du eine bestehende Datei abspielen willst oder ob du den Ton im Code erzeugst. Bei ersterem solltest du die Lizens des Sounds beachten.

    Ich habe mal das Programm aus dem ersten Link den ich dir gegeben habe etwas zurecht gekürzt:

    Quellcode

    1. import javax.sound.midi.MidiDevice;
    2. import javax.sound.midi.MidiSystem;
    3. import javax.sound.midi.Receiver;
    4. import javax.sound.midi.ShortMessage;
    5. public class Test
    6. {
    7. public static void main(String[] args) throws Exception
    8. {
    9. MidiDevice.Info info = null;
    10. for (MidiDevice.Info tmpInfo : MidiSystem.getMidiDeviceInfo())
    11. {
    12. if ("Java Sound Synthesizer".equals(tmpInfo.getName()))
    13. {
    14. info = tmpInfo;
    15. break;
    16. }
    17. }
    18. if (info != null)
    19. {
    20. MidiDevice out = MidiSystem.getMidiDevice(info);
    21. if (!out.isOpen())
    22. {
    23. out.open();
    24. }
    25. Receiver outRcvr = out.getReceiver();
    26. ShortMessage myMsg = new ShortMessage();
    27. // Setze die Eigenschaften des Tones:
    28. // (Midi Kommando, Kanal,
    29. // erstes Datenbyte (Tonhöhe), zweites Db.(Dynamik))
    30. myMsg.setMessage(ShortMessage.NOTE_ON, 0, 60, 93);
    31. outRcvr.send(myMsg, -1);
    32. Thread.sleep(2000);
    33. out.close();
    34. }
    35. else
    36. {
    37. System.out.println("Java Sound Synthesizer not found");
    38. }
    39. }
    40. }
    Alles anzeigen


    Ich denke das ist so ziemlich das, was du haben willst. Das Einzige was dir bei der Lösung im Wege steht ist wohl deine Lesebereitschaft... Mach dir doch einfach mal die Mühe.
  • naja hab jetzt nochmal deinen link gelesen und ich versteh trotzdem nicht viel mehr
    mit deinem code hab ich verstanden wie man einzelne töne erzeugen kann, versteh aber nicht wie ich das "hörbar" machen kann.
    mit der seite weiß ich auch wie man eine datei dann abspielt nur weiß ich da nicht wie ich das einzubauen habe.
    Es ist gelogen,das PC Spiele die Jugendlichen beeinflußen.Hätte PACMAN das getan,würden wir Heute durch dunkle Räume irren,Pillen futtern und elektronische Musik hören!
  • so hab nun doch noch einen ton mit dem code von Hafner machen können.
    hab dann versucht eine midi datei abzuspielen dazu hab ich noch mal gegooglt und folgendes hab ich dann erreicht:

    Quellcode

    1. import javax.sound.midi.*;
    2. import java.io.*;
    3. public class MidiPlayer {
    4. public static void main(String args[]) {
    5. if(args.length == 0) {
    6. helpAndExit();
    7. }
    8. String file = args[0];
    9. if(!file.endsWith(".mid")) {
    10. helpAndExit();
    11. }
    12. File midiFile = new File("C:\\Dokumente und Einstellungen\\tönetest\\faed_4");
    13. if(!midiFile.exists() || !midiFile.isDirectory() || !midiFile.canRead()) {
    14. helpAndExit();
    15. }
    16. try {
    17. Sequencer sequencer = MidiSystem.getSequencer();
    18. sequencer.setSequence(MidiSystem.getSequence(midiFile));
    19. sequencer.open();
    20. sequencer.start();
    21. while(true) {
    22. if(sequencer.isRunning()) {
    23. try {
    24. Thread.sleep(1000);
    25. } catch(InterruptedException ignore) {
    26. break;
    27. }
    28. } else {
    29. break;
    30. }
    31. }
    32. sequencer.stop();
    33. sequencer.close();
    34. } catch(MidiUnavailableException mue) {
    35. System.out.println("Midi device unavailable!");
    36. } catch(InvalidMidiDataException imde) {
    37. System.out.println("Invalid Midi data!");
    38. } catch(IOException ioe) {
    39. System.out.println("I/O Error!");
    40. }
    41. }
    42. private static void helpAndExit() {
    43. System.out.println("Usage: java MidiPlayer midifile.mid");
    44. System.exit(1);
    45. }
    46. }
    Alles anzeigen

    nun aber gibt der nichts weiter als Usage: java MidiPlayer midifile.mid aus und keinen einzigen ton.
    könnt ihr mir vll sagen wo da der fehler steck?


    PS. ich lasse java sein sobald ich mit meinem schulprojekt fertig bin,es ist einfach nicht mein fall
    Es ist gelogen,das PC Spiele die Jugendlichen beeinflußen.Hätte PACMAN das getan,würden wir Heute durch dunkle Räume irren,Pillen futtern und elektronische Musik hören!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von valvius ()

  • Ich glaube das dich eher deine Aufgabe frustriert und nicht die Programmiersprache. Ich fürchte du wirst bei anderen höheren Sprachen auf ähnliche Situationen treffen. Aber egal.

    Wenn du (richtiger weise) mit Übergabeparametern arbeitest, dann solltest du sie auch verwenden. Aber ich denke mal, dass hast du nur zum debuging gemacht.

    "!midiFile.isDirectory()"
    Du beendest das Programm wenn das MIDI-File kein Verzeichnis ist?

    Wenn man das korrigiert funktioniert den Programm doch einwandfrei. Du solltest ein bisschen mehr mit Fehlermeldungen (oder gar Exceptions) arbeiten. Ansonsten weißt du ja gar nicht was schief geht, wenn etwas schief geht. Da kann man natürlich ewig nach dem Fehler suchen.

    Quellcode

    1. import javax.sound.midi.*;
    2. import java.io.*;
    3. public class MidiPlayer {
    4. public static void main(String args[]) {
    5. if(args.length == 0) {
    6. helpAndExit();
    7. }
    8. String file = args[0];
    9. if(!file.endsWith(".mid")) {
    10. helpAndExit();
    11. }
    12. File midiFile = new File(file);
    13. if(!midiFile.exists() || midiFile.isDirectory() || !midiFile.canRead()) {
    14. helpAndExit();
    15. }
    16. try {
    17. Sequencer sequencer = MidiSystem.getSequencer();
    18. sequencer.setSequence(MidiSystem.getSequence(midiFile));
    19. sequencer.open();
    20. sequencer.start();
    21. while(true) {
    22. if(sequencer.isRunning()) {
    23. try {
    24. Thread.sleep(1000);
    25. } catch(InterruptedException ignore) {
    26. break;
    27. }
    28. } else {
    29. break;
    30. }
    31. }
    32. sequencer.stop();
    33. sequencer.close();
    34. } catch(MidiUnavailableException mue) {
    35. System.out.println("Midi device unavailable!");
    36. } catch(InvalidMidiDataException imde) {
    37. System.out.println("Invalid Midi data!");
    38. } catch(IOException ioe) {
    39. System.out.println("I/O Error!");
    40. }
    41. }
    42. private static void helpAndExit() {
    43. System.out.println("Usage: java MidiPlayer midifile.mid");
    44. System.exit(1);
    45. }
    46. }
    Alles anzeigen
  • Hafner schrieb:


    "!midiFile.isDirectory()"
    Du beendest das Programm wenn das MIDI-File kein Verzeichnis ist?

    das war extra eingebaut in der hoffnung das ich dadurch erkenne wo der fehler ist, hatte aber nix gebract un dich habe den neuen fehler vergessen zu beseitigen

    auch wenn ich das weg mache bekomme ich noch die meldung:"Usage: java MidiPlayer midifile.mid"

    kann da etwas an meiner eingabe für file hier liegen
    File midiFile = new File(file);
    sieht bei mir so aus: File midiFile = new File("C:\\Dokumente und Einstellungen\\matthias w\\Eigene Dateien\\tönetest\\pacchomp");
    und so : File midiFile = new File("C:\\Dokumente und Einstellungen\\matthias w\\Eigene Dateien\\tönetest\\pacchomp.mid");
    und so : File midiFile = new File("C:\\Dokumente und Einstellungen\\matthias w\\Eigene Dateien\\tönetest\\faed_4.mid");
    und so : File midiFile = new File("C:\\Dokumente und Einstellungen\\matthias w\\Eigene Dateien\\tönetest\\faed_4");

    alles gibt die selbe meldung aber keinen ton oder sonst was
    Es ist gelogen,das PC Spiele die Jugendlichen beeinflußen.Hätte PACMAN das getan,würden wir Heute durch dunkle Räume irren,Pillen futtern und elektronische Musik hören!
  • Du brauchst aber trotzdem einen Übergabeparameter sonst ist schon hier Schluss:

    Quellcode

    1. if(args.length == 0) {
    2. helpAndExit();
    3. }

    und wenn der Übergabeparameter kein ".mid" am Ende hat ist hier Schluss:

    Quellcode

    1. if(!file.endsWith(".mid")) {
    2. helpAndExit();
    3. }


    Das meinte ich mit "Du solltest ein bisschen mehr mit Fehlermeldungen (oder gar Exceptions) arbeiten".

    versuche doch mal den Code so umzuschreiben:

    Quellcode

    1. import javax.sound.midi.*;
    2. import java.io.*;
    3. public class MidiPlayer {
    4. public static void main(String args[]) {
    5. if(args.length == 0) {
    6. System.out.println("Es ist ein Übergabeparameter erforderlich.");
    7. System.exit(1);
    8. }
    9. String file = args[0];
    10. if(!file.endsWith(".mid")) {
    11. System.out.println("Der Übergabeparameter muss ein *.mid-File sein.");
    12. System.exit(1);
    13. }
    14. File midiFile = new File(file);
    15. if(!midiFile.exists()) {
    16. System.out.println("Das angegebene File existiert nicht.");
    17. System.exit(1);
    18. }
    19. if(midiFile.isDirectory()) {
    20. System.out.println("Der Übergabeparameter verweist auf ein Verzeichnis anstatt auf ein File.");
    21. System.exit(1);
    22. }
    23. if(!midiFile.canRead()) {
    24. System.out.println("Es besteht kein Lesezugriff ");
    25. System.exit(1);
    26. }
    27. try {
    28. Sequencer sequencer = MidiSystem.getSequencer();
    29. sequencer.setSequence(MidiSystem.getSequence(midiFile));
    30. sequencer.open();
    31. sequencer.start();
    32. while(true) {
    33. if(sequencer.isRunning()) {
    34. try {
    35. Thread.sleep(1000);
    36. } catch(InterruptedException ignore) {
    37. break;
    38. }
    39. } else {
    40. break;
    41. }
    42. }
    43. sequencer.stop();
    44. sequencer.close();
    45. }
    46. catch(MidiUnavailableException e) {
    47. System.out.println("Midi device unavailable!");
    48. e.printStackTrace();
    49. }
    50. catch(InvalidMidiDataException e) {
    51. System.out.println("Invalid Midi data!");
    52. e.printStackTrace();
    53. }
    54. catch(IOException e) {
    55. System.out.println("I/O Error!");
    56. e.printStackTrace();
    57. }
    58. }
    59. }
    Alles anzeigen

    Jetzt kannst du viel besser erkennen was schief läuft anstatt nur die Standardausgabe "Usage: java MidiPlayer midifile.mid" zu bekommen.