superdai:不错,向你致敬!
(发表于2004-4-2 9:39:00)
codesphere:我的毕设正要用到双工语音通信,太谢谢了!
向解放军致敬!
(发表于2004-4-2 12:32:00)
chumlee:(1) 一旦添加声音控制waveSetGetVolume(),耳机就变成单声的,打开系统的音量控制,发现“波形”选项完全不平衡。
-----------------------------
由于你将“声音控制”类从源码中去除了,下面是凭经验推测:
这是由于你选择的声音控制类本身写的有缺陷,或者是你没有看清楚其中的函数说明。无论是耳机(听--真正的双声道)还是麦克风(说--其实输入本身就是个单声道)在其音源线路控制中,音量的控制都是分成左右两个声道完成控制的(SetVolume、GetVolume)。从你描述的现象看,在你使用waveSetGetVolume()来控制音量时,该函数一定是只处理了左右声道其中的一路(是你参数不对?还是另有其他函数?),将该路(左部或者右部)设置成你当前调整的音量值;而另一路可能是使用了缺省值被置最小值了。你再试试,你说的“耳机就变成单声的”那个声道一定是固定不变的:) 解决方法很简单:在你修改音量当前值时同时设置左右声道的值就可以了。
(发表于2004-4-2 16:48:00)
codesphere:我运行了一下,按了“开始讲话”听不到自己说的声音嘛?我改了一下IP和别人在网上调试的,能连上发数据,但对方听不见,而且经常会出错
(发表于2004-4-2 18:31:00)
codesphere:我用QQ的语音功能是可以聊天的,我的语音设置应该没问题啊
(发表于2004-4-2 18:32:00)
liyingcong:没有加入回音抵消功能:)你尝试下两者都不使用耳机通话,这样回音大到不能接受!
(发表于2004-4-12 16:02:00)
yangjsh:请问录音为什么建两个Buffer(pBuffer1, pBuffer2),会自动切换使用吗?另外,两个缓冲队列中录音播放与发送接收不加线程同步,是否会有共享冲突?
(发表于2004-4-13 11:14:00)
kongk:yangjsh:
建立两个Buffer(pBuffer1, pBuffer2)不是无中生有而是必须的,否则采集声音将会有遗漏。他的自动切换是不需要人为干预的。
好像播放也应该是双缓冲区,才能保证不出现“停顿”的现象,但是我没能实现,不知哪位高手可以给点启发。
(发表于2004-4-30 21:26:00)
lzbgt:LNK errors like:
error C2440: “static_cast” : cannt convert
"void (__thiscall CRecTestDlg::* )(UINT,LONG) to "LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)"
anyone can post me a suggestion? ...great...
(发表于2004-6-24 9:27:00)
ss:学习VC一年半载就有这等水平,PF中......
(发表于2004-9-16 18:56:00)
ziying1211:您好,我想请教一下,用UDP方式和TCP方式怎么没有变化
因为TCP方式延迟大约3到5秒钟,我想用UDP方式来改变延迟问题。希望能得到指教!
(发表于2005-11-24 11:34:00)
逍遥剑侠:这是什么水平??太初手了
一点也不PF,但是<<基于API的录音机程序>>作者栾义明写文档的功夫和分享精神个人还是很欣赏的
(发表于2006-1-4 14:10:00)
supercjj:双/多缓冲播放文件要使用定时机制,即采样率/缓冲长度为调用waveOutWrite的周期,如果是网络接收播放,每收到一个包填入当前缓冲区,填满后调用waveOutWrite加入播放队列就行了,这个播放队列是waveOutOpen之后默认建立的,不能通过放完一个缓冲后的回调函数中再调用waveOutWrite的方式来实现流畅播放
(发表于2006-1-18 17:29:00)
ydbcsdn:我想请问一句:
CSocket的Send 函数的确经常返回-1,我跟踪到send函数的内部后发现,在他的发送函数里已经有了发送数据数据长度的检测,显然,我们不需要对Send函数进行额外的处理!!
我的新问题,我的Send函数返回的并不是一个长度,而是返回-1,很明显是CSysnSocket::Send 就返回了-1,当为-1时他就不检测长度了,而是直接返回了。
while ((nResult = CAsyncSocket::Send(lpBuf, nBufLen, nFlags)) == SOCKET_ERROR)
{
if (GetLastError() == WSAEWOULDBLOCK)
{
if (!PumpMessages(FD_WRITE))
return SOCKET_ERROR;
}
else
return SOCKET_ERROR;
}
(发表于2006-6-16 9:34:00)
ydbcsdn:我的发送线程是在else语句处return 的-1
到了CSocket::send内部后,判断如果是-1就直接返回-1
(发表于2006-6-16 9:36:00)
magicdigua:CPU资源占用居高不下。
(发表于2006-10-30 8:30:00)
bifei:声音有延迟主要是因为作者的缓冲区设的很大(#define INP_BUFFER_SIZE 16384)
大约采样需要2秒,才第一次触发OnMM_WIM_DATA,所以感觉延迟大,可以试着改小INP_BUFFER_SIZE。和tcp无关,用udp实现,主要难点是如何协调数据包的到达顺序,而不窜声。
(发表于2007-1-18 20:16:00)
karl412:"例外这两个线程稍加改动即可实现多人的语音会议"
我想实现两台机器的语音通话 我将m_Client.Connect("192.168.1.100",4002) 改成了我同学机器的IP
但是一直报错“SOCKET连接失败” “一般错误” 不知道是怎么回事 请指点
(发表于2007-5-3 15:14:00)
heyunet:TCP一样的可以做到延时很小.0.5秒以内.BUFFER 应该是一个ARRAY 或者内存块.发的时间去Get()然后再discard.
while (TRUE)
{
if(WAIT_OBJECT_0!=::WaitForSingleObject(=_SEND_BUFFER.m_hBufEnough,INFINITE))
{
return 1;
} packet=_SEND_BUFFER_.Get();
if (packet==NULL)
{
continue;
}
if(!SendPack(*packet,this))
{
break;
}
_SEND_BUFFER_.Discard();
}
(发表于2007-11-21 14:55:00)
talent529:首先,CPU占用100%,不知道什么原因
第二,我怀疑你的拥塞控制没有作用,因为每录完一块,nAudioIn+1,假设已录到第4块,而第1块还没有发完,你的处理办法是仍然录在当前块
if(m_AudioDataIn[nextBlock].dwLength!=0)//下一“块”没发走
{ //把PWAVEHDR(即pBUfferi)里的数据拷贝到当前“块”中
.....
}
,那么就会将第4块的录音给冲掉
(发表于2008-5-8 20:59:00)
..........................................................................
--------------------next---------------------