![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MemoryStream.SetSize не слушается [D7, XP]
rammic © (2011-08-17 16:11:00)Прошу помощи у мастеров. Не смог найти программу,которая меня бы устроила, поэтому пришлось сочинять самому. На настоящего программиста она, наверное,произведет впечатление велосипеда, связанного веревками, но она работает и делает то, что мне нужно, кроме одного.
Вопрос в следующем. Программа генерирует различные
звуки, но только 24 секунды при nChannels:= Stereo; nSampleRate:= 44100; при nChannels:= Mono; соответственно - 44 секунды. Вывел в Edit intToStr(ms.Size) Если меньше 24 секунд все показывает правильно если - больше показывает 46.Наверное это размер WaveFormatEx. И, естественно, не играет.
Пробовал перед заполнением звуковыми данными писать ms.SetSize(RiffCount)- не обращает внимания, показывает те же 46.
Можно ли увеличить MemoryStream.Size до нужного размера,
Например, на 3 минуты?
Сергей М. (2011-08-18 18:37:00) [1]
> там везде звука
> на 1 секунду, А потом его зацикливают.
>
Об этом.
rammic (2011-08-18 18:08:00) [2]
> Сергей М. © (18.08.11 17:28) [19]
> Да еще и 24-секундный семпл поди заloopленый..
Это Вы о чем?
Сергей М. (2011-08-18 17:28:00) [3]Да еще и 24-секундный семпл поди за loopленый..
rammic (2011-08-18 17:27:00) [4]Спасибо, теперь все получается, поет сколько угодно, Хотя во всех
программах, которые я смотрел, DataCount считается в милисекундах,
а потом делится на 1000 - глупость какая-то. Правда там везде звука
на 1 секунду, А потом его зацикливают.
Dennis I. Komarov (2011-08-18 16:31:00) [5]
> А нафига вот такие действия делать?
Он камасутру не читал... Грабли у каждого свои, но одинаковые...
Ega23 (2011-08-18 16:20:00) [6]d, поди Integer?
А нафига вот такие действия делать?
(2 * 24000 * 44100) div 1000
вместо
(2 * 24 * 44100)?
sniknik (2011-08-18 15:57:00) [7]> Чего это Оно?
переполнение? в признак отрицательного числа влезли, т.к. тип знаковый?
rammic (2011-08-18 15:49:00) [8]Интересное дело, ошибка оказалась в самом неожиданном месте
d:= (2 * 24000 * 44100) div 1000 показывает вменяемый ответ, а
d:= (2 * 25000 * 44100) div 1000 показывает черт знает что.
Чего это Оно?
Ega23 (2011-08-17 21:31:00) [9]
> SQLEXPRESS (17.08.11 18:13) [7]
>
> ты так раньше не писал...
Ну почему, всяко бывало. Просто я один раз ОООЧЕНЬ здорово с with накололся, с тех пор его крайне аккуратно использую. Ну а тут пример тривиальный, двоякого толкования быть не могёт.
Медвежонок Пятачок (2011-08-17 19:15:00) [10]Опа.
Теперь у нас уже "Он", и "Тот кто его дает"
Уже двое!
rammic (2011-08-17 19:09:00) [11]Я не знаю, кто его дает
Медвежонок Пятачок (2011-08-17 18:56:00) [12]император звука конечно же.
Германн (2011-08-17 18:44:00) [13]
> по умолчанию, он дает 24 секунды звука
А кто он?
rammic (2011-08-17 18:23:00) [14]Size нужно потому, что, по умолчанию, он дает 24 секунды звука, а
больше не хочет. SetSize я писал после того как ввел все параметры,
но на это нет реакции. А какие параметры я введу я и сам не знаю.
Наверное из initialization TMemoryStream.Create нужно перенести
в ButtonClick. Спасибо, буду пробовать
SQLEXPRESS (2011-08-17 18:13:00) [15]
> with .Create do
ты так раньше не писал...
Ega23 (2011-08-17 17:58:00) [16]
> Дело в том, что ms:= TMemorySteream.Create я написал в initialization,
> а ms.Free в finalization.
Да хоть где.
Вопрос был:Можно ли увеличить MemoryStream.Size до нужного размера,
Например, на 3 минуты?
Ответ: можно.
Вот тебе гигабайт:
with TMemoryStream.Create do
try
Size := 1024*1024*1024;
ShowMessage(IntToStr(Size));
finally
Free;
end;
> Может здесь написать SetSize?
А вот это я уже без понятия, это твой код. Я вообще не сильно понимаю, зачем тебе Size нужно.
rammic (2011-08-17 17:54:00) [17]Дело в том, что ms:= TMemorySteream.Create я написал в initialization,
а ms.Free в finalization.
procedure TForm1.btnPlayClick(Sender: TObject);
begin
if(ms.Size <> 0) then ms.Clear;
Может здесь написать SetSize?
Partitura
ArrayFourier;
GraphicVolni;
if(chbFpoFunc.Checked = True) then GraphicKFourier;
MakeSound(strToInt(edDuration.Text),rdgrChannels.ItemIndex);
Play_Sound;
end;
Dennis I. Komarov (2011-08-17 17:35:00) [18]
procedure TForm19.Button6Click(Sender: TObject);
begin
with TMemoryStream.Create do
try
Size := 2 * 24 * 44100 + 46;
ShowMessage(IntToStr(Size));
finally
Free;
end;
end;
см. [1]
Ega23 (2011-08-17 17:34:00) [19]
> Size 1000 он устанавливает без напоминания. 24 секунды это
> (2 * 24 * 44100 + 46) байт тоже сам устанавливает. Можно ли больше?
Неужели так сложно проверить?
procedure TForm19.Button1Click(Sender: TObject);
begin
with TMemoryStream.Create do
try
Size := (2 * 24 * 44100) + 46 + 100500;
ShowMessage(IntToStr(Size));
finally
Free;
end;
end;
rammic (2011-08-17 17:27:00) [20]Size 1000 он устанавливает без напоминания. 24 секунды это
(2 * 24 * 44100 + 46) байт тоже сам устанавливает. Можно ли больше?