문제

P/Invoke 메소드를 사용하여 재생합니다 wav 소리. Windows Media Player에게 전화하여 플레이하는 방법이 있습니다. mp3 소리가 들지만 느리고 번거 롭습니다.

짧은 연주를하는 쉬운 방법이 있습니까? mp3 파일?

이것은 주로 응용 프로그램을위한 것입니다 격려 그리고 가청 신호 음악이 아닌 화면을보고 있지 않을 때.

감사!

도움이 되었습니까?

해결책

CF 프레임 워크 3.5 이제 .wav 파일 재생 지원이 포함되어 있습니다.

네임 스페이스 System.Media.soundplayer

신호와 사운드 효과에 대한 짧은 웨이브 파일도 재생할 수도 있습니다. 더 빠르게 그들이 "준비가 되었기 때문에"MP3보다 ...

다른 팁

MP3를 재생하는 방법을 찾고 있다면 :

public class Sound
{
    [DllImport("aygshell.dll", SetLastError = true)]
    private static extern IntPtr SndPlaySync(string pszSoundFile, uint dwFlags);
    [DllImport("aygshell.dll")]
    private static extern uint SndOpen(string pszSoundFile, ref IntPtr phSound);
    [DllImport("aygshell.dll")]
    private static extern uint SndPlayAsync(IntPtr hSound, uint dwFlags);
    [DllImport("aygshell.dll")]
    private static extern uint SndClose(IntPtr hSound);
    [DllImport("aygshell.dll")]
    private static extern uint SndStop(int SoundScope, IntPtr hSound);

    const int SND_SCOPE_PROCESS = 0x1;
    private static Random _random = new Random();

    // init startup path... where you'll hold temp mp3s
    private static string _startupPath;
    public static string StartupPath
    {
        get { return Sound._startupPath; }
        set { Sound._startupPath = value; }
    }

    private enum SND
    {
        SYNC = 0x0000,
        ASYNC = 0x0001,
        NODEFAULT = 0x0002,
        MEMORY = 0x0004,
        LOOP = 0x0008,
        NOSTOP = 0x0010,
        NOWAIT = 0x00002000,
        ALIAS = 0x00010000,
        ALIAS_ID = 0x00110000,
        FILENAME = 0x00020000,
        RESOURCE = 0x00040004
    }

    public static void PlaySound(string fileName)
    {
        PlaySound(fileName, null);
    }

    public static void PlaySound(string fileName, WaitCallback callback)
    {
        SndStop(SND_SCOPE_PROCESS, IntPtr.Zero);
        ThreadPool.QueueUserWorkItem(playSoundProcess, 
            new object[] {fileName, callback });
    }

    private static void playSoundProcess(object o)
    {
        object[] par = (object[])o;
        string fileName = (string)par[0];
        WaitCallback callback = (WaitCallback)par[1];
        SndPlaySync(fileName, 0);

        try
        {
            File.Delete(fileName);
        }
        catch
        { }

        if (callback != null)
            callback.Invoke(fileName);
    }

    public static void ClearSounds()
    {
        SndStop(SND_SCOPE_PROCESS, IntPtr.Zero);
        try
        {
            string[] oldFiles = Directory.GetFiles(StartupPath, "*.mp3");
            foreach (string f in oldFiles)
                File.Delete(f);
        }
        catch
        { }
    }



    public static void PlaySound(byte[] mp3, WaitCallback callback)
    {
        string temp = string.Format("{0}\\{1}-{2}.mp3", StartupPath, DateTime.Now.Ticks, _random.Next());
        using (FileStream fs = File.Create(temp))
        {
            fs.Write(mp3, 0, mp3.Length);
        }

        PlaySound(temp, callback);
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top