Главная страница
    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.49 MB
Время: 0.003 c
4-1252596453
harisma
2009-09-10 19:27
2011.12.04
PasswordChar для TEdit


1-1276083003
Омлет
2010-06-09 15:30
2011.12.04
TDateTimePicker - ввод максимальной даты с клавиатуры


2-1313237802
Псарь
2011-08-13 16:16
2011.12.04
Как вывести растр через функцию DrawState?


2-1313438873
анонимус
2011-08-16 00:07
2011.12.04
std::sort на делфи


15-1309448004
R_R
2011-06-30 19:33
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский