2011-10-28 45 views
5

我在windows中編寫了一個程序,它將播放通過stdin發送給它的二進制音頻,我稱之爲aplay(就像linux程序)。然後我寫了一個單獨的程序如下在二進制模式下的Windows管道

FILE * f = popen("aplay.exe", "wb"); 
FILE * song = fopen("C:/Users/Ray/Dropbox/DJ Automica 2/Debug/raymonster 5.wav", "rb"); 
while(1) 
{ 
    byte buff[4096]; 
    fread(buff, 4, 1024, song); 
    fwrite(buff, 4, 1024, f); 
} 

出於某種原因,管道似乎並沒有在二進制模式下工作,因爲音頻出來全亂了。如果我改變我的aplay以在文本模式下自行打開波形文件,它聽起來與通過管道執行時相同,如果我以二進制模式打開波形文件,它將完美播放。有誰知道我該如何解決這個問題?

回答

4

如果包含頭文件

#include <fcntl.h> 
#include <io.h> 

你可以切換模式與

_setmode(_fileno(stdin), _O_BINARY);