高分相送:我MM叫我做一个程序,一运行就可以听到她的歌。请问怎么实现啊,时间紧啊

Alan S1 2003-12-26 12:04:15
高分相送:我MM叫我做一个程序,一运行就可以听到她的歌。请问怎么实现啊,时间紧啊

附:
最好界面上有她的照片
...全文
47 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangbc 2003-12-31
  • 打赏
  • 举报
回复
<![CDATA[
先有你MM的录音吧?转成wave格式的,这会吧?

在VC中新建一个空的win32项目,然后添加一个资源,把wave文件加进去,取个ID:MY_WAVE

新建一个CPP文件叫WinMain.cpp,然后添加到源文件文件夹里,在里面写下面的代码:

#include <windows.h>

int WinMain( HINSTANCE hInstance, HINSTANCE, LPSTR, int )
{
return PlaySound( MAKEINTRESOURCE(MY_WAVE), hInstance, SND_RESOURCE|SND_NOWAIT );
}


编译运行就好了
]]>
Ah 2003-12-26
  • 打赏
  • 举报
回复
你MM有没有说,不许用C++库或Win32API?
axiaowin 2003-12-26
  • 打赏
  • 举报
回复
Winamp就够了
monstersky 2003-12-26
  • 打赏
  • 举报
回复
用C++ bulider之类的RAD工具,快
keiven 2003-12-26
  • 打赏
  • 举报
回复
up
fireseed 2003-12-26
  • 打赏
  • 举报
回复
先有你MM的录音吧?转成wave格式的,这会吧?

在VC中新建一个空的win32项目,然后添加一个资源,把wave文件加进去,取个ID:MY_WAVE

新建一个CPP文件叫WinMain.cpp,然后添加到源文件文件夹里,在里面写下面的代码:

#include <windows.h>

int WinMain( HINSTANCE hInstance, HINSTANCE, LPSTR, int )
{
return PlaySound( MAKEINTRESOURCE(MY_WAVE), hInstance, SND_RESOURCE|SND_NOWAIT );
}


编译运行就好了
arvid_gs 2003-12-26
  • 打赏
  • 举报
回复
你妹妹还说让你用sdk不要用mfc!
你妹妹挺厉害的嘛!
Alan S1 2003-12-26
  • 打赏
  • 举报
回复
接上:最好不用MFC
xiaohedou 2003-12-26
  • 打赏
  • 举报
回复
楼上的讲的很清楚了,你还需要我说什么?
smalltalk 2003-12-26
  • 打赏
  • 举报
回复
<接上>
void Player::playmp3(long entries, bool randomplay, bool copy)
{
long i;
long stop = 0;
long random;
int ch;
CString title;
//this path is exists everywhere and prevents me to search environment variables
CString tmpplayfile = "c:\\mp3player.mp3";
CString mci_command;
bool OK;
LPTSTR lpszReturnString =" ";
DWORD fdwError = 0;
UINT cchErrorText=50;

i = 0;
do
{
if (randomplay)
{
do
{
//play playlist in random order, but play all titles once
random = rand()%entries;
}
while (randomindex[random] != 0);
randomindex[random] = 1;
title = playlist[random];
}
else
{
//play playlist in normal order
title = playlist[i];
}
i = i + 1;
OK = false;
if (copy)
{
OK = Globals::copyFile(title, tmpplayfile);
}
else
{
//when the file do not needed to copy, mciSendString do not like the long names with spaces, convert it:
char buf[256];
if (GetShortPathName( title, buf, 256 ) > 0)
{
tmpplayfile = buf;
OK = true;
}
}
if (OK)
{
ch = ' ';

cout << "Playing: " << title << " " << i << " of " << entries << endl;
mci_command = "open ";
mci_command += tmpplayfile;
mci_command += " type MPEGVideo Alias Mp3 wait";
//mciSendString("open c:\\TEMP\\player\\Debug\\a.mp3 type MPEGVideo Alias Mp3", "", 0, 0);
mciSendString(mci_command, "", 0, 0);
mciSendString("play Mp3", "", 0, 0);
fdwError = mciSendString("status Mp3 mode",lpszReturnString,50, 0);
while ((strcmp(lpszReturnString,"playing") == 0) && (stop == 0))
{
Sleep(2000);
fdwError = mciSendString("status Mp3 mode",lpszReturnString,50, 0);
//mciGetErrorString(fdwError, lpszReturnString, cchErrorText );
if( _kbhit() )
{
ch = _getch();
ch = toupper( ch );
if (ch == 'Q')
{
cout << "Note: Normal termination by user. Playlist not completely finnished" << endl;
stop = 1;
}
if (ch == 'S')
{
cout << "Note: Song skipped by user" << endl;
stop = 1;
}
if (ch == 'P')
{
mciSendString("pause Mp3", "", 0, 0);
cout << "Note: Pause, press any key to continue" << endl;
ch = _getch();
mciSendString("play Mp3", "", 0, 0);
}
}
//cout << "TEST>>" << lpszReturnString<< "<<TEST" << endl;
}
mciSendString("close Mp3 wait", "", 0, 0);
stop = 0;
if (copy)
Globals::removeFile(tmpplayfile);
else
Sleep(2000);
}
//check if q buttom has been pressed on keyboard
}
while (i != entries && ch != 'Q' );
}
smalltalk 2003-12-26
  • 打赏
  • 举报
回复
下面这段程序可以在Windows的控制台窗口中播放mp3,支持列表。编译一下就可以运行。

class Globals
{

public:
//## Constructors
Globals(){};

//## Destructor
virtual ~Globals(){};
//## Other Operations (specified)
// This method copies a file.
static bool copyFile (const CString& sourceFilename, const CString& destinationFilename);
//## This method removes a file.
static void removeFile (const CString& filename);

};

class Player
{
public:
//## Constructors
Player(){ srand( (unsigned)time( NULL ) );};

//## Destructor
~Player(){};

//## Other Operations (specified)
#define MAX_FILES 10000
void printinfo ();
void printerror (char * programname);
long fillplaylist (CString& file);
void playmp3(long entries, bool randomplay, bool copy);
protected:

private:
CString playlist[MAX_FILES];
int randomindex[MAX_FILES];

};

#include <stdlib.h>
#include <conio.h>
#include <io.h>
#include <stdio.h>
#include <time.h>
#include <iostream.h>
#include <afx.h>
#include <fstream.h>
#include <mmsystem.h>
#include <winbase.h>
void main (int ArgC, char *ArgV[])
{
Player play;
long entries;
bool randomplay = false;
bool copy = false;
int LV_Option;

play.printinfo ();
if (ArgC < 2)
play.printerror(ArgV[0]);
for(int i = 2; i<ArgC; i++)
{
if(strlen(ArgV[i]) == 1)
{
LV_Option = ArgV[i][0];
switch (LV_Option)
{
case 'r': randomplay = true;
cout << "Note: Playing titles in random order." << endl;
break;
case 'c': copy = true;
cout << "Note: Copy files before playing." << endl;
break;
}
}
}
entries=play.fillplaylist((CString) ArgV[1]);
if (entries > 0)
play.playmp3(entries,randomplay,copy);
cout << "End reached, program terminated normally."<< endl;
};

bool Globals::copyFile (const CString& sourceFilename, const CString& destinationFilename)
{
const int BUF_SIZE = 10480;

ifstream sourceFile;
ofstream destinationFile;
unsigned char *buffer = NULL;

errno = 0;
//cout << "copy file: " << sourceFilename << " to " << destinationFilename<< endl;
sourceFile.open((const char *)sourceFilename,ios::nocreate);
if (sourceFile.fail())
{
cout << "Error opening source file: " << sourceFilename << " Reason: " << strerror(errno) << endl;
return false;
}
sourceFile.setmode(filebuf::binary);

destinationFile.open((const char *)destinationFilename);
if (destinationFile.fail())
{
cout << "Error opening destination file: " << destinationFilename << " Reason: " << strerror(errno) << endl;
return false;
}
destinationFile.setmode(filebuf::binary );
buffer = new unsigned char[BUF_SIZE];
while (!sourceFile.eof())
{
sourceFile.read(buffer, BUF_SIZE);

if ((sourceFile.fail()) && (!sourceFile.eof()))
{
delete buffer;
cout << "Error reading source file: " << sourceFilename << " Reason: " << strerror(errno) << endl;
return false;
}
if (sourceFile.eof())
destinationFile.write(buffer, sourceFile.gcount());
else
destinationFile.write(buffer, BUF_SIZE);

if (destinationFile.fail())
{
delete buffer;
cout << "Error writing to destination file: " << destinationFilename << " Reason: " << strerror(errno) << endl;
return false;
}
} // End-while (!sourceFile.eof())

sourceFile.close();
destinationFile.close();

delete buffer;
return true;
}

void Globals::removeFile (const CString& filename)
{
//cout << "remove file: " << filename << endl;
if (filename.GetLength() > 0)
{
errno = 0;
if (remove((const char *)filename) != 0)
{
cout << "Error deleting file: " << filename << " Reason: " << strerror(errno) << endl;
exit (-1);
}
}
}


void Player::printinfo ()
{
cout << "==========================================================================" << endl;
cout << "=== Simple mp3 player for WIN-DOS ===" << endl;
cout << "=== Version 1.2 ===" << endl;
cout << "=== R. Luff - (c)DG2HL (rluff@gmx.de) (http://visumod.freeshell.org) ===" << endl;
cout << "==========================================================================" << endl <<endl;
}

void Player::printerror (char * programname)
{
cout << "Usage: " << programname << " listfile.lst/m3u, *.mp3 or mp3file.mp3 [r] [c]" << endl << endl;
cout << "Options:" << endl;
cout << "r: random play." << endl;
cout << "c: copy file temporary to hard disk before playing." << endl;
cout << "e.g. " << programname << " c:\\music\\playlist.m3u r" << endl;
cout << "plays titles from playlist file playlist.m3u in random order, do not copy file." << endl << endl;
cout << "During execution press:" << endl;
cout << "q to terminate the program." << endl;
cout << "s to skip a song, the program will continue with the next song in playlist." << endl;
cout << "p for pause mode, press any key to continue playing." << endl;
exit (-1);
}

long Player::fillplaylist (CString& file)
{
long lv_entries = 0;
long i = 0;
if ((file.Find( ".lst" ) > 0 ) || (file.Find( ".m3u" ) > 0 ))
{
//load a playlist
char buffer[200];
ifstream ifile (file);
if (!ifile.fail())
{
cout << "Loading list file: " << file << " .....";
while ((!ifile.eof()) && (i < MAX_FILES))
{
ifile.getline(buffer,sizeof(buffer));
if (buffer[0] != '#')
{
playlist[i] = buffer;
i++;
}
}
cout << " done!" << endl;
lv_entries = i-1;
}
else
{
cout << "Error loading list-file" << endl;
exit (-1);
}
}
if (file.Find(".mp3") > 0)
{
cout << "Getting playlist from directory: " << file << " .....";
//load the directory
struct _finddata_t c_file;
long hFile;
int lastslash;
CString path ="";

//a path given ?? separate it
lastslash = file.ReverseFind('\\');
if (lastslash > 0)
{
path = file.Left(lastslash+1);
}
// Find first file in current directory
if( (hFile = _findfirst( file, &c_file )) == -1L )
{
cout << endl << "No file: " << file << " found !" << endl;
exit (-1);
}
else
{
playlist[i] = path + c_file.name;
/* Find the rest of the files */
while( _findnext( hFile, &c_file ) == 0 )
{
i++;
playlist[i] = path + c_file.name;
}
_findclose( hFile );
lv_entries = i+1;
}
cout << " done!" << endl;
}

for ( i = 0; i < lv_entries; i++ )
{
randomindex[i] = 0;
}
return lv_entries;
}

zhucde 2003-12-26
  • 打赏
  • 举报
回复
把我给牵扯上了,
我也不明白"请大家注意斑竹是什么态度,大家看的起你才让你帮忙"是什么意思,

不过此帖肯定没有违反基础类的规则(不过看起来像在水园)

对于楼主的问题其实很多方法可以解决(个人认为用MFC绝对快,相信你MM也看不出来用什么编写的)
dzqsuper 2003-12-26
  • 打赏
  • 举报
回复
请大家注意斑竹是什么态度,大家看的起你才让你帮忙

这是什么意思?
woaini5994 2003-12-26
  • 打赏
  • 举报
回复
提醒一下
小的WAVE文件,应该用PLAYSOUND可以
但是你妹妹要是唱的时间比较长的话就,最好别添加在资源了
直接打开文件****。wav
good luck!!!!

请大家注意斑竹是什么态度,大家看的起你才让你帮忙,
cadinfo 2003-12-26
  • 打赏
  • 举报
回复
你也够那个的,mm就那么重要?太幼稚哟!
fairyprince 2003-12-26
  • 打赏
  • 举报
回复
做一个网页,或flash
Alan S1 2003-12-26
  • 打赏
  • 举报
回复
大家来说说啊
glacierrr 2003-12-26
  • 打赏
  • 举报
回复
播放声音用 mci SDK 比较方便
看图片可以自己在PeekMessage和TranslateMessage的时候处理WM_PAINT消息,用SDK函数LoadImage载入图片,然后画到自己的DC(SDK GetDC获得)里面。
其实MFC只是SDK的一个封装而已,而且为了方便理解,MFC的函数名和相应封装的SDK函数名都差不多。
可以在WinMain函数一开始就用mci来放歌,然后在WM_PAINT消息里画图。也可以另外开一个窗口,将图片设为背景,也是相应这个窗口的WM_PAINT消息。

其他的上面的高手已经讲得够多的了。
arvid_gs 2003-12-26
  • 打赏
  • 举报
回复
PlaySound("C:\\SOUNDS\\BELLS.WAV", NULL, SND_SYNC);
arvid_gs 2003-12-26
  • 打赏
  • 举报
回复
BOOL PlayResource(LPSTR lpName)
{
BOOL bRtn;
LPSTR lpRes;
HANDLE hResInfo, hRes;

// Find the WAVE resource.

hResInfo = FindResource(hInst, lpName, "WAVE");
if (hResInfo == NULL)
return FALSE;

// Load the WAVE resource.

hRes = LoadResource(hInst, hResInfo);
if (hRes == NULL)
return FALSE;

// Lock the WAVE resource and play it.

lpRes = LockResource(hRes);
if (lpRes != NULL) {
bRtn = sndPlaySound(lpRes, SND_MEMORY | SND_SYNC |
SND_NODEFAULT);
UnlockResource(hRes);
}
else
bRtn = 0;

// Free the WAVE resource and return success or failure.

FreeResource(hRes);
return bRtn;
}
加载更多回复(16)

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧