Skocz do zawartości
Forum komputerowe PC Centre
maciejorlos

Turbo Pascal problem z odczytem zapisanych danych

Rekomendowane odpowiedzi

Muszę zrobić program który będzie zapisywał melodię zagraną przez użytkownika i później sam ją odtwarzał. Zrobiłem już całą klawiaturę dźwięków mam jednak problem z odczytaniem tych zapisanych. Nie wiem jaką zmienną mam sczytać jako melodie. Poniżej zamieszczam kod programu. Proszę o pomoc

 

 

 

 

 

Program Kompozytor2;
uses Crt;
type mel=record
             nazwa:String;
             klawisz:Char;

         end;
var klawisz:Char;
   melodia:mel;
   melodie: file of mel;

procedure play(nuta:Integer;czas:Integer);
begin
 Sound(nuta);
 Delay(czas);
 NoSound;

end;{play}

Procedure Kompozytor;
const C1=33;D1=37;E1=41;F1=44;G1=49;A1=55;H1=62;C2=65;n=75;
var
   Cis,Dis,Fis,Gis,Ais:Integer;

   koniec:Boolean;
   nuta:Integer;
   z,c:Integer;
   zapis:Char;
begin
  ClrScr;
  writeln('Program sluzy do komponowania muzyki');
  write('Klawiatura dzwiekow ma nastepujacy wyglad:');
  writeln;
  writeln('  |w|e| |t|y|u|');
  writeln(' |a|s|d|f|g|h|j|k|');
  writeln('klawisze z i x zmieniaja oktawy');
  writeln('klawisze v,b,n,m sluza do zmiany dlugosci dzwieku');
  writeln('nacisniecie innego klawisza od wyzej wymienionych powoduje koniec programu');
  Cis:=Round(Sqrt(C1*D1));
  Dis:=Round(Sqrt(D1*E1));
  Fis:=Round(Sqrt(F1*G1));
  Gis:=Round(Sqrt(G1*A1));
  Ais:=Round(Sqrt(A1*H1));
 koniec:=False;
 c:=1;
 z:=n;

 repeat
   klawisz:=ReadKey;
   case klawisz of
                  'v':z:=n;
                  'b':z:=2*n;
                  'n':z:=4*n;
                  'm':z:=8*n;
                  'z':c:=2*c ;
                  'x':c:=round(c/2);
                  'a':play(C1*c,z);
                  's':play(D1*c,z);
                  'd':play(E1*c,z);
                  'f':play(F1*c,z);
                  'g':play(G1*c,z);
                  'h':play(A1*c,z);
                  'j':play(H1*c,z);
                  'k':play(C2*c,z);
                  'w':play(Cis*c,z);
                  'e':play(Dis*c,z);
                  't':play(Fis*c,z);
                  'y':play(Gis*c,z);
                  'u':play(Ais*c,z);

   else koniec:=True;
 end;
 if not koniec
    then begin

           write(klawisz:3);
           readln(klawisz);
           play(nuta,n);
           zapis:=klawisz;

           NoSound;

         end;

   until koniec;


end;

procedure zakladanie_pliku;
var nazwa:String;

begin
 assign(melodie,'C:\MELODIE.DAN');

 writeln('    podaj nazwe piosenki');
 rewrite(melodie);
 read(melodia.nazwa);
 kompozytor;
 write(klawisz);
 read(melodia.klawisz);
 write(melodie,melodia);
 Close(melodie);
 end;{zakladanie_pliku koniec}

 procedure odtwarzanie_melodii;
 begin
   assign(melodie,'C:\MELODIE.DAN');
   reset(melodie);
   read(melodie,melodia);
   write(melodia.nazwa,melodia.klawisz);
{    while not eof(melodie) do
   begin
     read(melodie,melodia);
     writeln(melodia.nazwa,melodia.klawisz);
   end;                                 }
  close(melodie);
  readln;
 end;

Procedure Menu;
var odp:char;
begin
 writeln('wybierz opcje:');
 writeln('1 kompozytor bez zapisywania melodii');
 writeln('2 nagrywanie piosenki');
 writeln('3 odtwarzanie melodii');
 odp:=ReadKey;
 write(odp);
 case odp of
 '1':kompozytor;
 '2':zakladanie_pliku;
 '3':odtwarzanie_melodii;
end;
end;
begin
Clrscr;
assign(melodie,'C:\MELODIE.DAN'); {program g˘wny}
Menu;
end.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

×
×
  • Dodaj nową pozycję...