linux下生成wav文件怎么打开,Linux 下的C语言实现播放WAV文件

#include

<

unistd.h

>

#include

<

fcntl.h

>

#include

<

sys

/

types.h

>

#include

<

sys

/

stat.h

>

#include

<

sys

/

ioctl.h

>

#include

<

stdlib.h

>

#include

<

stdio.h

>

#include

<

string

.h

>

#include

<

linux

/

soundcard.h

>

#define

OPEN_DSP_FAILED     0x00000001      /*打开  dsp 失败!*/

#define

SAMPLERATE_STATUS     0x00000002    /*samplerate status failed*/

#define

SET_SAMPLERATE_FAILED  0x00000003   /*set samplerate failed*/

#define

CHANNELS_STATUS       0x00000004    /*Channels status failed*/

#define

SET_CHANNELS_FAILED    0x00000005   /*set channels failed*/

#define

FMT_STATUS       0x00000006        /*FMT status failed*/

#define

SET_FMT_FAILED     0x00000007       /*set fmt failed*/

#define

OPEN_FILE_FAILED        0x00000008    /*opem filed failed*/

int

P8100_Audio_Play(

char

*

pathname,

int

nSampleRate,

int

nChannels,

int

fmt)

{

int

dsp_fd,mix_fd,status,arg;

dsp_fd

=

open(

"

/dev/dsp

"

, O_RDWR);

/*

open dsp

*/

if

(dsp_fd

<

0

)

{

return

OPEN_DSP_FAILED;

}

arg

=

nSampleRate;

status

=

ioctl(dsp_fd,SOUND_PCM_WRITE_RATE,

&

arg);

/*

set samplerate

*/

if

(status

<

0

)

{

close(dsp_fd);

return

SAMPLERATE_STATUS;

}

if

(arg

!=

nSampleRate)

{

close(dsp_fd);

return

SET_SAMPLERATE_FAILED;

}

arg

=

nChannels;

/*

set channels

*/

status

=

ioctl(dsp_fd, SOUND_PCM_WRITE_CHANNELS,

&

arg);

if

(status

<

0

)

{

close(dsp_fd);

return

CHANNELS_STATUS;

}

if

( arg

!=

nChannels)

{

close(dsp_fd);

return

SET_CHANNELS_FAILED;

}

arg

=

fmt;

/*

set bit fmt

*/

status

=

ioctl(dsp_fd, SOUND_PCM_WRITE_BITS,

&

arg);

if

(status

<

0

)

{

close(dsp_fd);

return

FMT_STATUS;

}

if

(arg

!=

fmt)

{

close(dsp_fd);

return

SET_FMT_FAILED;

}

/*

到此设置好了DSP的各个参数

*/

FILE

*

file_fd

=

fopen(pathname,

"

r

"

);

if

(file_fd

==

NULL)

{

close(dsp_fd);

return

OPEN_FILE_FAILED;

}

int

num

=

3

*

nChannels

*

nSampleRate

*

fmt

/

8

;

int

get_num;

char

buf[num];

while

(feof(file_fd)

==

0

)

{

get_num

=

fread(buf,

1

,num,file_fd);

write(dsp_fd,buf,get_num);

if

(get_num

!=

num)

{

close(dsp_fd);

fclose(file_fd);

return

0

;

}

}

close(dsp_fd);

fclose(file_fd);

return

0

;

}

/*

*test

*/

int

main()

{

int

value;

value

=

P8100_Audio_Play(

"

/windows/C/WINDOWS/Media/Windows Startup.wav

"

,

44100

,

2

,

16

);

//

注意播放文件的路径哦!!

fprintf(stderr,

"

value is %d

"

,value);

return

0

;}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值