Уровень звука на входе
От: crazzypolman  
Дата: 26.01.04 15:10
Оценка:
Обыскал весь форум в поисках сабжа, подскажите хоть один простой примерчик как отобразить в своей программе уровень звука на входе звуковой карты?
считаный буфер из waveIn уже у меня.
Re: Уровень звука на входе
От: Dimonka Верблюд  
Дата: 28.01.04 14:32
Оценка:
Здравствуйте, crazzypolman, Вы писали:

C>Обыскал весь форум в поисках сабжа, подскажите хоть один простой примерчик как отобразить в своей программе уровень звука на входе звуковой карты?

C>считаный буфер из waveIn уже у меня.

Принцип такой:
1. Уменьшаешь прошлый пик громкости на скорость затухания пика.
2. Ищешь в текущем буфере пик громкости.
3. Если он текущий пик больше прошлого пика, записываешь его в прошлый пик.
4. Рисуешь прошлый пик громкости.
5. захватываешь буфер и переходишь на пункт 1
Re[2]: Уровень звука на входе
От: crazzypolman  
Дата: 28.01.04 18:33
Оценка:
Здравствуйте, Dimonka, Вы писали:

D>Принцип такой:

D>1. Уменьшаешь прошлый пик громкости на скорость затухания пика.
D>2. Ищешь в текущем буфере пик громкости.
D>3. Если он текущий пик больше прошлого пика, записываешь его в прошлый пик.
D>4. Рисуешь прошлый пик громкости.
D>5. захватываешь буфер и переходишь на пункт 1

Спасибо за ответ, но алгоритмов я уже насмотрелся, а вот с реализацией никак, и что-то про быстрое преобразование Фурье для вычисления мощности сигнала я видел, но реализаций (примеров попроще) нет вообще нигде, странно — неужели никто таким не занимается и все используют сторонние ActiveX компоненты?
Re[3]: Уровень звука на входе
От: Dimonka Верблюд  
Дата: 29.01.04 09:11
Оценка:
Здравствуйте, crazzypolman, Вы писали:

C>Спасибо за ответ, но алгоритмов я уже насмотрелся, а вот с реализацией никак, и что-то про быстрое преобразование Фурье для вычисления мощности сигнала я видел, но реализаций (примеров попроще) нет вообще нигде, странно — неужели никто таким не занимается и все используют сторонние ActiveX компоненты?


Зачем тебе преобразование фурье для определения уровня звука??

Пики можно считать не только как пики, можно подсчитывать среднеквадратическое значение сигнала (RMS).
Самый простой вариант:


OldPeak:=OldPeak * FadingCoeff;
NewPeak:=GetPeakFromWave(buffer:TArrayOfSomething);
if NewPeak > OldPeak then OldPeak:=NewPeak;
DisplayPeak(OldPeak);


Как подсчитать среднеквадратическое значение сигнала:

Val:=0;
for i:=0 to WindowSize-1 do
  Val:=buffer[Offset+i] * buffer[Offset+i];
RMS:=Sqrt( Val / WindowSize);


Естественно это только пример, а значение надо считать инкриментально.
Re[4]: Уровень звука на входе
От: crazzypolman  
Дата: 29.01.04 19:12
Оценка:
Здравствуйте, Dimonka, Вы писали:

D>Зачем тебе преобразование фурье для определения уровня звука??


D>Пики можно считать не только как пики, можно подсчитывать среднеквадратическое значение сигнала (RMS).

D>Самый простой вариант:


D>
D>OldPeak:=OldPeak * FadingCoeff;
D>NewPeak:=GetPeakFromWave(buffer:TArrayOfSomething);
D>if NewPeak > OldPeak then OldPeak:=NewPeak;
D>DisplayPeak(OldPeak);
D>


D>Как подсчитать среднеквадратическое значение сигнала:


D>
D>Val:=0;
D>for i:=0 to WindowSize-1 do
D>  Val:=buffer[Offset+i] * buffer[Offset+i];
D>RMS:=Sqrt( Val / WindowSize);
D>


D>Естественно это только пример, а значение надо считать инкриментально.



И правда — что это со мной — вроде электротехника была и простого не усмотрел, спасибо за пример, воспользуюсь. Очень доходчиво, чего только больная голова не выдумет — это я про себя.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.