| 
| 
 | Вопрос # 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] [Следующая »]  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |