| Autor |
Beitrag |
galagher
      
Beiträge: 2562
Erhaltene Danke: 46
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Sa 13.08.05 08:44
Hallo!
Ich weiss, man soll eigentlich nicht ganzen Source-Code posten, aber ich verstehe diesen Code nicht, um ihn selbst abzuändern.
Kann mir bitte jemand diesen Code so ändern, dass der Ton nur über die Soundkarte, nicht aber gleichzeitig auch über den System-Lautsprecher ausgegeben wird?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50:
| with WaveFormatEx do begin wFormatTag := WAVE_FORMAT_PCM; nChannels := Mono; nSamplesPerSec := SampleRate; wBitsPerSample := $0008; nAvgBytesPerSec := nSamplesPerSec * nBlockAlign; nBlockAlign := (nChannels * wBitsPerSample) div 8; cbSize := 0; end;
MS := TMemoryStream.Create; with MS do begin DataCount := (Duration * SampleRate) div 1000; RiffCount := Length(WaveId) + Length(FmtId) + SizeOf(DWord) + SizeOf(TWaveFormatEx) + Length(DataId) + SizeOf(DWord) + DataCount; Write(RiffId[1], 4); Write(RiffCount, SizeOf(DWord)); Write(WaveId[1], Length(WaveId)); Write(FmtId[1], Length(FmtId)); TempInt := SizeOf(TWaveFormatEx); Write(TempInt, SizeOf(DWord)); Write(WaveFormatEx, SizeOf(TWaveFormatEx)); Write(DataId[1], Length(DataId)); Write(DataCount, SizeOf(DWord)); w := 2 * Pi * Hz; for i := 0 to DataCount - 1 do begin SoundValue := 127 + trunc(127 * sin(i * w / SampleRate)); Write(SoundValue, SizeOf(Byte)); end; sndPlaySound(MS.Memory, SND_MEMORY or SND_SYNC); MS.Free; end; |
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Narses
      

Beiträge: 10184
Erhaltene Danke: 1259
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 13.08.05 11:25
Moin!
galagher hat folgendes geschrieben: | | dass der Ton nur über die Soundkarte, nicht aber gleichzeitig auch über den System-Lautsprecher ausgegeben wird? |
Da die Soundausgabe hierdrüber passiert:
Delphi-Quelltext 1:
| sndPlaySound(MS.Memory, SND_MEMORY or SND_SYNC); |
kann ich mir nur vorstellen, dass es an deinem Board oder den Systemeinstellungen liegt, das wird im Code nicht vorgegeben.
cu
Narses
|
|
galagher 
      
Beiträge: 2562
Erhaltene Danke: 46
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Sa 13.08.05 20:04
Narses hat folgendes geschrieben: | | kann ich mir nur vorstellen, dass es an deinem Board oder den Systemeinstellungen liegt |
Kann es daran liegen, dass die Soundkarte OnBoard ist?
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Narses
      

Beiträge: 10184
Erhaltene Danke: 1259
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 13.08.05 21:49
Moin!
galagher hat folgendes geschrieben: | | Kann es daran liegen, dass die Soundkarte OnBoard ist? |
Möglicherweise, das kann man nicht so genau sagen; gibt Boards (z.B. von FSC), bei denen ist das immer so.
cu
Narses
|
|
galagher 
      
Beiträge: 2562
Erhaltene Danke: 46
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Sa 13.08.05 21:56
Vergesst es - ich selbst habe die Anweisung geschrieben, die den Beep auf dem Systemlautsprecher ausgibt...
Aber jetzt tritt ein anderes Problem auf, und diesmal bin ich nicht schuld: Wenn ich auf dem Systemlautsprecher beepen lasse, beept auch die Soundkarte. Wie kann ich das abstellen (es soll nur der Systemlautsprecher beepen)? Hier der Code, und Assembler kann ich nun wirklich nicht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| function InPort(PortAddr:word): byte; assembler; stdcall; asm mov dx,PortAddr in al,dx end;
procedure OutPort(PortAddr: word; Databyte: byte); assembler; stdcall; asm mov al,Databyte mov dx,PortAddr out dx,al end;
procedure Sound(Hz: Word; Duration: Integer); var TmpW : Word; begin if Hz < 1 then Hz := 1; OutPort($43,182); TmpW :=InPort($61); OutPort($61,TmpW or 3); OutPort($42,lo(1193180 div hz)); OutPort($42, hi(1193180 div hz)); Sleep(Duration); OutPort($43,182); TmpW := InPort($61); OutPort($61,TmpW and 3); end; |
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
|