تشغيل ملفات wav مع FreePascal/Lazarus عن طريق openal
#1
السلام عليكم ورحمة الله وبركاته
هذا الشرح تم تجربته علي Ubuntu 12.04 مع Lazarus-1.1-svn وو FPC-2.6
لتشغيل ملفات الصوت بامتداد wav في بيئة Lazarus عن طريق Openal يتوجب عليك أولا تثبيت openal من مدير الحزم في توزيعتك
وغالبا ستجدها مثبتة مسبقا

حمل الملف laz_openal.zip

فك الضغط ستجد ملفين laz_openal.pas , openal_nt.pas

افتح مشروع جديد في Lazarus واحفظه في مجلد فارغ , ثم انسخ الوحدتين السابقتين إلي مجلد المشروع .

من قائمة Project افتح Project Inspector ثم add >>> add files واضف الوحدتين السابقتين إلي المشروع .
في ملف الوحدة الرئيسية للمشروع أضف الوحدة laz_openal في قسم uses

PHP كود :
uses
Classes
SysUtilsFileUtilFormsControlsGraphicsDialogsStdCtrls,
laz_openal

أضف متغيرين في قسم private أحدهما كائن من الكلاس TLazOpenAL واﻷخري لملف الصوت TLazOpenALWavFileSource

PHP كود :
private
{ private 
declarations }
openAL:TLazOpenAL;
wavFile:TLazOpenALWavFileSource

في الحدث FormCreate أضف الكود

PHP كود :
procedure TForm1.FormCreate(SenderTObject);
begin
openAl 
:= TLazOpenAL.Create;
wavFile:= TLazOpenALWavFileSource.Create('sound/qatami.wav');
openAL.SourceList.Add(wavFile);
end

غير مسار ملف الصوت حسب الموجود عندك

أضف زرين علي الفورم لتشغيل وايقاف الصوت ثم أضف اﻷكواد الي كل منهما

PHP كود :
procedure TForm1.Button1Click(SenderTObject);
begin
wavFile
.Play;
end;

procedure TForm1.Button2Click(SenderTObject);
begin
wavFile
.Stop;
end

ليكون الكود كاملا
PHP كود :
unit Unit1;

{
$mode objfpc}{$H+}

interface

uses
Classes
SysUtilsFileUtilFormsControlsGraphicsDialogsStdCtrls,
laz_openal;

type

TForm1 }

TForm1 = class(TForm)
Button1TButton;
Button2TButton;
procedure Button1Click(SenderTObject);
procedure Button2Click(SenderTObject);
procedure FormCreate(SenderTObject);
private
{ private 
declarations }
openAL:TLazOpenAL;
wavFile:TLazOpenALWavFileSource;
public
{ public 
declarations }
end;

var
Form1TForm1;

implementation

{$R *.lfm}

TForm1 }

procedure TForm1.FormCreate(SenderTObject);
begin
openAl 
:= TLazOpenAL.Create;
wavFile:= TLazOpenALWavFileSource.Create('sound/qatami.wav');
openAL.SourceList.Add(wavFile);
end;

procedure TForm1.Button1Click(SenderTObject);
begin
wavFile
.Play;
end;

procedure TForm1.Button2Click(SenderTObject);
begin
wavFile
.Stop;
end;

end
منتهي البساطة اليس كذلك Smile
الرد
#2
كما يمكن أيضاً استخدام الوحدة mmsystem لتشغيل ملفات wav و إجراءتها نفس إجراءات دلفي
وكان من الأفضل أن تذكر أنها ليست لبناء برامج الصوت و لكن لاستخدام الأصوات في البرامج مثلاُ عند الضغط على button أو ما شابه
طبيب عناية و عاشق إلكترونيات
الرد
#3
هلا أعطيتنا مثال علي mmsystem من فضلك
هل تعرف مكتبة تقوم بتشغيل mp3 او ogg ???
الرد
#4
mmsystem :
كود :
playsound('file path ',0.snd_async);

أما بالنسبة للامتدادت الأخرى يمكنك استخدام مكتبة bass ستجدها في المنتدى في قسم المشاريع الجماعية(كم أتمنى أن يكون نشط بأعضاء و مبرمجين لازاراس)
الرابط
http://www.delphi4arab.net/forum/showthread.php?tid=943

كود :
http://msdn.microsoft.com/en-us/library/windows/desktop/dd743680%28v=vs.85%29.aspx
البارمترات الخاصة بالدالةplaysound
طبيب عناية و عاشق إلكترونيات
الرد
#5
يبدو أن mmsystem خاصة بويندوز فقط
سأحاول تجربة كود bass علي لينوكس حينما أجد وقت
الرد
#6
للأسف المثال المذكور ل openAL لم يعمل معي تتم عملية التصنيف و عند تشغيل الملف الناتج تظهر شاشة Access Violation
وهذا ملف المثال الذي طبقته في المرفقات
استخدم lazarus 0.9.30 / fpc 2.4.2-0
هذا على لينكس أما بالنسبة لويندوز فأستخدم الوحدة MMSystem في تشغيل ملفات wav بلا مشاكل
تم تطبيق المثال على لينكس Linux mint 11 Gnome


الملفات المرفقة
.7z   OpenAl-Test_LinuxMint11-Gnome.7z (الحجم : 79.26 ك ب / التحميلات : 12)
الرد
#7
ينصح بتحديث نسختك إلي اﻷصدارات المستقرة
FPC-2.6/lazarus-1.0
الرد
#8
شكرا أخي على الرد

حاولت مع:
lazarus 1.1
fpc 2.6.1

على منصة ويندوز بعد تنزيل مكتبة OpenAL32.dll

ونسخها الى مجلد لازاراس الرئيسي و مجلد البرنامج الذي يوجد به الملف التنفيذي الناتج

والنتيجة كما هي في السابق نفس رسالة الخطأ ولم أتمكن من تشغيل الملف الصوتي
الرد
#9
السلام عليكم
إقتباس :على منصة ويندوز بعد تنزيل مكتبة OpenAL32.dll
لم يعمل على Linux Mint او Windows ام ماذا ؟
الرد
#10
جرب بعد تثبيت المكتبة libalut0 وفي ويندوز Alut.dll
الرد


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


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