Форум: "Начинающим";
Текущий архив: 2011.12.04;
Скачать: [xml.tar.bz2];
ВнизMemoryStream.SetSize не слушается Найти похожие ветки
← →
rammic © (2011-08-17 16:11) [0]Прошу помощи у мастеров. Не смог найти программу,которая меня бы устроила, поэтому пришлось сочинять самому. На настоящего программиста она, наверное,произведет впечатление велосипеда, связанного веревками, но она работает и делает то, что мне нужно, кроме одного.
Вопрос в следующем. Программа генерирует различные
звуки, но только 24 секунды при nChannels:= Stereo; nSampleRate:= 44100; при nChannels:= Mono; соответственно - 44 секунды. Вывел в Edit intToStr(ms.Size) Если меньше 24 секунд все показывает правильно если - больше показывает 46.Наверное это размер WaveFormatEx. И, естественно, не играет.
Пробовал перед заполнением звуковыми данными писать ms.SetSize(RiffCount)- не обращает внимания, показывает те же 46.
Можно ли увеличить MemoryStream.Size до нужного размера,
Например, на 3 минуты?
← →
Ega23 © (2011-08-17 16:30) [1]
procedure TForm19.Button6Click(Sender: TObject);
begin
with TMemoryStream.Create do
try
Size := 1000;
ShowMessage(IntToStr(Size));
finally
Free;
end;
end;
Всё работает, ищите ошибку в другом месте.
← →
rammic © (2011-08-17 17:27) [2]Size 1000 он устанавливает без напоминания. 24 секунды это
(2 * 24 * 44100 + 46) байт тоже сам устанавливает. Можно ли больше?
← →
Ega23 © (2011-08-17 17:34) [3]
> 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;
← →
Dennis I. Komarov © (2011-08-17 17:35) [4]
procedure TForm19.Button6Click(Sender: TObject);
begin
with TMemoryStream.Create do
try
Size := 2 * 24 * 44100 + 46;
ShowMessage(IntToStr(Size));
finally
Free;
end;
end;
см. [1]
← →
rammic © (2011-08-17 17:54) [5]Дело в том, что 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;
← →
Ega23 © (2011-08-17 17:58) [6]
> Дело в том, что 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 нужно.
← →
SQLEXPRESS (2011-08-17 18:13) [7]
> with .Create do
ты так раньше не писал...
← →
rammic © (2011-08-17 18:23) [8]Size нужно потому, что, по умолчанию, он дает 24 секунды звука, а
больше не хочет. SetSize я писал после того как ввел все параметры,
но на это нет реакции. А какие параметры я введу я и сам не знаю.
Наверное из initialization TMemoryStream.Create нужно перенести
в ButtonClick. Спасибо, буду пробовать
← →
Германн © (2011-08-17 18:44) [9]
> по умолчанию, он дает 24 секунды звука
А кто он?
← →
Медвежонок Пятачок © (2011-08-17 18:56) [10]император звука конечно же.
← →
rammic © (2011-08-17 19:09) [11]Я не знаю, кто его дает
← →
Медвежонок Пятачок © (2011-08-17 19:15) [12]Опа.
Теперь у нас уже "Он", и "Тот кто его дает"
Уже двое!
← →
Ega23 © (2011-08-17 21:31) [13]
> SQLEXPRESS (17.08.11 18:13) [7]
>
> ты так раньше не писал...
Ну почему, всяко бывало. Просто я один раз ОООЧЕНЬ здорово с with накололся, с тех пор его крайне аккуратно использую. Ну а тут пример тривиальный, двоякого толкования быть не могёт.
← →
rammic © (2011-08-18 15:49) [14]Интересное дело, ошибка оказалась в самом неожиданном месте
d:= (2 * 24000 * 44100) div 1000 показывает вменяемый ответ, а
d:= (2 * 25000 * 44100) div 1000 показывает черт знает что.
Чего это Оно?
← →
sniknik © (2011-08-18 15:57) [15]> Чего это Оно?
переполнение? в признак отрицательного числа влезли, т.к. тип знаковый?
← →
Ega23 © (2011-08-18 16:20) [16]d, поди Integer?
А нафига вот такие действия делать?(2 * 24000 * 44100) div 1000
вместо
(2 * 24 * 44100)?
← →
Dennis I. Komarov © (2011-08-18 16:31) [17]
> А нафига вот такие действия делать?
Он камасутру не читал... Грабли у каждого свои, но одинаковые...
← →
rammic © (2011-08-18 17:27) [18]Спасибо, теперь все получается, поет сколько угодно, Хотя во всех
программах, которые я смотрел, DataCount считается в милисекундах,
а потом делится на 1000 - глупость какая-то. Правда там везде звука
на 1 секунду, А потом его зацикливают.
← →
Сергей М. © (2011-08-18 17:28) [19]Да еще и 24-секундный семпл поди заloopленый..
← →
rammic © (2011-08-18 18:08) [20]
> Сергей М. © (18.08.11 17:28) [19]
> Да еще и 24-секундный семпл поди заloopленый..
Это Вы о чем?
← →
Сергей М. © (2011-08-18 18:37) [21]
> там везде звука
> на 1 секунду, А потом его зацикливают.
>
Об этом.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.12.04;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.003 c