Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.5 MB
Время: 0.004 c
15-1313357399
Юрий
2011-08-15 01:29
2011.12.04
С днем рождения ! 15 августа 2011 понедельник


2-1313613139
2012
2011-08-18 00:32
2011.12.04
Как получить название месяца и дня недели из текущей даты?


2-1312979784
Onyx2012
2011-08-10 16:36
2011.12.04
Сортировка в TOraQuery


15-1313170131
Leon-Z
2011-08-12 21:28
2011.12.04
Delphi 2007.


2-1313206942
Gu
2011-08-13 07:42
2011.12.04
Запуск от имени администратора





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский