|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
11.10.2008, 02:08 | #1 |
Новичок
Джуниор
Регистрация: 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. Очень буду признателен за помощь!!!! |