⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 audio_hp.c

📁 用JAVA写的MP3,MP2,MP1解码源代码
💻 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 + -