Воспроизведение аудио файлов в C # - PullRequest
2 голосов
/ 11 ноября 2010

Мне нужно воспроизвести mp3 файл. Я хочу использовать winmm.dll (Windows 7)

class Program
{
    [DllImport("winmm.dll")]
    private static extern long mciSendString(string Cmd, StringBuilder StrReturn, int ReturnLength, IntPtr HwndCallback);

    static void Main(string[] args)
    {
        string FileName = @"F:\MUSIC\ROCK.mp3";

        string CommandString = "open " + "\"" + FileName + "\"" + " type mpegvideo alias Mp3File";
        mciSendString(CommandString, null, 0, IntPtr.Zero);
        CommandString = "play Mp3File";
        mciSendString(CommandString, null, 0, IntPtr.Zero);
        Console.ReadKey();
    }
}

Но когда я запустил свою программу, ничего не произошло. Где ошибка?

Ответы [ 4 ]

3 голосов
/ 04 сентября 2012

Принятый ответ не будет работать для путей к файлам, которые содержат пробелы. Правильный метод - использовать псевдоним, который вы установили в команде open:

string FileName = @"F:\MUSIC\ROCK.mp3";
mciSendString("open \"" + FileName + "\" type mpegvideo alias thisIsMyTag", null, 0, IntPtr.Zero);
mciSendString("play thisIsMyTag from 0", null, 0, IntPtr.Zero);
0 голосов
/ 11 ноября 2010

Похоже, что ваша командная строка имеет неправильный тип.

Вы передаете type mpegvideo, но файл не является видеофайлом.

Правильный тип для аудио: type waveaudio для * .wav файлов, type sequencer для * .mid файлов, type cdaudio для RedBook CD. Я не вижу способа воспроизвести MP3 с MCI. Вы можете попытаться полностью исключить предложение type, тогда MCI попытается его обнаружить.

Кроме того, вы должны зафиксировать код ошибки, возвращаемый mciSendString, это может дать вам больше информации.

Ссылка MSDN

0 голосов
/ 11 ноября 2010
string FileName = @"F:\MUSIC\ROCK.mp3";
mciSendString("open \"" + FileName + "\" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero);
mciSendString("play " + FileName + " from 0", null, 0, IntPtr.Zero);

Работает правильно.

0 голосов
/ 11 ноября 2010

Здесь

class Program
{
  public string _command;
  public bool isOpen;
  [DllImport("winmm.dll")]

  public static extern long mciSendString(string strCommand,StringBuilder strReturn,int iReturnLength, IntPtr hwndCallback);

static void Main(string[] args)
{
    string FileName = @"F:\MUSIC\ROCK.mp3";
    string _command = "open \"" + sFileName + "\" type mpegvideo alias MediaFile";
       mciSendString(_command, null, 0, IntPtr.Zero);
     isOpen = true;

     if(isOpen)
     {
        _command = "play MediaFile";
        if (loop)
         _command += " REPEAT";
        mciSendString(_command, null, 0, IntPtr.Zero);
      }
/*For Close the audio
    _command = "close MediaFile";
    mciSendString(_command, null, 0, IntPtr.Zero);
    isOpen = false; */
}
}

CommandString должно быть «play Mediafile» вместо «play Mp3file». Надеюсь, это поможет .. =]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...