#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <linux/soundcard.h>
//下面的三个参数是跟具体文件相关的,文件什么样,就设置成什么样
#define SAMPLE_RATE 22050 //采样率:22050(22 56 00 00)
#define BIT_SIZE 16 //量化位数
#define CHANNELS 2 //通道数:1表示单声道,2为立体声
int main(int argc, char *argv[])
{
FILE *wav_fd;
int fd, *buf;
int wav_length, arg, status;
unsigned char *wav_buf;
if(argc<2){ //如果argc的值是1,说明程序名后面没有命令行参数
printf("Usage:%s xxx.wav !\n",argv[0]); //argv[0]的值是启动该程序的程序名
exit(1);
}
wav_fd = fopen(argv[1], "r");
if (wav_fd == NULL) {
printf("Open wav_file %s error !\n",argv[1]);
exit(1);
}
printf("Test iis+UDA1341 OSS interface to play %s file.\n",argv[1]);
fseek(wav_fd, 0x28L, SEEK_SET); //文件大小
buf = (int*) malloc(sizeof(int));
fread(buf,sizeof(int),1,wav_fd);
wav_length = *buf;
free(buf);
printf("wav_file length is: %xH.\n",wav_length);
printf("Play......\n");
fd = open("/dev/dsp", O_WRONLY); //arm中一般不可使用O_RDWR
if (fd < 0) {
printf("Open of /dev/dsp failed");
exit(1);
}
arg = CHANNELS; //设置通道数
status = ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &arg);
if (status == -1)
perror("SOUND_PCM_WRITE_CHANNELS ioctl failed.");
arg = BIT_SIZE; //设置量化位数
status = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg);
if (status == -1)
perror("SOUND_PCM_WRITE_BITS ioctl failed.");
arg = SAMPLE_RATE; //设置采样率
status = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg);
if (status == -1)
perror("SOUND_PCM_WRIT_RATE ioctl failed.");
//从wav文件中读wav_length大小的内容,然后写入/dev/dsp中
fseek(wav_fd, 0x2cL, SEEK_SET);
wav_buf =(unsigned char*) malloc(wav_length);
fread(wav_buf, wav_length, 1, wav_fd); //读文件数据
write(fd, wav_buf, wav_length);
free(wav_buf);
fclose(wav_fd);
close(fd);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
static void sig_usr(int signo);
static void sig_alarm(int signo);
int i=1;
pid_t child_pid;
int main()
{
pid_t pid;
if (signal(SIGALRM, sig_alarm) < 0) perror("signal SIGALRM error:");
if (signal(SIGUSR2, sig_usr) < 0) perror("signal SIGUSR2 error:");
pid=fork();
if ( pid == 0 ){ /* 子进程 */
printf("child_pid= %d\n",getpid());
for(;;){
system("./Audio_player RedStream.wav");
pause();
}
exit(0);
}
else{ /* 父进程 */
child_pid=pid;
for(;;){
alarm(3);
pause();
}
}
return 0;
}
static void sig_usr(int signo){ int ret;
printf("SIGUSR2 comming..... \n");
if((ret=kill(child_pid,SIGCONT))<0) perror("kill error:");}
static void sig_alarm(int signo)
{
char *str0,*str1,Display_img[50];
str0 ="./LCD_img b_fly"