|
Вопрос # 4 426/ вопрос открыт / |
|
Здравствуйте, эксперты!
Мой вопрос заключается в следующем
Имеется переменная типа variant из которой делается массив типа varInt64 в связи счем возникает ошибка, причем если вместо типа varInt64 использовать varInteger, то ошибки нет.
Суть вопроса у всех ли так или я один такой если у когото ошибка не возникает если не трудно отпишите какая у вас система 32 или 64 битная?
Ну и конечно буду рад если ктонибудь подскажет как обойти эту ошибку.
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls;
-
- type
- TForm1 = class(TForm)
- Button1: TButton;
- procedure Button1Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
- arr: variant;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.Button1Click(Sender: TObject);
- begin
-
-
- end;
-
- end.
 |
Вопрос задал: SOA (статус: Посетитель)
Вопрос отправлен: 14 июля 2010, 18:03
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 23; последнее сообщение — 15 июля 2010, 15:13; участников в обсуждении: 3.
Страницы: [1] [2] [Следующая »]
|
min@y™ (статус: Доктор наук), 14 июля 2010, 18:18 [#1]:
Практически никогда я не использовал вариантные типы и массивы - не было необходимости. Однако, почитал щас хэлп по функции VarArrayCreate(), там даже пример есть. И вот никак я не пойму, зачем тебе создавать массив вариантов типа varInt64, если можно воспользовать простым массивом? И вообще, что у тебя за задача, в которой нужны вариантные массивы? Может быть, её можно решить как-то проще?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
SOA (статус: Посетитель), 14 июля 2010, 18:53 [#2]:
Вообще ноги растут из вопроса где я спрашивал про то как можно изменять громкость звука без использования api функций windows.
Пытался написать свой плеер для wav файлов.
В wav файле вся информация хранится в sample's(сэймплах) длина которых варьируется от одного бита до двух и более и как следствие тип массива который будет использоваться как буфер для принятия сэймплов для одного канала должен иметь возможность изменять тип(byte WORD DWORD).
Впринципе эту проблему я уже решил используя динамический битовый массив, предварительно вычисляя длину буфера в зависимости от длины sample.
Но на будущее я думаю будет не лишним знать как можно сделать массив с изменяющимся типом данных.
|
|
min@y™ (статус: Доктор наук), 14 июля 2010, 19:27 [#3]:
Цитата (SOA):
В wav файле вся информация хранится в sample's(сэймплах) длина которых варьируется от одного бита до двух и более и как следствие тип массива который будет использоваться как буфер для принятия сэймплов для одного канала должен иметь возможность изменять тип(byte WORD DWORD). Впринципе эту проблему я уже решил используя динамический битовый массив, предварительно вычисляя длину буфера в зависимости от длины sample.
Ты серьёзно?! Комсомолец! Есть же TMemoryStream!
Цитата (SOA):
Но на будущее я думаю будет не лишним знать как можно сделать массив с изменяющимся типом данных.
Оптимист, однако... Но, ИМХО, надо решать проблемы по мере их поступления.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
SOA (статус: Посетитель), 14 июля 2010, 20:17 [#4]:
Чем тебе битовый массив не угодил?
|
|
min@y™ (статус: Доктор наук), 14 июля 2010, 20:27 [#5]:
Цитата (SOA):
Чем тебе битовый массив не угодил?
А это чо такое? Знаю TBits, но это список.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
SOA (статус: Посетитель), 14 июля 2010, 20:30 [#6]:
Хватит вы**ться.
|
|
min@y™ (статус: Доктор наук), 14 июля 2010, 20:38 [#7]:
Цитата (SOA):
вы**ться
Насколько мне известно, это слово пишется так: "вы*****ться". Но мне это не нужно, я задаю реальные наводящие вопросы, чтобы как-то и/или чем-то помочь.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
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™ (статус: Доктор наук), 14 июля 2010, 21:00 [#10]:
Цитата (SOA):
толи в стрим сам файл грузить и использовать в качестве буфера
Именно так. Какой ещё, нахрен, битовый массив?!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
SOA (статус: Посетитель), 14 июля 2010, 21:07 [#11]:
To Вадим К: у меня размер буфера рассчитывается исходя из того что в буфер должно помещаться информации ровно на 1 секунду.
Воспроизведение и считывание идут в двух отдельных потоках.
|
|
SOA (статус: Посетитель), 14 июля 2010, 21:11 [#12]:
To min@y™: битовый массив потому что используется два канала и для каждого канала нужен свой буфер как я понимаю, а если учесть что параллельно идет считывание и воспроизведение информации, то нужно как минимум 4 буфера.
|
|
min@y™ (статус: Доктор наук), 14 июля 2010, 21:18 [#13]:
Цитата (SOA):
битовый массив потому что используется два канала и для каждого канала нужен свой буфер как я понимаю, а если учесть что параллельно идет считывание и воспроизведение информации, то нужно как минимум 4 буфера.
Не вижу связи. Давай подробней.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
SOA (статус: Посетитель), 14 июля 2010, 21:27 [#14]:
Для начала нужно взглянуть на структуру wav файла здесь
https://ccrma.stanford.edu/courses/422/projects/WaveFormat/
после чего становится ясно что в блоке идут данные для всех каналов поочереди и их еще нужно распаковать и рассовать по буферам для соответствующих каналов.
|
|
min@y™ (статус: Доктор наук), 14 июля 2010, 21:38 [#15]:
Цитата (SOA):
после чего становится ясно что в блоке идут данные для всех каналов поочереди и их еще нужно распаковать и рассовать по буферам для соответствующих каналов.
Ну и чего? Здесь как раз отлично подходит TMemoryStream или TFileStream. C ними чрезвычайно легко работать и не надо городить никаких "битовых массивов".
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
SOA (статус: Посетитель), 15 июля 2010, 10:34 [#16]:
To min@y™: Ну и чего? Здесь как раз отлично подходит TMemoryStream или TFileStream. C ними чрезвычайно легко работать и не надо городить никаких "битовых массивов".
Ага особенно тут удобно получается то что нужно каждый отсчет через цикл обрабатывать. В то время как массив считал и все.
Если я не прав объясни как ты понимаешь логику работы.
|
|
SOA (статус: Посетитель), 15 июля 2010, 10:37 [#17]:
To Вадим К: за вариант решения с громкостью спасибо, как то не подумал что можно заранее подготовить wav файл с плавно затухающей или возрастающей громкостью.
Но когда я писал что пытаюсь написать свой плеер тут речь идет не только о громкость, здесь подразумевается обработка звука как минимум по двум каналам.
|
|
min@y™ (статус: Доктор наук), 15 июля 2010, 11:04 [#18]:
Цитата (SOA):
объясни как ты понимаешь логику работы.
Логику работы с чем? С данными в стриме?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
SOA (статус: Посетитель), 15 июля 2010, 11:27 [#19]:
Ну в общем да ведь ты же предложил использовать TMemoryStream вместо массива с изменяющимся типом данных.
Если я тебя правильно понял то еще понадобятся несколько переменных различного типа для использования в качестве буфера, когда будешь считывать данные из TMemoryStream так?
|
|
SOA (статус: Посетитель), 15 июля 2010, 11:35 [#20]:
Я еще раз хочу у всех спросить функция VarArrayCreate([0,4], varInt64) для типа varInt64 не работает только у меня или же всетаки нет?
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|