<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2800.1491" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY style="COLOR: #000000; FONT-FAMILY: Arial" bgColor=#c0c0c0><LABEL 
id=HbSession SessionId="2775648579"></LABEL>
<DIV><FONT size=2>Dear Ross,</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>My streamer uses a audio recorder, not a file source. So 
finally, I combined what you said, and what I found in 
WindowsAudioInputDevice_common.cpp. The following is my current codes. Please 
take a look and tell me if it is right. </FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; // If there is no compressed sound 
data<BR>&nbsp;&nbsp;&nbsp; if 
(UnitNum==0){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nextTask() = 
envir().taskScheduler().scheduleDelayedTask(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
PktGapUSec,(TaskFunc*)FramedSource::afterGetting, 
this);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return; // now 
<STRONG><U>PktGapUSec=20</U></STRONG>&nbsp;<BR>&nbsp;&nbsp;&nbsp; 
};</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; //Otherwise, there is compressed sound 
data</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; // Set the 'presentation time' and 
'duration' of this frame:<BR>&nbsp;&nbsp;&nbsp; if (fPresentationTime.tv_sec == 
0 &amp;&amp; fPresentationTime.tv_usec == 0) {<BR>&nbsp;&nbsp;&nbsp; // This is 
the first frame, so use the current 
time:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int 
Idunno;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
gettimeofday(&amp;fPresentationTime, &amp;Idunno);<BR>&nbsp;&nbsp;&nbsp; } else 
{<BR>&nbsp;&nbsp;&nbsp; // Increment by the play time of the previous 
data:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned uSeconds&nbsp;= 
fPresentationTime.tv_usec + 
PktPlayUSec;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
fPresentationTime.tv_sec += 
uSeconds/1000000;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
fPresentationTime.tv_usec = uSeconds%1000000;<BR>&nbsp;&nbsp;&nbsp; 
}</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; // Remember the play time of this 
data:<BR>&nbsp;&nbsp;&nbsp; PktPlayUSec=UnitUSec*UnitNum;<BR>&nbsp;&nbsp;&nbsp; 
fDurationInMicroseconds=PktPlayUSec;</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; afterGetting(this); // <STRONG><U>No delay 
at all</U></STRONG></FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>Thanks for your time and help.</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>David Wu</FONT></DIV>
<DIV><FONT size=2>&nbsp;</DIV>
<DIV><BR></DIV></FONT>
<P></P></BODY></HTML>