有没有基于音频采集卡开发的高手,一个相当诡异的问题!!!!
我现在基于一个音频采集卡进行开发,就是调用它提供的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 {
ULONG uDataType;//
ULONG uStructSize;//
ULONG uErrCode;//
ULONG uBoardNum; // Board ID[0..3]
ULONG uChannelNum;// Channel ID of the Board
ULONG uHasNextData;
UCHAR *pDataBuffer; // 存放音频数据地址
ULONG uLen;
long TimeTag; // KeQuerySystemTime()
ULONG uDataAttr;
} 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的指针来替代吧……