Entwickler-Ecke

Windows API - windows.beep knackst bei ungeraden Frequenzen


Daniel L. - Mo 27.02.17 12:29
Titel: windows.beep knackst bei ungeraden Frequenzen
Hi zusammen!

Ich bastele gerade ein einem Prog, welches Melodien via windows.beep "abspielt" - oder besser: abpiepst.

function Beep(dwFreq, dwDuration: DWORD): BOOL; stdcall;

Jetzt hab ich ich mit Entsetzen festgestellt:
Immer, wenn die Frequenz eine ungerade Zahl ist, und die Dauer mind. 1000 Millisekunden beträgt,
kommt regelmässig nach ca. 500-Millisekunden ein Knacksgeräusch - es klingt so, als ob das Piepen kurz unterbrochen wird... :shock:


Delphi-Quelltext
1:
2:
windows.Beep(4411500); // knackst
windows.Beep(4401500); // knackst nicht


Nun kann ich natürlich den gewünschten Frequenzwert (der bei mir intern sowieso erstmal als double vorliegt) auf die nächste gerade Zahl runden (statt allgemein 'round' zu nutzen) -
diese akkustische Ungenauigkeit wäre wohl noch akzeptabel.

Trotzdem würde ich gerne mal wissen, was da los ist....

Nutze W7

Gruß: Daniel


jaenicke - Mo 27.02.17 13:54

Da Windows 7 und höher Beep ohnehin normalerweise auf die Soundkarte rendern, verstehe ich nicht so recht weshalb du das noch benutzt.

Ob es bei mir auch knackst, kann ich mal testen.


Daniel L. - Mo 27.02.17 14:20

Ob es über die Soundkarte läuft oder nicht, wäre mir erstmal egal.
Mir gehts um einfaches abspielen von Tönen.

Wie könnte man das denn ohne 'windows.beep' machen?

edit: ok - besser vorher suchen:
es gibt etliche tools die sowas können - werd das beizeiten mal testen

Bliebe noch die Frage nach den Knacksern...

Daniel


Delete - Mo 27.02.17 15:00

- Nachträglich durch die Entwickler-Ecke gelöscht -


Delphi-Laie - Mo 27.02.17 15:09

user profile iconDaniel L. hat folgendes geschrieben Zum zitierten Posting springen:
diese akkustische Ungenauigkeit wäre wohl noch akzeptabel.


Du sinnierst über 1 Hz als "akkustische Ungenauigkeit", verwendest aber windows.beep?

windows.beep erzeugt Rechteckschwingungen und somit massiv harmonische Obertöne, was diesen Ton ziemlich verrauscht klingen läßt. Jede reine Sinusschwingung (auch am Computer auch mit Delphi erzeugbar) hört sich zwar "nackt", dafür aber rein an. Ganz zu schweigen von Midiklängen.


Daniel L. - Mo 27.02.17 15:35

user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:

Du sinniersrst über 1 Hz als "akkustische Ungenauigkeit", verwendest aber windows.beep?


Ich meine damit nur die Tonhöhe.
Unterschiede von einem Herz sind bei nicht zu hohen Tönen durchaus wahrnehmbar,
wie auch bei Musikinstrumenten, die bisweilen auch sehr obertonreich klingen