📄 subject_61548.htm
字号:
<p>
序号:61548 发表者:害羞的小二 发表日期:2003-11-20 11:38:45
<br>主题:请教:从采集卡上获得的音频PCM裸数据,如何压缩?
<br>内容:能用Filter吗?还是用ACM里面的接口函数?如果有什么思路?非常感谢!<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:gzast163 回复日期:2003-11-21 10:01:12
<br>内容:ftp://private:private@redcode.meibu.com:2123/DSDemo.rar<BR><BR>ftp://private:private@redcode.meibu.com:2123/GSM610.bmp
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:害羞的小二 回复日期:2003-11-24 09:45:56
<br>内容:to gzast163:非常谢谢你,我应该如何给分?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:gzast163 回复日期:2003-11-24 09:53:51
<br>内容:分不重要,你觉得有用就行。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:害羞的小二 回复日期:2003-11-24 09:59:59
<br>内容:哎,难怪每次来这儿都感觉温暖,感觉有助。可能是因为很多人心中都有一个这样的答案。再次感谢你!!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:害羞的小二 回复日期:2003-12-01 11:38:21
<br>内容:To:gzast163.你好,你给我这个动态连接库及其Demo给了我很大的帮助,分析了这个代码後,我做的模块其实也出来了。但是在测试的时候除了问题,就是有的时候能够采集数据,有的时候却不能,这是为什么?请给小弟一点提示,非常感谢!<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:gzast163 回复日期:2003-12-01 12:42:54
<br>内容:那就奇怪了,我这边都很好,没有发现你所说的情况,但也有些网友说有时候不行,我目前正试用不同的系统和不同采集卡来做实验,希望能重现你们所说的情况。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:害羞的小二 回复日期:2003-12-01 16:29:50
<br>内容:to:gzast163.谢谢你这么快就回应。我发现一个现象,就是每一次运行的时候我都把:<BR> IFileSinkFilter* pSink;<BR> m_pFileWriterFilter->QueryInterface(IID_IFileSinkFilter, (void**)&pSink);<BR> if(!pSink) return;<BR> pSink->SetFileName(L"c:\\test4.wav", NULL);中的文件名改了就行了,但是如果不改,然后覆盖以前的,或者把以前的删除都无法写文件。你可以试下吗?,非常谢谢
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:gzast163 回复日期:2003-12-01 16:48:48
<br>内容:我试了都可以呀。<BR>如果你要覆盖原来文件,我建议你使用IFileSinkFilter2::SetMode(AM_FILE_OVERWRITE),这样才能保证文件长度是正确的。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:害羞的小二 回复日期:2003-12-01 17:11:34
<br>内容:to:gzast163。你试试看,如果刚刚采集了一个文件,然后把它删除,接着重新采集,文件名相同,看看能不能重新写文件。我这儿不能,我百思不得其解。还有,如果用IFileSinkFilter2::SetMode(AM_FILE_OVERWRITE),程序中如何修改。给我点提示,非常感谢!<BR>对了,请问你在哪儿?我现在在北京,你呢?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:害羞的小二 回复日期:2003-12-01 17:26:51
<br>内容:我设为: IFileSinkFilter2* pSink;<BR> m_pFileWriterFilter->QueryInterface(IID_IFileSinkFilter2, (void**)&pSink);<BR> pSink->SetMode(AM_FILE_OVERWRITE);<BR><BR>但是开始的那个问题还是没有解决:就是我采集了一个test4.wav文件,然后我立刻删了,重新编译连接,写不出文件来。或者不删除,就这样重新采集,这时候的现象是,test4.wav文件大小不变,也就是说没办法覆盖。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:害羞的小二 回复日期:2003-12-02 15:41:17
<br>内容:还有:pSink->SetFileName(L"c:\\test4.wav", NULL);函数中的第一个参数可不可以为参数变量,如果可以,应该如何定义这个变量
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:gzast163 回复日期:2003-12-02 18:12:45
<br>内容:哈哈,你真懒,这种问题也拿来问我。<BR><BR>WCHAR wFile[MAX_PATH];<BR>CString strIndexFile = "c:\\test.wav";<BR>MultiByteToWideChar(CP_ACP, 0, strIndexFile, -1, wFile, MAX_PATH);<BR>pSink->SetFileName(wFile, NULL );<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:害羞的小二 回复日期:2003-12-02 18:23:43
<br>内容:gzast163 大哥,真的冤枉,我看了很多资料,试了很多方法,真的搞不定才请教的,呜呜呜呜……。其他几个问题能解决吗?谢谢
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:害羞的小二 回复日期:2003-12-04 16:44:13
<br>内容:to:gzast163大哥。我把OnButtonRec修改成这样,然后我加一个OnButtonPauseRec,执行的时候出错了,请大哥指点。非常感谢!<BR><BR>void CDSDemoDlg::OnButtonRec() <BR>{<BR> if (m_bPausedRecording)<BR> {<BR> m_MC->Run();<BR> m_bPausedRecording=FALSE;<BR> GetDlgItem(IDC_BUTTON_REC)->EnableWindow(FALSE);<BR> GetDlgItem(IDC_BUTTON_STOP_REC)->EnableWindow(TRUE);<BR> GetDlgItem(IDC_BUTTON_PAUSE_REC)->EnableWindow(TRUE);<BR> return;<BR> }<BR> // TODO: Add your control notification handler code here<BR> int RetVal;<BR>// LPCOLESTR Filename;<BR> //LPCTSTR Buffer0;<BR> //char *Filename="c:\test.wav";<BR> //wcsncpy(wFileDes,T2W(Buffer0),128);<BR><BR> RlsResource();<BR><BR> RetVal = DSGetFilterByIndex(FC_AudioCaptureSources, 0, (void**)&m_pSourceFilter);<BR> if(RetVal) { ShowErrMsg(RetVal); return; }<BR><BR> RetVal = DSGetPinByIndex(m_pSourceFilter, TRUE, 0, (void**)&m_pSourceOutPin); <BR> if(RetVal) { ShowErrMsg(RetVal); return; }<BR> <BR> RetVal = DSGetFilterByName(FC_AudioCompressors, "GSM 6.10", (void**)&m_pGSMEncoder); <BR> if(RetVal) { ShowErrMsg(RetVal); return; }<BR><BR> RetVal = DSGetPinByName(m_pGSMEncoder, "Input", (void**)&m_pEncInPin); <BR> if(RetVal) { ShowErrMsg(RetVal); return; }<BR><BR> RetVal = DSGetPinByName(m_pGSMEncoder, "Output", (void**)&m_pEncOutPin); <BR> if(RetVal) { ShowErrMsg(RetVal); return; }<BR><BR> RetVal = DSGetFilterByName(FC_DirectShowFilters, "AVI Mux", (void**)&m_pAviMuxFilter); <BR> if(RetVal) { ShowErrMsg(RetVal); return; }<BR><BR> RetVal = DSGetFilterByName(FC_DirectShowFilters, "File Writer", (void**)&m_pFileWriterFilter); <BR> if(RetVal) { ShowErrMsg(RetVal); return; }<BR><BR> IFileSinkFilter2* pSink;<BR> m_pFileWriterFilter->QueryInterface(IID_IFileSinkFilter2, (void**)&pSink);<BR><BR> if(!pSink) return;<BR><BR><BR> char buffer[MAX_PATH];<BR><BR> SYSTEMTIME sysTime;<BR> GetLocalTime(&sysTime);<BR> sprintf( buffer,"c:\\%02d%02d%02d%02d%02d.wav", sysTime.wMonth, sysTime.wDay, sysTime.wHour, <BR> sysTime.wMinute, sysTime.wSecond);<BR> WCHAR wFile[MAX_PATH];<BR><BR> MultiByteToWideChar(CP_ACP, 0,buffer, -1, wFile, MAX_PATH);<BR><BR> pSink->SetFileName(wFile, NULL );<BR><BR> HRESULT hr;<BR> hr = CoCreateInstance(CLSID_FilterGraph,<BR> NULL,<BR> CLSCTX_INPROC_SERVER,<BR> IID_IGraphBuilder,<BR> (void **) &m_pGraph);<BR> if (FAILED(hr)) return;<BR><BR> m_pGraph->AddFilter(m_pSourceFilter, NULL);<BR> m_pGraph->AddFilter(m_pGSMEncoder, NULL);<BR> m_pGraph->AddFilter(m_pAviMuxFilter, NULL);<BR> m_pGraph->AddFilter(m_pFileWriterFilter, NULL);<BR> m_pGraph->Connect(m_pSourceOutPin, m_pEncInPin);<BR> m_pGraph->Render(m_pEncOutPin);<BR> m_pGraph->QueryInterface(IID_IMediaControl, (void**)&m_MC);<BR> m_MC->Run();<BR> GetDlgItem(IDC_BUTTON_REC)->EnableWindow(FALSE);<BR> GetDlgItem(IDC_BUTTON_STOP_REC)->EnableWindow(TRUE);<BR> GetDlgItem(IDC_BUTTON_PAUSE_REC)->EnableWindow(TRUE);<BR>}<BR><BR>void CDSDemoDlg::OnButtonPauseRec() <BR>{<BR> // TODO: Add your control notification handler code here<BR> //RlsResource();<BR> if (m_MC)<BR> {<BR> m_MC->Pause();<BR> //Say(TEXT("Paused audio recording"));<BR> m_bPausedRecording = TRUE;<BR> }<BR> GetDlgItem(IDC_BUTTON_REC)->EnableWindow(TRUE);<BR> GetDlgItem(IDC_BUTTON_PAUSE_REC)->EnableWindow(FALSE);<BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -