Bonjour,
en essayant de porter des programmes Bass écrit en Delphi pour Windows vers Lazarus pour Linux, je n'arrive pas à migrer cette procédure :
rotpos c'est un Single, la fonction fmod la voilà :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 procedure Rotate(handle: HDSP; channel: DWORD; buffer: Pointer; length: DWORD; user: Pointer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; var a: DWORD; d: PSingle; begin d := buffer; a := 0; while (a < (length div 4)) do begin d^ := d^ * Abs(Sin(rotpos)); Inc(d); d^ := d^ * Abs(Cos(rotpos)); rotpos := fmod(rotpos + 0.00003, Pi); Inc(d); a := a + 2; end; end;
et si ça peut vous inspirer, voilà une procédure un peu similaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 function fmod(a, b: Single): Single; begin Result := a - (b * Trunc(a / b)); end;
Tout ce que je gagne à l'exécution, c'est un plantage tellement fort que ça me fige tout le Bureau, je suis sauvé par Linux et son système de multi-écrans multi-consoles multi-users, ce qui me permet de me logger autrement pour aller tuer le process récalcitrant, ouf !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 procedure Echo(handle: HDSP; channel: DWORD; buffer: Pointer; length: DWORD; user: Pointer); stdcall; var a: DWORD; d: PSingle; l, r: Single; begin d := buffer; a := 0; while (a < (length div 4)) do begin l := d^ + (echbuf[echpos,1] / 2); Inc(d); r := d^ + (echbuf[echpos,0] / 2); Dec(d); { Basic "bathroom" reverb } d^ := l; echbuf[echpos,0] := l; Inc(d); d^ := r; echbuf[echpos,1] := r; echpos := echpos + 1; if (echpos = ECHBUFLEN) then echpos := 0; Inc(d); a := a + 2; end; end;
Je sais que je suis mauvais sur les pointeurs mais là, je touche le fond.
Alors grand merci à la bonne âme charitable qui me sortira de ce mauvais pas.
Partager