1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Sound in Turbo Pascal

Discussion in 'Programmieren' started by schwarzm, Feb 12, 2006.

Thread Status:
Not open for further replies.
  1. schwarzm

    schwarzm Viertel Gigabyte

    Hallo,

    ich habe hier gerade ein Problem und da ich mich im Bereich der Programmierung nicht wirklich sonderlich gut auskenne hoffe ich von euch Hilfe zu erhalten.

    Es geht um Konsolenanwendungen. Ich habe folgenden Quelltext geschrieben:
    Code:
    program Testprogramm;
    uses crt;
    begin;
    sound (440);
    delay (16000);
    nosound;
    sound (396);
    delay (16000);
    nosound;
    sound (440);
    delay (16000);
    nosound;
    sound (352);
    delay (16000);
    nosound;
    sound (440);
    delay (16000);
    nosound;
    sound (330);
    delay (16000);
    nosound;
    sound (440);
    delay (16000);
    nosound;
    sound (297);
    delay (16000);
    nosound;
    sound (440);
    delay (16000);
    nosound;
    sound (280);
    delay (16000);
    nosound;
    sound (440);
    delay (16000);
    nosound;
    sound (297);
    delay (16000);
    nosound;
    sound (440);
    delay (16000);
    nosound;
    sound (330);
    delay (16000);
    nosound;
    sound (440);
    delay (16000);
    nosound;
    sound (352);
    delay (16000);
    nosound;
    end.
    
    Dahinter steckt keine große Intention. Es sollen halt nur verschiedene Töne wiedergegeben werden in einer bestimmten Reihenfolge.

    Wenn ich jedoch die *.exe erstelle kommt nur ein einziger Ton raus. Ich kann nicht festellen welcher. Wenn ich jedoch in Turbo Pascal 6 die Vorschau ansehe / höre wird die Melodie korrekt abgespielt. Auch habe ich die Zahl bei delay schon geändert, da mir 16000 auch als sehr lang vorkommt.

    Wer kann mir da Hilfestellung leisten? Bin über jede Antwort dankbar. :)

    Gruß, schwarzm
     
  2. TheD0CT0R

    TheD0CT0R Dr. h.c. Mod

    Hallo Kollege

    Hab den Quellcode durch den alten TP 6 Kompiler gejagt, da spielt die .exe die Melodie problemlos ab, wenn auch etwas schnell.

    Das Geschwindigkeitsproblem liegt am CPU-Takt, das Programm wird also auf jedem PC mit ner anderen Geschwindigkeit abgespielt werden. Aber darum können wir uns später kümmern.


    Welchen Kompiler benutzt du, bzw. welche IDE?
     
  3. schwarzm

    schwarzm Viertel Gigabyte

    Hallo,

    danke für deine Antwort. Ich hatte DevPascal benutzt und dabei war nie das rausgekommen was raus kommen sollte.

    Nun habe ich auch mal den alten TP6 Kompiler benutzt und damit funktioniert es bestens.

    Danke für deine Hilfe :)

    Gruß
    schwarzm
     
  4. Michi0815

    Michi0815 Guest

    heißer tipp: vergiss delay. funktioniert einfach nicht (mehr) zuverlässig.

    verwende je nach verwendetem compiler/bibliotheken entweder sleep (teil der windows api) oder (als ersatz) semaphoren...
     
  5. schwarzm

    schwarzm Viertel Gigabyte

    Ich befürchte das musst du mir genauer erklären...

    Im Grunde suche ich einen Befehl der den selben Effekt hat wie "delay" nur nicht so ungenau ist. Nun frage ich mich wie ich den Windows api Befehl in meinen Code einbauen kann.

    Wobei, sollte die Anwendung "das Lied" nicht korrekt abspielen nachdem ich das kompiliert habe und die *.exe besteht?

    EDIT: Im Anhang findet ihr die kompilierte *.exe Datei. Habe ich gerade nach dem selben Schema erstellt. Kann die bitte jeder mal posten und beschreiben ob es sich schnell oder langsam anhört. Danke! :)

    Danke schonmal,
    schwarzm
     

    Attached Files:

  6. Michi0815

    Michi0815 Guest

    Unit Delay:
    Code:
    Unit Delay;
    
    interface
    type dWord = longint;
    
    Procedure WinDelay(ms: dWord);
    
    implementation
    
    Procedure WinDelay(ms: dWord); external 'Kernel32.dll' name 'Sleep';
    
    end.
    
    Musikprogramm:
    Code:
    program Testprogramm;
    uses crt, Delay;
    begin;
    sound (440);
    WinDelay (16000);
    nosound;
    sound (396);
    WinDelay (16000);
    nosound;
    16000);
    [...]
    
    btw: die .exe musiziert bei mir ganz ok
     
  7. schwarzm

    schwarzm Viertel Gigabyte

    Da scheint was nicht zu stimmen. Habe das gemacht was man mit einem Unit für gewöhnlich so macht ;)

    Danach bekam ich die Meldung:
    Error 85: ";" expected.

    Was ist nun falsch gelaufen?
     
  8. TheD0CT0R

    TheD0CT0R Dr. h.c. Mod

    Wo genau? Die IDE zeigt dir doch bestimmt an in welcher Zeile das ; fehlt, oder?
     
  9. schwarzm

    schwarzm Viertel Gigabyte

    Kursiv, fett und unterstichen. An dieser Stelle sollte anscheinend ein Simekolon hin, macht doch eigentlich keinen Sinn :confused:
     
  10. Michi0815

    Michi0815 Guest

    für welche plattform kompilierst du die unit (dos, windows,...)
     
  11. schwarzm

    schwarzm Viertel Gigabyte

    Für Windows. Aber irgendwie könnte die Unit für Dos sein...
     
  12. Michi0815

    Michi0815 Guest

    wenn du funktionen aus der windows-api verwenden willst, dann musst du zwangsläufig für windows kompilieren....

    mach mal "uses windows;" oder "uses winprocs, wintypes;" (oder welche unit(s) sonst in devpascal für windows zuständig ist/sind) dann sollte die sleep-funktion ohnehin gehen.
     
Thread Status:
Not open for further replies.

Share This Page