02-09-2011, 04:34 PM
السلام عليكم
قمت بعمل برنامج لصفحة من القرآن الكريم بدمج الملف الصوتي داخل الملف التنفيذي
الحمد لله تم العمل باستخدام ملف من نوع mp3 بمكونات NewAC و تم عمل ازرار تشغيل و انتظار و استئناف و ايقاف و كان البرنامج يعمل بشكل جيد
لكن بعد تشغيل الملف عدة مرات او بشكل مستمر لمدة ساعة او اكثر بوجود الامر loop بدأ البرنامج يصدر خرخشة بسيطة بين الايات ثم زادت الخرخشة حتى أصبح البرنامج لا يصدر صوتا نقيا
بعد عمل اعادة تشغيل للجهاز كاملا و محاولة تشغيل البرنامج ظل الامر على ما هو عليه
احاول الان الاعتماد على ملفات wav بدلا من mp3
استخدمت تقنية ادراج الملف الصوتي داخل الريسورس و الملف يعمل باستخدام زر بداية
السؤال : كيف التعامل مع الصوت ؟ الايقاف المؤقت و الايقاف و الاستئناف
الكود المستعمل :
هنا نص الكود القديم الذي استعملته لملفات mp3
فماذا عن استخدام ملفات wav ?
قمت بعمل برنامج لصفحة من القرآن الكريم بدمج الملف الصوتي داخل الملف التنفيذي
الحمد لله تم العمل باستخدام ملف من نوع mp3 بمكونات NewAC و تم عمل ازرار تشغيل و انتظار و استئناف و ايقاف و كان البرنامج يعمل بشكل جيد
لكن بعد تشغيل الملف عدة مرات او بشكل مستمر لمدة ساعة او اكثر بوجود الامر loop بدأ البرنامج يصدر خرخشة بسيطة بين الايات ثم زادت الخرخشة حتى أصبح البرنامج لا يصدر صوتا نقيا
بعد عمل اعادة تشغيل للجهاز كاملا و محاولة تشغيل البرنامج ظل الامر على ما هو عليه
احاول الان الاعتماد على ملفات wav بدلا من mp3
استخدمت تقنية ادراج الملف الصوتي داخل الريسورس و الملف يعمل باستخدام زر بداية
السؤال : كيف التعامل مع الصوت ؟ الايقاف المؤقت و الايقاف و الاستئناف
الكود المستعمل :
PHP كود :
unit Unit1;
interface
uses
MMSystem, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{$R quran.Res}
procedure TForm1.Button1Click(Sender: TObject) ;
var
hFind, hRes: THandle;
Song: PChar;
begin
hFind := FindResource(HInstance, 'page1', 'WAVE') ;
if hFind <> 0 then begin
hRes:=LoadResource(HInstance, hFind) ;
if hRes <> 0 then begin
Song:=LockResource(hRes) ;
if Assigned(Song) then SndPlaySound(Song, snd_ASync or snd_Memory) ;
UnlockResource(hRes) ;
end;
FreeResource(hFind) ;
end;
end;
end.
هنا نص الكود القديم الذي استعملته لملفات mp3
فماذا عن استخدام ملفات wav ?
PHP كود :
unit page1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, StdCtrls, ACS_Classes, ACS_WinMedia, ACS_smpeg,
ACS_DXAudio;
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
DXAudioOut1: TDXAudioOut;
MP3In1: TMP3In;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Button2: TButton;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
rStream: TResourceStream;
mStream: TMemoryStream;
implementation
{$R *.DFM} {$R quran.res}
procedure TForm1.Button1Click(Sender: TObject);
begin
DXAudioOut1.Run;
Button1.Enabled:=False;
Button2.Enabled:=true;
Button3.Enabled:=true;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Button2.Enabled:=False;
if DXAudioOut1.Status = tosPlaying then
begin
DXAudioOut1.Pause;
Button2.Caption := 'استئناف';
Button2.Enabled:=true;
Button1.Enabled:=False;
Button3.Enabled:=False;
end else
if DXAudioOut1.Status = tosPaused then
begin
DXAudioOut1.Resume;
Button2.Caption := 'انتظار';
Button2.Enabled:=true;
Button1.Enabled:=False;
Button3.Enabled:=true;
end
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Button3.Enabled:=false;
if DXAudioOut1.Status = tosPlaying then
begin
Button3.Enabled:=true;
DXAudioOut1.Stop;
Button1.Enabled:=true;
Button2.Enabled:=false;
Button3.Enabled:=false;
end else
if DXAudioOut1.Status = tosPaused then
begin
DXAudioOut1.Stop;
Button3.Enabled:=false;
Button1.Enabled:=true;
Button2.Enabled:=false;
end
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
rStream := TResourceStream.Create(hInstance, 'quran', RT_RCDATA) ;
mStream := TMemoryStream.Create;
mStream.CopyFrom(rStream, 0);
MP3In1.Stream:=mStream;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DXAudioOut1.Stop(False);
mStream.Free;
rStream.Free;
end;
end.

