马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
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[n];
ZeroMemory(pwszUnicode, n); //内存清零
MultiByteToWideChar(CP_ACP, NULL, (LPCCH)pSaveBuffer, -1, pwszUnicode, n);
//转换
CString str;
str.Format(_T("%s"), pwszUnicode);
::OutputDebugString(str);
我的问题:音频保存成功
可是 OutputDebugString(str); 没有输出 ???
问题解答:
在你提供的代码中, OutputDebugString 函数用于将字符串输出到调试器窗口。如果你在运行代码时没有看到输出,可能有以下几个原因:
1. 调试器未连接或未启动: OutputDebugString 函数会将字符串输出到调试器窗口,如果你没有打开调试器或者调试器未连接到你的应用程序,那么就看不到输出。请确保你正在使用调试器运行程序,并检查调试器是否连接到应用程序。
2. 调试器窗口滚动速度过快:调试器窗口可能会以较快的速度滚动而导致你无法及时看到输出。可以尝试在调试器窗口中按下滚动条的向上箭头来暂停滚动并查看输出内容。
3. 编译选项未包含调试信息:如果你使用的是 Release 模式编译,那么调试器可能无法显示调试信息。请确保在编译选项中启用了调试信息(例如包含符号表)以便调试器能够正确显示输出。
4. 输出被重定向到其他地方:在某些情况下, OutputDebugString 的输出可能被重定向到其他地方,而不是调试器窗口。例如,它可能会被重定向到日志文件或其他应用程序。你可以尝试检查其他地方是否存在输出。
如果以上方法都没有解决问题,你可以尝试使用其他调试技术来输出调试信息,例如在控制台输出或使用日志记录库。
如果回答对你有帮助,请给我一个最佳答案!这对我非常重要!
|