Есть программисты на Delphi?
Добавлено: Ср мар 16, 2011 15:36:21
Очень нужна помощь в одном вопросе по Delphi. Если кто шарит в нем, откликнитесь.
Здесь можно немножко помяукать :)
https://radiokot.ru/forum/
Код: Выделить всё
procedure TForm1.BitBtn1Click(Sender: TObject);
var
header: TWaveFormatEx;
BufLen: word;
buf: pointer;
begin
z:= StrToInt(Edit1.Text);
BufSize := 400; { Размер буфера }
with header do
begin
wFormatTag := WAVE_FORMAT_PCM;
nChannels := 1; { количество каналов }
nSamplesPerSec := 44100; { частота }
wBitsPerSample := 16; { 8 / 16 бит }
nBlockAlign := nChannels * (wBitsPerSample div 8);
nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
cbSize := 0;
end;
WaveInOpen(Addr(WaveIn), WAVE_MAPPER, addr(header),
Form1.Handle, 0, CALLBACK_WINDOW);
BufLen := header.nBlockAlign * BufSize;
hBuf := GlobalAlloc(GMEM_MOVEABLE and GMEM_SHARE, BufLen);
Buf := GlobalLock(hBuf);
with BufHead do
begin
lpData := Buf;
dwBufferLength := BufLen;
dwFlags := WHDR_BEGINLOOP;
end;
WaveInPrepareHeader(WaveIn, Addr(BufHead), sizeof(BufHead));
WaveInAddBuffer(WaveIn, addr(BufHead), sizeof(BufHead));
GetMem(p, BufSize * sizeof(TPoint));
stop := true;
WaveInStart(WaveIn);
end;Ну, во первых, я не знаю, что за классы используются в обработке.а мне нужно отдельно каждый сигнал обрабатывать в параллельных процессах. Как это сделать?
Код: Выделить всё
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, MMSystem, StdCtrls, ExtCtrls, jpeg, Grids, Buttons;
type
TData16 = array [0..127] of smallint;
PData16 = ^TData16;
TPointArr = array [0..127] of TPoint;
PPointArr = ^TPointArr;
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Image1: TImage;
Label2: TLabel;
StringGrid1: TStringGrid;
Image2: TImage;
Label5: TLabel;
Edit5: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
BitBtn5: TBitBtn;
BitBtn6: TBitBtn;
Image3: TImage;
Image4: TImage;
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn5Click(Sender: TObject);
procedure BitBtn6Click(Sender: TObject);
private
{ Private declarations }
function GetExcelFileName: String;
public
{ Public declarations }
procedure OnWaveIn(var Msg: TMessage); message MM_WIM_DATA;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
ComObj;
const
EXCEL_FILE_EXT = '.xls';
var
WaveIn: hWaveIn;
hBuf: THandle;
BufHead: TWaveHdr;
bufsize: integer;
p: PPointArr;
stop: boolean = false;
z: integer;
Ясно, а может можно как-нибудь по-другому составить алгоритм? Мне просто нужно через определенные промежутки времени брать значения амплитуд с сигнала от микрофона с обоих каналов.ploop писал(а):Уже вижу модуль MMSystem. Нет, я с ним не работал, надо разбираться.
Лучше вам обратиться на тематический форум, т.к. это не общий вопрос "по Delphi", а конкретно по работе с данным модулем.