Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2009, 05:09   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию Построение кривой звука и приём с микрофона

Вот решил попробовать сделать распознавание xD
Но ничего по этому поводу не знал - думаю это не так уж и сложно...
Спасибо.
TwiX вне форума Ответить с цитированием
Старый 12.11.2009, 09:50   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

если не секрет, шо таке -
Цитата:
xD
?

распознавание речи очень нетривиальная задача, куча институтов бъются...ройте в сторону speechapi...
нет, конечно есть библиотеки по распознаванию простейших команд (тот же ms agent, горыныч небезызвестный и т.п.), так и то на английском и это с учетом того что куча фоно-баз

...поэтому уточните, если речь идет о речи - это одно, если распознать тональный сигнал скажем, то это другое и значительно проще
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 12.11.2009 в 10:00.
raxp вне форума Ответить с цитированием
Старый 12.11.2009, 12:34   #3
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Ммм... Я хотел узнать как строить кривые звука и как принимать звук через микрфон =)
TwiX вне форума Ответить с цитированием
Старый 12.11.2009, 12:53   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Я хотел узнать как строить кривые звука и как принимать звук через микрфон
Код:
var vis_ir: timage;
...
//= systimer2 =
procedure waveInProc2(hwi: HWAVEIN; uMsg,dwInstance,
                     dwParam1,dwParam2: DWORD);stdcall;
var i: integer;
    data16: PData16;
    h: integer;
    XScale, YScale: single;
    temp: pWaveHdr;
begin
 if (uMsg=WIM_DATA) then begin
  temp:= adr2;
  if adr2= @bufhead1 then adr2:= @bufhead2
   else adr2:= @bufhead1;
  if stp2 then WaveInAddBuffer(hwi,adr2,SizeOf(TWaveHdr));
  data16:= PData16(temp.lpData);

  //graf-
  h:= vis_ir.Height; //k:= abs(data16^[0]);
  XScale:= vis_ir.Width / BufSize;
  YScale:= h / (1 shl 16);
  for i := 0 to BufSize - 1 do
   pnt^[i]:= Point(round(i * XScale),round(h / 2 - data16^[i] * YScale));

  with vis_ir.Canvas do begin
   brush.Color:= 0;
   FillRect(ClipRect);
   pen.Color:= 16711680;//clblue;
   Polyline(Slice(pnt^, BufSize));
   font.Color:= 255;
   font.Name:= 'arial'; font.Size:= 5;
   cnt_:= not cnt_;
   if cnt_ then textout(0,0,'REC');//inttohex(k,4));
   font.Color:= 65280;
   textout(0,h-7,inttostr(sz)+' KB');
  end

 end else Exit
end;


procedure wcard(tmp: Timage);
const rbuf=7;
var header: TWaveFormatEx;
    BufLen: word;
    buf: pointer;
begin
 vis_ir:= tmp;
 try
 //
 stp2:=not stp2;
 if stp2 then begin
  vis_ir.Visible:=true;
  //vis_ir.Hint:= 'Идет запись...';

  BufSize:= rbuf * 500 + 100;
  with header do begin
   wFormatTag:= WAVE_FORMAT_PCM;
   nChannels := 2;
   nSamplesPerSec:= 22050;
   wBitsPerSample:= 16;
   nBlockAlign:= nChannels * (wBitsPerSample div 8);
   nAvgBytesPerSec:= nSamplesPerSec * nBlockAlign;
   cbSize:= 0;
  end;

  WaveInOpen(Addr(hwi2), WAVE_MAPPER, addr(header),integer(@waveInProc2),
             0,CALLBACK_FUNCTION);
  BufLen:= header.nBlockAlign * BufSize;
  hBuf:= GlobalAlloc(GMEM_MOVEABLE and GMEM_SHARE, BufLen);

  Buf:= GlobalLock(hBuf);
  with BufHead1 do begin
   lpData:= Buf;
   dwBufferLength:= BufLen;
   dwFlags:= 0;
  end;

  with BufHead2 do begin
   lpData:= Buf;
   dwBufferLength:= BufLen;
   dwFlags:= 0;
  end;
  adr2:= @BufHead1;
  waveInPrepareHeader(hwi2, Addr(BufHead1), sizeof(BufHead1));
  waveInPrepareHeader(hwi2, Addr(BufHead2), sizeof(BufHead2));
  WaveInAddBuffer(hwi2, addr(BufHead1), sizeof(BufHead1));
  GetMem(pnt, BufSize * sizeof(TPoint));
  WaveInStart(hwi2);

 //стоп
 end else begin
  vis_ir.Visible:=false; vis_ir.Hint:= '';

  WaveInReset(hwi2);
  WaveInUnPrepareHeader(hwi2, addr(BufHead1), sizeof(BufHead1));
  WaveInClose(hwi2);
  GlobalUnlock(hBuf); GlobalFree(hBuf);
  FreeMem(pnt, BufSize * sizeof(TPoint));
 end; except end
end;
...еще вариант, в событии waveinproc берете data16 и просто кидаете данные в tchart, он сам и отрисует...
Код:
var
inwav,outwav: TfastLineSeries;
spektr: TbarSeries;
...
 data16:= PData16(temp.lpData);

  inwav.Clear; outwav.Clear; spektr.Clear;

  for i := 0 to BufSize - 1 do begin //набиваем-
   inwav.add(data16^[i])
  end;
  //FFTQuad(inwav,outwav,fftcnt,false); // тут можем спектр построить
...
использование- wcard(vis_ir)
...
не забудьте inwav создать...
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 12.11.2009 в 13:01.
raxp вне форума Ответить с цитированием
Старый 12.11.2009, 17:47   #5
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Цитата:
Сообщение от triton Посмотреть сообщение
Так распознавать не надо? Тогда формулируй получше. Надо было написать не "распозенавание", а "регистрация". Распознавание - это анализ кривой и определение того, каков её смысл, а регистрация - только приём с микрофона и размещение в блоке данных. Визуализация кривой на экране - это в принципе отдельная подзадача, но в рамках задачи возможно и объединение регистрации с визуализацией.
Основной (и, соответственно, главный) вопрос должно содержать название темы. Про распознавание я ничего и не спрашивал - просто сказал для чего мне нужно узнать то, что содержит название темы.

raxp,у спасибо =) Сейчас буду разбираться, что написано )
TwiX вне форума Ответить с цитированием
Старый 12.11.2009, 19:02   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
raxp,у спасибо =) Сейчас буду разбираться, что написано
кстати, если что будет непонятно, полный модуль выкладывал тут
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Уменшить громкость микрофона nusik Мультимедиа в Delphi 2 19.10.2009 13:56
Качество микрофона iiunbreakableii Мультимедиа в Delphi 12 14.10.2009 14:35
Звук с микрофона увидеть dx+ Мультимедиа в Delphi 6 24.06.2009 09:58
Эмулятор микрофона hotcooler17 Мультимедиа в Delphi 4 18.06.2009 15:32
Приём изображений Terran Работа с сетью в Delphi 2 15.12.2007 15:03