我想做一共能播放互联网上的mp3的程序,最简单的方式就可以。程序自己用,只要能播放就行。不想用dx。请指导一下方向。

解决方案 »

  1.   

    用 Windows Media 方案,播放 wma 歌曲。具体的,你参考 Windows Media Format SDK。
      

  2.   

    来源于网络:
    我以前亲自做过
    如果找不到ActiveMovieControl Object
    请在cmd 下注册一下msdxm.ocx:
    regsvr32 msdxm.ocx具体步骤:
    1. 打开VC6.0,在Projects下选择MFC AppWizard(exe),并取名MediaPlayer,然后建立基于对话框(Dialog Based)的运用程序。2. 打开Resource View,选择其中的对话框,打开其中的主对话框,去掉对话框上的“确定”按钮,保留“取消”,将Caption改为“Exit”。然后再在上面加上九个按钮,ID和Caption分别为
    IDC_OPEN,Open;
    IDC_PLAY,Play;
    IDC_PAUSE,Pause;
    IDC_STOP,Stop;
    IDC_CLOSE,Close;
    IDC_LOWER,<<=;
    IDC_UPPER,=>>;
    IDC_FULLSCREEN,Full;
    IDC_REPEAT,Repeat;
    再加入两个静态文本控件,分别为IDC_STATIC,Volume;IDC_STATIC2,Status:Normal。3. 再打开Projects->Add to Project->Components and Controls->Registered ActiveX Controls对话框,选择其中的ActiveMovieControl Object, Insert,OK之后,你会发现你的控件面板上多了一项ActiveMovieControl Object,将它选中,直接放在你的对话框上就行了。按Ctrl+W打开ClassWizard为它添加变量CActiveMovie3 m_ActiveMovie。各控件的布局如图:  4. 接下来,就是为程序添加消息处理函数。打开 ClassWizard,为各个按钮加入消息处理函数。在MediaPlayerDlg.cpp文件里为各消息处理函数添加代码,各代码如下:void CMediaPlayerDlg::OnClose() 
    {
           m_ActiveMovie.CloseWindow();//关闭窗口
    }void CMediaPlayerDlg::OnOpen() 
    {
           char szFileFilter[]=
                  "Mp3 File(*.mp3)|*.mp3|"
                  "Wma File(*.wma)|*.wma|"
                  "Video File(*.dat)|*.dat|"
                  "Wave File(*.wav)|*.wav|"
                  "AVI File(*.avi)|*.avi|"
                  "Movie File(*.mov)|*.mov|"
                  "Media File(*.mmm)|*.mmm|"
                  "Mid File(*.mid;*,rmi)|*.mid;*.rmi|"
                  "MPEG File(*.mpeg)|*.mpeg|"
                  "All File(*.*)|*.*||";//文件类型过滤
           CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);
           if(dlg.DoModal()==IDOK){
                  CString PathName=dlg.GetPathName();
                  PathName.MakeUpper();
                  m_ActiveMovie.SetFileName(PathName);
           }
    }void CMediaPlayerDlg::OnPlay() 
    {
           m_ActiveMovie.Run();//播放文件
           SetTimer(0,20,NULL);//设置定时器
    }void CMediaPlayerDlg::OnStop() 
    {
           m_ActiveMovie.Stop();//停止播放文件
           KillTimer(0);//关掉定时器
    }void CMediaPlayerDlg::OnPause() 
    {
           m_ActiveMovie.Pause();
    }void CMediaPlayerDlg::OnUpper() 
    {
           long Volume=m_ActiveMovie.GetVolume();
           m_ActiveMovie.Pause();
           m_ActiveMovie.SetVolume(Volume+100);
           m_ActiveMovie.Run();
    }void CMediaPlayerDlg::OnLower() 
    {
           long Volume=m_ActiveMovie.GetVolume();
           m_ActiveMovie.Pause();
           m_ActiveMovie.SetVolume(Volume-100);
           m_ActiveMovie.Run();
    } void CMediaPlayerDlg::OnRepeat() 
    {
           if(!isRepeat){
                  isRepeat=TRUE;
                  SetDlgItemText(IDC_STATIC2,"Status:Repeat");
           }         
           else{
                  isRepeat=FALSE;
                  SetDlgItemText(IDC_STATIC2,"Status:Normal");
           }
    }void CMediaPlayerDlg::OnFulscreeen() 
    {
           m_ActiveMovie.Pause();
           m_ActiveMovie.SetFullScreenMode(true);
           m_ActiveMovie.SetMovieWindowSize(SW_SHOWMAXIMIZED);
           m_ActiveMovie.Run();
    }
    (注释:函数OnTimer()需通过ClassWizard(Ctrl+W)来添加,不能直接复制)       void CMediaPlayerDlg::OnTimer(UINT nIDEvent) 
          {
           double CurrentPos=m_ActiveMovie.GetCurrentPosition();
           if(CurrentPos==0&&isRepeat)//如果当前是文件的起始位置而且为重复播放状态
           m_ActiveMovie.Run();
           
           CDialog::OnTimer(nIDEvent);
          }
    5. 为使播放器具有Repeat功能,需在头文件MediaPlayerDlg.h 加入控制变量BOOL isRepeat;类型可为Private。同时修改OnInitDialog()函数: 
    BOOL CMediaPlayerDlg::OnInitDialog()
    {
           CDialog::OnInitDialog();
           
           isRepeat=FALSE;
           ……
    }
    (注:第6步可以不做,只是按钮仍是方形按钮,而做了第6步后则为圆形的)6. 这样此播放器就具有一般的媒体播放功能了,但为了有更好的用户界面,我将按钮变成了圆形的。为此,要在工程里加入文件RoundButton.h以及RoundButton.cpp用CRoundButton来代替CButton。先打开类向导,为上述按钮添加对应变量。      CRoundButton m_FullScreen;
          CRoundButton m_Repeat;
          CRoundButton m_Upper;
          CRoundButton m_Lower;
          CRoundButton m_Close;
          CRoundButton m_Exit;
          CRoundButton m_Stop;
          CRoundButton m_Play;
          CRoundButton m_Pause;
          CRoundButton m_Open;
    (注:以上的个变量本来是Cbutton类型的,你要手动将他们改为CRoundButton,并在此头文件里加上#include "RoundButton.h"。)7. 好,现在可以编译、连接并运行了,直接按Ctrl+F5,OK便可以看自己的杰作了,打开个mp3文件听听,不错吧!如下图:
      

  3.   

    通过http播放mp3的原理是什么? 是必须先解码成wav,再播放吗?------------------------------------
    浏览器调用ActiveX组件解码由ActiveX来完成 解码方式由ActiveX来实现
      

  4.   

    解码由ActiveX来完成 解码方式由ActiveX来实现
    ================是不是AtiveX还是要解码为唯一的WAV格式,发送给声卡驱动进行播放?是不是发送给声卡驱动的,还是必须是WAV格式的?
      

  5.   

    如果只是要能播放的话,最简单的方法就是插入一个MEDIA PLAYER的ACTIVE X控件啦,再做一个编辑框传一下URL就行了
      

  6.   

    我要的是原理.因为好像声卡只认识wav格式的数据,所以我的标题?
      

  7.   

    不是不显卡只认识bmp格式的数据,所以无论是图片,还是视频,都会转成bmp给显卡?
      

  8.   

    播放MP3都要调用专门的解码器的,比如FOOBAR,千千之类都要调用解码器,由解码器驱动声卡
      

  9.   

    解码器本身就调用底层API驱动声卡了
      

  10.   

    mp3是一种高效的有损压缩编码
    它必须通过decoder解码,最终给声卡的是基本的音频数据
    所以不同的编码器和解码器,声音还原效果是有很大差异的