Показать сообщение отдельно
  #19  
Старый 28.09.2012, 01:46
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Dmitry_DM
А можно так попробовать? Теоретический это правильно?
Код:
Z: array [0..10000,0..10000] of Int64;
.....
А какой смысл вводить посредника в виде массива z?
  1. Программа уже загрузила сэмплы звукового файла в массив WavInfo.Samples, а теперь мы их ещё копируем в массив z - получаем как минимум двойной расход памяти на пустом месте
  2. Первая размерность массива отвечает за количество каналов. Зачем здесь зарезервировано столько каналов? Бывает "моно" (1 канал), бывает "стерео" (2 канала), бывает ещё "4+1", "5+1", ну пусть 10 каналов, но десять тысяч это уже что-то невероятное - получаем ещё бесполезный перерасход памяти
  3. Вторая размерность массива отвечает за количество сэмплов. В массиве z зарезервировано память всего под десять тысяч семплов, а ведь недавно ты открывал звуковой файл в котором было 398592 сэмплов - в этот массив он никак не влезет
  4. Почему тип элементов массива z выбран Int64? Звуковые файлы в формате WAVEFORMATEX PCM бывают либо 8-битные (1 байт), либо 16-битные (2 байта), а массив z резервирует для них по 64 бита (8 байт) - опять бесполезный перерасход памяти
И ещё, где инициализируется переменная J вот в этом цикле?:
Код:
    for I := 1 to NumSamples do
      begin
        s:=(s+z[j,i]);
      end;
Да и в следующих циклах тоже?
Ответить с цитированием