Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.11.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.11.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.004 c
2-1281552835
Andrey K
2010-08-11 22:53
2010.11.07
Нет доступа к свойству


15-1280332456
Baks
2010-07-28 19:54
2010.11.07
Как правильно разбить строку?


15-1280041741
Loginov Dmitry
2010-07-25 11:09
2010.11.07
Пишем свой wysiwyg HTML-редактор


15-1280474574
Лезнайка на Нуле
2010-07-30 11:22
2010.11.07
когнитивный диссонанс


15-1280079752
turbouser
2010-07-25 21:42
2010.11.07
А вот





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский