Siemka,
Jak w delphi wygenewrować dzwięk o określonej częstotliwości a nastepnie zapisać go do pliku wave ?
Tak jak bym chcial sobie zrobić na paru przyciskach pianinko, wcisnąc klawisz rec i nagrywac button 1 sound taki 2 taki 3 taki to a taki ;]
0
0
Kodzik pewnego programu:
unit Gen;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, ComCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
SaveDialog1: TSaveDialog;
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
SpinEdit3: TSpinEdit;
Label3: TLabel;
ProgressBar1: TProgressBar;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TWaveheader = packed record
RiffID : array [1..4] of char;
RiffLen : LongWord;
WaveID : array [1..4] of char;
FmtID : array [1..4] of char;
FmtLen : LongWord;
FormatTag : Word;
Stereo : Word;
Freq : LongWord;
BytesPSec : LongWord;
BlockAlign : Word;
BitsPer : Word;
DataID : array [1..4] of char;
DataLen : LongWord;
end;
TDataArray = array of smallint;
const
SFreq=44100;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses Math;
procedure TForm1.Button1Click(Sender: TObject);
var
Header : TWaveHeader;
Data : TDataArray;
i : integer;
F : file;
temp1, temp2: double;
begin
SetLength(Data, (SpinEdit1.Value*SFreq) div 1000) ;
with Header do
begin
RiffID:='RIFF';
RiffLen:=Length(Data)*2 +36;
WaveID:='WAVE';
FmtID:='fmt ';
FmtLen:=16;
FormatTag:=1;
Stereo:=1;
Freq:=SFreq;
BitsPer:=16;
BytesPSec:=(SFreq*Stereo*BitsPer) div 8;
BlockAlign:=(BitsPer div 8)*stereo;
DataID:='data';
DataLen:=Length(Data)*2;
end;
temp1:=2*Pi
*(1/(sFreq/SpinEdit2.Value));
temp2:=Power(10,SpinEdit3.Value/20)*32767;
for i:=0 to High(Data) do
begin
Data[i]:=Round(Sin(i*temp1)*temp2);
ProgressBar1.Position:=Round(i/High(Data)*100);
end;
if SaveDialog1.Execute then
begin
AssignFile(F, SaveDialog1.FileName);
Rewrite(F,1);
BlockWrite(F,Header,SizeOf(Header));
BlockWrite(F,Data[0],Length(Data)*2);
CloseFile(F);
end;
end;
end.
0
Siemka,
Wykonalem jak napisałes... podałem 3 wartości... dalem buttona, otwozylo sie okno save, zapisalem pod test.wav ...
All pllayer, odpalam i kicha... nie startuje...
Musi byc jakiś błąd...
Pomozesz go znaleźć ?
PS: I tak wielkie dzięki za chociażby zainteresowanie bo to się liczy :]
0
Powyższy kod został skopiowany z mojego programu Generator dostępnego na http://pq.royy.net (z poprzedniej wersji). Program i źródła są dostępne publicznie, jednak dobre obyczaje nakazują podawać skąd się wzięło cudzy kod, "Gościu"