linux 播放wav文件,Linux环境下用c语言写的播放wav文件的小程序

Linux环境下用c语言写的播放wav文件的小程序

本程序可以读取.wav文件,然后进行播放。

确认方法:cat /etc/sndstat,如果显示无此设备,则没有安装驱动。

#include #include #include #include #include #include #include /* 下面的三个参数是跟具体文件相关的,文件什么样,就要设置成什么样 */

int main(){    int fd;     int wavfd; //wav文件的描述符

if (fd 

/* .......... */    arg = CHANNELS;    status = ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &arg);    if (status == -1)        perror("SOUND_PCM_WRITE_CHANNELS ioctl failed");    if (arg != CHANNELS)        perror("unable to set number of channels");

/* 从wav文件中读buf大小的内容,然后写入/etc/dsp中,直到文件结束 */     int time = 0; //动态显示播放时间用

/*status = ioctl(fd, SOUND_PCM_SYNC, 0);

}}本程序中需要一个.wav文件才能播放,你可以到百度mp3上去搜索一个.wav文件,放到程序目录下。然后,把程序中的文件名改成该音频的文件名。

相关文档:

在前面已经介绍过,C源程序是由函数组成的。虽然在前面各章的程序中大都只有

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,作为AI语言模型,我无法实际编程序。不过我可以提供一些思路和参考资料,帮助您完成这个项目。 Linux环境下的C语言音乐播放系统可以使用Alsa库来实现音频的播放和控制。在程序中,你需要使用Alsa库中的函数来初始化音频设备,设置音频参数,读取音频数据,播放音频等。 以下是一个简单的示例程序,可以播放一个wav格式的音频文件: ```c #include <stdio.h> #include <stdlib.h> #include <alsa/asoundlib.h> int main(int argc, char *argv[]) { if (argc != 2) { fprintf(stderr, "Usage: %s <filename>\n", argv[0]); return 1; } const char *filename = argv[1]; snd_pcm_t *handle; snd_pcm_hw_params_t *params; snd_pcm_uframes_t frames; int dir; char *buffer; int size; int rc; // 打开音频设备 rc = snd_pcm_open(&handle, "default", SND_PCM_STREAM_PLAYBACK, 0); if (rc < 0) { fprintf(stderr, "Unable to open PCM device: %s\n", snd_strerror(rc)); return 1; } // 初始化音频参数 snd_pcm_hw_params_malloc(&params); snd_pcm_hw_params_any(handle, params); snd_pcm_hw_params_set_access(handle, params, SND_PCM_ACCESS_RW_INTERLEAVED); snd_pcm_hw_params_set_format(handle, params, SND_PCM_FORMAT_S16_LE); snd_pcm_hw_params_set_channels(handle, params, 2); unsigned int rate = 44100; snd_pcm_hw_params_set_rate_near(handle, params, &rate, &dir); frames = 32; snd_pcm_hw_params_set_period_size_near(handle, params, &frames, &dir); rc = snd_pcm_hw_params(handle, params); if (rc < 0) { fprintf(stderr, "Unable to set hw parameters: %s\n", snd_strerror(rc)); return 1; } // 读取音频数据 FILE *fp = fopen(filename, "rb"); if (!fp) { fprintf(stderr, "Unable to open file: %s\n", filename); return 1; } fseek(fp, 0, SEEK_END); size = ftell(fp); rewind(fp); buffer = (char *) malloc(size); fread(buffer, 1, size, fp); fclose(fp); // 播放音频 snd_pcm_hw_params_get_period_size(params, &frames, &dir); snd_pcm_prepare(handle); rc = snd_pcm_writei(handle, buffer, frames); if (rc == -EPIPE) { snd_pcm_prepare(handle); rc = snd_pcm_writei(handle, buffer, frames); } if (rc < 0) { fprintf(stderr, "Unable to write pcm: %s\n", snd_strerror(rc)); } // 关闭音频设备 snd_pcm_drain(handle); snd_pcm_close(handle); free(buffer); return 0; } ``` 在程序中,你需要使用命令行参数来指定要播放的音频文件。程序首先会打开音频设备,然后初始化音频参数,读取音频数据,最后播放音频。播放完毕后,程序会关闭音频设备。 这只是一个简单的示例程序,你可以根据实际需求进行修改和扩展。你可以在Alsa官网上查找更多关于Alsa库的文档和示例程序,帮助你完成这个项目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值