首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ 6.0 利用 ActiveMovie 實現多媒體自動連續播放

     編輯:VC 教學

前言

隨著多媒體技術的普及,如何在應用程式中流暢播放影音檔案成為開發者常見的需求。Microsoft 的 ActiveMovie 控制項(後更名為 Windows Media Player 控制項)內建 MPEG 音視訊解碼器,支援 VCD、AVI、WAV、MID 等多種格式,且提供直觀的右鍵選單控制播放、暫停、停止等功能,極適合快速開發播放器應用。本文將示範在 Visual C++ 6.0 環境下,如何利用 ActiveMovie Control 2.0 實現多媒體檔案的自動連續播放。

一、常見多媒體格式概覽

1. 波形音訊

波形音訊(.wav)以數位化方式儲存聲音波形,裝置獨立性佳,播放效果一致,但檔案龐大,適合短音效。

2. MIDI 音樂

MIDI(Musical Instrument Digital Interface)記錄樂器演奏指令而非實際聲音,檔案極小,需聲卡合成器播放,是電腦音樂製作標準。

3. CD 音訊

依紅皮書標準,透過 CD-ROM 讀取,以軌道區分曲目,時間單位為分、秒、幀(1/75 秒),存儲量大。

4. 數位視訊

利用視覺暫留原理,每秒 24 幀以上形成連續動畫。AVI 為微軟制定的 Windows 視訊標準,交錯儲存影音資料流,全螢幕播放需極高磁碟傳輸速度(約 28MB/秒)。

二、ActiveMovie Control Object 核心屬性與方法

控制項封裝了高層、裝置無關的命令介面,常用函數如下:

  • Run():開始播放
  • Pause():暫停播放
  • Stop():停止播放
  • GetFileName() / SetFileName():取得/設定媒體檔案路徑
  • GetCurrentPosition() / SetCurrentPosition():取得/設定播放位置(秒)
  • GetVolume() / SetVolume():取得/設定音量
  • SetAutoStart(BOOL):設定載入檔案後是否自動播放

三、建立播放器專案

  1. 使用 AppWizard 建立以對話方塊為基礎的專案 Player。
  2. 移除預設的「確定」、「取消」按鈕。
  3. 從「Project → Add To Project → Components And Controls → Registered ActiveX Controls」加入 ActiveMovie Control Object。
  4. 在對話方塊放置控制項,並新增三個按鈕(選擇曲目、循環播放、關閉)與一個列表方塊 m_list。
  5. 用 ClassWizard 為控制項建立變數 m_ActiveMovie,按鈕與列表方塊分別對應 m_ChoiceFile、m_Play、m_Close、m_list。

四、核心程式碼實作

1. 選擇媒體檔案並加入清單

void CPlayerDlg::OnChoiceFile()
{
    CFileDialog dlg(TRUE, _T("*.*"), NULL, OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT,
        _T("所有檔案 (*.*)|*.*||"));
    if (dlg.DoModal() == IDOK)
    {
        POSITION pos = dlg.GetStartPosition();
        while (pos)
        {
            CString path = dlg.GetNextPathName(pos);
            m_list.AddString(path);
        }
    }
}

2. 定時器驅動的循環播放邏輯

void CPlayerDlg::OnPlay()
{
    SetTimer(1, 500, NULL); // 每 0.5 秒檢查一次
}

void CPlayerDlg::OnTimer(UINT nIDEvent)
{
    if (nIDEvent == 1)
    {
        double pos = m_ActiveMovie.GetCurrentPosition();
        // 播放結束或尚未開始(位置為 0 且非播放中)
        if (pos == 0.0)
        {
            int count = m_list.GetCount();
            if (count == 0) return;

            CString file;
            m_list.GetText(0, file);           // 取得第一項
            m_list.DeleteString(0);             // 移除
            m_list.AddString(file);             // 移至尾端,形成循環

            m_ActiveMovie.SetAutoStart(TRUE);
            m_ActiveMovie.SetFileName(file);
            m_ActiveMovie.Run();
        }
    }
    CDialog::OnTimer(nIDEvent);
}

3. 關閉播放並釋放資源

void CPlayerDlg::OnClose()
{
    KillTimer(1);
    m_ActiveMovie.Stop();
    CDialog::OnCancel();
}

五、擴充功能建議

利用上述函數可輕鬆擴充:音量滑桿、播放進度條、靜音、全螢幕切換、播放速度調整等。若需支援更多格式,可改用 DirectShow 或 Media Foundation 架構。

六、結語

本文展示了以 ActiveMovie 控制項實現多媒體連續播放的完整流程,從專案建立、控制項整合到定時器輪詢播放狀態,代碼簡潔易懂。雖然 ActiveMovie 屬於較早期技術,但其封裝良好、上手快,仍適合教學與簡易播放器原型開發。現代專案建議採用 Windows Media Player 控制項或 Media Foundation 以獲得更佳相容效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved