Форум: "Основная";
Текущий архив: 2003.08.11;
Скачать: [xml.tar.bz2];
ВнизПреобразование Pointer а Array в Плагине Winamp? Найти похожие ветки
← →
crash_rider (2003-07-29 21:23) [0]Помогите пожалуйста!HELP! ME!. :-(
Я работаю на 6 Delphi. (В "Input Plugin" PCMData : Pointer) это данные типа pointer! а в Плагинах визуализации нужно, чтобы
spectrumData и waveformData были типа array[1..2,0..575]of byte;!
Как это преобразовать ??????????????????????????????????????????????????????????
Я пытался копировать куски памяти с помощью процедуры CopyMemory
перед этим преобразовывая Array в Pointer
procedure CopyMemory(Destination: Pointer; Source: Pointer; Length: DWORD);
begin
Move(Source^, Destination^, Length);
end;
////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
PCMData Pointer; здесь у нас Pointer
////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
и
array[1..2,0..575]of byte
я использовал это преобразование указанное ниже
////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
type
tDynArray = array [1..2,0..575] of byte;
pDynArray = ^tDynArray; //Pointer
////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Помогите ! Мне !. :-(
Visualisation PLugin
+++++++++++++++++ ВЫрезано +++++++++++++++++
spectrumData : array[1..2,0..575]of byte;
waveformData : array[1..2,0..575]of byte;
+++++++++++++++++ CUT +++++++++++++++++
Input plugin
+++++++++++++++++ ВЫрезано +++++++++++++++++
// vis stuff (plug-in)
// simple vis supplying mode
VSAAddPCMData:procedure(PCMData:pointer;nch: integer ; bps:integer;timestamp:integer);cdecl; // sets the vis data directly from PCM data
// quick and easy way to get vis working :)
// needs at least 576 samples :)
// advanced vis supplying mode, only use if you"re cool. Use VSAAddPCMData for most stuff.
VSAGetMode:function(var specNch:integer; var waveNch:integer):integer;cdecl; // use to figure out what to give to VSAAdd
VSAAdd:procedure(data:pointer; timestamp:integer);cdecl; // filled in by winamp, called by plug-in
+++++++++++++++++ CUT +++++++++++++++++
← →
Набережных С. (2003-07-29 22:25) [1]Попробуй так:
type
PPCMDataArr = ^TPCMDataArr;
TPCMDataArr = array[1..2,0..575]of byte;
А потом просто PPCMDataArr(PCMData)[1, 33].
С ходу не уверен, но если формат массива совпадает, то пройдет.
← →
nikus (2003-07-30 00:21) [2]Что-то я не пойму, какой ты плагин пишешь? Visualization или Input? Для визуализации справедливо следующее:
type
PWinampVisModule = ^TwinampVisModule;
TWinampVisModule = record
{...}
spectrumData : Array [0..1, 0..575] of Byte;
waveformData : Array [0..1, 0..575] of Byte;
{...}
end;
PwinampVisHeader = ^TwinampVisHeader;
TwinampVisHeader = record
{...}
getModule : function (Which : Integer) : winampVisModule; cdecl;
end;
{forward}
function GetModule(Which :integer) : PWinAMPVisModule; cdecl;
function winampVisGetHeader : PwinampVisHeader; cdecl; export;
const
HDR : TWinAMPVisHeader = ({...} GetModule : GetModule);
VisModule : TWinAMPVisModule = ( {...} );
lementation
function WinAMPVisGetHeader : PWinAMPVisHeader;
begin
Result := @HDR;
end;
function GetModule(Which : integer) : PwinampVisModule;
begin
if which = 0 then Result := @VisModule else Result := nil;
end;
exports winampVisGetHeader;
Итак, DLL-ка экспортирует функцию winampVisGetHeader. Winamp её запускает, и получает адрес записи HDR, из которой читает описание плагина + адрес функции getModule. Затем он запускает getModule с параметром 0 и получает адрес записи VisModule. Именно по этому адресу он потом будет записывать spectrumData и waveformData. А ты будешь обращаться к ним как к обычным массивам: VisModule.spectrumData[][] и VisModule.waveformData[][]
ЗЫ Слишком сложную тему ты поднял, толком ничего не объяснив...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.08.11;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c