View Single Post
Old Feb 10th, 2008, 8:59 AM   #21
Brent
Highly Adaptive Penguin
 
Brent's Avatar
 
Join Date: May 2005
Location: United States
Posts: 251
Rep Power: 4 Brent is on a distinguished road
Re: Streaming Audio over network

Input and Output data is successfully being added to the queues, but now I am having trouble with the PlayOutput and SendInput functions. It seems these functions aren't correctly looping through the queues, but I dont know.



Here is what I have so far:
c++ Syntax (Toggle Plain Text)
  1.  
  2. struct waveBuffers
  3. {
  4. char data[BUFFERSIZE];
  5. };
  6.  
  7. waveBuffers InQueue[MAX_BUFFERS];
  8. waveBuffers OutQueue[MAX_BUFFERS];
  9.  
  10. int In,Out;
  11. int WriteIndex = 0;
  12. int ReadIndex = 0;
  13.  
  14. int WriteIndex2=0;
  15. int ReadIndex2=0;
  16.  
  17. DWORD WINAPI FillInput(LPVOID lpParameter)
  18. {
  19. char data[BUFFERSIZE];
  20. int a;
  21.  
  22. while(threadEnd == false)
  23. {
  24. if ( (WriteIndex2 + 1) % MAX_BUFFERS != ReadIndex2)
  25. {
  26. sound.GetInput(data);
  27. strcpy(InQueue[WriteIndex2].data,data);
  28. WriteIndex2 = (WriteIndex2 + 1) % MAX_BUFFERS;
  29. }
  30. }
  31. return 0;
  32. }
  33.  
  34. DWORD WINAPI FillOutput(LPVOID lpParameter)
  35. {
  36. char data[BUFFERSIZE];
  37. int addrlen=sizeof(sin),a;
  38.  
  39. while(threadEnd == false)
  40. {
  41. if ( (WriteIndex + 1) % MAX_BUFFERS != ReadIndex)
  42. {
  43. recvfrom(client,data,sizeof(data),0,(struct sockaddr*)&sin,&addrlen);
  44. strcpy(OutQueue[WriteIndex].data,data);
  45. WriteIndex = (WriteIndex + 1) % MAX_BUFFERS;
  46. }
  47. }
  48.  
  49. return 0;
  50. }
  51.  
  52. DWORD WINAPI PlayOutput(LPVOID lpParameter)
  53. {
  54. char data[BUFFERSIZE];
  55. int a;
  56.  
  57. while(threadEnd == false)
  58. {
  59. for(a=WriteIndex; a<=ReadIndex; a++) //set 'a' equal to WriteIndex
  60. {
  61. sound.Play(OutQueue[a].data);
  62. ZeroMemory(OutQueue[a].data, BUFFERSIZE);
  63. }
  64. }
  65.  
  66. return 0;
  67. }
  68.  
  69. DWORD WINAPI SendInput(LPVOID lpParameter)
  70. {
  71. char data[BUFFERSIZE];
  72. int a;
  73.  
  74. while(threadEnd == false)
  75. {
  76. for(a=WriteIndex2; a<=ReadIndex2; a++) //set 'a' equal to WriteIndex2
  77. {
  78. sendto(client,InQueue[a].data,sizeof(InQueue[a].data),0,(struct sockaddr*)&sin,sizeof(sin));
  79. ZeroMemory(InQueue[a].data, BUFFERSIZE);
  80. }
  81. }
  82.  
  83. return 0;
  84. }
Brent is offline   Reply With Quote