lm68140318 发表于 2023-8-5 05:23:38

OutputDebugString

        bEnding = TRUE;
        waveInReset(hWaveIn);//停止给定波形音频输入设备上的输入
       
        //*******存储声音文件**********
        CFile m_file;
        CFileException fileException;
       
        CString m_csFileName = _T("D:\\audio.wav");

        m_file.Open(m_csFileName, CFile::modeCreate | CFile::modeReadWrite, &fileException);

        DWORD m_WaveHeaderSize = 38;//头部信息总字节数
       
        DWORD m_WaveFormatSize = 18;//WAVEFORMATEX结构大小
       
        m_file.SeekToBegin();

        m_file.Write("RIFF", 4);//写入标识符RIFF
       
        unsigned int Sec = (sizeof(pSaveBuffer) + m_WaveHeaderSize);
        //音频数据大小+头部信息的大小
        m_file.Write(&Sec, sizeof(Sec));
        m_file.Write("WAVE", 4);   //写入格式辨别吗


        //***********fmt子块****************
        m_file.Write("fmt ", 4);//写入fmt
        m_file.Write(&m_WaveFormatSize, sizeof(m_WaveFormatSize));//写入WAVEFORMATEX结构大小

        //写入WAVEFORMATEX结构的6个或7个成员值
        m_file.Write(&waveform.wFormatTag, sizeof(waveform.wFormatTag));
        m_file.Write(&waveform.nChannels, sizeof(waveform.nChannels));
        m_file.Write(&waveform.nSamplesPerSec, sizeof(waveform.nSamplesPerSec));
        m_file.Write(&waveform.nAvgBytesPerSec, sizeof(waveform.nAvgBytesPerSec));
        m_file.Write(&waveform.nBlockAlign, sizeof(waveform.nBlockAlign));
        m_file.Write(&waveform.wBitsPerSample, sizeof(waveform.wBitsPerSample));
        m_file.Write(&waveform.cbSize, sizeof(waveform.cbSize));



        m_file.Write("data", 4);
        m_file.Write(&dwDataLength, sizeof(dwDataLength));
        //dwDataLength=缓冲区大小

        m_file.Write(pSaveBuffer, dwDataLength);//写入音频数据

        m_file.Seek(dwDataLength, CFile::begin);
        m_file.Close();



        wchar_t* pwszUnicode = NULL;//因为事先不知道宽字节空间大小,所以指定为NULL
        int n = MultiByteToWideChar(CP_ACP, NULL, (LPCCH)pSaveBuffer, -1, NULL, 0);
        //这一步的目的是求宽字节的占用空间

        pwszUnicode = new wchar_t;
        ZeroMemory(pwszUnicode, n); //内存清零
        MultiByteToWideChar(CP_ACP, NULL, (LPCCH)pSaveBuffer, -1, pwszUnicode, n);
        //转换
        CString str;
        str.Format(_T("%s"), pwszUnicode);

        ::OutputDebugString(str);
       




我的问题:音频保存成功
可是 OutputDebugString(str);   没有输出 ???

isdkz 发表于 2023-8-5 05:23:48

OutputDebugString函数是Windows API中的一个函数,用于向调试器输出调试信息。它将指定的字符串输出到调试器的输出窗口中。在这种情况下,您将音频数据转换为宽字符,并尝试将它作为调试信息输出到调试器中。

然而,OutputDebugString函数只会在调试器附加到您的应用程序时才会输出调试信息。如果您没有启动调试器或没有附加到您的应用程序,那么调试信息将不会被输出。

如果您想要在没有调试器的情况下查看调试信息,您可以使用其他方法,如写入日志文件或使用MessageBox函数显示消息框。

另外,请确保您的代码中没有其他问题,例如文件操作或字符串转换的错误,以确保音频数据被正确保存和转换为宽字符。

Mike_python小 发表于 2023-8-5 05:23:53

问题解答:

在你提供的代码中,OutputDebugString 函数用于将字符串输出到调试器窗口。如果你在运行代码时没有看到输出,可能有以下几个原因:

1. 调试器未连接或未启动:OutputDebugString 函数会将字符串输出到调试器窗口,如果你没有打开调试器或者调试器未连接到你的应用程序,那么就看不到输出。请确保你正在使用调试器运行程序,并检查调试器是否连接到应用程序。

2. 调试器窗口滚动速度过快:调试器窗口可能会以较快的速度滚动而导致你无法及时看到输出。可以尝试在调试器窗口中按下滚动条的向上箭头来暂停滚动并查看输出内容。

3. 编译选项未包含调试信息:如果你使用的是 Release 模式编译,那么调试器可能无法显示调试信息。请确保在编译选项中启用了调试信息(例如包含符号表)以便调试器能够正确显示输出。

4. 输出被重定向到其他地方:在某些情况下,OutputDebugString 的输出可能被重定向到其他地方,而不是调试器窗口。例如,它可能会被重定向到日志文件或其他应用程序。你可以尝试检查其他地方是否存在输出。

如果以上方法都没有解决问题,你可以尝试使用其他调试技术来输出调试信息,例如在控制台输出或使用日志记录库。


如果回答对你有帮助,请给我一个最佳答案!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: OutputDebugString