Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.03.2012, 00:03
deniks deniks вне форума
Прохожий
 
Регистрация: 08.03.2012
Сообщения: 25
Репутация: 10
Вопрос Работа с wav

Здравствуйте уважаемые знатоки. Делаю программу для диплома ( в универе паскаль учили да и все) и столкнулся с трудностями. Есть рабочая программа на паскале, ее нужно переделать в делфи.

Суть программы заключается в считывании данных из *.wav и работа с ними. Но на этапе считывания wav столкнулся с проблемами, делфи говорит о выходе за пределы.

Часть программы на паскале, где считывается .wav

Код:
(var datafile : file of byte )

 Assign(DataFile,ss[kd]+mpp+'.wav');
   Reset(DataFile);
   seek(DataFile, 50);
 AAs[0]:=0;
       for i:=1 to k do
 A[i]:=0;

 for jj:=1 to jjk do
begin
   for i := 1 to 4096 do
      begin
      Read(DataFile, Xx);
X^[i]:=xx/1;
end;

моя попытка в делфи:

Код:
AssignFile(DataFile,ss[kd]+mpp+'.wav');
Reset(DataFile, 1);
AAs[0]:=0;
for i:=1 to k do
A[i]:=0;
seek(DataFile, 50);


   for i:=1 to 4096 do
         begin
         blockread(Datafile,buf,1);
         X^[i]:=buf;
end;

Если кто может, огромная просьба помочь.

Выскакивает ошибка на blockread(Datafile,buf,1); Read beyond end of file. Вроде бы как выходит за пределы. исправить не получается...

Последний раз редактировалось lmikle, 14.03.2012 в 02:04.
Ответить с цитированием
  #2  
Старый 14.03.2012, 00:36
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Для начала заключи приведённый код в тег , затем приведи переменные которые используешь. При указанной переменной DataFile, нужно писать Reset(DataFile).
Если используется переменная DataFile того типа как сейчас приведена, то нужно испольбзовать Read.
P.S. Как читал в старом добром Паскале, также читаешь и сейчас.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 14.03.2012 в 00:43.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
deniks (14.03.2012)
  #3  
Старый 14.03.2012, 01:40
deniks deniks вне форума
Прохожий
 
Регистрация: 08.03.2012
Сообщения: 25
Репутация: 10
По умолчанию

Код:
unit pribor56;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    private
    { Private declarations }
  public
    { Public declarations }
  end;

type
            mascp=array[1..4096] of single ;
              mask=array[0..4096] of single ;
              mascpptr=^mascp;

              maskd=array [0..10] of string;


var
  Form1: TForm1;

var xx: byte;
datafile : file of byte;
mpp:string;
kd:longint;
jj:integer;
   sabb, sgarm, ss: maskd;

          const jjk=2;{L=5;}n=12;pkr=100;fmax=11025/2;
          var  dt,a,f,xk:mask;
      x,y:mascpptr;
     
        i,j,k,L: integer;
          

implementation
{$R *.dfm}

begin

mpp:='1';
ss[kd]:='1w';

Assign(DataFile,ss[kd]+mpp+'.wav');
Reset(DataFile);
seek(DataFile, 50);

for i:=1 to k do
A[i]:=0;
for jj:=1 to jjk do
begin
for i := 1 to 4096 do
begin
Read(DataFile, Xx);
X^[i]:=xx/1;
end;end; end.

lmikle: Дальше буду карать!!! дальше такого не будет, спс

Последний раз редактировалось deniks, 14.03.2012 в 09:19.
Ответить с цитированием
  #4  
Старый 14.03.2012, 01:41
deniks deniks вне форума
Прохожий
 
Регистрация: 08.03.2012
Сообщения: 25
Репутация: 10
По умолчанию

на строке Read(DataFile, Xx); как бы читаем из .wav по байту

выбивает ошибку, поэтому думал по другому считать, к чему пришел в 1м посте, но ошибка из 1го места переместилась в другое.

Последний раз редактировалось deniks, 14.03.2012 в 01:45.
Ответить с цитированием
  #5  
Старый 14.03.2012, 01:45
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Вы собираетесь пользоваться тегом [code]? Пока не исправите ответа не ждите.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #6  
Старый 14.03.2012, 09:18
deniks deniks вне форума
Прохожий
 
Регистрация: 08.03.2012
Сообщения: 25
Репутация: 10
По умолчанию

сори.. не знал ваших правил оформления. модер уже подправил
Ответить с цитированием
  #7  
Старый 14.03.2012, 10:48
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Перед началом цикла
Код:
for i:=1 to k do
переменную К надо инициализировать. Сейчас в ней мусор.

А после implementation разве можно писать операторы? Операторы должны быть внутри функций / процерур.

Т.е. ты неправильно перешёл от Паскаля к Delphi. Если приложение консольное, то оно похоже на Паскаль. Если обычное, оконное, то начало программы в файле .dpr, который обычно никто не трогает, а все пишут в unit'ах, в которых, как я написал, только описания и подпрограммы (то бишь все операторы внутри подпрограмм).

Последний раз редактировалось AlexSku, 14.03.2012 в 10:56.
Ответить с цитированием
Этот пользователь сказал Спасибо AlexSku за это полезное сообщение:
deniks (14.03.2012)
  #8  
Старый 14.03.2012, 19:34
deniks deniks вне форума
Прохожий
 
Регистрация: 08.03.2012
Сообщения: 25
Репутация: 10
По умолчанию

это k можно убрать, не в нем проблема. Ругается при присваивании массиву значений, полученных из .wav. на строчке X^[i]:=xx/1;

Код:
unit pribor56;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    private
    { Private declarations }
  public
    { Public declarations }
  end;

type
            mascp=array[1..4096] of single ;
              mask=array[0..4096] of single ;
              mascpptr=^mascp;

              maskd=array [0..10] of string;


var
  Form1: TForm1;

var xx: byte;
datafile : file of byte;
mpp:string;
kd:longint;
jj:integer;
   sabb, sgarm, ss: maskd;

          const jjk=2;{L=5;}n=12;pkr=100;fmax=11025/2;
          var  dt,a,f,xk:mask;
      x,y:mascpptr;
     
        i,j,L: integer;
          

implementation
{$R *.dfm}

begin

mpp:='1';
ss[kd]:='1w';

Assign(DataFile,ss[kd]+mpp+'.wav');
Reset(DataFile);
seek(DataFile, 50);
for jj:=1 to jjk do
begin
for i := 1 to 4096 do
begin
Read(DataFile, Xx);
X^[i]:=xx/1;
end;end; end.
Ответить с цитированием
  #9  
Старый 14.03.2012, 20:22
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Какой смысл объяснять оператор, если после implementation их вообще не должно быть (начиная с begin)?
Ответить с цитированием
  #10  
Старый 14.03.2012, 21:44
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от AlexSku
А после implementation разве можно писать операторы? ...
Можно. ___
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #11  
Старый 14.03.2012, 23:03
deniks deniks вне форума
Прохожий
 
Регистрация: 08.03.2012
Сообщения: 25
Репутация: 10
По умолчанию

почитаю как нужно оформлять программу в делфи, ошибка может быть из-за этого?
Ответить с цитированием
  #12  
Старый 14.03.2012, 23:12
Аватар для Karsh
Karsh Karsh вне форума
Активный
 
Регистрация: 22.09.2007
Адрес: SPb
Сообщения: 228
Версия Delphi: 7, 2009, XE2
Репутация: 70
По умолчанию

Цитата:
Ругается при присваивании массиву значений, полученных из .wav. на строчке X^[i]:=xx/1;
Что-то я не нашел, а где у вас указателю X присваивается адрес? На что он должен указывать?
Цитата:
xx/1;
а это зачем? зачем делить на единицу?
__________________
Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра.
Ответить с цитированием
  #13  
Старый 14.03.2012, 23:23
deniks deniks вне форума
Прохожий
 
Регистрация: 08.03.2012
Сообщения: 25
Репутация: 10
По умолчанию

x присваивается массив. непонял какой у него должен быть адрес

1 можно убрать, это связано с тестами программы на паскале.
Ответить с цитированием
  #14  
Старый 14.03.2012, 23:29
Аватар для Karsh
Karsh Karsh вне форума
Активный
 
Регистрация: 22.09.2007
Адрес: SPb
Сообщения: 228
Версия Delphi: 7, 2009, XE2
Репутация: 70
По умолчанию

Цитата:
x присваивается массив. непонял какой у него должен быть адрес
X у вас не массив, а указатель на массив, и пока вы не присвоите ему адрес, он будет указывать "в никуда", из-за чего программа даст сбой.
__________________
Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра.
Ответить с цитированием
  #15  
Старый 14.03.2012, 23:34
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Сколько шума из ничего:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  F    : File;
  I, J : Integer;
  XX   : Byte;
begin
  mpp    := '1';
  ss[kd] := '1w';

{$I-}
  AssignFile(F, ss[kd] + mpp + '.wav');
  Reset(F, 1);
  if IOResult = 0 then
  begin
    Seek(F, 50);

    for I := 1 to jjk do
      for J := 1 to 4096 do
      begin
        BlockRead(F, XX, 1);
        X[J] := XX;
      end;
    CloseFile(F);
  end;
{$I+}
end;
Но проверь на ошибки, всякое может случиться.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
deniks (14.03.2012)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:24.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter