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

📄 mixer.c

📁 自己移植的linux下的流媒体播放器原代码,支持mms协议,支持ftp和http协议.
💻 C
字号:
#include <string.h>#ifndef __MINGW32__#include <sys/ioctl.h>#endif#include <fcntl.h>#include <stdio.h>#include <unistd.h>#include "config.h"#include "libao2/audio_out.h"#include "libaf/af.h"#include "mixer.h"#include "help_mp.h"char * mixer_device=NULL;char * mixer_channel=NULL;int soft_vol = 0;float soft_vol_max = 110.0;void mixer_getvolume(mixer_t *mixer, float *l, float *r){  ao_control_vol_t vol;  *l=0; *r=0;  if(mixer->audio_out){    if(soft_vol ||        CONTROL_OK != mixer->audio_out->control(AOCONTROL_GET_VOLUME,&vol)) {      if (!mixer->afilter)        return;      else {        float db_vals[AF_NCH];        if (!af_control_any_rev(mixer->afilter,               AF_CONTROL_VOLUME_LEVEL | AF_CONTROL_GET, db_vals))          db_vals[0] = db_vals[1] = 1.0;        else        af_from_dB (2, db_vals, db_vals, 20.0, -200.0, 60.0);        vol.left = (db_vals[0] / (soft_vol_max / 100.0)) * 100.0;        vol.right = (db_vals[1] / (soft_vol_max / 100.0)) * 100.0;      }    }    *r=vol.right;    *l=vol.left;  }}void mixer_setvolume(mixer_t *mixer, float l, float r){  ao_control_vol_t vol;  vol.right=r; vol.left=l;  if(mixer->audio_out){    if(soft_vol ||        CONTROL_OK != mixer->audio_out->control(AOCONTROL_SET_VOLUME,&vol)) {      if (!mixer->afilter)        return;      else {        // af_volume uses values in dB        float db_vals[AF_NCH];        int i;        db_vals[0] = (l / 100.0) * (soft_vol_max / 100.0);        db_vals[1] = (r / 100.0) * (soft_vol_max / 100.0);        for (i = 2; i < AF_NCH; i++) {          db_vals[i] = ((l + r) / 100.0) * (soft_vol_max / 100.0) / 2.0;        }        af_to_dB (AF_NCH, db_vals, db_vals, 20.0);        if (!af_control_any_rev(mixer->afilter,               AF_CONTROL_VOLUME_LEVEL | AF_CONTROL_SET, db_vals)) {          mp_msg(MSGT_GLOBAL, MSGL_INFO, MSGTR_InsertingAfVolume);          if (af_add(mixer->afilter, "volume")) {            if (!af_control_any_rev(mixer->afilter,                   AF_CONTROL_VOLUME_LEVEL | AF_CONTROL_SET, db_vals)) {              mp_msg(MSGT_GLOBAL, MSGL_ERR, MSGTR_NoVolume);              return;            }          }	}      }    }  } mixer->muted=0;}void mixer_incvolume(mixer_t *mixer){ float mixer_l, mixer_r; mixer_getvolume(mixer, &mixer_l, &mixer_r); mixer_l += mixer->volstep; if ( mixer_l > 100 ) mixer_l = 100; mixer_r += mixer->volstep; if ( mixer_r > 100 ) mixer_r = 100; mixer_setvolume(mixer, mixer_l, mixer_r);}void mixer_decvolume(mixer_t *mixer){ float mixer_l, mixer_r; mixer_getvolume(mixer, &mixer_l, &mixer_r); mixer_l -= mixer->volstep; if ( mixer_l < 0 ) mixer_l = 0; mixer_r -= mixer->volstep; if ( mixer_r < 0 ) mixer_r = 0; mixer_setvolume(mixer, mixer_l, mixer_r);}void mixer_getbothvolume(mixer_t *mixer, float *b){ float mixer_l, mixer_r; mixer_getvolume(mixer, &mixer_l, &mixer_r); *b = ( mixer_l + mixer_r ) / 2;}void mixer_mute(mixer_t *mixer){ if (mixer->muted) mixer_setvolume(mixer, mixer->last_l, mixer->last_r);  else   {     mixer_getvolume(mixer, &mixer->last_l, &mixer->last_r);    mixer_setvolume(mixer, 0, 0);    mixer->muted=1;   }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -