RSS 1.0 FEED Powered by GM-RSS ארכיון האתר בטל רישום כתוב אלינו משאבי הפריק רישום לאיגרת פורום מייקרוסופט פורום הפריק מי אנחנו דף הבית

כתבה למתכנתים: ניגון קבצי מוסיקה (wav)
Amir - 31/12/2003
 

מוסיקה ואפקטים קוליים נחשבים לערך מוסף לכל אפליקציה שתכתבו.

ברוב סביבות הפיתוח אין ממשק או מעטפת שנותנים לנו גישה נוחה לביצוע פעולה מסוג כזה ולכן יש צורך לגשת ישירות אל ה-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)
פורום המפתחים
פוקט פיסי פריק

[ הקודם: "ניהול מכשירי פוקט פיסי בחברה ע"י Pocket Controller Enterprise" ] [לעמוד הראשי] [ הבא: "חבילת משחקים C64 בדולר – מבצע ל 24 שעות" ]

Powered By Greymatter





חפש   
חפש באתר עם גוגל   
Google
Web pocketpcfreak.com
חברות התומכות באתר
Onroad
iGo Website
PocketPCNetL (5k image)
Visual CE
Pocket Gear
חפש מוצר באמזון
Search Now:
הגרלות באתר
פרסים ומעמדים
Helio Diamant and Saar Avigour are Microsoft MVPs
אתרים חברים
Pocket PC Thoughts
Pocket PC Writer Net