Автор |
Сообщение |
|
Дата: 01 Янв 2009 22:19:57
#
toksin Угу, ну и ладно, успехов в новом году.
|
|
Дата: 01 Янв 2009 23:21:59
#
toksin
У меня метод такой, я сначала, пытаюсь сделать без чтения справок, если нет , значит читаю справку, если не получается, тогда зову младшего брата, он в Делфи просто мастер, но ленивый очень, за бесплатно ничего не хочет делать, когда смотрит шо я мучаюсь, тогда подходит и помогает, но немного, дает информацию порциями.
+1 :-D Только вместо брата хороший приятель...
|
Реклама Google
|
|
|
Дата: 01 Янв 2009 23:25:10
#
Mesh
Спасибо, и Вам успехов :)
Думаю стоит отталкиваться от статьи, на которую я дал ссылку.
|
|
Дата: 02 Янв 2009 01:12:10 · Поправил: Rulez Reloaded (02 Янв 2009 01:35:56)
#
= не туда =
|
|
Дата: 02 Янв 2009 01:58:59
#
toksin
а по вашей штуке вы вообще практически попали в рекурсию
procedure TForm1.Timer1Timer(Sender: TObject);
begin
....
Application.ProcessMessages;
....
end;
подумайте почему.
по поводу Рефреш, Апдейт, Репэйнт и не забывайте Invalidate ;) всё полностью описано в хелп, до кучи у вас же полностью есть исходный код VCL.
|
|
Дата: 02 Янв 2009 12:43:25
#
antony
Вот работает:
procedure TForm1.Button1Click(Sender: TObject);
begin
ZSpectrView1.Start;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var buffer: Pointer; size: Cardinal;
begin
DXAudioIn1.Flush;
DXAudioIn1.Init;
DXAudioIn1.GetData(buffer,size);
ZSpectrView1.BufferSize:=tBufferSizes(size);
ZSpectrView1.Process(buffer^);//здесь нужно писать указатель на буфер, а не сам буфер
end;
Таймер использовал для примера, буду переделывать по Вашему совету.
|
|
Дата: 02 Янв 2009 19:59:49
#
Что то я не могу разобраться с компонентом DXAudioIn
var buffer:Pointer; size: Cardinal; i:integer;
begin
DXAudioIn1.Flush;
DXAudioIn1.Init;
DXAudioIn1.GetData(buffer,size);
//одномерный массив buffer длинной в size с максимальным значением для 8 бит = 255
for i:=1 to size do
begin
buffer[i] //работа с буфером
end;
DXAudioIn1.GetData(buffer:Pointer size: Cardinal) - здесь buffer типа pointer, а в обработке он должен быть, как array[0..size] . Или компонент подразумевает другой вид обработки buffer, тога какой, или неправильно понял смысл обработки сигнала.
|
|
Дата: 02 Янв 2009 22:18:37 · Поправил: antony (02 Янв 2009 22:24:47)
#
toksin
я смотрю вы решили с наскока...
1. во первых трудно вам что-то советовать не имея описание компонента
2. DXAudioIn1.GetData(buffer,size); - сам выделяет память?
3. где вы тогда эту память (buffer,size); освобождаете?
4. здесь buffer типа pointer, а в обработке он должен быть, как array[0..size] - какой тип данных каждого элемента получаемого buffer (длина элемента данных - байт, слово, двойное слово ...)?
если предположить, что возвращается байтовый массив длиной size, то скорее всего он от 0..size-1, а не 1..size
это не Си, поэтому buffer[i] в вашем варианте нет (Аrray type required - компилятор ругаться будет)
зато есть PByte(DWORD(buffer) + i)^ = значение (0-255) :)) не красиво правда? а чтоб было красиво надо знать нам ответы на вопросы выше.
|
|
Дата: 02 Янв 2009 22:46:50
#
DXAudioIn1.GetData(buffer,size); buffer и size достаются из GetData
Вот так работает ZSpectrView, графически отображает спектр
var buffer: Pointer; size: Cardinal; i:integer;
begin
while true do
begin
DXAudioIn1.Flush;
DXAudioIn1.Init;
DXAudioIn1.GetData(buffer,size);
ZSpectrView1.BufferSize:=tBufferSizes(size);
ZSpectrView1.Process(buffer^);
for i:=0 to size-1 do
begin
buffer[i];//как бы дальше работать с buffer как с array of integer
end;
end;
end;
Прошу прощения если, не правильно выражаюсь, просто не особо селен в данном вопросе, но разобраться хочется.
|
|
Дата: 02 Янв 2009 22:52:38
#
type
TByteA = array[0..0] of Byte;
PByteA = ^TByteA;
var buffer: PByteA; size: Cardinal; i:integer;
begin
for i:=0 to size-1 do
begin
buffer[i];//buffer как с array of BYTE (вы вообще не понимаете работу с указателями и с размерностью памяти?) но для вам это будет как с integer 0..255
end;
end;
|
|
Дата: 02 Янв 2009 23:10:44
#
antony
Спасибо большое, то что я хотел
type
TByteA = array[0..0] of Byte;
PByteA = ^TByteA;
...
var buffer: Pointer; size: Cardinal; i:integer; buf:PByteA;
begin
while true do
begin
DXAudioIn1.Flush;
DXAudioIn1.Init;
DXAudioIn1.GetData(buffer,size);
ZSpectrView1.BufferSize:=tBufferSizes(size);
ZSpectrView1.Process(buffer^);
buf:=buffer;
for i:=0 to size-1 do
begin
//buf[i] - теперь можно работать с массивом значений
end;
end;
end;
|
|
Дата: 02 Янв 2009 23:13:27
#
Компоненты использовал newac и ZSpectrView.
|
|
Дата: 03 Янв 2009 16:40:25
#
Выкладываю исходники и экзешник проги для работы с сигналами, хочу поблагодарить antony и моего брата, за помощь в написании данной программки. Она будет полезной для таких как я, мало, что понимающих но имеющих желание вникнуть в ЦОС. Архив весит 276 кбайт, в нем исходники на делфи 7 и ссылки на компоненты , которые использовались в проекте. проект
От ZSpectrView отказался, глучноватый он на мой взгляд, хотя скорее всего это от того, что в данном направлении у меня руки немного не оттуда растут. |
|
Дата: 04 Янв 2009 13:24:10
#
|