Этот топик читают: Гость
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 1 раз(а), последний 2017-03-03 00:03:27 |
|||
карма: 0 |
|
Ответов: 209
Рейтинг: 3
|
|||
Можно использовать элемент BASS_ChlVisibleOcilloRec (найдете в upload). Там есть выходные уровни сигнала записи, достаточно установить порог чуть выше уровня шумов.
|
|||
карма: 0 |
|
Ответов: 61
Рейтинг: 2
|
|||
Насчет BASS_ChlVisibleOcilloRec там ошибка...
Сам файл (pas) зовется hiBASS_ChlVisibleOcilloRec , А его внутрености ' unit hiBASS_ChlVisibleOcilloScope; ' Компилятор пишет : Unit name mismatch: 'hiBASS_ChlVisibleOcilloRec' |
|||
карма: 1 |
|
Ответов: 209
Рейтинг: 3
|
|||
Прошу пардона, случайно заслал неисправленную копию. Вот рабочая:
[code:1]unit hiBASS_ChlVisibleOcilloRec; interface uses Windows,Kol,Share,Debug,BASS; type THIBASS_ChlVisibleOcilloRec = class(TDebug) private VisBuff:PBitmap; public _prop_BackColor:TColor; _prop_Offset:integer; _prop_Pen:TColor; _prop_Mode:byte; _prop_Res:byte; _prop_FrameClear:boolean; _data_BackBitmap:THI_Event; _data_ChannelHandle:THI_Event; _data_WindowsHandle:THI_Event; _event_OnLeValue:THI_Event; _event_OnRiValue:THI_Event; procedure _work_doDraw(var _Data:TData; Index:word); end; implementation Type TWaveData = array [ 0..2048] of DWORD; procedure THIBASS_ChlVisibleOcilloRec._work_doDraw; var i, YPos,Ri,Le : LongInt; X,Y,R,L : SmallInt; YVal : single; WaveData:TWaveData; h:cardinal; Scr:PBitmap; begin VisBuff := ReadBitmap(_Data,_data_WindowsHandle,nil); //h := ReadInteger(_Data,_data_ChannelHandle,0); h := RECORDCHAN; scr := ReadBitmap(_Data,_data_BackBitmap,nil); if _prop_FrameClear then begin VisBuff.Canvas.Pen.Color := _prop_BackColor; VisBuff.Canvas.Brush.Color := _prop_BackColor; VisBuff.Canvas.Rectangle(0, 0, VisBuff.Width, VisBuff.Height); if Scr <> nil then Scr.Draw(VisBuff.Canvas.Handle,0,0); end; if BASS_ChannelIsActive(h) <> BASS_ACTIVE_PLAYING then Exit; BASS_ChannelGetData(h, @WaveData, 2048); //BASS_ChannelGetData(h, @FFTData, BASS_DATA_FFT1024 or BASS_DATA_FFT_NOWINDOW); X := 0; Y := VisBuff.Height div 2; Ri := 0; Le := 0; VisBuff.Canvas.Pen.Color := _prop_Pen; R := SmallInt(LOword(WaveData[0])); L := SmallInt(HIword(WaveData[0])); YPos := Trunc(((R + L) / (2 * 65535)) * _prop_Offset) ; VisBuff.Canvas.MoveTo(X , Y + YPos); for i := 1 to 256*_prop_Res do begin R := SmallInt(LOword(WaveData[i])); Ri := Ri+abs(R); //begin // _hi_OnEvent(_event_onRiValue,abs(R)); //end; L := SmallInt(HIword(WaveData[i])); Le := Le+abs(L); //begin //_hi_OnEvent(_event_onLeValue,abs(L)); //end; YPos := Trunc(((R + L) / (2 * 65535)) * _prop_Offset) ; case _prop_Mode of 0: VisBuff.Canvas.lineto(X + i*5, Y + YPos); 1: begin VisBuff.Canvas.MoveTo(X + i, Y); VisBuff.Canvas.lineto(X + i, Y + YPos); end; 2 : VisBuff.Pixels[X + i, Y + YPos] := _prop_Pen; end; end; begin _hi_OnEvent(_event_onRiValue,Ri/100000); _hi_OnEvent(_event_onLeValue,Le/100000); end; end; end.[/code:1] |
|||
карма: 0 |
|
Ответов: 8930
Рейтинг: 823
|
|||
ХЭМ, а где же "hiBASS_ChlVisibleOcilloRec.ini" до кучи?
|
|||
карма: 19 |
|
Ответов: 209
Рейтинг: 3
|
|||
Леонид, ini и icon в upload (по моему без ошибок). Не забывайте также внести этот элемент в файл .../Elements/Delphi/Elements (прошу прощения за отсутствие hic файла, почему то у меня не качается hiccreator)
|
|||
карма: 0 |
|
Ответов: 8930
Рейтинг: 823
|
|||
ХЭМ, весь Upload просмотрел - не нашёл автора ХЭМ, может не то искал?
|
|||
карма: 19 |
|
Ответов: 209
Рейтинг: 3
|
|||
В upload раздел, компоненты, по названию компонента. Сегодня скачивал - все вроде есть (он на последней странице по дате). Вот подкорректировать не удалось. Не знаю как.
|
|||
карма: 0 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Леонид, http://si-tech.ru/hiasm/users/examp/ex.php?com=load&cat=2&sha_id=606
|
|||
карма: 9 |
|
Ответов: 8930
Рейтинг: 823
|
|||
ХЭМ, спасибо, скачал, но мне нужен элемент не усредняющий звук по 256 последних амплитуд, а выдающий текущую амплитуду сигнала: слева две точки - Пуск и Стоп; сверху три - Частота дискретизации, Точность (длина слова: байт, 2 байта,), Выбор канала; справа одна: Выход. Буду пробовать переделать, очень не уверен в результате.
Galkov, в упор не видел этого раздела, спасибо ХЭМ подсказал |
|||
карма: 19 |
|
Ответов: 209
Рейтинг: 3
|
|||
Леонид, что то не очень понял про текущую амплитуду. Чтобы ее найти надо обработать данные как минимум за период самого низкочастотного колебания. BASS выдает не амплитуды, а текущий уровень (по сэмплам). Если нужно это, то можно перенести строчки:
begin _hi_OnEvent(_event_onRiValue,Ri/100000); _hi_OnEvent(_event_onLeValue,Le/100000); end в тело цикла считывания буфера WaveData. Только боюсь это притормозит процесс. Я таким образом пытался выкачивать FFT данные (в отдельном элементе на базе этого, убрал все лишние операции, т.е. работу с графикой) все равно через некоторое время тормозится, попытаюсь поработать с размером буфера. |
|||
карма: 0 |
|
Ответов: 8930
Рейтинг: 823
|
|||
ХЭМ, и я про то же, только другими словами (что чревато не пониманием друг лруга ): мне нужен элемент, который выдаёт с частотой дискретизации уровень сигнала с одного из каналов звуковой карты в текущий момент, без буфера.
|
|||
карма: 19 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Леонид, то чего ты написал - называется ось реального времени
|
|||
карма: 9 |
|
Ответов: 8930
Рейтинг: 823
|
|||
Galkov, (хоть горшком назови...) с возвращением!, видели? Amper вернулся!
|
|||
карма: 19 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Леонид, а вот и не только "назови".
Винда, мягко говоря, не совсем ось реального времени. А грубо - не для этого форума |
|||
карма: 9 |
|