كيف التعامل مع الصوت من داخل التطبيق
#1
السلام عليكم
قمت بعمل برنامج لصفحة من القرآن الكريم بدمج الملف الصوتي داخل الملف التنفيذي
الحمد لله تم العمل باستخدام ملف من نوع 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. 
الرد


الردود في هذا الموضوع
كيف التعامل مع الصوت من داخل التطبيق - بواسطة mishlimited - 02-09-2011, 04:34 PM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم