Как я могу приостановить файл MP3 с помощью C #? - PullRequest
2 голосов
/ 10 ноября 2009

У меня есть этот класс, который я нашел на сайте:

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

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

    public void Close()
    {
        _command = "close MediaFile";
        mciSendString(_command, null, 0, IntPtr.Zero);
        isOpen = false;
    }

    public void Open(string sFileName)
    {
        _command = "open \"" + sFileName + "\" type mpegvideo alias MediaFile";
        mciSendString(_command, null, 0, IntPtr.Zero);
        isOpen = true;
    }

    public void Play(bool loop)
    {
        if (isOpen)
        {
            _command = "play MediaFile";
            if (loop)
                _command += " REPEAT";
            mciSendString(_command, null, 0, IntPtr.Zero);
        }
    }
}

Есть методы для STOP и PLAY. Мне было интересно, если кто-нибудь знаком с библиотекой winmm.dll. Как я могу приостановить песню во время ее воспроизведения и продолжить с того места, где она была приостановлена?

Ответы [ 2 ]

2 голосов
/ 10 ноября 2009

Эта статья CodeProject содержит класс, который обрабатывает некоторые функции библиотеки winmm.dll, включая pause, и может быть полезен для этого и в будущем.

Однако основной код:

    _command = "pause MediaFile";
    mciSendString(_command, null, 0, IntPtr.Zero);
0 голосов
/ 10 ноября 2009

Вот все мультимедийные командные строки .

Я вижу пауза и резюме команды включены:

Команда pause приостанавливает воспроизведение или запись. Большинство водителей сохраняют текущая позиция и в конечном итоге возобновить воспроизведение или запись на этом позиция. CD аудио, цифровое видео, MIDI-секвенсор, видеомагнитофон, видеодиск и осциллограммы-аудиоустройства распознают это команда.

Команда resume продолжает играть или запись на устройство, которое было приостановлено с помощью команды паузы. Цифровое видео, видеомагнитофон и звуковой сигнал устройства распознают эту команду. Хотя CD аудио, MIDI секвенсор и устройства видеодисков также распознают это команда, MCICDA, MCISEQ и Драйверы устройств MCIPIONR не поддерживают это.

Итак, я думаю, у вас будет:

bool isPaused = false;

public void Pause() {
    if (isOpen && !isPaused) {
        _command = "pause MediaFile";
        mciSendString(_command, null, 0, IntPtr.Zero);
        isPaused = true;
    }
}

public void Resume() {
    if (isOpen && isPaused) {
        _command = "resume MediaFile";
        mciSendString(_command, null, 0, IntPtr.Zero);
        isPaused = false;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...