Вниз
Скачать: CL | DM;

Как считать звук с микрофона?   Найти похожие ветки 

← →
Rembo2010   (2010-08-10 01:35) [0]

Здравствуйте! Я хотел написать программу (просто для себя), которая считывала бы звук с микрофона и, если звук громкий (например, хлопок), она, к примеру гасила бы экран.
Как считать звук, я знаю, только не понимаю что сделать чтобы экран погасал, только когда звук громкий?
Объясните мне пожалуйста, поподробнее, как это сделать, т.к. в Delphi я новичок.


← →
trsas ©   (2010-08-10 01:43) [1]


> только не понимаю что сделать чтобы экран погасал

А что значит "экран погасал"? Но это так мелочи.
Что значит "звук громкий"?


← →
KilkennyCat ©   (2010-08-10 01:49) [2]

Кнопкой проще.

> Что значит "звук громкий"?

это означает, что колебание мембраны микрофона стало несколько сильнее, чем обычно. вероятно, следует чисто для практичности добавить еще "за некоторый период времени относительно "тихого" периода времени"


← →
trsas ©   (2010-08-10 02:17) [3]


> KilkennyCat ©   (10.08.10 01:49) [2]

...

> это означает, что колебание мембраны микрофона стало несколько
> сильнее, чем обычно. вероятно, следует чисто для практичности
> добавить еще "за некоторый период времени относительно "тихого"
> периода времени"

А зачем домысливать за автора? Он ведь уже знает как считать звук.


← →
Юрий Зотов ©   (2010-08-10 02:39) [4]

Надо хлопнуть по экрану. Сам погаснет, без микрофонов.


← →
KilkennyCat ©   (2010-08-10 02:55) [5]


> Юрий Зотов ©   (10.08.10 02:39) [4]

угу. завтра с утра такой экран у охранников "включать буду". то ли хлопнули, то ли еще что, программистов-то среди них нет, даж начинающих.


← →
Германн ©   (2010-08-10 02:58) [6]

Удалено модератором


← →
Германн ©   (2010-08-10 03:00) [7]

Удалено модератором


← →
KilkennyCat ©   (2010-08-10 03:09) [8]


> trsas ©   (10.08.10 02:17) [3]

> А зачем домысливать за автора?

а что еще делать-то...
я лично не знаю, что ему посоветовать...
монитор:
WM_SYSCOMMAND, SC_MONITORPOWER через SendMessage
http://msdn.microsoft.com/en-us/library/ms646360%28VS.85%29.aspx
микрофон:
http://msdn.microsoft.com/en-us/library/aa908147.aspx


← →
KilkennyCat ©   (2010-08-10 03:13) [9]

по микрофону точнее вот эта:
http://msdn.microsoft.com/en-us/library/dd743847%28VS.85%29.aspx


> Германн ©   (10.08.10 03:00) [7]

обычные, охрана бизнес-центра. драйвер подсветки сдох.


← →
trsas ©   (2010-08-10 03:33) [10]

Удалено модератором


← →
KilkennyCat ©   (2010-08-10 03:35) [11]

Удалено модератором


← →
Германн ©   (2010-08-10 03:39) [12]

Удалено модератором


← →
brother ©   (2010-08-10 05:21) [13]

Удалено модератором


← →
ixen ©   (2010-08-10 06:56) [14]

я не знаю как это реализовать программно, но если рассуждать логически то:
1) научись просто гасить экран, хотя бы по кнопке на форме
2) научись определять частоту входящего звука, в цифровом эквиваленте.
3) определи частоту звука как громкую, при которой следует выключать монитор
4) проверяй в таймере частоту входящего звука и сравнивай с громкой, если больше или равно гаси монитор
ИМХО


← →
RWolf ©   (2010-08-10 11:58) [15]

> [14]
в результате монитор будет гаснуть от звука телевизора, упавшего предмета, дверного звонка…


← →
ixen   (2010-08-10 12:03) [16]

> в результате монитор будет гаснуть от звука телевизора,
> упавшего предмета, дверного звонка…

а как иначе? конечно будет... можно конечно включить анализатор звука.. который будет определять хлопок это или нет... но я думаю такой анализатор не каждый программист осилит...


← →
Virgo_Style ©   (2010-08-10 13:28) [17]


>2) научись определять частоту входящего звука, в цифровом эквиваленте.
>3) определи частоту звука как громкую,


Что такое, по-твоему, частота?


← →
Z from Police Academy   (2010-08-10 13:35) [18]

А если наорать на монитор, то и экран лопнет... печально.


← →
ixen   (2010-08-10 13:44) [19]

> Что такое, по-твоему, частота?

имелось в виду определить громкость в числовом эквиваленте.. в децибиллах..я в физике не очень...


← →
ixen   (2010-08-10 13:44) [20]

в децибеллах.. опечатался..


← →
KilkennyCat ©   (2010-08-10 14:01) [21]

правильно в дебициллах ;)


← →
имя   (2010-08-10 14:05) [22]

Удалено модератором


← →
имя   (2010-08-10 14:12) [23]

Удалено модератором


← →
Сергей М. ©   (2010-08-10 15:00) [24]


> Rembo2010   (10.08.10 14:12) [23]


Так ведь в Караоке как раз в том и весь весь цимус чтобы поорать))
Собрались друзья-приятели культурно выпить-закусить-поорать под чью-то фанеру, а ты им такой облом устроить хочешь - экран гасить)
Это, я бы сказал, даже рисковано - по случаю бытия навеселе могут и экран надеть на уши автору такой программной засады))


← →
Rembo2010   (2010-08-10 23:34) [25]


> Так ведь в Караоке как раз в том и весь весь цимус чтобы
> поорать))
> Собрались друзья-приятели культурно выпить-закусить-поорать
> под чью-то фанеру, а ты им такой облом устроить хочешь -
>  экран гасить)
> Это, я бы сказал, даже рисковано - по случаю бытия навеселе
> могут и экран надеть на уши автору такой программной засады))


Ну да, здорово было бы так пошутить)))))! Ну а все-таки, как можно сделать, вообще что использовать, какие-то функции (а именно как реализовать "громкий звук"?)))) Не понятно...


← →
KilkennyCat ©   (2010-08-11 00:40) [26]


> какие-то функции

я уже писал. готовый код мне лень искать, и еще более лень писать.

> как реализовать "громкий звук"

изучить формат WAV


← →
Германн ©   (2010-08-11 01:44) [27]


> KilkennyCat ©   (11.08.10 00:40) [26]
...
> > как реализовать "громкий звук"
>
> изучить формат WAV
>

Малополезно если под "громким звуком" подразумевается что-то типа "хлопок".


> Ну да, здорово было бы так пошутить)

Когда сможешь "так пошутить", патентуй решение. Заработаешь кучу денег.


← →
Германн ©   (2010-08-11 02:29) [28]


> да, здорово было бы так пошутить)))))! Ну а все-таки, как
> можно сделать, вообще что использовать, какие-то функции

Дайте код ! В конце то концов!
:)


← →
KilkennyCat ©   (2010-08-11 08:04) [29]


> Малополезно если под "громким звуком" подразумевается что-
> то типа "хлопок".

на основе WAV не сложно построить осцилограмму.  дальше берется любой лгоритм сравнивания подобных.


← →
RWolf ©   (2010-08-11 10:05) [30]

Алгоритм действий мне представляется следующим:
1. Непрерывно слушать аудиовход и строить спектр входящего сигнала.
2. Если суммарная энергия сигнала по спектру превышает некий порог, то нормализовать спектр и сравнить с эталонным, чтобы отсеять посторонние громкие звуки. При достаточно точном совпадении — сделать то, ради чего написана программа, будь то включить монитор или что-то иное.


← →
Rembo2010   (2010-08-11 15:28) [31]

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;

Вот эта функция выводит сигнал с микрофона в PainBox, там такая типа осицилограмма. Как может ее переделать чтобы при превышениии уровня осициллограмме в PainBox"e она что-то делала (неважно что, это я уже сам доделаю, главное чтобы она ЧТО-ТО делала)? Ну или может как по другому?


← →
Jeer ©   (2010-08-11 15:37) [32]


> главное чтобы она ЧТО-ТО делала


"Матюкалась" устроит ? :)


← →
Сергей М. ©   (2010-08-11 16:00) [33]


> Rembo2010   (11.08.10 15:28) [31]


KilkennyCat ©  про осциллограмму от балды ляпнул, а ты бросился искать "осциллограф")
Нафих он тут нужен, если все гораздо проще ?

"Выпрямляешь" исходный сигнал, сглаживаешь его и подаешь на вход пороговового компаратора - и всех делов)


← →
RWolf ©   (2010-08-11 16:11) [34]


> Сергей М. ©   (11.08.10 16:00) [33]

такой детектор не отличит хлопок в ладоши от падения юзера с дивана. Громкость-то одна.


← →
Rembo2010   (2010-08-11 16:40) [35]


> Сергей М."Выпрямляешь" исходный сигнал, сглаживаешь его
> и подаешь на вход пороговового компаратора - и всех делов)


Можно поподробнее?


← →
Сергей М. ©   (2010-08-11 17:19) [36]


> RWolf ©   (11.08.10 16:11) [34]


А по барабану)
Главное чтобы юзер упал с дивана с теми же "дебицилами".
Что собснно автору и требуется)
Ну а ежели требуется отличить падение с дивана от хлопка в ладоши, достаточно добавить в начало цепочки один или более полосовых фильтров, отсекающих ненужные участки спектра.


← →
Сергей М. ©   (2010-08-11 17:20) [37]


> Rembo2010   (11.08.10 16:40) [35]


А ты уже разобрался с PCM-форматом кодирования ?


← →
KilkennyCat ©   (2010-08-11 18:35) [38]


> Сергей М. ©   (11.08.10 16:00) [33]
> KilkennyCat ©  про осциллограмму от балды ляпнул,

ну не совсем, просто это как бы визуально проще понимается, где громко, где негромко и какой частоты. Разумеется, рисовать ее не надо :))


← →
Сергей М. ©   (2010-08-11 18:39) [39]


> KilkennyCat ©   (11.08.10 18:35) [38]


Ну если только для "визуального прощепонимания", тогда возражений не имею)


← →
KilkennyCat ©   (2010-08-11 19:45) [40]

но вообще, хлопковость уже не модно. модно силою мысли.



Страницы: 1 2 вся ветка

Скачать: CL | DM;



Память: 0.55 MB
Время: 0.011 c
6-1228604398
Caesar32
2008-12-07 01:59
2010.11.07
Веб сервис доступа к БД : SOAP + InterBase


15-1280325567
sniknik
2010-07-28 17:59
2010.11.07
Проверьте пожалуйста, если у вас больше чем один домен...


6-1229087355
Ст
2008-12-12 16:09
2010.11.07
Tcpserver узнать ip клиента


2-1281533848
Sergei LM
2010-08-11 17:37
2010.11.07
Обращение к компонентам в цикле


2-1281683349
12
2010-08-13 11:09
2010.11.07
что-то с message происходит, не знаю как и спросить




   Наверх