㈠ 用vc做的音樂播放器
插入播放器的話,一般很簡單的就用播放器的控制項~!
或者說如樓上的用 MCI( Media Control Interface,媒體控製版介面) 開發代碼也是別人寫好的權!
如果你真的想自己寫一個播放器的話,那必須知道數據流操作,解碼,音頻控制的,其實像酷狗這些播放器都是用DirectX SDK開發出來的!
如果自己不想用別人的任何代碼的話,那你必須自己寫驅動,控制音效卡,連接系統內核,那是有些復雜的,所以現在建議你用別人的控制項 或者 MCI 哈!
㈡ 用VC++編寫一個音樂播放器軟體,,謝謝各位大神們了。。。
我這剛好有個現成的用VC++編寫的一個音樂播放器,只有31KB。
只要你安裝了相應回的解碼器,它就能為你播放答.swf、mp3、wmv、wma、asf、avi、mpeg、mpg等等等格式!另外它還具有全局熱鍵功能,可以讓您在游戲中,或工作中,輕松地控制音樂或影視的播放!
㈢ 怎麼在VC程序中插入音樂播放器(急)
插入播放器的話,一般很簡單的就用播放器的控制項~!
或者說如樓上的用 MCI( Media Control Interface,媒體控制介面內) 開發代容碼也是別人寫好的!
如果你真的想自己寫一個播放器的話,那必須知道數據流操作,解碼,音頻控制的,其實像酷狗這些播放器都是用DirectX SDK開發出來的!
如果自己不想用別人的任何代碼的話,那你必須自己寫驅動,控制音效卡,連接系統內核,那是有些復雜的,所以現在建議你用別人的控制項 或者 MCI 哈!
㈣ 怎麼用VC++實現MFC音樂播放器快進快退 下面是部分代碼
CString step1;long lPosition;
lPosition=100;
step1.Format("seek movie to %ld",lPosition);
mciSendString(step1.GetBuffer(step1.GetLength()),buf,sizeof(buf),0);
㈤ VC怎樣編寫MP3播放器
先去查找一下MP3文件的文件頭信息,以便的播放是讀取如比特流的信息
鑒於MP3編碼版技術眾多,不用權控制項說實話挺難的.建議在文件頭信息中讀出編碼,然後再將數據文件解碼(使用逐一讀取並即時轉換)成音頻數據.調用SOUND
(這樣編程出來的播放器很菜,動不動就出現無法解碼的問題,自帶的控制項中有很好的解碼器支持)
㈥ 用vc++開發一個音樂播放器
網上有一個VC播放器源代碼的,非常全的,自己找找吧,我記不清在那裡下載過的
㈦ 怎樣用VC++編制音樂播放器
簡單的說:採用函數
BOOL PlaySound(
LPCSTR pszSound,
HMODULE hmod,
DWORD fdwSound
);就能播放音樂;
如果你想研究深層次的,就先學習《WINDOWS程序設計回》中「聲音和答音樂」那一章節的內容吧。
㈧ vc編寫代碼實現製作一個音頻文件播放器(要求有簡單界面)。。。要具體過程,拜託啦。。。
用mciSendString 可以實現
㈨ 我想用C語言在vc++6.0的環境下做一個音樂播放器,如何實現幾首音樂想播放哪個就播放那個
網路搜關鍵字
MFC 播放器
這個是c++的語法,兼容c,
如果純c語言的播放器,拋開界面,那就是得用一大堆的api函數了、
㈩ 怎樣在VC++中實現播放MP3背景音樂
兩個類:CSound、CMusic
共有兩個頭文件和兩個cpp文件:
// Sound.h: interface for the CSound class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SOUND_H__43D8A7ED_654E_4677_AE58_8D50A0B7BAA0__INCLUDED_)
#define AFX_SOUND_H__43D8A7ED_654E_4677_AE58_8D50A0B7BAA0__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "mmsystem.h"
#pragma comment (lib,"winmm.lib")
class CSound
{
long m_device;
MIXERCONTROL m_volCtrl;
private:
bool CSound::GetDevice(int dev,HMIXER &hmixer);
public:
CSound();
virtual ~CSound();
//operate...
bool GetVolumeControl(HMIXER hmixer,long componentType,long ctrlType,MIXERCONTROL* mxc);
unsigned GetVolumeValue(HMIXER hmixer,MIXERCONTROL *mxc);
bool SetVolumeValue(HMIXER hmixer,MIXERCONTROL *mxc,long volume);
long GetMuteValue(HMIXER hmixer,MIXERCONTROL* mxc);
bool SetMuteValue(HMIXER hmixer,MIXERCONTROL *mxc,bool mute);
unsigned GetVolume(UINT dev);
bool SetVolume(long dev,long vol);
bool GetMute(long dev);
bool SetMute(long dev,bool sound=TRUE);
};
#endif // !defined(AFX_SOUND_H__43D8A7ED_654E_4677_AE58_8D50A0B7BAA0__INCLUDED_)
// Sound.cpp: implementation of the CSound class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Sound.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSound::CSound()
{
m_device=0;
}
CSound::~CSound()
{
}
bool CSound::GetDevice(int dev,HMIXER &hmixer)
{
switch(dev)
{
case 1: //WAVE
m_device=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT;
break;
case 2: //MIDI
m_device=MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER;
break;
case 3: //LINE IN / cd音量
case 4:
m_device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC;
break;
case 5: //麥克風音量
m_device=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;
break;
case 6: //PC 揚聲器音量
m_device=MIXERLINE_COMPONENTTYPE_SRC_LINE;
break;
default: //主音量
m_device=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
}
if(mixerOpen(&hmixer,0,0,0,0))
return FALSE;
return TRUE;
}
//設定音量
bool CSound::GetVolumeControl(HMIXER hmixer,long componentType,long ctrlType,MIXERCONTROL* mxc)
{
MIXERLINECONTROLS mxlc;
MIXERLINE mxl;
mxl.cbStruct = sizeof(mxl);
mxl.dwComponentType = componentType;
if(!mixerGetLineInfo((HMIXEROBJ)hmixer,&mxl,MIXER_GETLINEINFOF_COMPONENTTYPE))
{
mxlc.cbStruct = sizeof(mxlc);
mxlc.dwLineID = mxl.dwLineID;
mxlc.dwControlType = ctrlType;
mxlc.cControls = 1;
mxlc.cbmxctrl = sizeof(MIXERCONTROL);
mxlc.pamxctrl = mxc;
if(mixerGetLineControls((HMIXEROBJ)hmixer,&mxlc,MIXER_GETLINECONTROLSF_ONEBYTYPE))
return FALSE;
else
return TRUE;
}
return FALSE;
}
long CSound::GetMuteValue(HMIXER hmixer,MIXERCONTROL* mxc)
{
MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_BOOLEAN mxcdMute;
mxcd.hwndOwner = 0;
mxcd.cbStruct = sizeof(mxcd);
mxcd.dwControlID = mxc->dwControlID;
mxcd.cbDetails = sizeof(mxcdMute);
mxcd.paDetails = &mxcdMute;
mxcd.cChannels = 1;
mxcd.cMultipleItems = 0;
if(mixerGetControlDetails((HMIXEROBJ)hmixer,&mxcd,
MIXER_OBJECTF_HMIXER|MIXER_GETCONTROLDETAILSF_VALUE))
return -1;
return mxcdMute.fValue;
}
bool CSound::SetMuteValue(HMIXER hmixer,MIXERCONTROL* mxc,bool mute)
{
MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_BOOLEAN mxcdMute;
mxcdMute.fValue=mute;
mxcd.hwndOwner = 0;
mxcd.dwControlID = mxc->dwControlID;
mxcd.cbStruct = sizeof(mxcd);
mxcd.cbDetails = sizeof(mxcdMute);
mxcd.paDetails = &mxcdMute;
mxcd.cChannels = 1;
mxcd.cMultipleItems = 0;
if(mixerSetControlDetails((HMIXEROBJ)hmixer,&mxcd,
MIXER_OBJECTF_HMIXER|MIXER_SETCONTROLDETAILSF_VALUE))
return FALSE;
return TRUE;
}
unsigned CSound::GetVolumeValue(HMIXER hmixer,MIXERCONTROL *mxc)
{
MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_UNSIGNED vol; vol.dwValue=0;
mxcd.hwndOwner = 0;
mxcd.cbStruct = sizeof(mxcd);
mxcd.dwControlID = mxc->dwControlID;
mxcd.cbDetails = sizeof(vol);
mxcd.paDetails = &vol;
mxcd.cChannels = 1;
if(mixerGetControlDetails((HMIXEROBJ)hmixer,&mxcd,MIXER_OBJECTF_HMIXER|MIXER_GETCONTROLDETAILSF_VALUE))
return -1;
return vol.dwValue;
}
bool CSound::SetVolumeValue(HMIXER hmixer,MIXERCONTROL *mxc,long volume)
{
MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_UNSIGNED vol;
vol.dwValue = volume;
mxcd.hwndOwner = 0;
mxcd.dwControlID = mxc->dwControlID;
mxcd.cbStruct = sizeof(mxcd);
mxcd.cbDetails = sizeof(vol);
mxcd.paDetails = &vol;
mxcd.cChannels = 1;
if(mixerSetControlDetails((HMIXEROBJ)hmixer,&mxcd,
MIXER_OBJECTF_HMIXER|MIXER_SETCONTROLDETAILSF_VALUE))
return FALSE;
return TRUE;
}
//得到設備的音量
unsigned CSound::GetVolume(UINT dev)
{
unsigned rt=0;
HMIXER hmixer;
if(!GetDevice(dev,hmixer))
return 0;
if(!GetVolumeControl(hmixer,m_device,MIXERCONTROL_CONTROLTYPE_VOLUME,&m_volCtrl))
return 0;
rt=GetVolumeValue(hmixer,&m_volCtrl)*100/m_volCtrl.Bounds.lMaximum;
mixerClose(hmixer);
return rt;
}
//設置設備的音量
bool CSound::SetVolume(long dev,long vol)
{
bool rc=FALSE;
HMIXER hmixer;
if(!GetDevice(dev,hmixer))
return FALSE;
if(GetVolumeControl(hmixer,m_device,MIXERCONTROL_CONTROLTYPE_VOLUME,&m_volCtrl))
{
vol=vol*m_volCtrl.Bounds.lMaximum/100;
if(SetVolumeValue(hmixer,&m_volCtrl,vol))
rc=TRUE;
}
mixerClose(hmixer);
return rc;
}
//設置設備靜音
bool CSound::SetMute(long dev,bool sound)
{
bool rc=FALSE;
HMIXER hmixer;
if(!GetDevice(dev,hmixer))
return FALSE;
if(GetVolumeControl(hmixer,m_device,MIXERCONTROL_CONTROLTYPE_MUTE,&m_volCtrl))
if(SetMuteValue(hmixer,&m_volCtrl,sound))
rc=TRUE;
mixerClose(hmixer);
return rc;
}
//檢查設備是否靜音(靜音返回TRUE)
bool CSound::GetMute(long dev)
{
long rc=0;
HMIXER hmixer;
if(!GetDevice(dev,hmixer))
return false;
if(GetVolumeControl(hmixer,m_device,MIXERCONTROL_CONTROLTYPE_MUTE,&m_volCtrl))
rc=GetMuteValue(hmixer,&m_volCtrl);
mixerClose(hmixer);
if(rc)
return true;
return false;
}
//////////Music.h頭文件////////////
/*音樂播放管理類*/
#ifndef MUSIC_H_WFPB
#define MUSIC_H_WFPB
#include "Sound.h"
class CMusic
{
//public:
// static CString s_strSong;
private:
UINT m_devID; //設備描述
MCI_SEEK_PARMS m_mciSeekParms; //標記播放位置
CSound m_sound; //聲音類,用來控制聲音
BOOL m_bOpen;
protected:
//輔助函數
static CString GetMusicExt(CString file); //獲取歌曲後綴名
static bool IsEqual(CString fileExt,CString devExt); //判斷後綴格式相同(不區分大小寫).
public:
// static CString s_strSong; //歌曲路徑檢查
// static void SetSongFile(); //設置歌曲路徑
static bool IsMusic(CString file);
CMusic();
~CMusic();
public:
DWORD GetCurPos();
HRESULT Open(CString song);//打開歌曲文件
void Close(); //關閉歌曲文件
void Play(); //播放歌曲
void CyclePlay(HWND hWnd);
void Repeat(); //重復播放一次
void Stop(); //停止播放
void Seek(DWORD pos);
bool IsEof(); //檢查歌曲是否結束
bool IsOpen();
DWORD GetLength();
void AddVoice(UINT n); //增加聲音
void SubVoice(UINT n); //減少聲音
void SetVoice(UINT n); //設置聲音
UINT GetVoice(); //獲取聲音大小
void SetSilent(bool silent=true);//靜音開關
bool IsSilent(); //是否靜音
};
//CString CMusic::s_strSong="";
#endif //MUSIC_H_WFPB
///////Music.cpp源文件//////////////////
#include "StdAfx.h"
#include "music.h"
//輔助函數
CString CMusic::GetMusicExt(CString file) //獲取歌曲後綴名
{
return file.Right(file.GetLength()-
file.ReverseFind('.')-1);
}
bool CMusic::IsEqual(CString fileExt,CString devExt) //判斷後綴格式相同(不區分大小寫).
{
int devlen=fileExt.GetLength();
if(devlen!=devExt.GetLength())
return false;
CString str1=fileExt;
CString str2=devExt;
str1.MakeLower();
str2.MakeLower();
if(str1!=str2)
return false;
return true;
}
//構造函數
CMusic::CMusic()
{
m_devID=0;
memset(&m_mciSeekParms,0,sizeof(MCI_SEEK_PARMS));
m_bOpen=false;
}
CMusic::~CMusic()
{
Close();
}
//操作函數
HRESULT CMusic::Open(CString song) //打開歌曲文件
{
if(song==_T(""))
{
m_bOpen=false;
return 1; //空文件
}
Close();
MCI_OPEN_PARMS openParms;
memset(&openParms,0,sizeof(MCI_OPEN_PARMS));
openParms.lpstrElementName=song;
CString postFix=GetMusicExt(song);
if( IsEqual(postFix,_T("mp3"))||IsEqual(postFix,_T("aif"))||IsEqual(postFix,_T("asf"))||
IsEqual(postFix,_T("asx"))||IsEqual(postFix,_T("wma"))||IsEqual(postFix,_T("mpeg"))||
IsEqual(postFix,_T("mpg"))||IsEqual(postFix,_T("snd"))||IsEqual(postFix,_T("wmv")))
openParms.lpstrDeviceType=L"mpegvideo";
else if(IsEqual(postFix,+_T("wav")))
openParms.lpstrDeviceType=L"waveaudio";
else if(IsEqual(postFix,_T("mid"))||IsEqual(postFix,_T("rmi")))
openParms.lpstrDeviceType=L"sequencer";
else if(IsEqual(postFix,_T("cad")))
openParms.lpstrDeviceType=L"CDAudio";
else
{
m_bOpen=false;
return FALSE;
}
if(mciSendCommand(0,MCI_OPEN,MCI_NOTIFY|MCI_OPEN_ELEMENT|MCI_OPEN_TYPE,(DWORD)(LPVOID)&openParms))
{
m_bOpen=false;
return 2; //MCI_OPEN失敗
}
m_devID=openParms.wDeviceID;
m_bOpen=true;
return 0; //成功
}
void CMusic::Close() //關閉歌曲文件
{
if(m_devID!=0) mciSendCommand(m_devID,MCI_CLOSE,NULL,NULL);
memset(&m_mciSeekParms,0,sizeof(m_mciSeekParms));
m_devID=0;
m_bOpen=false;
}
void CMusic::Play() //播放
{
//mciSendCommand(m_devID,MCI_SEEK,MCI_TO,(DWORD)(LPVOID)&m_mciSeekParms);
MCI_PLAY_PARMS playParms;
mciSendCommand(m_devID,MCI_PLAY,NULL,(DWORD)(LPVOID)&playParms);
}
void CMusic::CyclePlay(HWND hWnd)
{
//mciSendCommand(m_devID,MCI_SEEK,MCI_TO,(DWORD)(LPVOID)&m_mciSeekParms);
MCI_PLAY_PARMS mciPlay;
mciPlay.dwCallback = (DWORD)hWnd;
mciSendCommand(m_devID,MCI_PLAY,MCI_NOTIFY,(DWORD)&mciPlay);
}
void CMusic::Repeat() //重復播放一次
{
MCI_PLAY_PARMS playParms;
mciSendCommand(m_devID,MCI_SEEK,MCI_SEEK_TO_START,NULL);
mciSendCommand(m_devID,MCI_PLAY,MCI_NOTIFY ,(DWORD)(LPVOID)&playParms);
}
void CMusic::Stop() //停止播放
{
MCI_STATUS_PARMS statusParms;
statusParms.dwItem=MCI_STATUS_POSITION;
mciSendCommand(m_devID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,(DWORD)(LPVOID)&statusParms);
m_mciSeekParms.dwTo=statusParms.dwReturn;
mciSendCommand(m_devID,MCI_STOP,NULL,NULL);
}
void CMusic::Seek(DWORD pos)
{
m_mciSeekParms.dwTo=pos;
mciSendCommand(m_devID,MCI_SEEK,MCI_TO,(DWORD)(LPVOID)&m_mciSeekParms);
}
DWORD CMusic::GetLength()
{
MCI_STATUS_PARMS statusParms;
statusParms.dwItem=MCI_STATUS_LENGTH;
mciSendCommand(m_devID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)(LPVOID)&statusParms);
return statusParms.dwReturn;
}
DWORD CMusic::GetCurPos()
{
MCI_STATUS_PARMS statusParms;
statusParms.dwItem=MCI_STATUS_POSITION;
mciSendCommand(m_devID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)(LPVOID)&statusParms);
return statusParms.dwReturn;
}
bool CMusic::IsEof()
{
return GetCurPos()>=GetLength()?true:false;
}
bool CMusic::IsOpen()
{
return m_bOpen;
}
void CMusic::SetVoice(UINT n)
{
m_sound.SetVolume(1,n);
}
void CMusic::AddVoice(UINT n) //增加聲音
{
m_sound.SetVolume(1,m_sound.GetVolume(1)+n);
}
void CMusic::SubVoice(UINT n) //減少聲音
{
m_sound.SetVolume(1,m_sound.GetVolume(1)-n);
}
UINT CMusic::GetVoice() //獲取聲音大小
{
return m_sound.GetVolume(1);
}
void CMusic::SetSilent(bool silent)
{
m_sound.SetMute(1,silent);
}
bool CMusic::IsSilent()
{
return m_sound.GetMute(1);
}
bool CMusic::IsMusic(CString file)
{
CString ext=GetMusicExt(file);
if(IsEqual(ext,_T("mp3"))||IsEqual(ext,_T("aif"))||IsEqual(ext,_T("asf"))||
IsEqual(ext,_T("asx"))||IsEqual(ext,_T("wma"))||IsEqual(ext,_T("mpeg"))||
IsEqual(ext,_T("mpg"))||IsEqual(ext,_T("snd"))||IsEqual(ext,_T("wmv"))||
IsEqual(ext,_T("wav"))||IsEqual(ext,_T("mid"))||IsEqual(ext,_T("cad")))
return true;
return false;
}
使用時聲明一個CMusic類對象,然後用他的成員函數就可以播放支持的音樂文件了