0
votes

Problème Lorsque vous essayez de jouer au fichier MP3 via McIsendendRing (mcierr_cannot_load_driver)

Lorsque vous essayez de lire un fichier MP3 en utilisant mcisendstring code>, via les commandes suivantes:

Ouvrir "{fileName}" [Type mpegvideo] alias {aliasname} code> / / essayé à la fois avec et sans type mpegvideo code> p>

et p>

lecture {aliasname} p> p>

i get L'erreur mcierr_cannot_load_driver: "Problème inconnu lors du chargement du pilote de périphérique spécifié" code>. p>

a lu dans ce Publier que vous devez avoir un codec MP3 installé, mais j'en ai un, donc ce n'est pas le problème. P>

Après avoir cherché autour de vous, essayant de trouver ce que le problème a été trébuché sur cette Projet , c'est un lecteur audio qui utilise mcisendstring code>, et a décidé de l'essayer de voir si le même problème se produit, assez drôle, il fonctionnait bien et pourrait jouer mp3 f Iles ... Alors, quel est le problème, pourquoi ne travaille pas dans mon projet. p>

Voici le code (ce n'est que du code de test désolé s'il n'y a pas assez de manutention d'exception): P >

using System;
using System.IO;
using System.Runtime.InteropServices;

namespace Test
{
    unsafe class Program
    {
        [DllImport("winmm.dll", SetLastError = true)]
        public static extern bool mciGetErrorString([In] int error, [In, Out] char[] buffer, [In] int bufferCount);

        [DllImport("winmm.dll", SetLastError = true)]
        public static extern int mciSendString([In] string command, [Optional, In, Out] char[] returnBuffer, [Optional, In] int returnBufferCount, [Optional, In] IntPtr hNotifyWindow);

        static void Main(string[] args)
        {
            Play(@"D:\Audio\simple_beat.mp3");

            Console.ReadLine();

            Close();
        }

        static void Play(string fileName)
        {
            Close();

            if (!string.IsNullOrEmpty(fileName) && File.Exists(fileName))
            {
                int error = mciSendString($"open \"{fileName}\" type mpegvideo alias RandomAudio", null, 0, IntPtr.Zero);

                if (error != 0)
                {
                    error = mciSendString($"open \"{fileName}\" alias RandomAudio", null, 0, IntPtr.Zero);

                    if (error != 0)
                    {
                        throw new MciException(error);
                    }
                }
                error = mciSendString($"play RandomAudio", null, 0, IntPtr.Zero);

                if (error != 0)
                {
                    Close();

                    throw new MciException(error);
                }
            }
        }

        static void Close()
        {
            var error = mciSendString($"close RandomAudio", null, 0, IntPtr.Zero);

            if (error != 0)
            {
                throw new MciException(error);
            }
        }

        class MciException : SystemException
        {
            public MciException(int error)
            {
                var buffer = new char[128];

                if (mciGetErrorString(error, buffer, 128))
                {
                    _message = new string(buffer);

                    return;
                }
                _message = "An unknown error has occured.";
            }

            public override string Message
            {
                get
                {
                    return _message;
                }
            }

            private string _message;
        }
    }
}


0 commentaires

3 Réponses :


0
votes

a trouvé ce que le problème était, mcisendendring ne peut pas ouvrir et lire des fichiers MP3 dans une application de console, mais il leur jouera si l'application est une winform.

Donc, si vous voulez lire un MP3 via mcisendstring Vous devrez créer une application Winform, et si vous avez besoin d'une console au lieu d'un formulaire, définissez simplement la taille du formulaire à zéro et à utiliser < Code> Alloconsole Pour créer une console.


0 commentaires

0
votes

Vos fichiers MP3 sont dans une partie USB? Parce que je ne peux pas jouer au fichier MP3 quand il est dans une USB, mais quand il est en HD, je peux ..


1 commentaires

Cela ne fournit pas de réponse à la question. Une fois que vous avez suffisamment réputation , vous pourrez Commentaire sur n'importe quel message ; au lieu de, Fournir des réponses Cela n'exige pas de clarification de l'Asker . - de l'avis



1
votes

Si vous essayez de courir sous un projet de console, vous pouvez créer une poignée de fenêtre et l'attribuer à votre classe. Un exemple VB Snip: xxx

J'utilise "notifier" et la poignée afin que je puisse capturer mm_mcinotify et détecter la fin du fichier: xxx < / p>


0 commentaires