91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 7KB
    文件類型: .gz
    金幣: 1
    下載: 1 次
    發(fā)布日期: 2021-06-23
  • 語言: C/C++
  • 標(biāo)簽: Linux??ALSA??UDP??語音??

資源簡介

Linux下局域網(wǎng)內(nèi)IP對講程序, 執(zhí)行g(shù)cc -o sound_send sound.c -lasound gcc -o sound_recv sound.recv.c -lasound編譯程序。 ./sound_recv 4600(端口號)運(yùn)行接收程序 ./sound_send 192.168.1.1(IP地址) 4600(端口號)運(yùn)行發(fā)送程序。 使用ALSA驅(qū)動 C語言編寫 參數(shù)可自己設(shè)置重新編譯。

資源截圖

代碼片段和文件信息

#include???
#include???
#include???
#include???
#include???
#include???
#include???
#include?

int?main(int?argc?char*?argv[])?{??
???
int?sin_len;???
int?socket_descriptor;??
int?port;?
struct?sockaddr_in?sin;?
??????
? if?(argc?!=?2){
printf(“Usage:?sound_recv??PORT?\n“);
exit(1);
}
port?=?atoi(argv[1]);
int?rc;
int?dir;
int?size;
snd_pcm_t?*handle;
snd_pcm_hw_params_t?*params;
snd_pcm_uframes_t?frames;
unsigned?int?val;
char?*buffer;
? printf(“Waiting?for?data?form?sender?\n“);??
??
bzero(&sinsizeof(sin));??
sin.sin_family=AF_INET;??
sin.sin_addr.s_addr=htonl(INADDR_ANY);??
sin.sin_port=htons(port);??
sin_len=sizeof(sin);??
socket_descriptor=socket(AF_INETSOCK_DGRAM0);??
bind(socket_descriptor(struct?sockaddr?*)&sinsizeof(sin));??



/*?Open?PCM?device?for?playback.?*/
rc?=?snd_pcm_open(&handle?“default“
SND_PCM_STREAM_PLAYBACK?0);
if?(rc? fprintf(stderr
“unable?to?open?pcm?device:?%s/n“
snd_strerror(rc));
exit(1);
}

/*?Allocate?a?hardware?parameters?object.?*/
snd_pcm_hw_params_alloca(¶ms);

/*?Fill?it?in?with?default?values.?*/
snd_pcm_hw_params_any(handle?params);

/*?Set?the?desired?hardware?parameters.?*/

/*?Interleaved?mode?*/
snd_pcm_hw_params_set_access(handle?params
?????????????????????? SND_PCM_ACCESS_RW_INTERLEAVED);

/*?Signed?16-bit?little-endian?format?*/
snd_pcm_hw_params_set_format(handle?params
?????????????????????????????? SND_PCM_FORMAT_S16_LE);

/*?Two?channels?(stereo)?*/
snd_pcm_hw_params_set_channels(handle?params?1);

/*?44100?bits/second?sampling?rate?(CD?quality)?*/
val?=?44100;
snd_pcm_hw_params_set_rate_near(handle?params
????????????????????????????????? ?&val?&dir);

/*?Set?period?size?to?16?frames.?*/
frames?=?32;
snd_pcm_hw_params_set_period_size_near(handle
????????????????????????????? ?params?&frames?&dir);

/*?Write?the?parameters?to?the?driver?*/
rc?=?snd_pcm_hw_params(handle?params);
if?(rc? fprintf(stderr
“unable?to?set?hw?parameters:?%s/n“
snd_strerror(rc));
exit(1);
}

/*?Use?a?buffer?large?enough?to?hold?one?period?*/
snd_pcm_hw_params_get_period_size(params?&frames
??????????????????????????????????? ?&dir);
size?=?frames?*?2;?/*?2?bytes/sample?1?channels?*/
buffer?=?(char?*)?malloc(size);

/*?We?want?to?loop?for?5?seconds?*/
snd_pcm_hw_params_get_period_time(params
??????????????????????????????????? ?&val?&dir);
?
while(1)??
{???????
rc?=?recvfrom(socket_descriptorbuffersize0(struct?sockaddr?*)&sin&sin_len);?
fprintf(stderr
“?%s/n“
snd_strerror(rc));??
rc?=?snd_pcm_writei(handle?buffer?sizeof(buffer));??????????
????????}??

??
????
???
??
??
close(socket_descriptor);??
snd_pcm_drain(handle);
snd_pcm_close(handle);
free(buffer);
return?0;
}

評論

共有 條評論