📄 audio_hp.c
字号:
#include <sys/types.h>#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <stdlib.h>#include "audio.h"#include <sys/audio.h>int audio_open(struct audio_info_struct *ai){ struct audio_describe ades; struct audio_gain again; int i,audio; ai->fn = open("/dev/audio",O_RDWR); if(ai->fn < 0) return -1; ioctl(ai->fn,AUDIO_DESCRIBE,&ades); if(ai->gain != -1) { if(ai->gain > ades.max_transmit_gain) { fprintf(stderr,"your gainvalue was to high -> set to maximum.\n"); ai->gain = ades.max_transmit_gain; } if(ai->gain < ades.min_transmit_gain) { fprintf(stderr,"your gainvalue was to low -> set to minimum.\n"); ai->gain = ades.min_transmit_gain; } again.channel_mask = AUDIO_CHANNEL_0 | AUDIO_CHANNEL_1; ioctl(ai->fn,AUDIO_GET_GAINS,&again); again.cgain[0].transmit_gain = ai->gain; again.cgain[1].transmit_gain = ai->gain; again.channel_mask = AUDIO_CHANNEL_0 | AUDIO_CHANNEL_1; ioctl(ai->fn,AUDIO_SET_GAINS,&again); } if(ai->output != -1) { if(ai->output == AUDIO_OUT_INTERNAL_SPEAKER) ioctl(ai->fn,AUDIO_SET_OUTPUT,AUDIO_OUT_SPEAKER); else if(ai->output == AUDIO_OUT_HEADPHONES) ioctl(ai->fn,AUDIO_SET_OUTPUT,AUDIO_OUT_HEADPHONE); else if(ai->output == AUDIO_OUT_LINE_OUT) ioctl(ai->fn,AUDIO_SET_OUTPUT,AUDIO_OUT_LINE); } if(ai->rate == -1) ai->rate = 44100; for(i=0;i<ades.nrates;i++) { if(ai->rate == ades.sample_rate[i]) break; } if(i == ades.nrates) { fprintf(stderr,"Can't set sample-rate to %ld.\n",ai->rate); i = 0; } if(audio_reset_parameters(ai) < 0) return -1; return ai->fn;}int audio_reset_parameters(struct audio_info_struct *ai){ int ret; ret = audio_set_format(ai); if(ret >= 0) ret = audio_set_channels(ai); if(ret >= 0) ret = audio_set_rate(ai); return ret;}int audio_rate_best_match(struct audio_info_struct *ai){ return 0;}int audio_set_rate(struct audio_info_struct *ai){ if(ai->rate >= 0) return ioctl(ai->fn,AUDIO_SET_SAMPLE_RATE,ai->rate); return 0;}int audio_set_channels(struct audio_info_struct *ai){ return ioctl(ai->fn,AUDIO_SET_CHANNELS,ai->channels);}int audio_set_format(struct audio_info_struct *ai){ int fmt; switch(ai->format) { case -1: case AUDIO_FORMAT_SIGNED_16: default: fmt = AUDIO_FORMAT_LINEAR16BIT; break; case AUDIO_FORMAT_UNSIGNED_8: fprintf(stderr,"unsigned 8 bit linear not supported\n"); return -1; case AUDIO_FORMAT_SIGNED_8: fprintf(stderr,"signed 8 bit linear not supported\n"); return -1; case AUDIO_FORMAT_ALAW_8: fmt = AUDIO_FORMAT_ALAW; break; case AUDIO_FORMAT_ULAW_8: fmt = AUDIO_FORMAT_ULAW; break; } return ioctl(ai->fn,AUDIO_SET_DATA_FORMAT,fmt);}int audio_get_formats(struct audio_info_struct *ai){ return AUDIO_FORMAT_SIGNED_16;}int audio_play_samples(struct audio_info_struct *ai,unsigned char *buf,int len){ return write(ai->fn,buf,len);}int audio_close(struct audio_info_struct *ai){ close (ai->fn); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -