בית
Top.Mail.Ru Yandeks.Metrika
פורום: "מערכת";
ארכיון נוכחי: 2002.01.08;
הורדה: [xml.tar.bz2];

למטה

כיצד להסיר מכרטיס הקול, צורת הגל. מצא סניפים דומים


Pasha   (2001-09-21 15:58) [0]

כיצד להסיר מכרטיס הקול, צורת הגל.
על מנת לחשב את השינויים צליל האות לאורך זמן.



REL   (2001-09-25 20:04) [1]

זה די פשוט:
השתמש ב- WinAPI
הנה התוכנית (מישהו לפני זמן רב Inet זרק):

שימושים
Windows, הודעות, SysUtils, כיתות, גרפיקה, פקדים, טפסים,
Dialogs, StdCtrls, ExtCtrls, ComCtrls, MMSystem;

סוג
TData8 = מערך [0..127] של בתים;
PData8 = ^ TData8;
TData16 = מערך [0..127] של smallint;
PData16 = ^ TData16;
TPointArr = מערך [0..127] של TPoint;
PPointArr = ^ TPointArr;
TForm1 = מעמד (TForm)
Button1: לחצן הכפתור;
Button2: לחצן הכפתור;
PaintBox1: TPaintBox;
TrackBar1: TTrackBar;
CheckBox1: TCheckBox;
הליך Button1Click (שולח: TObject);
הליך Button2Click (שולח: TObject);
פְּרָטִי
{הצהרות פרטיות}
ציבורי
הליך OnWaveIn (var Msg: TMessage); הודעה MM_WIM_DATA;
הסוף;

היה
Form1: TForm1;

הפעלה

{$ R * .DFM}

היה
WaveIn: hWaveIn;
hBuf: Thandle;
BufHead: TWaveHdr;
bufsize: מספר שלם;
Bits16: בוליאני;
p: PPointArr;
stop: boolean = false;

הליך TForm1.Button1Click (שולח: TObject);
היה
כותרת: TWaveFormatEx;
BufLen: מילה;
buf: מצביע;
להתחיל
BufSize: = TrackBar1.Position * 500 + 100;
Bits16: = CheckBox1.Checked;
עם כותרת לעשות
wFormatTag: = WAVE_FORMAT_PCM;
n ערוצים: = 1;
nSamplesPerSec: = 22050;
wBitsPerSample: מספר שלם = = (Bits16) * 8 + 8;
nBlockAlign: = nChannels = (wBitsPerSample 8);
nAvgBytesPerSec: = nSamplesPerSec * nBlockAlign;
cbSize: = 0;
הסוף;
WaveInOpen (Addr (WaveIn), WAVE_MAPPER, addr (כותרת),
Form1.Handle, 0, CALLBACK_WINDOW);
BufLen: = header.nBlockAlign * BufSize;
hBuf: = GlobalAlloc (GMEM_MOVEABLE ו- GMEM_SHARE, BufLen);
Buf: = GlobalLock (hBuf);
עם BufHead להתחיל
lpData: = Buf;
dwBufferLength: = BufLen;
dwFlags: = WHDR_BEGINLOOP;
הסוף;
WaveInPrepareHeader (WaveIn, Addr (BufHead), גודל (BufHead));
WaveInAddBuffer (WaveIn, Addr (BufHead), sizeof (BufHead));
GetMem (p, BufSize * sizeof (TPoint));
stop: = true;
WaveInStart (WaveIn);
הסוף;

הליך TForm1.Button2Click (שולח: TObject);
להתחיל
אם stop = false ואז יציאה;
העגת you 49
בעוד לא להפסיק לעשות Application.ProcessMessages;
העגת you 49
WaveInReset (WaveIn);
WaveInUnPrepareHeader (WaveIn, Addr (BufHead), sizeof (BufHead));
WaveInClose (WaveIn);
GlobalUnlock (hBuf);
GlobalFree (hBuf);
FreeMem (p, BufSize * sizeof (TPoint));
הסוף;

הליך TForm1.OnWaveIn;
היה
i: מספר שלם;
data8: PData8;
data16: PData16;
h: מספר שלם;
XScale, YScale: יחיד;
להתחיל
h: = PaintBox1.Height;
XScale: = PaintBox1.Width / BufSize;
אם Bits16 מתחיל
data16: = PData16 (PWaveHdr (Msg.lParam) ^ lpData);
YScale: = h / (1 shlXX);
עבור i: = 0 ל BufSize - 1 לעשות
p ^ [i]: = נקודה (סיבוב (i * XScale),
סיבוב (h / 2 - data16 ^ [i] * YScale));
בסופו של אחר להתחיל
Data8: = PData8 (PWaveHdr (Msg.lParam) ^ LpData);
YScale: = h / (1 shlXX);
עבור i: = 0 ל BufSize - 1 לעשות
p ^ [i]: = נקודה (סיבוב (i * XScale),
סיבוב (h - data8 ^ [i] * YScale));
הסוף;
עם PaintBox1.Canvas להתחיל
Brush.Color: = clWhite;
FillRect (ClipRect);
Polyline (פרוסה (p ^, BufSize));
הסוף;
אם לעצור
ואז WaveInAddBuffer (WaveIn, PWaveHdr (Msg.lParam),
SizeOf (TWaveHdr))
Other stop: = true;
הסוף;

הליך TForm1.FormDestroy (שולח: TObject);
להתחיל
Button2.Click;
הסוף;




עמודים: 1 ענף שלם

פורום: "מערכת";
ארכיון נוכחי: 2002.01.08;
הורדה: [xml.tar.bz2];

למעלה









זיכרון: 0.56 MB
זמן: 0.022 c
3-21957
קאם
2001-11-29 15:31
2002.01.08
בתהליך הפעלת התוכנית, עליך ליצור ולמחוק טבלה פעמים רבות ...


14-22404
Mjh
2001-11-05 14:58
2002.01.08
עלות אינטה (שעה)


3-21995
דמיטרי ד.
2001-12-07 08:00
2002.01.08
שגיאה BDE יצא ... אני לא מבין מה יכול להיות הבעיה


7-22425
אנדריי
2001-06-19 15:45
2002.01.08
פונקציית הסורק


3-21998
Yu
2001-12-07 11:27
2002.01.08
מחק רשומה מהשאילתה





אפריקאנס אלבני ערבי אַרְמֶנִי אזרביג'אן הבסקים בלארוסית בולגרי קטלאנית הסיני (פשוט) סינית (מסורתית) קרואטית צ'כיה דני הולנדי אנגלית אסטוני פיליפיני פיני צרפתית
גליציה גאורגיה גרמני יווני קריאולית האיטית עברי הינדי הונגרי איסלנדי אינדונזי אירי איטלקי יפני קוריאני לטבי ליטאי מקדוניה מלאית מלטזית נורבגי
פרסי פולני פורטוגזי רומנית רוסי סרבית סלובקי סלובני ספרדי סוואהילית שבדי תאילנדי תורכי אוקראיני אורדו ויאטנמית וולשית יידיש בנגלית בוסנית
קבואנו אספרנטו גוג'ראטית האוסה המונג איגבו יָאוָנִי קנאדה לחמר לאו הלטינית מאורים מרתי מונגולי נפאלית פונג'בית סומליה טמילית טלוגו יורובה
זולו
Английский Французский Немецкий Итальянский Португальский Русский Испанский