Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 426

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте, эксперты!
Мой вопрос заключается в следующем
Имеется переменная типа variant из которой делается массив типа varInt64 в связи счем возникает ошибка, причем если вместо типа varInt64 использовать varInteger, то ошибки нет.
Суть вопроса у всех ли так или я один такой если у когото ошибка не возникает если не трудно отпишите какая у вас система 32 или 64 битная?
Ну и конечно буду рад если ктонибудь подскажет как обойти эту ошибку.

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Button1: TButton;
  12. procedure Button1Click(Sender: TObject);
  13. private
  14. { Private declarations }
  15. public
  16. { Public declarations }
  17. end;
  18.  
  19. var
  20. Form1: TForm1;
  21. arr: variant;
  22.  
  23. implementation
  24.  
  25. {$R *.dfm}
  26.  
  27. procedure TForm1.Button1Click(Sender: TObject);
  28. begin
  29.  
  30.  
  31. end;
  32.  
  33. end.


SOA Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: SOA (статус: Посетитель)
Вопрос отправлен: 14 июля 2010, 18:03
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 23; последнее сообщение — 15 июля 2010, 15:13; участников в обсуждении: 3.

Страницы: [1] [2] [Следующая »]

min@y™

min@y™ (статус: Доктор наук), 14 июля 2010, 18:18 [#1]:

Практически никогда я не использовал вариантные типы и массивы - не было необходимости. Однако, почитал щас хэлп по функции VarArrayCreate(), там даже пример есть. И вот никак я не пойму, зачем тебе создавать массив вариантов типа varInt64, если можно воспользовать простым массивом? И вообще, что у тебя за задача, в которой нужны вариантные массивы? Может быть, её можно решить как-то проще?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
SOA

SOA (статус: Посетитель), 14 июля 2010, 18:53 [#2]:

Вообще ноги растут из вопроса где я спрашивал про то как можно изменять громкость звука без использования api функций windows.
Пытался написать свой плеер для wav файлов.
В wav файле вся информация хранится в sample's(сэймплах) длина которых варьируется от одного бита до двух и более и как следствие тип массива который будет использоваться как буфер для принятия сэймплов для одного канала должен иметь возможность изменять тип(byte WORD DWORD).
Впринципе эту проблему я уже решил используя динамический битовый массив, предварительно вычисляя длину буфера в зависимости от длины sample.
Но на будущее я думаю будет не лишним знать как можно сделать массив с изменяющимся типом данных.
min@y™

min@y™ (статус: Доктор наук), 14 июля 2010, 19:27 [#3]:

Цитата (SOA):

В wav файле вся информация хранится в sample's(сэймплах) длина которых варьируется от одного бита до двух и более и как следствие тип массива который будет использоваться как буфер для принятия сэймплов для одного канала должен иметь возможность изменять тип(byte WORD DWORD). Впринципе эту проблему я уже решил используя динамический битовый массив, предварительно вычисляя длину буфера в зависимости от длины sample.

Ты серьёзно?! Комсомолец! Есть же TMemoryStream!

Цитата (SOA):

Но на будущее я думаю будет не лишним знать как можно сделать массив с изменяющимся типом данных.

Оптимист, однако... Но, ИМХО, надо решать проблемы по мере их поступления.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
SOA

SOA (статус: Посетитель), 14 июля 2010, 20:17 [#4]:

Чем тебе битовый массив не угодил?
min@y™

min@y™ (статус: Доктор наук), 14 июля 2010, 20:27 [#5]:

Цитата (SOA):

Чем тебе битовый массив не угодил?

А это чо такое? Знаю TBits, но это список.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
SOA

SOA (статус: Посетитель), 14 июля 2010, 20:30 [#6]:

Хватит вы**ться.
min@y™

min@y™ (статус: Доктор наук), 14 июля 2010, 20:38 [#7]:

Цитата (SOA):

вы**ться

Насколько мне известно, это слово пишется так: "вы*****ться". Но мне это не нужно, я задаю реальные наводящие вопросы, чтобы как-то и/или чем-то помочь.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
SOA

SOA (статус: Посетитель), 14 июля 2010, 20:45 [#8]:

Ну да особенно видно по посту
“Цитата” (SOA)
В wav файле вся информация хранится в sample's(сэймплах) длина которых варьируется от одного бита до двух и более и как следствие тип массива который будет использоваться как буфер для принятия сэймплов для одного канала должен иметь возможность изменять тип(byte WORD DWORD). Впринципе эту проблему я уже решил используя динамический битовый массив, предварительно вычисляя длину буфера в зависимости от длины sample.

Ты серьёзно?! Комсомолец! Есть же TMemoryStream!

Шо ты хотел этим сказать толи в стрим сам файл грузить и использовать в качестве буфера то ли еще что?
Вадим К

Вадим К (статус: Академик), 14 июля 2010, 20:56 [#9]:

to SOA - сам решал эту проблему - чтение wav файла. Никакого там ни битового, ни вариантного массива не нужно. Все решается куда интересней.
Если нужно просто обработать (громкость), то просто читаем большой буфер в память, а потом по одному отсчету читаем, обрабатываем и записываем в новый буфер. И это будет быстро и красиво.
Если же нужно строить график к примеру, то просто вычитываем по отсчету и приводим к какому то одному типу ( я приводил к 4 байтовому знаковому - то есть integer) и никаких проблем.
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 14 июля 2010, 21:00 [#10]:

Цитата (SOA):

толи в стрим сам файл грузить и использовать в качестве буфера

Именно так. Какой ещё, нахрен, битовый массив?!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
SOA

SOA (статус: Посетитель), 14 июля 2010, 21:07 [#11]:

To Вадим К: у меня размер буфера рассчитывается исходя из того что в буфер должно помещаться информации ровно на 1 секунду.
Воспроизведение и считывание идут в двух отдельных потоках.
SOA

SOA (статус: Посетитель), 14 июля 2010, 21:11 [#12]:

To min@y™: битовый массив потому что используется два канала и для каждого канала нужен свой буфер как я понимаю, а если учесть что параллельно идет считывание и воспроизведение информации, то нужно как минимум 4 буфера.
min@y™

min@y™ (статус: Доктор наук), 14 июля 2010, 21:18 [#13]:

Цитата (SOA):

битовый массив потому что используется два канала и для каждого канала нужен свой буфер как я понимаю, а если учесть что параллельно идет считывание и воспроизведение информации, то нужно как минимум 4 буфера.

Не вижу связи. Давай подробней.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
SOA

SOA (статус: Посетитель), 14 июля 2010, 21:27 [#14]:

Для начала нужно взглянуть на структуру wav файла здесь
https://ccrma.stanford.edu/courses/422/projects/WaveFormat/

после чего становится ясно что в блоке идут данные для всех каналов поочереди и их еще нужно распаковать и рассовать по буферам для соответствующих каналов.
min@y™

min@y™ (статус: Доктор наук), 14 июля 2010, 21:38 [#15]:

Цитата (SOA):

после чего становится ясно что в блоке идут данные для всех каналов поочереди и их еще нужно распаковать и рассовать по буферам для соответствующих каналов.

Ну и чего? Здесь как раз отлично подходит TMemoryStream или TFileStream. C ними чрезвычайно легко работать и не надо городить никаких "битовых массивов".
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
SOA

SOA (статус: Посетитель), 15 июля 2010, 10:34 [#16]:

To min@y™: Ну и чего? Здесь как раз отлично подходит TMemoryStream или TFileStream. C ними чрезвычайно легко работать и не надо городить никаких "битовых массивов".

Ага особенно тут удобно получается то что нужно каждый отсчет через цикл обрабатывать. В то время как массив считал и все.
Если я не прав объясни как ты понимаешь логику работы.
SOA

SOA (статус: Посетитель), 15 июля 2010, 10:37 [#17]:

To Вадим К: за вариант решения с громкостью спасибо, как то не подумал что можно заранее подготовить wav файл с плавно затухающей или возрастающей громкостью.
Но когда я писал что пытаюсь написать свой плеер тут речь идет не только о громкость, здесь подразумевается обработка звука как минимум по двум каналам.
min@y™

min@y™ (статус: Доктор наук), 15 июля 2010, 11:04 [#18]:

Цитата (SOA):

объясни как ты понимаешь логику работы.

Логику работы с чем? С данными в стриме?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
SOA

SOA (статус: Посетитель), 15 июля 2010, 11:27 [#19]:

Ну в общем да ведь ты же предложил использовать TMemoryStream вместо массива с изменяющимся типом данных.
Если я тебя правильно понял то еще понадобятся несколько переменных различного типа для использования в качестве буфера, когда будешь считывать данные из TMemoryStream так?
SOA

SOA (статус: Посетитель), 15 июля 2010, 11:35 [#20]:

Я еще раз хочу у всех спросить функция VarArrayCreate([0,4], varInt64) для типа varInt64 не работает только у меня или же всетаки нет?

Страницы: [1] [2] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:36
Выполнено за 0.02 сек.