一很简单的程序,代码如下:LPCWSTR lpcStrName = TEXT(".\\audio.wav");
bool flag = PlaySound(lpcStrName,NULL,SND_FILENAME | SND_SYNC);
编译通过后,生成的exe同一目录下有一audio.wav文件,运行exe,程序不会播放audio.wav,而只会响一声系统出错声修改代码如下,只是简单的将音频路径换成绝对路径,就可以正常发声:LPCWSTR lpcStrName = TEXT("D:\\audio.wav");
bool flag = PlaySound(lpcStrName,NULL,SND_FILENAME | SND_SYNC);
我觉得应该是路径的问题,不过audio.wav和exe在同一文件下,应该是没问题的啊
或者是TEXT宏转换的问,但第二段代码可正常执行,出错在这的可能性也不大,请高手指教另外:我用playsound播放某一路径下的音频,播放后,我会对该音频修改,修改后的音频与原文件名路径名称都一样,然后第二次调用时为什么不能发音,只是响一声系统出错声(而第一次是可以正常播放的),问题很诡异,太困惑了,求解!!!!!!

解决方案 »

  1.   

    TCHAR szFilePath[MAX_PATH + 1]; 
    GetModuleFileName(NULL, szFilePath, MAX_PATH); 
    获得当前程序的运行路径。
      

  2.   

    贴个完整的代码吧,问题还是没能解决#include "stdafx.h"
    #include <conio.h>
    #include <iostream>
    #include<windows.h>
    #include <mmsystem.h>#pragma comment(lib, "WINMM.LIB")
    #define  MAX_PATH  1024using namespace std;int _tmain(int argc, _TCHAR* argv[])
    {
    while(1)
    {
    TCHAR szFilePath[MAX_PATH + 1];  
    //GetModuleFileName(NULL, szFilePath, MAX_PATH);  
    GetCurrentDirectory(MAX_PATH, szFilePath); wcscat(szFilePath, _T("\\tts_audio.wav"));//将文件名加到当前路径下
    LPCWSTR lpcStrName = szFilePath ;//此时的完整文件名C:\Users\Administrator\Desktop\test\test\tts_audio.wav
    bool flag = PlaySound(lpcStrName,NULL,SND_FILENAME | SND_SYNC);//返回的标志为true _getch();
    } return 0;
    }运行结果请看图:可以看到运行时传入的音频路径和实际上音频所在的路径是一致的,但是程序还是会响一系统出错声,不会播放该音频
      

  3.   

    自己解决了,不是函数的问题,是生成的wav文件的问题,头部信息写入有错误,不过用windows media player可以正常播放的,可能windows media player自带了纠错功能,而playsound函数必须要保证音频头部信息的完全正事,结帖,原来是这么个蛋疼的错误