Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.01 c
1-62607
viol-2
2003-01-09 11:22
2003.01.20
Отрисовка ScrollBox


14-62850
Марина
2003-01-03 15:13
2003.01.20
редактор с поддержкой .doc


3-62385
SasaR
2002-12-25 11:50
2003.01.20
IBX - автозакрытие датасетов


1-62519
Аноним
2003-01-10 18:13
2003.01.20
TextOut


1-62615
Smok_er
2003-01-09 00:21
2003.01.20
Интересная задачка...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский