读书人

有没有基于音频采集卡开发的高手一个

发布时间: 2012-01-30 21:15:58 作者: rapoo

有没有基于音频采集卡开发的高手,一个相当诡异的问题!!!!
我现在基于一个音频采集卡进行开发,就是调用它提供的API进行音频数据的采集,我现在可以调用他的回调函数采集到数据,但是采集到的数据只有部分正确,不知道为什么,他的回调函数是
int BOOL CALLBACK lpAudioCaptureCallback( ULONG _ulDataInfoPtr, ULONG _ulContextPtr )
{
AUD5_DATA_INFO* _pInfo = (AUD5_DATA_INFO*)_ulDataInfoPtr;
tCALLBACKCONTEXT* _pContext = (tCALLBACKCONTEXT*)_ulContextPtr;
/////////////////////////////////////////////////////////
做相应的音频采集工作
//////////////////////////////////////////////////////////
}
其中_ulDataInfoPtr是获得的音频数据结构的指针,_ulContextPtr 是相关的句柄(我觉得这个基本没什么用),其中AUD5_DATA_INFO结构如下
struct _AUD5_DATA_INFO {
ULONGuDataType;//
ULONGuStructSize;//
ULONGuErrCode;//
ULONGuBoardNum; // Board ID[0..3]
ULONGuChannelNum;// Channel ID of the Board
ULONGuHasNextData;
UCHAR*pDataBuffer; // 存放音频数据地址
ULONGuLen;
longTimeTag;// KeQuerySystemTime()
ULONGuDataAttr;

} AUD5_DATA_INFO;
我现在在C#中把这个结构转化成如下形式:
public struct AUD5_DATA_INFO
{
public uint uDataType;
public uint uStructSize;
public uint uErrCode;
public uint uBoardNum;// Board ID[0..3]
public uint uChannelNum;// Channel ID of the Board
public uint uHasNextData;
public IntPtr pDataBuffer;
public uint uLen;
public long QuadPart
public uint uDataAttr;

}
问题是,每次我把回调函数得到的指针转化成AUD5_DATA_INFO结构以后,结构中其他成员的值都对,就是pDataBuffer地址中所采集到的音频值不正确,特地来请教一下高手到底是什么地方可能出了问题呢!!!!!!!


[解决办法]
我没有做过语音采集的,只是提供一个建议吧
public IntPtr pDataBuffer;
UCHAR *pDataBuffer; // 存放音频数据地址

将你的改为:
public UCHAR *pDataBuffer;
再试试看,估计是由大小端引起的问题,或者是字节对齐所引起的问题
[解决办法]
C#没学过,只能猜了……

"public IntPtr pDataBuffer; "中的IntPtr是个什么东西?是否是指向int的指针?如果是的话,试试用指向char的指针来替代吧……

读书人网 >C#

热点推荐