Domanda

Uso il metodo p / invoke per riprodurre suoni wav . Ci sono modi per chiamare Windows Media Player per riprodurre un suono mp3 , ma è lento & amp; ingombrante.

Esiste un modo semplice per riprodurre un breve file mp3 ?

Questo è principalmente per il prompt delle applicazioni e segnali acustici quando non guardi lo schermo e non la musica.

Grazie!

È stato utile?

Soluzione

CF Framework 3.5 ora include il supporto per la riproduzione di file .WAV:

Namespace System.Media.SoundPlayer

I file WAV brevi per segnali ed effetti sonori potrebbero persino riprodurre più velocemente degli MP3 poiché sono "pronti per essere riprodotti" ...

Altri suggerimenti

Se stai cercando un modo per riprodurre 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);
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top