|
ברוב סביבות הפיתוח אין ממשק או מעטפת שנותנים לנו גישה נוחה לביצוע פעולה מסוג כזה ולכן יש צורך לגשת ישירות אל ה-API של מערכת-ההפעלה. ישנה פונקציה מיוחדת שנקראת PlaySoundW שבאמצעותה ניתן לנגן קבצי Wav. אומנם זה עדיין לא משתווה ל-MP3 אך רוב האפקטים הקוליים מגיעים בקבצים קטנים מאד ואין סיבה להתחיל להתעסק בפורמט מתקדם מעין זה.
בכתבה זו אתאר כיצד לייבא ולהשתמש בפונקציה זו כדי להקנות לאפליקציה שלכם יכולות מוזיקליות. כל זאת באמצעות ייבואה מתוך ליבת מערכת ההפעלה core.dll.
הכתבה מיועדת למפתחים ומתכנתים.
התהליך לניגון קובץ בתוך אפליקציה הוא די פשוט:
יש לייבא את הפונקציה PlaySoundW מתוך ליבת מערכת ההפעלה core.dll.
כך פעולת הייבוא מתבצעת ב- #C:
[DllImport("coredll", EntryPoint="PlaySoundW", SetLastError=true)] public extern static int PlaySoundW(string lpszName, int hModule, uint dwFlags);
הפרמטרים לפונקציה הזו הינם: lpszName - שם קובץ ה-wav אותו נרצה לנגן. hModule - יש להעביר 0. dwFlags - אוסף של דגלים שמתארים את אופן ביצוע הפעולה.
תמצית הדגלים היא:
SND_SYNC = 0x0000 SND_ASYNC = 0x0001 SND_NODEFAULT = 0x0002 SND_LOOP = 0x0008
ברירת המחדל היא 0 או SND_SYNC ובמקרה הזה פעולת הניגון תתבצע באופן סנכרוני, כלומר האפליקציה תעצר עד לסיום הפעולה. שימוש ב-SND_ASYNC תגרום לפעולה אסינכרונית שתתבצע במקביל לריצת האפליקציה.
שימוש בדגל SND_NODEFAULT תגרום להשמעת צליל ריק (שקט) במקרה והקובץ אינו קיים. זאת במקום השמעת צליל השגיאה הדיפולטי.
כדי להשמיע את הצליל בלולאה אינסופית יש להשתמש בדגל SND_LOOP ביחד עם SND_ASYNC. כדי לעצור את הלולאה המושמעת יש לקרוא שוב לפונקציה כאשר שם הקובץ הינו null (לא מחרוזת ריקה!).
דוגמאות: ניגון הקובץ MySound.wav:
PlaySoundW(@"\My Documents\MySound.wav", 0, SND_ASYNC + SND_NODEFAULT);
ניגון אותו קובץ בלולאה אינסופית:
PlaySoundW(@"\My Documents\MySound.wav", 0, SND_LOOP + SND_ASYNC + SND_NODEAFAULT);
עצירת הלולאה:
PlaySoundW((string)null, 0, SND_ASYNC);
כמו שאתם רואים, זה די פשוט להשתמש בפונקציה הזו כשמכירים את ה-API המתאים.
תוספות, שאלות והערות יתקבלו בברכה.
להמשך דיון בנושא אנא הכנסו לפורום המפתחים.
אמיר ולדמן (BlastPPC) פורום המפתחים פוקט פיסי פריק
|