AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Ton über den Gehäuse internen Lautsprecher!
Thema durchsuchen
Ansicht
Themen-Optionen

Ton über den Gehäuse internen Lautsprecher!

Ein Thema von Trouble_Maker · begonnen am 25. Mär 2003 · letzter Beitrag vom 26. Mär 2003
Antwort Antwort
Benutzerbild von Trouble_Maker
Trouble_Maker

Registriert seit: 30. Jan 2003
244 Beiträge
 
Delphi 6 Personal
 
#1

Ton über den Gehäuse internen Lautsprecher!

  Alt 25. Mär 2003, 22:07
Hiho leute! Ich möchte einen Ton/Töne aus dem internen Lautsprecher (also nicht über die normalen PC-Boxen) "abspiele"
iCh habe es mit folgendem Code probiert:

Code:

  Windows NT/2000/XP:
  Windows.Beep(dwFreq, dwDuration);

  dwFreq : frequency, in hertz, of the sound.
  dwDuration : duration, in milliseconds, of the sound.




// Windows 9x/NT-Platforms:

procedure SetPort(address, Value: Word);
var
  bValue: Byte;
begin
  bValue := trunc(Value and 255);
  asm
    mov dx, address
    mov al, bValue
    out dx, al
  end;
end;

function GetPort(address: Word): Word;
var
  bValue: Byte;
begin
  asm
    mov dx, address
    in al, dx
    mov bValue, al
  end;
  GetPort := bValue;
end;

procedure Sound(aFreq, aDelay: Integer);

  procedure DoSound(Freq: Word);
  var
    B: Byte;
  begin
    if Freq > 18 then
    begin
      Freq := Word(1193181 div Longint(Freq));
      B   := Byte(GetPort($61));

      if (B and 3) = 0 then
      begin
        SetPort($61, Word(B or 3));
        SetPort($43, $B6);
      end;

      SetPort($42, Freq);
      SetPort($42, Freq shr 8);
    end;
  end;

  procedure Delay(MSecs: Integer);
  var
    FirstTickCount: LongInt;
  begin
    FirstTickCount := GetTickCount;
    repeat
      Sleep(1);
      //or use Application.ProcessMessages instead of Sleep
    until ((GetTickCount - FirstTickCount) >= Longint(MSecs));
  end;
   
begin
  if Win32Platform = VER_PLATFORM_WIN32_NT then
  begin
    Windows.Beep(aFreq, aDelay);
  end
  else
  begin
    DoSound(aFreq);
    Delay(aDelay);
  end;
end;

procedure NoSound;
var
  Value: Word;
begin
  if not (Win32Platform = VER_PLATFORM_WIN32_NT) then
  begin
    Value := GetPort($61) and $FC;
    SetPort($61, Value);
  end;
end;


// Example:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Sound(500, 1000);
  Sound(700, 1000);
  Sound(900, 1000);
  NoSound;
end;
bei mir findet er aber das "NoSound" am ende nicht!!! Diese habe ich probeweiße entfernt und gestartet! Ich musste den Rechner neustarten, weil mir das Piepen total auf die nerven ging! Und ich wusste nicht, wie ich das ausschalte!
Kann mir jemand helfen ?!?

cu Trouble_Maker
  Mit Zitat antworten Zitat
Benutzerbild von Trouble_Maker
Trouble_Maker

Registriert seit: 30. Jan 2003
244 Beiträge
 
Delphi 6 Personal
 
#2
  Alt 25. Mär 2003, 22:22
oh cool!
Hat jetzt komischerweiße doch geklappt *freu*
...
Jetzt aber trotzdem noch ne Frage! Ich möchte den Sound abspielen, aber dann soll er erst aufhören, wenn ein Button geklickt wird!
ICh kann doch jetzt nicht einfach das NoSound in die Procedure von dem Button schreiben !?!

Danke

Trouble_Maker
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#3
  Alt 25. Mär 2003, 22:39
Doch, kannst Du. Das geht aber nur unter Windows 95/98, unter NT beendet die Beep-Funktion den Sound von allein.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Trouble_Maker
Trouble_Maker

Registriert seit: 30. Jan 2003
244 Beiträge
 
Delphi 6 Personal
 
#4
  Alt 25. Mär 2003, 23:07
is das dann nur unter NT oder auch 2000 und XP ?!?

Danke

Trouble_Maker
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#5
  Alt 26. Mär 2003, 09:16
2000 und XP sind auch NT Systeme Von daher auch bei denen.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz