试过了网上各种:
-
要用
if(SDL_Init(SDL_INIT_AUDIO | SDL_INIT_TIMER))
,不要用if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER))
---NO -
无论如何先
SDL_memset(stream, 0, len);
---NO
最后对比了一个可以出声的程序,原因如下:
"fopen()"函数中的"r"和"rb"表示以只读方式打开文件,但是前者是文本模式,后者是二进制模式。在文本模式中,即使操作系统使用不同的换行符,都会被转换为'\n'进行处理。在二进制模式下,文件中的所有数据都被视为raw数据,且不进行任何的字符集转换。
然后,看了看不出声的程序,是用了audio_fd = fopen(path, "r");
,改成audio_fd = fopen(path, "rb");
之后,一切都好了!!!!