घर
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 फेंक दिया):

का उपयोग करता है
विंडोज, संदेश, SysUtils, कक्षाएं, ग्राफिक्स, नियंत्रण, प्रपत्र,
डायलॉग, StdCtrls, ExtCtrls, ComCtrls, MMSystem;

टाइप
TData8 = सरणी [बाइट के 0..127];
PData8 = ^ TData8;
TData16 = सरणी [छोटा की 0..127];
PData16 = ^ TData16;
TPointArr = सरणी [TNUMX..0] TPoint की;
PPointArr = ^ TPointArr;
TForm1 = वर्ग (TForm)
Button1: TButton;
Button2: TButton;
पेंटबॉक्सएक्सएनयूएमएक्स: टीपेंटबॉक्स;
TrackBar1: TTrackBar;
CheckBox1: TCheckBox;
प्रक्रिया Button1Click (प्रेषक: Tobject);
प्रक्रिया Button2Click (प्रेषक: Tobject);
निजी
{निजी घोषणाएँ}
सार्वजनिक
प्रक्रिया OnWaveIn (var Msg: TMessage); संदेश MM_WIM_DATA;
अंत;

था
Form1: TForm1;

कार्यान्वयन

{$ R * .DFM}

था
वेवइन: hWaveIn;
hBuf: थैंडल;
बुफ़हेड: ट्ववेह्र्ड;
bufsize: पूर्णांक;
बिट्सएक्सएनयूएमएक्स: बूलियन;
पी: PPointArr;
रोक: बूलियन = झूठी;

प्रक्रिया TForm1.Button1 क्लिक करें (प्रेषक: TObject);
था
शीर्ष लेख: TWaveFormatEx;
बुफ़लेन: शब्द;
buf: पॉइंटर;
शुरू करना
BufSize: = TrackBar1.Position * 500 + 100;
Bits16: = CheckBox1.Checked;
हेडर के साथ शुरू करते हैं
wFormatTag: = WAVE_FORMAT_PCM;
nChannels: = 1;
nSamplesPerSec: = 22050;
wBitsPerSample: = पूर्णांक (Bits16) * 8 + 8;
nBlockAlign: = nChannels * (wBitsPerSample div 8);
nAvgBytesPerSec: = nSamplesPerSec * nBlockAlign;
cbSize: = 0;
अंत;
WaveInOpen (Addr (WaveIn), WAVE_MAPPER, addr (हैडर),
Form1.Handle, 0, CALLBACK_WINDOW);
BufLen: = शीर्ष लेख। BlockAlign * BufSize;
hBuf: = GlobalAlloc (GMEM_MOVEABLE और GMEM_SHARE, BufLen);
Buf: = GlobalLock (hBuf);
BufHead के साथ शुरू करते हैं
lpData: = Buf;
dwBufferLength: = बुफलेन;
dwFlags: = WHDR_BEGINLOOP;
अंत;
WaveInPrepareHeader (WaveIn, Addr (BufHead), sizeof (BufHead));
WaveInAddBuffer (WaveIn, addr (BufHead), sizeof (BufHead));
गेटमेम (पी, बुफ़साइज़ * साइज़ोफ़ (टीपीएन));
रोक: = सच;
वेवइनस्टार्ट (वेवइन);
अंत;

प्रक्रिया TForm1.Button2 क्लिक करें (प्रेषक: TObject);
शुरू करना
अगर रोकना = गलत है तो बाहर निकलें;
रोक: = झूठी;
जबकि बंद मत करो। ApplicationProcessMessages;
रोक: = झूठी;
वेवइनसेट (वेवइन);
WaveInUnPrepareHeader (WaveIn, addr (BufHead), sizeof (BufHead));
WaveInClose (वेवइन);
GlobalUnlock (hBuf);
GlobalFree (hBuf);
FreeMem (p, BufSize * sizeof (TPoint));
अंत;

प्रक्रिया TForm1.OnWaveIn;
था
i: पूर्णांक;
data8: PData8;
data16: PData16;
एच: पूर्णांक;
XScale, YScale: सिंगल;
शुरू करना
h: = PaintBox1.Height;
XScale: = PaintBox1.Width / BufSize;
यदि Bits16 तब शुरू होता है
data16: = PData16 (PWaveHdr (Msg.lParam) ^। lpData);
YScale: = h / (1 shl 16);
i: = 0 से BufSize - 1 करते हैं
p ^ [i]: = पॉइंट (गोल (i * XScale),
राउंड (h / 2 - data16 ^ [i] * YScale));
अंत और शुरू
Data8: = PData8 (PWaveHdr (Msg.lParam) ^। LpData);
YScale: = h / (1 shl 8);
i: = 0 से BufSize - 1 करते हैं
p ^ [i]: = पॉइंट (गोल (i * XScale),
राउंड (h - data8 ^ [i] * YScale));
अंत;
PaintBox1.Canvas के साथ शुरू करते हैं
ब्रश.कलर: = क्लेव्हीट;
FillRect (ClipRect);
पॉलीलाइन (स्लाइस (p ^, BufSize));
अंत;
अगर रुकना है
उसके बाद वेवइंडबफर (WaveIn, PWaveHdr (Msg.lParam),
SizeOf (TWaveHdr)
और स्टॉप: = सच;
अंत;

प्रक्रिया TForm1.FormDestroy (प्रेषक: TObject);
शुरू करना
Button2.Click;
अंत;




पन्ने: 1 पूरी शाखा

फोरम: "सिस्टम";
वर्तमान संग्रह: 2002.01.08;
डाउनलोड करें: [xml.tar.bz2];

ऊपर









मेमोरी: 0.56 एमबी
समय: 0.023 c
14-22359
Сергей1
2001-11-07 15:36
2002.01.08
Cp1251


3-21914
एक्सल
2001-12-03 18:05
2002.01.08
MIDAS पर प्रश्न।


7-22430
AlexK
2001-09-21 12:28
2002.01.08
चाबी का ताला


14-22336
इवान शिखर
2001-11-02 23:31
2002.01.08
सुनहरा केला


3-21934
Alexsyy
2001-12-04 08:52
2002.01.08
कृपया मेरी मदद करो





अफ्रीकी अल्बानियन अरबी भाषा अर्मेनियाई आज़रबाइजानी बस्क बेलारूसी बल्गेरियाई कैटलन सरलीकृत चीनी) चीनी पारंपरिक) क्रोएशियाई चेक डेनिश डच अंग्रेज़ी एस्तोनियावासी फिलिपिनो फिनिश फ्रेंच
गैलिशियन् जॉर्जियाई जर्मन यूनानी हाईटियन यहूदी हिंदी हंगरी आइसलैंड का इन्डोनेशियाई आयरिश इतालवी जापानी कोरियाई लात्वीयावासी लिथुआनियाई मेसीडोनियन मलायी मोलतिज़ नार्वेजियन
फ़ारसी पोलिश पुर्तगाली रोमानियाई रूसी सर्बियाई स्लोवाक स्लोवेनियाई स्पेनिश स्वाहिली स्वीडिश थाई तुर्की यूक्रेनी उर्दू वियतनामी वेल्श यहूदी बंगाली बोस्नियाई
सिबुआनो एस्पेरांतो गुजराती हौसा हमोंग ईग्बो जावानीस कन्नड़ खमेर लाओ लैटिन माओरी मराठी मंगोलियन नेपाली पंजाबी सोमाली तामिल तेलुगु योरूबा
ज़ुलु
Английский Французский Немецкий Итальянский Португальский Русский Испанский