неплохая программка, хорошо б еще миксер сделать..
function openplayerfromstr(s, mimetype : string) : boolean;
begin
inline(
getstatic field 'P', 'p', 'Ljavax/microedition/media/Player;';
ifnull :$0000;
getstatic field 'P', 'p', 'Ljavax/microedition/media/Player;';
invokeinterface interface 'javax/microedition/media/Player', 'close', '()V', $01, $00;
:$0000;
new class 'java/io/ByteArrayInputStream';
dup;
aload_0;
invokevirtual method 'java/lang/String', 'getBytes', '()[B';
invokenonvirtual method 'java/io/ByteArrayInputStream', '<init>', '([B)V';
aload_1;
invokestatic method 'javax/microedition/media/Manager', 'createPlayer', '(Ljava/io/InputStream;Ljava/lang/String;)Ljavax/microedition/media/Player;';
putstatic field 'P', 'p', 'Ljavax/microedition/media/Player;';
getstatic field 'P', 'p', 'Ljavax/microedition/media/Player;';
invokeinterface interface 'javax/microedition/media/Player', 'realize', '()V', $01, $00;
getstatic field 'P', 'p', 'Ljavax/microedition/media/Player;';
invokeinterface interface 'javax/microedition/media/Player', 'prefetch', '()V', $01, $00;
iconst_m1;
ireturn;
);{}
end;
(****)
var
data : string;
key : integer;
procedure sine(q4,time,lim,vol : integer);
const
tone = 2;
var
n,d : real;
i : integer;
begin
n := 127;
d := (vol*tone)/q4;
for i := (q4*tone)*(time+30) downto 0 do
begin
if n>(126+vol) then d :=-d
else if n<(128-vol) then d :=-d;
n := n+d;
if (n>(128+vol-lim)) then data := data+chr(128+vol-lim)
else if (n<(126-vol+lim)) then data := data+chr(126-vol+lim)
else data := data+chr(trunc(n));
end;
end;
function make(q4,time,lim,vol : integer) : string;
var
i,len : integer;
begin
data := '';
for i:= vol downto vol-4 do sine(q4,time,lim,i{vol});
{формируем хххх - размер для формата{}
len := length(data);
data := 'WAVEfmt '+chr(16)+chr(0)+chr(0)+chr(0)+
chr(1)+chr(0)+ {тип формата{}
chr(1)+chr(0)+ {число каналов(моно 1){}
chr(64)+chr(31)+chr(0)+chr(0)+ {8000 Гц{}
chr(64)+chr(31)+chr(0)+chr(0)+ {8000 байт в сек{}
chr(1)+chr(0)+ {1 бит...{}
chr(8)+chr(0)+'data'+ {разрядность{}
chr(len and $FF)+chr((len div $100) and $FF)+chr((len div $10000) and $FF)+chr((len div $1000000) and $FF)+data;
{формируем хххх - размер для формата{}
len := length(data);
make := 'RIFF'+chr(len and $FF)+chr((len div $100) and $FF)+chr((len div $10000) and $FF)+chr((len div $1000000) and $FF)+data;
end;
begin
drawText('make Sound', 0, 0);
drawText('press 1,2,3', 0, 16);
repaint;
repeat
key := getKeyClicked;
if key=KE_KEY1 then if (openplayerfromstr(make(15,50,0,80), 'audio/x-wav')) and setPlayerCount(1) and startPlayer then
begin
delay(10);
stopPlayer;
end;
if key=KE_KEY2 then if (openplayerfromstr(make(30,50,0,80), 'audio/x-wav')) and setPlayerCount(1) and startPlayer then
begin
delay(10);
stopPlayer;
end;
if key=KE_KEY3 then if (openplayerfromstr(make(3,50,0,80), 'audio/x-wav')) and setPlayerCount(1) and startPlayer then
begin
delay(10);
stopPlayer;
end;
until false;
end.