?? playsound.c
字號:
/* Linux
* --Mao
*
* 播放音頻文件要用ioctl函數設置使播放參數與音頻文件相同
* 設置聲卡采樣頻率 arg = 16; ioctl(handler,SOUND_PCM_WRITE_BITS,&arg);
*
*
*
*/
#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <unistd.h>
#include <linux/soundcard.h>
#define Audio_Device "/dev/dsp"
/*
不同的聲音有不同的播放參數,這些參數可以使用file命令獲得
*/
#define Sample_Size 16
#define Sample_Rate 44100
int play_sound(char *filename)
{
struct stat stat_buf;
unsigned char *buf = NULL;
int handler,fd;
int result;
int arg,status;
//打開聲音文件,將文件讀入內存
fd = open(filename,O_RDONLY);
if(fd < 0)
return -1;
if(fstat(fd,&stat_buf))
{
close(fd);
return -1;
}
if(!stat_buf.st_size)
{
close(fd);
return -1;
}
buf = malloc(stat_buf.st_size);
if(!buf)
{
close(fd);
return -1;
}
if(read(fd,buf,stat_buf.st_size) < 0)
{
free(buf);
close(fd);
return -1;
}
/*
打開聲卡設備,并設置聲卡播放參數,這些參數必須與聲音文件參數一致
*/
handler = open(Audio_Device,O_WRONLY);
if(handler == -1)
{
perror("Cannot open the Audio_Device");
return -1;
}
arg = Sample_Rate;
status = ioctl(handler,SOUND_PCM_WRITE_RATE,&arg);
if(status == -1)
{
perror("error from SOUND_PCM_WRITE_RATE ioctl");
return -1;
}
arg = Sample_Size;
status = ioctl(handler,SOUND_PCM_WRITE_BITS,&arg);
if(status == -1)
{
perror("error from SOUND_PCM_WRITE_BITS ioctl");
return -1;
}
result = write(handler,buf,stat_buf.st_size);
if(result == -1)
{
perror("Fail to play the sound");
return -1;
}
free(buf);
close(fd);
close(handler);
return result;
}
void main(void)
{
play_sound("windowXp.wav");
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -