![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как считать звук с микрофона? [D7, XP]
Rembo2010 © (2010-08-10 01:35:00)Здравствуйте! Я хотел написать программу (просто для себя), которая считывала бы звук с микрофона и, если звук громкий (например, хлопок), она, к примеру гасила бы экран.
Как считать звук, я знаю, только не понимаю что сделать чтобы экран погасал, только когда звук громкий?
Объясните мне пожалуйста, поподробнее, как это сделать, т.к. в Delphi я новичок.
KilkennyCat (2010-08-11 19:45:00) [1]но вообще, хлопковость уже не модно. модно силою мысли.
Сергей М. (2010-08-11 18:39:00) [2]
> KilkennyCat © (11.08.10 18:35) [38]
Ну если только для "визуального прощепонимания", тогда возражений не имею)
KilkennyCat (2010-08-11 18:35:00) [3]
> Сергей М. © (11.08.10 16:00) [33]
> KilkennyCat © про осциллограмму от балды ляпнул,
ну не совсем, просто это как бы визуально проще понимается, где громко, где негромко и какой частоты. Разумеется, рисовать ее не надо :))
Сергей М. (2010-08-11 17:20:00) [4]
> Rembo2010 (11.08.10 16:40) [35]
А ты уже разобрался с PCM-форматом кодирования ?
Сергей М. (2010-08-11 17:19:00) [5]
> RWolf © (11.08.10 16:11) [34]
А по барабану)
Главное чтобы юзер упал с дивана с теми же "дебицилами".
Что собснно автору и требуется)
Ну а ежели требуется отличить падение с дивана от хлопка в ладоши, достаточно добавить в начало цепочки один или более полосовых фильтров, отсекающих ненужные участки спектра.
Rembo2010 (2010-08-11 16:40:00) [6]
> Сергей М."Выпрямляешь" исходный сигнал, сглаживаешь его
> и подаешь на вход пороговового компаратора - и всех делов)
Можно поподробнее?
RWolf (2010-08-11 16:11:00) [7]
> Сергей М. © (11.08.10 16:00) [33]
такой детектор не отличит хлопок в ладоши от падения юзера с дивана. Громкость-то одна.
Сергей М. (2010-08-11 16:00:00) [8]
> Rembo2010 (11.08.10 15:28) [31]
KilkennyCat © про осциллограмму от балды ляпнул, а ты бросился искать "осциллограф")
Нафих он тут нужен, если все гораздо проще ?
"Выпрямляешь" исходный сигнал, сглаживаешь его и подаешь на вход пороговового компаратора - и всех делов)
Jeer (2010-08-11 15:37:00) [9]
> главное чтобы она ЧТО-ТО делала
"Матюкалась" устроит ? :)
Rembo2010 (2010-08-11 15:28:00) [10]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 она что-то делала (неважно что, это я уже сам доделаю, главное чтобы она ЧТО-ТО делала)? Ну или может как по другому?
RWolf (2010-08-11 10:05:00) [11]Алгоритм действий мне представляется следующим:
1. Непрерывно слушать аудиовход и строить спектр входящего сигнала.
2. Если суммарная энергия сигнала по спектру превышает некий порог, то нормализовать спектр и сравнить с эталонным, чтобы отсеять посторонние громкие звуки. При достаточно точном совпадении — сделать то, ради чего написана программа, будь то включить монитор или что-то иное.
KilkennyCat (2010-08-11 08:04:00) [12]
> Малополезно если под "громким звуком" подразумевается что-
> то типа "хлопок".
на основе WAV не сложно построить осцилограмму. дальше берется любой лгоритм сравнивания подобных.
Германн (2010-08-11 02:29:00) [13]
> да, здорово было бы так пошутить)))))! Ну а все-таки, как
> можно сделать, вообще что использовать, какие-то функции
Дайте код ! В конце то концов!
:)
Германн (2010-08-11 01:44:00) [14]
> KilkennyCat © (11.08.10 00:40) [26]
...
> > как реализовать "громкий звук"
>
> изучить формат WAV
>
Малополезно если под "громким звуком" подразумевается что-то типа "хлопок".
> Ну да, здорово было бы так пошутить)
Когда сможешь "так пошутить", патентуй решение. Заработаешь кучу денег.
KilkennyCat (2010-08-11 00:40:00) [15]
> какие-то функции
я уже писал. готовый код мне лень искать, и еще более лень писать.
> как реализовать "громкий звук"
изучить формат WAV
Rembo2010 (2010-08-10 23:34:00) [16]
> Так ведь в Караоке как раз в том и весь весь цимус чтобы
> поорать))
> Собрались друзья-приятели культурно выпить-закусить-поорать
> под чью-то фанеру, а ты им такой облом устроить хочешь -
> экран гасить)
> Это, я бы сказал, даже рисковано - по случаю бытия навеселе
> могут и экран надеть на уши автору такой программной засады))
Ну да, здорово было бы так пошутить)))))! Ну а все-таки, как можно сделать, вообще что использовать, какие-то функции (а именно как реализовать "громкий звук"?)))) Не понятно...
Сергей М. (2010-08-10 15:00:00) [17]
> Rembo2010 (10.08.10 14:12) [23]
Так ведь в Караоке как раз в том и весь весь цимус чтобы поорать))
Собрались друзья-приятели культурно выпить-закусить-поорать под чью-то фанеру, а ты им такой облом устроить хочешь - экран гасить)
Это, я бы сказал, даже рисковано - по случаю бытия навеселе могут и экран надеть на уши автору такой программной засады))
(2010-08-10 14:12:00) [18]Удалено модератором
(2010-08-10 14:05:00) [19]Удалено модератором
KilkennyCat (2010-08-10 14:01:00) [20]правильно в дебициллах ;)