امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
PlaySound in Delphi7
نویسنده پیام
mojtabamalaekeh آفلاین
کاربر با تجربه
****

ارسال‌ها: 566
موضوع‌ها: 104
تاریخ عضویت: آذر ۱۳۸۶

تشکرها : 1378
( 631 تشکر در 223 ارسال )
ارسال: #1
PlaySound in Delphi7
سلام سلام
تبریک میگمHappy
بابت تبلیغاتی که راه اندازی کردین
عنوان موضوع هم خیلی عالی شده که پیشوند گذاشتین براش.
امیدوارم روز به روز فروم بیشتر ارتقاء پیدا کنه Clap

چرا یه تابعی مثل SetPixelV براحتی توی دلفی قابل استفاده است ولی تابع PlaySound اینطور نیست؟
من یه کد برای فراخوانی این تابع پیدا کردم ولی خداییش کدها خیلی برام غریب هستندAmaze

تو غربت میشه زندگی کرد اما یه مشکلاتی هست:
وقتی فایل شروع به پخش شدن میشه، کنترل برنامه به آسمون ها میره و باید صبر کنیم تا پخش به اتمام برسه!
تازه فایل هم کامل پخش نمیشه و از 45 ثانیه فقط 41 ثانیه پخش میشه.

یه برنامه قبلاً نوشته بودم با دلفی 7 که یه رودخونه و قایق توی یک منظره هستند و حالت انیمیشن دارند.
خواستم صدای دریا رو هم بذارم روش که به این مشکل برخوردمSad
انیمیشن با استفاده از رسم چند ضلعی و رسم مکرر یه تصویر با استفاده از Bitmap توی تایمر انجام میشه.
اگه پیشنهادی غیر از PlaySound API Function دارین میپذیرم دوستان گلم.

با سپاس

کد:
function PlaySound( Param : String ): String;
type TPS = function (lpszSoundName: PAnsiChar; uFlags: UINT): BOOL; stdcall;
var PS : TPS;
h : THandle;
begin
if FileExists( Param ) then
begin
h := LoadLibrary( 'winmm.dll' );
@PS := GetProcAddress( H, 'sndPlaySoundA' );
if PS( Pchar( Param ) , 0 ) then
Result := 'The sound was played...'
else
Result := 'The Sound wasnt played...';
FreeLibrary( H );
end
else
Result := 'The File' + Param + ' Dosnt exits...';
end;

Calling:
PlaySound('Romance-at-Sea.wav');


۰۶-خرداد-۱۳۹۰, ۱۰:۴۳:۳۷
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #2
RE: PlaySound in Delphi7
سلام مهندس
کدی که استفاده کردی نادرسته
به همین خاطر اجرا نمیشد
اول یونیت mmsystem رو uses کن بعد
وقتی میزنی sndPlaySound() خودش با پارامترهاش میاد
کد:
The sndPlaySound function plays a waveform sound specified either by a filename or by an entry in the registry or the WIN.INI file. This function offers a subset of the functionality of the PlaySound function; sndPlaySound is being maintained for backward compatibility.

BOOL sndPlaySound(

    LPCSTR lpszSound,    
    UINT fuSound    
   );    


Parameters

lpszSound

A string that specifies the sound to play. This parameter can be either an entry in the registry or in WIN.INI that identifies a system sound, or it can be the name of a waveform-audio file. (If the function does not find the entry, the parameter is treated as a filename.) If this parameter is NULL, any currently playing sound is stopped.

fuSound

Flags for playing the sound. The following values are defined:

SND_ASYNC

The sound is played asynchronously and the function returns immediately after beginning the sound. To terminate an asynchronously played sound, call sndPlaySound with lpszSoundName set to NULL.

SND_LOOP

The sound plays repeatedly until sndPlaySound is called again with the lpszSoundName parameter set to NULL. You must also specify the SND_ASYNC flag to loop sounds.

SND_MEMORY

The parameter specified by lpszSoundName points to an image of a waveform sound in memory.

SND_NODEFAULT

If the sound cannot be found, the function returns silently without playing the default sound.

SND_NOSTOP

If a sound is currently playing, the function immediately returns FALSE, without playing the requested sound.

SND_SYNC

The sound is played synchronously and the function does not return until the sound ends.



Return Values

Returns TRUE if successful or FALSE otherwise.

Remarks

If the specified sound cannot be found, sndPlaySound plays the system default sound. If there is no system default entry in the registry or WIN.INI file, or if the default sound cannot be found, the function makes no sound and returns FALSE.
The specified sound must fit in available physical memory and be playable by an installed waveform-audio device driver. If sndPlaySound does not find the sound in the current directory, the function searches for it using the standard directory-search order.
میتونی از فایل mp3 استفاده کنی و با استفاده از کامپوننت mediaplayer خود دلفی که visible اونو false کرده باشی

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۰۷-خرداد-۱۳۹۰, ۱۰:۴۹:۰۳
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : mojtabamalaekeh
mojtabamalaekeh آفلاین
کاربر با تجربه
****

ارسال‌ها: 566
موضوع‌ها: 104
تاریخ عضویت: آذر ۱۳۸۶

تشکرها : 1378
( 631 تشکر در 223 ارسال )
ارسال: #3
RE: PlaySound in Delphi7
خیلی خیلی ممنون Biggrin
با راهنماییتون درست شد آقا؛ هم تا ثانیه آخر پخش میشه هم اینکه برنامه قفل نمیکنه حین پخش.
کد:
sndPlaySound('Romance-at-Sea.wav', SND_ASYNC);

فقط میخوام به آخرای آهنگ که میرسه فرم به صورت Fade out to black بشه و یه Label که مشخصاتم توشه نمایش داده بشه
به خدا مخم کار نمیده!
استرس اینکه فقط تا شب مهلت دارم امان جستجویم در اینترنت را بریده است.

چندتا لایه دارم که با TransparentBlt روی Canvas یک Bitmap رسم میشن
و اون Bitmap هم با BitBlt روی Canvas فرم رسم میشه.
چطور به صورت ملایم Canvas رو سیاهش کنم؟
شرمنده ام دوستان. استرسه دیگه.....

از این تابع هم برای تاریک کردن Canvas استفاده کردم ولی رنگش هیچ تغییری نمیکنه!!!
کد php:
procedure SetBrightness(CanvasTCanvasBrightnessInteger);
var
 
CACOLORADJUSTMENT;
begin
 GetColorAdjustment
(Canvas.HandleCA);
 
CA.caSize := SizeOf(CA);
 
CA.caBrightness := Brightness;
 
CA.caIlluminantIndex := 4;
 if 
GetStretchBltMode(Canvas.Handle) <> HALFTONE then
 SetStretchBltMode
(Canvas.HandleHALFTONE);
 
SetColorAdjustment(Canvas.HandleCA);
end
اینو توی VB6 سر یک UserControl اعمال کرده بودم که وقتی ماوس میره روش کمی روشن تر (Highlight) بشه و خوب جواب میده.


(آخرین ویرایش در این ارسال: ۰۷-خرداد-۱۳۹۰, ۱۲:۳۲:۵۸، توسط mojtabamalaekeh.)
۰۷-خرداد-۱۳۹۰, ۱۲:۲۸:۵۹
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #4
RE: PlaySound in Delphi7
برای افکت میتونی از Billenium Effects استفاده کنی(من تو چند تا برنامه استفاده کردم واقعا عالی بود)
برای سیاه کردن تدریجی میتونی از یه timer و یک متغییر کانتر استفاده کنی مثلا از 1 بره به 255 وقتی رسید به 255 تایمر غیر فعال بشه

یک تابع api هم برای fadein و Fade Out وجود داره میتونی از اون استفاده کنی
کد:
AnimateWindow(Self.Handle, 250, AW_BLEND or AW_ACTIVATE);
این تابع پارامترهای مختلفی داره
کد:
http://www.phidels.com/php/index.php3?page=../php/pagetelechargementzip.php3&id=329

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۰۷-خرداد-۱۳۹۰, ۱۳:۲۶:۲۹
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : mojtabamalaekeh
mojtabamalaekeh آفلاین
کاربر با تجربه
****

ارسال‌ها: 566
موضوع‌ها: 104
تاریخ عضویت: آذر ۱۳۸۶

تشکرها : 1378
( 631 تشکر در 223 ارسال )
ارسال: #5
RE: PlaySound in Delphi7
یه چیزی میخواستم که با HDC کار بکنه
در نهایت از تابع AlphaBlend API استفاده کردم
یه Bitmap سیاه ساختم و میزان ترکیبش با تصویر نهایی رو اونقدر زیاد کردم تا تصویر نهایی کامل سیاه بشه
هم FadeIn ساختم هم FadeOut. رنگش که هم دست خودمونه رو به سیاه بره یا سفید یا هرچی
یه مثال میذارم شاید بدرد کسی بخوره در آینده:
کد php:
procedure FadeOut();
var
 
bTBitmap;
 
CounterInteger;
 
BFTBlendFunction;
begin
 b 
:= TBitmap.Create;
 
b.Width := Form1.ClientWidth;
 
b.Height := Form1.ClientHeight;
 
b.Canvas.Brush.Color := clBlack;
 
b.Canvas.FillRect(Rect(00b.Widthb.Height));
 
BF.BlendOp := AC_SRC_OVER;
 
BF.BlendFlags := 0;
 
BF.AlphaFormat := 0;
 
b.Canvas.FillRect(Rect(00b.Widthb.Height));
 for 
Counter := 1 to 50 do begin
 BF
.SourceConstantAlpha := Counter;
 
AlphaBlend(Form1.Canvas.Handle00b.Widthb.Heightb.Canvas.Handle00b.Widthb.HeightBF);
 
Sleep(60);
 
end;
 
b.Free;
 
Form1.Close;
end

فرض بر اینه که تصویر نهایی روی Form1.Canvas رسم شده و بعد از FadeOut هم فرم باید بسته بشه.

از همکاریتون واقعاً ممنون دوستان.
من شرمنده ام که فقط وقتی سؤالی دارم میام فروم
شما هم همیشه بهم لطف می کنید.....


۰۷-خرداد-۱۳۹۰, ۲۲:۰۷:۴۴
ارسال‌ها
پاسخ
تشکر شده توسط : lord_viper


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS