使用c语言播放.wav文件

Posted

技术标签:

【中文标题】使用c语言播放.wav文件【英文标题】:play .wav file using c language 【发布时间】:2015-06-26 04:23:34 【问题描述】:

我被要求使用 C 语言播放 .wav 文件,我使用的编译器是 Devcpp。 我试图使用函数PlaySound(),如下所示:

PlaySound("C:/Users/wavfiles/13.1.wav", NULL, SND_FILENAME); 

如果像这样直接在函数中输入目录,就可以成功播放声音了。

但是,我想将目录设置为变量。我创建一个包含目录列表的文本文件并提取我想要的文件,然后将其放入PlaySound() 函数中。这是我的代码的一部分:

FILE *fw;
char addr[1000]
char schapter[50];

while(fgets(addr, 1000, fw) != NULL) 
    if((strstr(addr, schapter)) != NULL)    
        printf("\n%s", addr);
        PlaySound(addr, NULL, SND_FILENAME); 
    

在这种情况下,目录分配给addraddr = "C:/Users/wavfiles/13.1.wav"),然后我将addr放入PlaySound(),但它不起作用。

我被这个问题困扰了很长时间,无法继续前进。 如果有人能给我建议或解决方案,我将不胜感激。 谢谢你。

【问题讨论】:

地址中可能需要使用双斜线而不是单斜线。提示:转义序列 一个反斜杠(在命令行中输入时)。 @GargAnkit:在命令行输入内容应该不是问题。 【参考方案1】:

fgets() 返回的字符串包含终端换行符。您需要删除它才能获取文件名。

一个简单的方法是使用strchr() 来定位换行符:

while (fgets(addr, 1000, fw) != NULL) 
    char *nl = strchr(addr, '\n');
    if (nl) *nl = 0;
    …

【讨论】:

我明白了,这很有道理,但我添加了你说的代码:while(fgets(addr, 1000, fw) != NULL) char *nl = strchr(addr,'\n'); if (nl) *nl = 0; if((strstr(addr, shapter)) != NULL) ` printf("\n% s",地址); PlaySound(地址,NULL,SND_FILENAME); ` 但声音仍然无法播放。声明或 PlaySound() 函数有问题吗?

以上是关于使用c语言播放.wav文件的主要内容,如果未能解决你的问题,请参考以下文章

如何用C语言编写程序将多个wav文件拼接成一个音频wav文件并播放

C语言播放音频文件的问题....

C语言播放音频文件的问题....

如何用c语言插入(背景)音乐

如何用C语言播放一段音频呢

用c或c++播放wav文件,怎么实现