1

我正在使用 lame 库和 MCI 制作一个简单的音乐播放程序。将 MP3 文件解码成 wav 文件后,使用 MCIWndCreate 和 MCIWndPlay 播放音乐。所有功能都运行良好,但设置音量时出现问题。我找到并使用了一种名为 MCIWndSetVolume(hWnd, iVol) 的方法来设置音量。但我得到如下错误。如果你知道哪一部分是问题,请给我一点建议。非常感谢您阅读并回答我的问题。错误消息 -> 驱动程序无法识别指定的命令。

void CMP3PlayerDlg::Wav(CString strFileName)
{
    m_hWav = NULL;
    m_nowWav = strFileName;
    CString strWav;
    strWav.Format(WAV_FILE_PATH + strFileName);
    if(m_hWav == NULL)
    {
        m_hWav = MCIWndCreate(this->GetSafeHwnd(), AfxGetInstanceHandle(), WS_CHILD | WS_VISIBLE | MCIWNDF_NOMENU , strWav);
    }
    else
    {
        MCIWndHome(m_hWav);
    }
    MCIWndPlay(m_hWav);
    m_bPause = FALSE;
    m_btnPlay.EnableWindow(FALSE);
}

void CMP3PlayerDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
    if(IDC_SLIDER_VOLUM == pScrollBar->GetDlgCtrlID())
    {
        int nPos = m_SliderVol.GetPos();
        CString strPos;
        strPos.Format("%d", nPos);
        m_EditVol.SetWindowText(strPos);
    }
    CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}





void CMP3PlayerDlg::OnEnChangeEditVolum()
{
    // TODO:  여기에 컨트롤 알림 처리기 코드를 추가합니다.
    CString strPos;
    m_EditVol.GetWindowText(strPos);
    int nPos = _ttoi(strPos);
    m_SliderVol.SetPos(nPos);
    MCIWndSetVolume(m_hWav, nPos);
}

这是一种使用播放和滑块控制音量的方法。

4

1 回答 1

0
void CMP3PlayerDlg::OnEnChangeEditVolum()
{
    // TODO:  여기에 컨트롤 알림 처리기 코드를 추가합니다.
    CString strPos;
    CString strFile;
    m_EditVol.GetWindowText(strPos);
    int nPos = _ttoi(strPos);
    if(nPos > 100)
    {
        strPos = "100";
        nPos = 100;
        m_EditVol.SetWindowText("100");
    }
    m_SliderVol.SetPos(nPos);
    waveOutSetVolume((HWAVEOUT)m_hWav, (DWORD)(nPos));

}

您现在可以使用 waveOutSetVolume 方法控制音量。感谢您阅读并回答我的问题。

于 2021-03-23T07:49:58.303 回答