Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Мультимедиа
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.04.2012, 19:04
Аватар для -sanya-
-sanya- -sanya- вне форума
Новичок
 
Регистрация: 14.04.2009
Сообщения: 64
Репутация: 20
По умолчанию Захват звука с микрофона в буфер

Я решил разобратся как работают файлы wav, с нуля.
Впринципи почти все понятно.

WAV очень короткий звуковой фрагмент подгружается в буфер
массив байтов
Код:
buffer1: array [0..44099] of byte;
ну и после этот короткий отрезок из буфера можно воспроизести через
WaveOutWrite

Код:
procedure TForm1.PlayBuffer(soundBuffer: array of byte);
var
   i, err: integer;
begin

 with header do begin
   wFormatTag := WAVE_FORMAT_PCM;
   nChannels := 1;
   nSamplesPerSec := 44100;
   wBitsPerSample := 8;
   nBlockAlign := nChannels * (wBitsPerSample div 8);
   nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
   cbSize := 0;
 end;

   if Opened = false then begin

   err:=WaveOutOpen(addr(waveOut), 0, @header, Handle, 0, CALLBACK_WINDOW);
    if Err <> 0 then Exit;

for i:=0 to 1 do begin
 pBuf[i] := GlobalAlloc(GMEM_MOVEABLE and GMEM_SHARE, length(soundBuffer));
pBuffer[i]:=GlobalLock(pBuf[i]);

  with outHdr[i] do begin
   lpData := pbuffer[i];
   dwBufferLength := length(soundBuffer);
    dwUser := 0;
    dwFlags := 0;
   dwLoops := 0;
 end;

   err:=WaveOutPrepareHeader(waveOut, @outHdr[i], sizeof(outHdr));
    if Err <> 0 then Exit;

   copyMemory(pBuffer[i], @soundBuffer, length(soundBuffer));

   err:=WaveOutWrite(waveOut, @outHdr[i], sizeof(outHdr));
    if Err <> 0 then Exit;
end;

   end else begin

   for i:=0 to 1do 

   copyMemory(pBuffer[i], @soundBuffer, length(soundBuffer));

   end;

end;

И так далее wav файл постепенно подгружается в буфер и выводится на звуковую карту

Теперь вопрос.
Мне нужно как то получить с микрофона звуковой фрагмент в buffer1.
Но как это сделать ума нехватает, прошу помоч советом.

Мне это нужно что бы потом графически отобразить, шум в микрофоне, и при определенном уровне шума выполнить действие.
Разбирался недавно как работает гугловская программа для перевода речи в текст, на удивление русская речь переводится на 90% успешно.
Вот и хотел сделать програмку что бы по двойному хлопку в ладоши программа включала переводчик речи в текст и делала запрос в ютубе.
Что бы не вставая с дивана просматривать ютуб)
__________________

Последний раз редактировалось -sanya-, 12.04.2012 в 19:10.
Ответить с цитированием
 


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:20.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter