Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2008, 02:08   #1
Алексей_DrakonoFF
Новичок
Джуниор
 
Регистрация: 02.10.2008
Сообщений: 1
По умолчанию Unit Test . Как с ним нормально работать ?!

Привет всем ! есть модуль TAudio, разработанный каким - то Американским программистом еще в 1999 году.Он предназначен для проигрывания, редактирования, записи файлов *.Wav С его установкой на палитру компонентов проблем не возникло. Мне понадобилось узнать, по какому алгоритму он воспроизводит эти файлы, чтобы потом создать блок данных амплитуд звукового сигнала в текстовом файле.

Так вот. В Пакете Borland Developer Studio 2006 Есть функция создания тестовой программы таких частей "Unit Test". компилятор сам по себе , естественно, в этом модуле ошибок не находит.

В общем случае, часть программы , отвечающая за воспроизведения файла представлена ниже. Как вы понимаете, в таком коде без отладчика разобраться довольно сложно . Так вот ! Внимание вопрос. Как мне обратиться к той функции, чтобы просмотреть, по какому алгоритму воспроизводится файл .

Я пытался сделать это следующим образом : вот ниже вкладка "Unit Test" я внес в нее строку " TPlayer.PlayFile('c:\Track06.wav',1 ) ;"(см. ниже), однако компилятор мне выдал следующее сообщение об ошибке : "[Pascal Error] UnitTest4.dpr(31): E2076 This form of method call only allowed for class methods" :
program UnitTest4;
Помогите, пожалуйста, решить эту проблему, а то я в основном работаю в C++ Builder и с Delphi сталкиваюсь крайне редко.


Вот- то , что прописано во вкладке "Unit Test"
{

Delphi DUnit Test Project
-------------------------
This project contains the DUnit test framework and the GUI/Console test runners.
Add "CONSOLE_TESTRUNNER" to the conditional defines entry in the project options
to use the console test runner. Otherwise the GUI test runner will be used by
default.

}


uses
Forms,
TestFramework,
GUITestRunner,
TextTestRunner,
Unit1 in 'Unit1.pas';

begin
Application.Initialize;
if IsConsole then
begin
TPlayer.PlayFile('c:\Track06.wav',1 ) ;
TextTestRunner.RunRegisteredTests ;
end else
begin
GUITestRunner.RunRegisteredTests ;
end;


end.


А вот - сама функция, к которой мне нужно обратиться.

function TPlayer.PlayFile(FileName:string; NoOfRepeats:Word):boolean;
var temp:array[0..255] of byte;
i : integer;
Data:word;
DataSize:longint;
begin
Result:=false;
if FileName<>'' then begin
if (PlayStream=nil) then begin
FOldChannels:=FChannels;
FOldSPS:=FSPS;
FOldBPS:=FBPS;
end;
PlayFileStream:=TFileStream.Create( FileName,fmOpenRead);
PlayFileStream.Read(temp,22);
PlayFileStream.Read(temp,2);
if (temp[0]=2) then begin
if (FChannels<>Stereo) then begin
while FPlayFile do Application.ProcessMessages;
SetChannels(Stereo);
end;
end else begin
if (FChannels<>Mono) then begin
while FPlayFile do Application.ProcessMessages;
SetChannels(Mono);
end;
end;
PlayFileStream.Read(temp,2);
Data:=temp[1]*256+temp[0];
if (FSPS<>Data) then begin
while FPlayFile do Application.ProcessMessages;
SetSPS(Data);
end;
PlayFileStream.Read(temp,8);
PlayFileStream.Read(temp,2);
if (temp[0]>8) then begin
if (FBPS<>_16) then begin
while FPlayFile do Application.ProcessMessages;
SetBPS(_16);
end;
end else begin
if (FBPS<>_8) then begin
while FPlayFile do Application.ProcessMessages;
SetBPS(_8);
end;
end;
PlayFileStream.Read(temp,4); i:=0;
while ((temp[i]<>$64) or (temp[i+1]<>$61) or (temp[i+2]<>$74) or (temp[i+3]<>$61)) do begin
PlayFileStream.Read(temp[i+4],1);
inc(i);
end;
PlayFileStream.Read(DataSize,4);
FPlayFile:=true;
if PlayStream=nil then begin
if Open then begin
{ PlayStream:=TMemoryStream.Create; }
PlayStream:=TFileStream.Create('PLA Y.TMP',fmCreate);
FNoOfRepeats:=NoOfRepeats;
ReadPlayStreamPos:=0;
end else begin
PlayFileStream.Free;
exit;
end;
end else begin
PlayStream.Position:=PlayStream.Siz e;
end;
PlayStream.CopyFrom(PlayFileStream, DataSize);
if ReadPlayStreamPos=0 then
for i:=1 to (No_Buffers-ActiveBuffers) do
AddNextOutBuffer;
PlayFileStream.Free;
Result:=true;
end;
end;

P.S. Естественно, весь Unit "ТAudio" я выложить не могу, потому что он занимает больше 2000 строк, да и смысла я в этом не вижу абсолютно.


P.P.S. Очень буду признателен за помощь!!!!
Алексей_DrakonoFF вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц