Вверх ↑
Этот топик читают: Гость
Ответов: 3851
Рейтинг: 159
#1: 2008-04-02 15:53:58 ЛС | профиль | цитата
Мне дали скрипт:

code_8738.txt

я его переделал и вставил в схему:

code_8740.txt

не работает

Visual Basic я не знаю, разбираться с синтаксисом ломает, сообщения об ошибках малоинформативны. Пробовал запускать исходный скрипт как файл .vbs - тоже ошибки и тоже малопонятные..

карма: 0
начавший
0
файлы: 2code_8738.txt [1KB] [312], code_8740.txt [2.9KB] [286]
Ответов: 8928
Рейтинг: 823
#2: 2008-04-02 16:00:03 ЛС | профиль | цитата
Андрей., какой смысл в этой затее, уйти от BASS или ещё что?
карма: 19

0
Ответов: 5446
Рейтинг: 323
#3: 2008-04-02 16:01:37 ЛС | профиль | цитата
Код 8738 - это не скрипт, а фрагмент программы на "полном" Visual Basic-е.
карма: 1

0
Ответов: 3851
Рейтинг: 159
#4: 2008-04-02 16:15:52 ЛС | профиль | цитата
Леонид писал(а):
Андрей., какой смысл в этой затее, уйти от BASS или ещё что?

Именно уйти
------------ Дoбавленo:

iarspider, а можно ли адаптировать в "неполный" для HiAsm-a?
карма: 0
начавший
0
Ответов: 2125
Рейтинг: 159
#5: 2008-04-02 16:38:50 ЛС | профиль | цитата
Проще InlineCode сделать
карма: 1

0
Ответов: 3851
Рейтинг: 159
#6: 2008-04-02 16:44:09 ЛС | профиль | цитата
tsdima, я не против
а будет что попробовать?
карма: 0
начавший
0
Ответов: 2125
Рейтинг: 159
#7: 2008-04-02 18:25:49 ЛС | профиль | цитата
Вот тупо переделанный:

#pas
Add(MainForm,13485364,21,105)
{
Left=20
Top=105
Width=241
Height=204
Caption="WAVE RECORDER"
}
Add(Button,656033,105,91)
{
Left=60
Top=25
Caption="Record"
link(onClick,10378653:Command1,[])
}
Add(Button,3432630,105,133)
{
Left=60
Top=65
Caption="Stop"
link(onClick,10378653:Command2,[(158,139)(158,104)])
}
Add(Button,12574182,105,175)
{
Left=60
Top=105
Caption="Play"
link(onClick,10378653:Command3,[(170,181)(170,111)])
}
Add(InlineCode,10378653,196,91)
{
WorkPoints=#8:Command1|8:Command2|8:Command3|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|30:uses kol,Share,Debug,mmsystem;|0:|4:type|28: THiAsmClass = class(TDebug)|9: public|48: procedure Command1(var dt:TData; index:word);|48: procedure Command2(var dt:TData; index:word);|48: procedure Command3(var dt:TData; index:word);|32: destructor Destroy; override;|5: end;|0:|14:implementation|0:|31:procedure THiAsmClass.Command1;|5:begin|68: mciSendString('open new Type waveaudio Alias capture', nil, 0, 0);|59: mciSendString('set capture bitspersample 16', nil, 0, 0);|61: mciSendString('set capture samplespersec 8000', nil, 0, 0);|53: mciSendString('set capture channels 1', nil, 0, 0);|45: mciSendString('record capture', nil, 0, 0);|4:end;|0:|31:procedure THiAsmClass.Command2;|5:begin|43: mciSendString('stop capture', nil, 0, 0);|58: mciSendString('save capture c:\NewWave.wav', nil, 0, 0);|4:end;|0:|31:procedure THiAsmClass.Command3;|5:begin|50: mciSendString('play capture from 0', nil, 0, 0);|4:end;|0:|31:destructor THiAsmClass.Destroy;|5:begin|44: mciSendString('close capture', nil, 0, 0);|4:end;|0:|4:end.|
}
карма: 1

0
Ответов: 8928
Рейтинг: 823
#8: 2008-04-02 21:14:39 ЛС | профиль | цитата
Андрей., коллега HAM неоднократно выкладывал IC с полной отработкой звука на mmsystem.dll.
карма: 19

0
Ответов: 9906
Рейтинг: 351
#9: 2008-04-02 21:34:46 ЛС | профиль | цитата
сам ты НАМ
карма: 9

0
Ответов: 3851
Рейтинг: 159
#10: 2008-04-03 09:09:12 ЛС | профиль | цитата
Леонид, видимо я этого не застал, но посмотреть было бы очень интересно, только где искать..
------------ Дoбавленo:

tsdima, я проверил - работает, только "частота дискретизации = 11 кГц" несмотря на то, что
mciSendString('set capture bitspersample 16', nil, 0, 0);
mciSendString('set capture samplespersec 8000', nil, 0, 0);
mciSendString('set capture channels 1', nil, 0, 0);

пробовал ставить samplespersec 22000, получаю "частота дискретизации = 22 кГц"

я в растерянности - та же беда, что и с элементом "Record"..
карма: 0
начавший
0
Ответов: 8928
Рейтинг: 823
#11: 2008-04-03 09:54:37 ЛС | профиль | цитата
Андрей., вот, разбирайтесь: code_8742.txt - здесь и чтение, и Фурье, и формирование звука через mmsystem.dll.
карма: 19

0
файлы: 1code_8742.txt [19.5KB] [402]
Ответов: 3851
Рейтинг: 159
#12: 2008-04-03 15:45:32 ЛС | профиль | цитата
Леонид, спасибо - буду разбираться..

------------ Дoбавленo:


пристрелочные испытания выявили много вопросов


по IC "RecordData":
1. точка 'doStart=Начало записи/воспроизведения' - как управлять режимом 'запись' или 'воспроизведение'? Если они следуют друг за другом, можно ли это исправить?
2. точка 'doMsgRec=Получение сообщения о заполнении буфера записи' - это отключение/включение указанного события или принудительная его выдача?
3. точка 'doMsgPlay=Сообщение о проигрывании буфера PLAY' - вопрос тот же..
4. точка 'BuffSize' - есть ли границы для значения?
5. точка 'Handle' - как его использовать?
6. точка 'onBuff2' - что и в каких случаях происходит?
7. точка 'onStream' - что в этом потоке и как его использовать?

по IC "FFT_IFFT":
1. у точек 'doSpecL=Анализатор спектра левый' и 'doMixL=Преобразователь частоты' нет "правых" аналогов как и у точек 'onSpecL=Анализатор спектра левый', 'onMixL=Преобразователь частоты(левый)'. Это потому, что они не нужны?
2. точка 'doPlayData=Два байта на PLAY' - почему 2 байта - потому, что 2 канала или потому, что 16 бит в сэмпле, или потому, что "так сделано" и содержимое не важно, а только факт?
3. 'onPlayData=Поток на PLAY' - как его использовать?

------------ Дoбавленo:


компиляторы жалуются на точки "FMin" и "FMax"



Build start...
Generated code
Create project...
Command line: fpc.exe '"C:\HiAsm\3_65b168\Elements\delphi\code\Project7.pas"' -Sd -Mdelphi '"-FEC:\HiAsm\3_65b168\"' '"-FUC:\HiAsm\3_65b168\Elements\delphi\code\\units"' -FDtools\ -CX -dF_P
Free Pascal Compiler version 1.9.6 [2004/12/31] for i386
Copyright (c) 1993-2004 by Florian Klaempfl
Target OS: Win32 for i386
Compiling C:\HiAsm\3_65b168\Elements\delphi\code\Project7.pas
Compiling C:\HiAsm\3_65b168\Elements\delphi\code\Share.pas
Compiling C:\HiAsm\3_65b168\Elements\delphi\code\Debug.pas
Compiling C:\HiAsm\3_65b168\Elements\delphi\code\hiInlineCode_8BB0644.pas
hiInlineCode_8BB0644.pas(110,11) Warning: Mixing signed expressions and longwords gives a 64bit result
hiInlineCode_8BB0644.pas(135,5) Note: Local variable "a" not used
hiInlineCode_8BB0644.pas(155,5) Note: Local variable "isign" is assigned but never used
hiInlineCode_8BB0644.pas(158,5) Note: Local variable "wpr" not used
hiInlineCode_8BB0644.pas(159,5) Note: Local variable "wpi" not used
hiInlineCode_8BB0644.pas(161,5) Note: Local variable "theta" not used
hiInlineCode_8BB0644.pas(248,5) Note: Local variable "wpr" not used
hiInlineCode_8BB0644.pas(249,5) Note: Local variable "wpi" not used
hiInlineCode_8BB0644.pas(251,5) Note: Local variable "theta" is assigned but never used
hiInlineCode_8BB0644.pas(335,5) Note: Local variable "isign" is assigned but never used
hiInlineCode_8BB0644.pas(338,5) Note: Local variable "wpr" not used
hiInlineCode_8BB0644.pas(339,5) Note: Local variable "wpi" not used
hiInlineCode_8BB0644.pas(341,5) Note: Local variable "theta" not used
hiInlineCode_8BB0644.pas(425,5) Note: Local variable "isign" is assigned but never used
hiInlineCode_8BB0644.pas(428,5) Note: Local variable "wpr" not used
hiInlineCode_8BB0644.pas(429,5) Note: Local variable "wpi" not used
hiInlineCode_8BB0644.pas(431,5) Note: Local variable "theta" not used
hiInlineCode_8BB0644.pas(533,5) Note: Local variable "i" not used
hiInlineCode_8BB0644.pas(58,2) Note: Local variable "F" is assigned but never used
hiInlineCode_8BB0644.pas(58,9) Note: Local variable "FM" is assigned but never used
Project7.pas(131,22) Error: identifier idents no member "FMin"
Project7.pas(132,22) Error: identifier idents no member "FMax"
Project7.pas(156) Fatal: There were 2 errors compiling module, stopping
Error: C:\HiAsm\Compiler\fpc\ppc386.exe returned an error exitcode (normal if you did not specifiy a source file to be compiled)
End build

Add(InlineCode,14681589,133,180)
{
@Hint=#8:FFT_IFFT|
WorkPoints=#15:doSet=Установки|28:doRecData=Блок данных записи|28:doPlayData=Два байта на PLAY|24:doFFTL=FFT левого канала|25:doFFTR=FFT правого канала|34:doIFFTL=Обратные FFT левого канала|35:doIFFTR=Обратные FFT правого канала|32:doSpecL=Анализатор спектра левый|30:doMixL=Преобразователь частоты|
EventPoints=#24:onPlayData=Поток на PLAY|41:onEndRec=Конец приема блока данных записи|34:onFFTL=Окончание FFT левого канала|35:onFFTR=Окончание FFT правого канала|40:onIFFTL=Конец обратных FFT левого канала|41:onIFFTR=Конец обратных FFT правого канала|32:onSpecL=Анализатор спектра левый|37:onMixL=Преобразователь частоты(левый)|
DataPoints=#23:Freq=Частота дискретиз.|30:N1=длина FFT(кратна степени 2)|27:ArrayL=Массив спекта, левый|36:FMix=Опорная частота преобразователя|16:FMin=Нижний срез|17:FMax=Верхний срез|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|12: protected|20: StreamL:PStream;|9: public|23: _prop_Freq:integer;|21: _prop_N1:integer;|23: _prop_FMix:integer;|0:|25: _data_Data:THI_Event;|0:|17: N1:THI_Event;|19: Freq:THI_Event;|21: ArrayL:THI_Event;|19: FMix:THI_Event;|0:|25: onPlayData:THI_Event;|23: onEndRec:THI_Event;|21: onFFTL:THI_Event;|21: onFFTR:THI_Event;|22: onIFFTL:THI_Event;|22: onIFFTR:THI_Event;|22: onSpecL:THI_Event;|21: onMixL:THI_Event;|0:|53: procedure doRecData(var _Data:TData; Index:word);|54: procedure doPlayData(var _Data:TData; Index:word);|49: procedure doSet(var _Data:TData; Index:word);|50: procedure doFFTL(var _Data:TData; Index:word);|50: procedure doFFTR(var _Data:TData; Index:word);|51: procedure doIFFTL(var _Data:TData; Index:word);|51: procedure doIFFTR(var _Data:TData; Index:word);|51: procedure doSpecL(var _Data:TData; Index:word);|50: procedure doMixL(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|3:var|53: al:Array [0..10000] of single;//Данные для обработки|31: ar:Array [0..10000] of single;|48: apl:Array [0..10000] of single;//Данные на PLAY|32: arl:Array [0..10000] of single;|48: wprp:Array [1..100] of single;//Таблица синусов|31: wpip:array [1..100] of single;|31: wpro:Array [1..100] of single;|31: wpio:Array [1..100] of single;|11: k:integer;|21: Left,Right:smallint;|19: leng,len:cardinal;|19: F,M,nn,FM:integer;|0:|39:procedure THiAsmClass.doSet;//Установки|10:label Me1;|36:var N2,Q,n,isign,mmax,istep:integer;|17: theta:single;|5:begin|49: nn := ReadInteger(_Data,N1,_prop_N1);//Длина FFT|64: F := ReadInteger(_Data,Freq,_prop_Freq);//Частота дискретизации|75: FM := ReadInteger(_Data,FMix,_prop_FMix);//Опорная частота преобразователя|42: M := 1; //Определение степени 2 длины FFT|10: N2 := nn;|21: Me1: N2 := N2 div 2;|15: if N2<>1 then|8: begin|15: M := M + 1;|13: goto Me1;|7: end;|37: Q := 1; //Таблицы синусов прямоеFFT|35: n := 2*nn; isign := 1; mmax := 2;|19: while n>mmax do|9: begin|24: istep := 2*mmax;|35: theta := 2*Pi/(isign*mmax);|44: wprp[Q] := -2.0*sqr(sin(0.5*theta));|30: wpip[Q] := sin(theta);|33: Q := Q+1; mmax := istep;|9: end;|40: Q := 1; //Таблицы синусов обратное FFT|36: n := 2*nn; isign := -1; mmax := 2;|19: while n>mmax do|9: begin|24: istep := 2*mmax;|35: theta := 2*Pi/(isign*mmax);|44: wpro[Q] := -2.0*sqr(sin(0.5*theta));|30: wpio[Q] := sin(theta);|33: Q := Q+1; mmax := istep;|9: end;|4:end;|0:|59:procedure THiAsmClass.doRecData;//Прием блока данных RECORD|18:var St,Sp:PStream;|16: i,j:integer;|32: ap:array [0..20000] of word;|5:begin|42: St := ReadStream(_data,_data_Data,nil); |25: if St = nil then Exit; |17: len := St.Size;|51: leng := len div 4;//Кол-во ячеек в каждом массиве|61: //move(al,apl,len*2);//Загрузка обработанных данных на PLAY|23: //move(ar,arl,len*2);|9: i := 0;|25: while i <= len div 2 do|8: begin|32: ap[i] := word(trunc(al[i]));|34: ap[i+1] := word(trunc(ar[i]));|13: inc(i,2);|7: end;|25: Sp := NewMemoryStream;|16: Sp.Size := 0;|20: Sp.Write(ap,len);|20: Sp.Position := 0;|30: _hi_onEvent(onPlayData,Sp);|51: for i := 1 to leng do //Сортировка по каналам L,R|9: begin |37: St.Read(Left,2);St.Read(Right,2);|15: j := 2*i-2;|65: al[j] := Left; al[j+1] := 0; //Загрузка новых данных с RECORD|33: ar[j] := Right; ar[j+1] := 0;|7: end;|36: k := 1; //Обнуление счетчика PLAY|25: _hi_onEvent(onEndRec);|0:|4:end;|0:|57:procedure THiAsmClass.doPlayData; //Выдача данных на PLAY|14:var j:integer;|11: a:word;|5:begin|28: //a := word(round(apl[5]));|34: j := ((k-1) div 2)*2;//2 * k - 2;|15: if odd(k) then|33: _hi_onEvent(onPlayData,apl[j])|38: else _hi_onEvent(onPlayData,arl[j]);|12: k := k + 1;|4:end;|0:|48:procedure THiAsmClass.doFFTL;//FFT левого канала|3:var|19: ii,Q : Integer;|17: jj : Integer;|16: n : Integer;|19: mmax : Integer;|16: m : Integer;|16: j : Integer;|20: istep : Integer;|16: i : Integer;|20: isign : Integer;|28: wtemp : Single;//Double;|25: wr : single;//Double;|26: wpr : single;//Double;|26: wpi : single;//Double;|25: wi : single;//Double;|28: theta : single;//Double;|28: tempr : single;//Double;|28: tempi : single;//Double;|5:begin|0:|15: isign := 1;|14: n := 2*nn;|11: j := 1;|10: ii:=1;|19: while ii<=nn do|9: begin|20: i := 2*ii-1;|19: if j>i then|13: begin|29: tempr := al[j-1];|27: tempi := al[j];|31: al[j-1] := al[i-1];|27: al[j] := al[i];|29: al[i-1] := tempr;|27: al[i] := tempi;|12: end;|21: m := n div 2;|33: while (m>=2) and (j>m) do|13: begin|21: j := j-m;|25: m := m div 2;|12: end;|17: j := j+m;|16: Inc(ii);|8: end;|22: mmax := 2; Q := 1;|19: while n>mmax do|9: begin|24: istep := 2*mmax;|37: //theta := 2*Pi/(isign*mmax);|42: //wpr := -2.0*sqr(sin(0.5*theta));|28: //wpi := sin(theta);|18: wr := 1.0;|18: wi := 0.0;|14: ii:=1;|31: while ii<=mmax div 2 do|13: begin|24: m := 2*ii-1;|18: jj:=0;|40: while jj<=(n-m) div istep do|17: begin|32: i := m+jj*istep;|28: j := i+mmax;|45: tempr := wr*al[j-1]-wi*al[j];|45: tempi := wr*al[j]+wi*al[j-1];|41: al[j-1] := al[i-1]-tempr;|37: al[j] := al[i]-tempi;|41: al[i-1] := al[i-1]+tempr;|37: al[i] := al[i]+tempi;|24: Inc(jj);|16: end;|24: wtemp := wr;|43: wr := wr*wprp[q]-wi*wpip[q]+wr;|46: wi := wi*wprp[q]+wtemp*wpip[q]+wi;|20: Inc(ii);|12: end;|34: mmax := istep; Q := Q + 1;|8: end;|24: {if InverseFFT then}|9: begin|13: I:=1;|24: while I<=2*nn do|13: begin|34: al[I-1] := al[I-1]/nn;|19: Inc(I);|12: end;|8: end;|23: _hi_onEvent(onFFTL);|4:end;|49:procedure THiAsmClass.doFFTR;//FFT правого канала|3:var|19: ii,Q : Integer;|17: jj : Integer;|16: n : Integer;|19: mmax : Integer;|16: m : Integer;|16: j : Integer;|20: istep : Integer;|16: i : Integer;|20: isign : Integer;|28: wtemp : single;//Double;|25: wr : single;//Double;|26: wpr : single;//Double;|26: wpi : single;//Double;|25: wi : single;//Double;|28: theta : single;//Double;|28: tempr : single;//Double;|28: tempi : single;//Double;|5:begin|0:|15: isign := 1;|14: n := 2*nn;|11: j := 1;|10: ii:=1;|19: while ii<=nn do|9: begin|20: i := 2*ii-1;|19: if j>i then|13: begin|29: tempr := ar[j-1];|27: tempi := ar[j];|31: ar[j-1] := ar[i-1];|27: ar[j] := ar[i];|29: ar[i-1] := tempr;|27: ar[i] := tempi;|12: end;|21: m := n div 2;|33: while (m>=2) and (j>m) do|13: begin|21: j := j-m;|25: m := m div 2;|12: end;|17: j := j+m;|16: Inc(ii);|8: end;|22: mmax := 2; Q := 1;|19: while n>mmax do|9: begin|24: istep := 2*mmax;|35: theta := 2*Pi/(isign*mmax);|42: //wpr := -2.0*sqr(sin(0.5*theta));|28: //wpi := sin(theta);|18: wr := 1.0;|18: wi := 0.0;|14: ii:=1;|31: while ii<=mmax div 2 do|13: begin|24: m := 2*ii-1;|18: jj:=0;|40: while jj<=(n-m) div istep do|17: begin|32: i := m+jj*istep;|28: j := i+mmax;|45: tempr := wr*ar[j-1]-wi*ar[j];|45: tempi := wr*ar[j]+wi*ar[j-1];|41: ar[j-1] := ar[i-1]-tempr;|37: ar[j] := ar[i]-tempi;|41: ar[i-1] := ar[i-1]+tempr;|37: ar[i] := ar[i]+tempi;|24: Inc(jj);|16: end;|24: wtemp := wr;|43: wr := wr*wprp[q]-wi*wpip[q]+wr;|46: wi := wi*wprp[q]+wtemp*wpip[q]+wi;|20: Inc(ii);|12: end;|34: mmax := istep; Q := Q + 1;|8: end;|24: {if InverseFFT then}|9: begin|13: I:=1;|24: while I<=2*nn do|13: begin|34: ar[I-1] := ar[I-1]/nn;|19: Inc(I);|12: end;|8: end;|23: _hi_onEvent(onFFTR);|4:end;|58:procedure THiAsmClass.doIFFTL;//обратные FFT левого канала|3:var|19: ii,Q : Integer;|17: jj : Integer;|16: n : Integer;|19: mmax : Integer;|16: m : Integer;|16: j : Integer;|20: istep : Integer;|16: i : Integer;|20: isign : Integer;|28: wtemp : single;//Double;|25: wr : single;//Double;|26: wpr : single;//Double;|26: wpi : single;//Double;|25: wi : single;//Double;|28: theta : single;//Double;|28: tempr : single;//Double;|28: tempi : single;//Double;|5:begin|16: isign := -1;|14: n := 2*nn;|11: j := 1;|10: ii:=1;|19: while ii<=nn do|9: begin|20: i := 2*ii-1;|19: if j>i then|13: begin|29: tempr := al[j-1];|27: tempi := al[j];|31: al[j-1] := al[i-1];|27: al[j] := al[i];|29: al[i-1] := tempr;|27: al[i] := tempi;|12: end;|21: m := n div 2;|33: while (m>=2) and (j>m) do|13: begin|21: j := j-m;|25: m := m div 2;|12: end;|17: j := j+m;|16: Inc(ii);|8: end;|22: mmax := 2; Q := 1;|19: while n>mmax do|9: begin|24: istep := 2*mmax;|37: //theta := 2*Pi/(isign*mmax);|42: //wpr := -2.0*sqr(sin(0.5*theta));|28: //wpi := sin(theta);|18: wr := 1.0;|18: wi := 0.0;|14: ii:=1;|31: while ii<=mmax div 2 do|13: begin|24: m := 2*ii-1;|18: jj:=0;|40: while jj<=(n-m) div istep do|17: begin|32: i := m+jj*istep;|28: j := i+mmax;|45: tempr := wr*al[j-1]-wi*al[j];|45: tempi := wr*al[j]+wi*al[j-1];|41: al[j-1] := al[i-1]-tempr;|37: al[j] := al[i]-tempi;|41: al[i-1] := al[i-1]+tempr;|37: al[i] := al[i]+tempi;|24: Inc(jj);|16: end;|24: wtemp := wr;|43: wr := wr*wpro[q]-wi*wpio[q]+wr;|46: wi := wi*wpro[q]+wtemp*wpio[q]+wi;|20: Inc(ii);|12: end;|34: mmax := istep; Q := Q + 1;|8: end;|16: //If inverse|10: { begin|13: I:=1;|24: while I<=2*nn do|13: begin|34: al[I-1] := al[I-1]/nn;|19: Inc(I);|12: end;|9: end;}|23: _hi_onEvent(onIFFTL);|4:end;|0:|59:procedure THiAsmClass.doIFFTR;//обратные FFT правого канала|3:var|19: ii,Q : Integer;|17: jj : Integer;|16: n : Integer;|19: mmax : Integer;|16: m : Integer;|16: j : Integer;|20: istep : Integer;|16: i : Integer;|20: isign : Integer;|28: wtemp : single;//Double;|25: wr : single;//Double;|26: wpr : single;//Double;|26: wpi : single;//Double;|25: wi : single;//Double;|28: theta : single;//Double;|28: tempr : single;//Double;|28: tempi : single;//Double;|5:begin|16: isign := -1;|14: n := 2*nn;|11: j := 1;|10: ii:=1;|19: while ii<=nn do|9: begin|20: i := 2*ii-1;|19: if j>i then|13: begin|29: tempr := ar[j-1];|27: tempi := ar[j];|31: ar[j-1] := ar[i-1];|27: ar[j] := ar[i];|29: ar[i-1] := tempr;|27: ar[i] := tempi;|12: end;|21: m := n div 2;|33: while (m>=2) and (j>m) do|13: begin|21: j := j-m;|25: m := m div 2;|12: end;|17: j := j+m;|16: Inc(ii);|8: end;|22: mmax := 2; Q := 1;|19: while n>mmax do|9: begin|24: istep := 2*mmax;|37: //theta := 2*Pi/(isign*mmax);|42: //wpr := -2.0*sqr(sin(0.5*theta));|28: //wpi := sin(theta);|18: wr := 1.0;|18: wi := 0.0;|14: ii:=1;|31: while ii<=mmax div 2 do|13: begin|24: m := 2*ii-1;|18: jj:=0;|40: while jj<=(n-m) div istep do|17: begin|32: i := m+jj*istep;|28: j := i+mmax;|45: tempr := wr*ar[j-1]-wi*ar[j];|45: tempi := wr*ar[j]+wi*ar[j-1];|41: ar[j-1] := ar[i-1]-tempr;|37: ar[j] := ar[i]-tempi;|41: ar[i-1] := ar[i-1]+tempr;|37: ar[i] := ar[i]+tempi;|24: Inc(jj);|16: end;|24: wtemp := wr;|43: wr := wr*wpro[q]-wi*wpio[q]+wr;|46: wi := wi*wpro[q]+wtemp*wpio[q]+wi;|20: Inc(ii);|12: end;|34: mmax := istep; Q := Q + 1;|8: end;|16: //If inverse|10: {begin|13: I:=1;|24: while I<=2*nn do|13: begin|34: ar[I-1] := ar[I-1]/nn;|19: Inc(I);|12: end;|9: end;}|23: _hi_onEvent(onIFFTR);|4:end;|56:procedure THiAsmClass.doSpecL;//Анализатор спектра левый|3:var|16: i,a:integer;|15: Arr:PArray;|14: Ind:TData;|14: Val:TData;|5:begin|27: Arr := ReadArray(ArrayL);|17: a := nn div 256;|9: i := nn;|21: while i <= 2*nn-8 do|7: begin|107: Val := _DoData(sqrt((sqr(al[i]) + sqr(al[i+1])+sqr(al[i+2])+sqr(al[i+3])+sqr(al[i+4])+sqr(al[i+5]))/3));|38: Ind := _DoData(i div a - nn div a);|21: Arr._Set(Ind,Val);|12: Inc(i,a);|6: end;|8: i := 7;|19: while i <= nn-1 do|7: begin|107: Val := _DoData(sqrt((sqr(al[i]) + sqr(al[i+1])+sqr(al[i+2])+sqr(al[i+3])+sqr(al[i+4])+sqr(al[i+5]))/3));|38: Ind := _DoData(i div a + nn div a);|21: Arr._Set(Ind,Val);|12: Inc(i,a);|6: end;|22: _hi_onEvent(onSpecL);|4:end;|0:|62:procedure THiAsmClass.doMixL;//Преобразователь частоты (левый)|14:var i:integer;|5:begin|21: _hi_onEvent(onMixL);|4:end;|0:|4:end.|
link(onEndRec,14681589:doFFTL,[(200,193)(200,169)(121,169)(121,207)])
link(onFFTL,14681589:doFFTR,[(205,200)(205,291)(98,291)(98,214)])
link(onFFTR,14681589:doMixL,[(194,207)(194,266)(121,266)(121,242)])
link(onIFFTL,14681589:doIFFTR,[(199,214)(199,276)(108,276)(108,228)])
link(onSpecL,14681589:doIFFTL,[(190,228)(190,260)(103,260)(103,221)])
link(onMixL,14681589:doSpecL,[(187,235)(187,253)(114,253)(114,235)])
link(FMin,3327504:Text,[(167,152)(146,152)])
link(FMax,6348894:Text,[(174,159)(195,159)])
}
Add(Edit,3327504,140,84)
{
Left=335
Top=30
Hint="Нижний срез"
Text="300"
PColor(onChange,8453888)
}
Add(Edit,6348894,189,84)
{
Left=385
Top=30
Hint="Верхний срез"
Text="4000"
PColor(onChange,8453888)
}

карма: 0
начавший
0
Ответов: 8928
Рейтинг: 823
#13: 2008-04-03 19:40:50 ЛС | профиль | цитата
Андрей., к сожалению, автор не я
А вот ещё три схемки на DirectX того же автора:
карма: 19

0
Ответов: 5227
Рейтинг: 587
#14: 2008-04-08 21:52:42 ЛС | профиль | цитата
Есть ещё один неплохой скриптовый движок - LangMF основан на движке скрипт-языка VBScript
http://atombyte.com/prog.htm?oper=katalog&id=3&vi=1 так вот в самой справке есть Help на VBScript. Кстати автор обещает скоро cделать IDE, а также возможно использовать ActiveX DLL библиотеку (270 Kb) предназначеную для запуска и управления скриптом из вашего языка программирования.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 3851
Рейтинг: 159
#15: 2008-04-09 09:20:02 ЛС | профиль | цитата
Леонид, спасибо, но использование DirectX представляется мне несколько преждевременным. Он есть не у всех..

andrestudio, спасибо, но мне нужно было всего лишь адаптировать скрипт аудио-записи под хиасм. С VB пробовал, он даже запускался у меня, только библу не находил почему-то..


Пробовал несколько, найденных IC - по виду однотипные, но работают по разному, то выходной звук нельзя отключить, то процессор грузит под FPC и ни один не сохраняет в wav, видно придётся самому заголовок стряпать.. Пообщаться бы с автором, жаль не вспомню его..
карма: 0
начавший
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)