Форум: "Начинающим";
Текущий архив: 2009.04.12;
Скачать: [xml.tar.bz2];
ВнизC++ to Delphi Найти похожие ветки
← →
CodeMaster © (2009-02-19 10:00) [0]Помогите перевести вот эту строчку на Delphi:
typedef VisInfo* (WINAPI *QUERYMODULE)(void);
← →
clickmaker © (2009-02-19 11:21) [1]type
PVisInfo = ^TVisInfo;
TQUERYMODULE = function: PVisInfo; stdcall;
← →
CodeMaster © (2009-02-21 08:50) [2]Есть ещё один вопросик - как выглядит вот эта строка в Delphi?
BOOL (*Render)( unsigned long *Video, int width, int height, int pitch, VisData* pVD); /* Function called to Render */
← →
CodeMaster © (2009-02-21 14:02) [3]Помогите Плис
← →
KilkennyCat © (2009-02-21 15:06) [4]И прочей отечественной электронике.
← →
DVM © (2009-02-21 15:17) [5]
> CodeMaster ©
C2PAS32.EXE
← →
CodeMaster © (2009-02-21 16:00) [6]DVM большое спасибо
← →
CodeMaster © (2009-02-21 17:05) [7]Мм возник последний вопрос. Программа C2PAS32.exe перевела знак ">>" как shr. Но моя программа почему-то мне постоянно пишет Floating point division by Zero.
library POGi_Vis;
uses
SysUtils,
Classes,
bass,
Windows,
Graphics,
math,GR32,
main in "main.pas";
{$R *.res}
type
TQueryModule = function: PVisInfo; stdcall;
var
VisHandle: THandle;
VisInfo: TQueryModule;
VisData: PvisData;
VisDLLHandle: THandle;
VisBuff: PByte;
W,H: integer;
VisScreen: TBitmap32;
bi: TBitmapInfo;
function POGiVis_PluginFree: Boolean; stdcall; export;
begin
end;
function POGiVis_Render(Hwnd: THandle; HT: HStream): Boolean; stdcall; export;
var
i: integer;
info: Bass_ChannelInfo;
Data: array[0..1025] of DWORD;
FFT: array[0..256] of Single;
begin
if Bass_ChannelIsActive(HT) = BASS_ACTIVE_PLAYING then begin
new(VisData);
VisData.MillSec:= Trunc(Bass_ChannelBytes2Seconds(ht,Bass_ChannelGetPosition(HT,BASS_POS_BYTE)) * 1000);
Bass_ChannelGetInfo(HT,Info);
if (VisInfo.lRequired and VI_WAVEFORM) = VI_WAVEFORM then begin
if info.chans = 1 then begin
Bass_ChannelGetData(HT,@data,1024);
for i:= 0 to 511 do begin
VisData.WaveForm[0,i]:= Data[i] shr 8;
VisData.WaveForm[1,i]:= Data[i] shr 8;
end;
end
else begin
Bass_ChannelGetData(HT,@data,2048);
for i:= 0 to 511 do begin
VisData.WaveForm[0,i]:= Data[i * 2] shr 8;
VisData.WaveForm[1,i]:= data[(i*2)+1] shr 8;
end;
end;
end;
if (VisInfo.lRequired and VI_SPECTRUM) = VI_SPECTRUM then begin
Bass_ChannelGetData(HT,@FFT,BASS_DATA_FFT512);
for i:= 0 to 255 do begin
VisData.Spectrum[0,i]:= Min(255,Round(FFT[i] * 512));
VisData.Spectrum[1,i]:= Min(255,Round(FFT[i] * 512));
end;
end;
end;
VisScreen.Clear(clRed);
VisInfo.Render(VisScreen.Bits,W,H,W,VisData);
BitBlt(HWND,0,0,W,H,VisScreen.Canvas.Handle,0,0,SRCCOPY);
Dispose(VisData);
end;
function POGiVis_PluginLoad(const FileName: String; nWidth,nHeight: Integer): Boolean; stdcall; export;
begin
VisInfo := nil;
if VisDLLHandle <> 0 then
begin
FreeLibrary(VisDLLHandle);
VisDLLHandle := 0;
end;
VisDLLHandle := LoadLibrary(PChar(filename));
if (VisDLLHandle = 0) then
exit;
@VisInfo := GetProcAddress(VisDLLHandle, "QueryModule");
if @VisInfo <> nil then
begin
VisInfo.Initialize;
end;
W:= nWidth;
H:= nHeight;
bi.bmiHeader.biSize:= sizeof(bi.bmiHeader);
bi.bmiHeader.biWidth:= nWidth;
bi.bmiHeader.biHeight:= nHeight;
bi.bmiHeader.biPlanes:= 1;
bi.bmiHeader.biBitCount:= 32;
VisScreen:= TBitmap32.Create;
VisScreen.Width:= nWidth;
VisScreen.Height:= nHeight;
end;
function POGiVis_Init: Boolean; stdcall; export;
begin
Result:= True;
end;
exports POGiVis_Init,POGiVis_PluginLoad,POGiVis_PluginFree,POGiVis_Render;
begin
end.
← →
CodeMaster © (2009-02-21 17:07) [8]unit main;
interface
uses
SysUtils,Windows,Messages,Bass;
const
ALPHA_MASK = $FF000000;
RED_MASK = $00FF0000;
GREEN_MASK = $0000FF00;
BLUE_MASK = $000000FF;
ALPHA_SHIFT = 24;
RED_SHIFT = 16;
GREEN_SHIFT = 8;
BLUE_SHIFT = 0;
VI_WAVEFORM = $0001; { Flag para waveform (PCM) }
VI_SPECTRUM = $0002; { Flag para espectro (FFT) }
SONIQUEVISPROC = $0004;
//end;
type
PVisData = ^TVisData;
TVisData = record
MillSec : DWORD; { Tempo referente ao final deste bloco de dados }
WaveForm: array[0..1,0..511] of ShortInt; { Dados PCM sendo retornados no momento }
Spectrum: array[0..1,0..255] of Byte;
end;
PVisInfo = ^TVisInfo;
TVisInfo = record
Version : DWORD;
PluginName : PChar;
lRequired : Integer;
Initialize : procedure; cdecl;
Render : function(Video: Pointer; Width, Heigth, Pitch: Integer; pVD: PVisData): Boolean; cdecl;
SaveSettings : function(FileName: PChar): Boolean; cdecl;
OpenSettings : function(FileName: PChar): Boolean; cdecl;
Deinit : function: Boolean; cdecl;
Clicked : function(x, y, Buttons: Integer): Boolean; cdecl;
end;
implementation
end.
← →
DVM © (2009-02-21 17:33) [9]
> Программа C2PAS32.exe перевела знак ">>" как shr
ну и правильно перевела.
> Но моя программа почему-то мне постоянно пишет Floating
> point division by Zero.
>
Ну, а на какой строке то это происходит ты сам то выяснить в состоянии?
← →
CodeMaster © (2009-02-21 17:56) [10]Вот именно на этой строке:
VisInfo.Render(VisScreen.Bits,W,H,W,VisData);
Появляется такая ошибка невсегда, она появляется при подключении некоторых плагинов (Sonique,AIMP). На плеере AIMP они работают норм, у меня же почему-то отказываются, пишут Floating point division by Zero
← →
Сергей М. © (2009-02-21 21:12) [11]
> Вот именно на этой строке
Как узнал что на этой ?
← →
CodeMaster © (2009-02-22 07:37) [12]Если её убрать всё нормально
← →
KilkennyCat © (2009-02-22 08:52) [13]W,H: integer;
чему равны при передачи в VisInfo.Render?
← →
CodeMaster © (2009-02-22 21:31) [14]они равно ширине и высоте выводящего буффера
← →
KilkennyCat © (2009-02-22 21:50) [15]то есть, они не передаются, а возвращаются...
а пчему тогда два W?
мож, одно все-таки надо определить до?
вообщем, копай VisInfo.Render
← →
Сергей М. © (2009-02-22 21:58) [16]
> Если её убрать всё нормально
Ну так убери и все будет нормально, в чем проблема-то ?
← →
CodeMaster © (2009-02-23 12:33) [17]Проблема в том что это процедурка как-раз выводит на экран визуализацию
← →
KilkennyCat © (2009-02-23 16:52) [18]
> CodeMaster © (23.02.09 12:33) [17]
Bitblt выводит, а эта - просчитывает.
Так ты ее копал, или нет?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.04.12;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.011 c