Sound in Turbo Pascal

Dieses Thema im Forum "Programmieren" wurde erstellt von schwarzm, 12. Februar 2006.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. schwarzm

    schwarzm Viertel Gigabyte

    Registriert seit:
    24. Januar 2005
    Beiträge:
    3.979
    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

    Registriert seit:
    2. Dezember 2003
    Beiträge:
    17.262
    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

    Registriert seit:
    24. Januar 2005
    Beiträge:
    3.979
    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

    Registriert seit:
    7. Januar 2004
    Beiträge:
    3.429
    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

    Registriert seit:
    24. Januar 2005
    Beiträge:
    3.979
    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
     

    Anhänge:

  6. Michi0815

    Michi0815 Guest

    Registriert seit:
    7. Januar 2004
    Beiträge:
    3.429
    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

    Registriert seit:
    24. Januar 2005
    Beiträge:
    3.979
    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

    Registriert seit:
    2. Dezember 2003
    Beiträge:
    17.262
    Wo genau? Die IDE zeigt dir doch bestimmt an in welcher Zeile das ; fehlt, oder?
     
  9. schwarzm

    schwarzm Viertel Gigabyte

    Registriert seit:
    24. Januar 2005
    Beiträge:
    3.979
    Kursiv, fett und unterstichen. An dieser Stelle sollte anscheinend ein Simekolon hin, macht doch eigentlich keinen Sinn :confused:
     
  10. Michi0815

    Michi0815 Guest

    Registriert seit:
    7. Januar 2004
    Beiträge:
    3.429
    für welche plattform kompilierst du die unit (dos, windows,...)
     
  11. schwarzm

    schwarzm Viertel Gigabyte

    Registriert seit:
    24. Januar 2005
    Beiträge:
    3.979
    Für Windows. Aber irgendwie könnte die Unit für Dos sein...
     
  12. Michi0815

    Michi0815 Guest

    Registriert seit:
    7. Januar 2004
    Beiträge:
    3.429
    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.
     
Status des Themas:
Es sind keine weiteren Antworten möglich.

Diese Seite empfehlen