Форум: "Media";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];
ВнизМикрофон. Найти похожие ветки
← →
Fredericco (2002-07-24 16:58) [0]Поривет всем! Не могли бы вы подсказать, как в режиме реального времени получать сигнал с микрофона, подключенного к WaveIn звуковой карты. Я делаю программу распознавания русской речи. С БПФ вроде разобрался, осталось только сигнал получить.
Заранее благодарен.
С уважением Fredericco.
← →
MJH (2002-07-25 00:42) [1]слухай, примеры ищи. тебе нужна запись..это раз...
пример есть на королевстве делфи....это два....
и как же ты такой умница, разобравшийся с фурье, не может разобраться с записью сигнала?
← →
Fredericco (2002-07-25 11:30) [2]2MJH ©
А вот так. На кафедрах прикладной математики не говорят как средствами Дельфи сигнал с микрофона принимать.
Мне не запись нужна, а анализ, в реальном времени, например, как это реализовано в MMTools.
← →
MJH (2002-07-26 00:53) [3]а ты представляешь что можно записывать не в файл? а например отрисовывать синонсоиду на экране...?
зы: и что за выражение такое "средствами Дельфи"???? какие у неё средства? инспектор объектов? тогда им ты точно ничего не снимешь :) есть такая штука как WinMM (windows multimedia)...
ищи пример говорю...королевство делфи....я оттуда сливал как-то...но это давно было
← →
Fredericco (2002-07-26 10:26) [4]2MJH ©
Нашел на Королевстве и на торри.
← →
MJH (2002-07-26 19:05) [5]ну вот...разгребай теперь
← →
Fredericco (2002-07-29 09:27) [6]MJH ©
Разгреб. Сделал БПФ. Сижу, думаю как голос распознать...
← →
MJH (2002-07-30 04:45) [7]есть только один способ - по готовым образцам
← →
Fredericco (2002-07-30 10:07) [8]MJH ©
Решил пока сам. Вот уже две комманды уверенно распознает и не с чем не путает. Сижу думаю не тупиковый ли алгоритм...
← →
Helg (2002-07-31 22:00) [9]А где это королевство? У меня как раз такая же проблема. И занимаюсь тем же самым в данный момент.
← →
MJH (2002-08-01 02:10) [10]delphikindom.com
← →
ACR (2002-08-01 02:25) [11]DirectSound надабна заюзать
← →
MJH (2002-08-01 10:45) [12]нафига?
ему не нужно воспроизводить звук!
← →
IronHawk (2002-09-29 04:09) [13]Мастера!
Развейте тему!
← →
KUV (2002-09-30 23:15) [14]Ув. мастера!
Помогите в API и т.п.
Если пришлете работающий example(c exe-шником) по считыванию сигнала на kuv@www.com обещаю ответить и поделиться одной классной идеей по распознаванию речи.
← →
Dima1 (2002-10-02 02:24) [15]http://torry.net/, там сверху на ссылочку жмём http://torry.net/otherbars.htm
далее выбираем Effects and Multimedia - http://torry.net/animation.htm
там просто разуваем глаза и выбираем.
А для незрячих - http://torry.net/audio.htm
Ниже приведена готовая статья, которая у меня завалялась в БД.
Эта программа считывает сигнал с микрофона и выводит его на экран.
Частота сигнала - 22050 Гц. Количество бит определяется флажком, размер буфера TrackBar-ом.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls, MMSystem;
type
TData8 = array [0..127] of byte;
PData8 = ^TData8;
TData16 = array [0..127] of smallint;
PData16 = ^TData16;
TPointArr = array [0..127] of TPoint;
PPointArr = ^TPointArr;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
PaintBox1: TPaintBox;
TrackBar1: TTrackBar;
CheckBox1: TCheckBox;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
procedure OnWaveIn(var Msg: TMessage); message MM_WIM_DATA;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
var
WaveIn: hWaveIn;
hBuf: THandle;
BufHead: TWaveHdr;
bufsize: integer;
Bits16: boolean;
p: PPointArr;
stop: boolean = false;
procedure TForm1.Button1Click(Sender: TObject);
var
header: TWaveFormatEx;
BufLen: word;
buf: pointer;
begin
BufSize := TrackBar1.Position * 500 + 100; { Размер буфера }
Bits16 := CheckBox1.Checked;
with header do begin
wFormatTag := WAVE_FORMAT_PCM;
nChannels := 1; { количество каналов }
nSamplesPerSec := 22050; { частота }
wBitsPerSample := integer(Bits16) * 8 + 8; { 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;
procedure TForm1.Button2Click(Sender: TObject);
begin
if stop = false then Exit;
stop := false;
while not stop do Application.ProcessMessages;
stop := false;
WaveInReset(WaveIn);
WaveInUnPrepareHeader(WaveIn, addr(BufHead), sizeof(BufHead));
WaveInClose(WaveIn);
GlobalUnlock(hBuf);
GlobalFree(hBuf);
FreeMem(p, BufSize * sizeof(TPoint));
end;
procedure TForm1.OnWaveIn;
var
i: integer;
data8: PData8;
data16: PData16;
h: integer;
XScale, YScale: single;
begin
h := PaintBox1.Height;
XScale := PaintBox1.Width / BufSize;
if Bits16 then begin
data16 := PData16(PWaveHdr(Msg.lParam)^.lpData);
YScale := h / (1 shl 16);
for i := 0 to BufSize - 1 do
p^[i] := Point(round(i * XScale),
round(h / 2 - data16^[i] * YScale));
end else begin
Data8 := PData8(PWaveHdr(Msg.lParam)^.lpData);
YScale := h / (1 shl 8);
for i := 0 to BufSize - 1 do
p^[i] := Point(round(i * XScale),
round(h - data8^[i] * YScale));
end;
with PaintBox1.Canvas do begin
Brush.Color := clWhite;
FillRect(ClipRect);
Polyline(Slice(p^, BufSize));
end;
if stop
then WaveInAddBuffer(WaveIn, PWaveHdr(Msg.lParam),
SizeOf(TWaveHdr))
else stop := true;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Button2.Click;
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if stop then begin
Button2.Click;
Button1.Click;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TrackBar1.OnChange := CheckBox1Click;
Button1.Caption := "Start";
Button2.Caption := "Stop";
CheckBox1.Caption := "16 / 8 bit";
end;
end.
Всего доброго,
Даниил Карапетян.
На сайте http://delphi4all.narod.ru Вы найдете более 100 советов по Delphi.
email: delphi4all@narod.ru
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.012 c