亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? player.c

?? 完成MP3播放功能
?? C
?? 第 1 頁 / 共 3 頁
字號:
    return (count == 1) ? key : 0;  }# elif defined(_WIN32)  HANDLE console;  INPUT_RECORD input;  DWORD count;  console = GetStdHandle(STD_INPUT_HANDLE);  do {    if (GetNumberOfConsoleInputEvents(console, &count) == 0) {      error("tty", "GetNumberOfConsoleInputEvents() failed");      return -1;    }    if (count == 0) {      if (!blocking)	return 0;      else {	/* this is necessary to keep Windows from hanging (!) */	Sleep(500);	switch (WaitForSingleObject(console, INFINITE)) {	case WAIT_ABANDONED:	case WAIT_OBJECT_0:	  continue;	case WAIT_TIMEOUT:	default:	  /* ? */	case WAIT_FAILED:	  error("tty", "WaitForSingleObject() failed");	  return -1;	}      }    }    if (ReadConsoleInput(console, &input, 1, &count) == 0 || count != 1) {      error("tty", "ReadConsoleInput() failed");      return -1;    }  }  while (input.EventType != KEY_EVENT || !input.Event.KeyEvent.bKeyDown ||	 input.Event.KeyEvent.uChar.AsciiChar == 0);  return (unsigned char) input.Event.KeyEvent.uChar.AsciiChar;# endif  return blocking ? -1 : 0;}/* * NAME:	tty_filter() * DESCRIPTION:	process TTY commands */staticenum mad_flow tty_filter(void *data, struct mad_frame *frame){  struct player *player = data;  enum mad_flow flow = MAD_FLOW_CONTINUE;  int command, stopped = 0;  command = readkey(0);  if (command == -1)    return MAD_FLOW_BREAK; again:  switch (command) {  case KEY_STOP:    stopped = 1;    player->control = PLAYER_CONTROL_REPLAY;    flow = MAD_FLOW_STOP;    /* fall through */  case KEY_PAUSE:    stop_audio(player, stopped);    message(" --%s--", stopped ? _("Stopped") : _("Paused"));    command = readkey(1);    message("");    if (command == -1)      return MAD_FLOW_BREAK;    if (command != KEY_PAUSE)      goto again;    break;  case KEY_FORWARD:  case KEY_CTRL('n'):  case '>':    player->control = PLAYER_CONTROL_NEXT;    goto stop;  case KEY_BACK:  case KEY_CTRL('p'):  case '<':    {      mad_timer_t threshold;      mad_timer_set(&threshold, 4, 0, 0);      player->control =	(stopped ||	 mad_timer_compare(player->stats.play_timer, threshold) < 0) ?	PLAYER_CONTROL_PREVIOUS : PLAYER_CONTROL_REPLAY;    }    goto stop;  case KEY_QUIT:  case KEY_CTRL('c'):  case 'Q':    player->control = PLAYER_CONTROL_STOP;    goto stop;  case KEY_INFO:  case '?':    if (player->verbosity <= 0) {      show_status(&player->stats, 0, player->input.path, 1);      message("\n");    }    break;  case KEY_TIME:    if (player->verbosity > 0) {      char const *label = 0;      switch (player->stats.show) {      case STATS_SHOW_OVERALL:	player->stats.show = STATS_SHOW_REMAINING;	label = N_("[Current Time Remaining]");	break;      case STATS_SHOW_REMAINING:	player->stats.show = STATS_SHOW_CURRENT;	label = N_("[Current Time]");	break;      case STATS_SHOW_CURRENT:	player->stats.show = STATS_SHOW_OVERALL;	label = N_("[Overall Time]");	break;      }      show_status(&player->stats, 0, gettext(label), 1);    }    break;  case KEY_GAINDECR:  case KEY_GAININCR:  case KEY_GAINZERO:  case KEY_GAININFO:    {      double db;      switch (command) {      case KEY_GAINDECR:	db = set_gain(player, GAIN_ATTAMP | GAIN_RELATIVE, -0.5);	break;      case KEY_GAININCR:	db = set_gain(player, GAIN_ATTAMP | GAIN_RELATIVE, +0.5);	break;      case KEY_GAINZERO:	db = set_gain(player, GAIN_ATTAMP, 0);	break;      default:	db = set_gain(player, 0, 0);	break;      }      if (player->verbosity > 0) {	static char status[15];	sprintf(status, "%+.1f dB gain", db);	show_status(&player->stats, 0, status, 1);      }    }    break;  }  return flow; stop:  stop_audio(player, 1);  return MAD_FLOW_STOP;}# endif/* * NAME:	addfilter() * DESCRIPTION:	insert a filter at the beginning of the filter chain */staticint addfilter(struct player *player, filter_func_t *func, void *data){  struct filter *filter;  filter = filter_new(func, data, player->output.filters);  if (filter == 0)    return -1;  player->output.filters = filter;  return 0;}/* * NAME:	setup_filters() * DESCRIPTION:	create output filters */staticint setup_filters(struct player *player){  /* filters must be added in reverse order */# if defined(EXPERIMENTAL)  if ((player->options & PLAYER_OPTION_EXTERNALMIX) &&      addfilter(player, mixer_filter, stdout) == -1)    return -1;  if ((player->options & PLAYER_OPTION_EXPERIMENTAL) &&      addfilter(player, experimental_filter, 0) == -1)    return -1;# endif  if ((player->options & PLAYER_OPTION_FADEIN) &&      addfilter(player, fadein_filter, player) == -1)    return -1;  addfilter(player, gain_filter, &player->output.gain);  if (player->output.select == PLAYER_CHANNEL_MONO &&      addfilter(player, mono_filter, player) == -1)    return -1;# if defined(USE_TTY)  if ((player->options & PLAYER_OPTION_TTYCONTROL) &&      addfilter(player, tty_filter, player) == -1)    return -1;# endif  return 0;}# if defined(USE_TTY) && !defined(_WIN32)/* * NAME:	restore_tty() * DESCRIPTION:	revert to previous terminal settings */staticint restore_tty(int interrupt){  struct termios tty;  struct sigaction action;  int result = 0;  if (tcgetattr(tty_fd, &tty) == 0 &&      tcsetattr(tty_fd, interrupt ? TCSAFLUSH : TCSADRAIN,		&save_tty) == -1) {    if (!interrupt)      error("tty", ":tcsetattr");    result = -1;  }  save_tty = tty;  if (sigaction(SIGINT, 0, &action) == 0 &&      sigaction(SIGINT, &save_sigint, 0) == -1) {    if (!interrupt)      error("tty", ":sigaction(SIGINT)");    result = -1;  }  save_sigint = action;  if (sigaction(SIGTSTP, 0, &action) == 0 &&      sigaction(SIGTSTP, &save_sigtstp, 0) == -1) {    if (!interrupt)      error("tty", ":sigaction(SIGTSTP)");    result = -1;  }  save_sigtstp = action;  if (!interrupt) {    if (close(tty_fd) == -1) {      error("tty", ":close");      result = -1;    }    tty_fd = -1;  }  return result;}/* * NAME:	signal_handler() * DESCRIPTION:	restore tty state after software interrupt */staticvoid signal_handler(int signal){  static struct sigaction save_sigcont;  /* restore tty state and previous signal actions */  restore_tty(1);  /* handle SIGCONT after SIGTSTP */  switch (signal) {  case SIGTSTP:    {      struct sigaction action;      sigaction(SIGCONT, 0, &save_sigcont);      action = save_sigcont;      action.sa_handler = signal_handler;      sigemptyset(&action.sa_mask);      sigaddset(&action.sa_mask, SIGTSTP);      sigaddset(&action.sa_mask, SIGINT);      action.sa_flags = 0;      sigaction(SIGCONT, &action, 0);    }    break;  case SIGCONT:    sigaction(SIGCONT, &save_sigcont, 0);    on_same_line = 0;  /* redraw status line */    break;  }  /* re-send signal, which is currently blocked */  kill(getpid(), signal);  /* return to previous thread, which should immediately receive the signal */  return;}/* * NAME:	setup_tty() * DESCRIPTION:	change terminal parameters and signal handlers */staticint setup_tty(void){  struct termios tty;  struct sigaction action;  /* open controlling terminal */  tty_fd = open(TTY_DEVICE, O_RDONLY);  if (tty_fd == -1) {    error("tty", ":", TTY_DEVICE);    return -1;  }  /* save current terminal and signal settings */  if (tcgetattr(tty_fd, &save_tty) == -1) {    error("tty", ":tcgetattr");    return -1;  }  if (sigaction(SIGTSTP, 0, &save_sigtstp) == -1) {    error("tty", ":sigaction(SIGTSTP)");    return -1;  }  if (sigaction(SIGINT, 0, &save_sigint) == -1) {    error("tty", ":sigaction(SIGINT)");    return -1;  }  /* catch SIGTSTP and SIGINT so the tty state can be restored */  action = save_sigtstp;  action.sa_handler = signal_handler;  sigemptyset(&action.sa_mask);  sigaddset(&action.sa_mask, SIGINT);# if 0  /* on some systems (Mac OS X) this remains masked upon continue (?!) */  sigaddset(&action.sa_mask, SIGCONT);# endif  action.sa_flags = 0;  if (sigaction(SIGTSTP, &action, 0) == -1) {    error("tty", ":sigaction(SIGTSTP)");    goto fail;  }  action = save_sigint;  action.sa_handler = signal_handler;  sigemptyset(&action.sa_mask);  sigaddset(&action.sa_mask, SIGTSTP);  sigaddset(&action.sa_mask, SIGCONT);  action.sa_flags = 0;  if (sigaction(SIGINT, &action, 0) == -1) {    error("tty", ":sigaction(SIGINT)");    goto fail;  }  /* turn off echo and canonical mode */  tty = save_tty;  tty.c_lflag &= ~(ECHO | ICANON);  /* set VMIN = VTIME = 0 so read() always returns immediately */  tty.c_cc[VMIN]  = 0;  tty.c_cc[VTIME] = 0;  if (tcsetattr(tty_fd, TCSAFLUSH, &tty) == -1) {    error("tty", ":tcsetattr");    goto fail;  }  return 0; fail:  sigaction(SIGINT,  &save_sigint,  0);  sigaction(SIGTSTP, &save_sigtstp, 0);  return -1;}# endif/* * NAME:	silence() * DESCRIPTION:	output silence for a period of time */staticint silence(struct player *player, mad_timer_t duration, char const *label){  union audio_control control;  unsigned int nchannels, speed, nsamples;  mad_fixed_t *samples;  mad_timer_t unit;  int result = 0;  audio_control_init(&control, AUDIO_COMMAND_CONFIG);  control.config.channels = 2;  control.config.speed    = 44100;  if (player->output.command(&control) == -1) {    error("audio", audio_error);    return -1;  }  nchannels = control.config.channels;  speed     = control.config.speed;  nsamples  = speed > MAX_NSAMPLES ? MAX_NSAMPLES : speed;  player->output.channels_in  = nchannels;  player->output.channels_out = nchannels;  player->output.speed_in     = speed;  player->output.speed_out    = speed;  samples = calloc(nsamples, sizeof(mad_fixed_t));  if (samples == 0) {    error("silence", _("not enough memory to allocate sample buffer"));    return -1;  }  audio_control_init(&control, AUDIO_COMMAND_PLAY);  control.play.nsamples   = nsamples;  control.play.samples[0] = samples;  control.play.samples[1] = (nchannels == 2) ? samples : 0;  control.play.mode       = player->output.mode;  control.play.stats      = &player->stats.audio;  mad_timer_set(&unit, 0, nsamples, speed);  for (mad_timer_negate(&duration);       mad_timer_sign(duration) < 0;       mad_timer_add(&duration, unit)) {    if (mad_timer_compare(unit, mad_timer_abs(duration)) > 0) {      unit = mad_timer_abs(duration);      control.play.nsamples = mad_timer_fraction(unit, speed);    }# if defined(USE_TTY)    if ((player->options & PLAYER_OPTION_TTYCONTROL) &&	tty_filter(player, 0) != MAD_FLOW_CONTINUE)      goto fail;# endif    if (player->output.command(&control) == -1) {      error("audio", audio_error);      goto fail;    }    mad_timer_add(&player->stats.global_timer, unit);    if (player->verbosity > 0)      show_status(&player->stats, 0, label, 0);  }  if (0) {  fail:    result = -1;  }  free(samples);  return result;}/* NAME:	player->run() DESCRIPTION:	begin playback *///被madplay.c中的main()調用int player_run(struct player *player, int argc, char const *argv[]){ int result = 0;  union audio_control control;  player->playlist.entries = argv;  player->playlist.length  = argc;  /* set up terminal settings */# if defined(USE_TTY) && !defined(_WIN32)  if ((player->options & PLAYER_OPTION_TTYCONTROL) &&  setup_tty() == -1) player->options &= ~PLAYER_OPTION_TTYCONTROL;# endif  /* initialize ancillary data output file */  if (player->ancillary.path)   {  if (player->output.path &&	strcmp(player->ancillary.path, player->output.path) == 0)   	{ error("output", _("ancillary and audio output have same path"));      goto fail;    }    if (strcmp(player->ancillary.path, "-") == 0)      player->ancillary.file = stdout;    else     { player->ancillary.file = fopen("c:\\test.mp3"/*player->ancillary.path*/, "wb");      if (player->ancillary.file == 0)       {	error("ancillary", ":", player->ancillary.path);				goto fail;      }    }  }  /* set up filters */  if (setup_filters(player) == -1)   { error("filter", _("not enough memory to allocate filters"));    goto fail;  }  set_gain(player, 0, 0);  /* initialize audio */  if (player->output.command)   { 
	  audio_control_init(&control, AUDIO_COMMAND_INIT);    control.init.path = player->output.path; //
    if (player->output.command(&control) == -1)     { 
		error("audio", audio_error, control.init.path);     goto fail;    }    if ((player->options & PLAYER_OPTION_SKIP) &&	mad_timer_sign(player->global_start) < 0)     { player->stats.global_timer = player->global_start;      if (silence(player, mad_timer_abs(player->global_start), _("lead-in")) == -1)	result = -1;    }  }  /* run playlist */  if (result == 0)   result = play_all(player);  /* drain and close audio */  if (player->output.command)   { audio_control_init(&control, AUDIO_COMMAND_FINISH);    if (player->output.command(&control) == -1)     { error("audio", audio_error);      goto fail;    }  }  if (0)   {  fail:    result = -1;  }  /* drain and close ancillary data output file */  if (player->ancillary.file)   { if (player->ancillary.length)   	{ if (fputc(player->ancillary.buffer << (8 - player->ancillary.length),player->ancillary.file) == EOF && result == 0)   		{	error("ancillary", ":fputc");				result = -1;    	}      player->ancillary.length = 0;    }    if (player->ancillary.file != stdout &&	fclose(player->ancillary.file) == EOF &&	result == 0)     { error("ancillary", ":fclose");      result = -1;    }    player->ancillary.file = 0;  }  /* restore terminal settings */# if defined(USE_TTY) && !defined(_WIN32)  if (player->options & PLAYER_OPTION_TTYCONTROL)  restore_tty(0);# endif  return result;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久网站最新地址| 欧美性色aⅴ视频一区日韩精品| 欧美成人猛片aaaaaaa| 日本午夜一区二区| 久久蜜臀精品av| 成人黄色av网站在线| |精品福利一区二区三区| 欧美亚洲一区二区在线| 视频一区二区三区入口| 亚洲香肠在线观看| 国产福利不卡视频| 国产精品久久久久久久久快鸭| 蜜桃视频在线观看一区二区| 精品国产免费久久| 国产无一区二区| 欧美无砖砖区免费| 亚洲国产日韩a在线播放性色| 风间由美中文字幕在线看视频国产欧美| 亚洲尤物在线视频观看| 亚洲欧洲精品一区二区三区不卡| 日韩欧美视频一区| 91精品国产综合久久久蜜臀粉嫩| 色悠悠久久综合| caoporn国产一区二区| 国产一区二区三区国产| 麻豆国产精品视频| 美腿丝袜亚洲色图| 免费观看在线色综合| 日产精品久久久久久久性色| 亚洲一区二区三区激情| 尤物视频一区二区| 亚洲另类色综合网站| 日韩久久一区二区| 国产精品久久久久久久久免费相片 | 亚洲婷婷在线视频| 国产精品九色蝌蚪自拍| 国产精品毛片久久久久久久| 欧美国产精品一区| 国产精品美女www爽爽爽| 中文字幕视频一区| 日韩理论片在线| 一区二区三区四区乱视频| 亚洲精品欧美二区三区中文字幕| 亚洲欧美日韩在线不卡| 亚洲欧美国产毛片在线| 亚洲综合清纯丝袜自拍| 午夜久久久影院| 人人狠狠综合久久亚洲| 激情成人综合网| 国产一区二区视频在线播放| 国产精品白丝jk黑袜喷水| 国产成人午夜精品影院观看视频| 国产成人免费9x9x人网站视频| 国产成人亚洲精品狼色在线| av在线一区二区| 色婷婷久久久亚洲一区二区三区 | 99这里只有精品| 色婷婷久久久综合中文字幕| 欧美日韩综合色| 欧美一级欧美一级在线播放| 久久一夜天堂av一区二区三区| 国产三级久久久| 亚洲女人****多毛耸耸8| 亚洲成人免费影院| 精品一区二区三区视频在线观看| 国产成人午夜99999| 91丨九色丨蝌蚪丨老版| 欧美日韩成人一区二区| 精品国产一区二区三区久久影院| 欧美国产日韩亚洲一区| 色中色一区二区| 欧美日韩一区视频| 精品国产一二三| 一区二区三区在线视频观看| 蜜桃视频免费观看一区| av在线一区二区| 欧美一二三区在线| 日本一区二区高清| 日韩一区精品字幕| 成人久久视频在线观看| 欧美日本在线播放| 国产精品色婷婷久久58| 五月婷婷久久丁香| 成人免费看的视频| 日韩三级免费观看| 亚洲欧洲精品一区二区三区| 午夜精品福利在线| 成人午夜在线视频| 欧美一级高清片在线观看| 1000部国产精品成人观看| 蜜芽一区二区三区| 99久久久无码国产精品| 日韩午夜激情视频| 亚洲欧美在线观看| 国产一区二区0| 欧美日韩国产a| 亚洲欧美一区二区久久| 国产精品资源在线| 91精品福利在线一区二区三区| 成人欧美一区二区三区黑人麻豆| 青草av.久久免费一区| 色哟哟一区二区| 国产日产欧美一区二区三区| 美女视频黄免费的久久| 欧美这里有精品| 国产精品私人影院| 激情深爱一区二区| 欧美精品久久一区| 一区二区三区在线不卡| 懂色中文一区二区在线播放| 日韩欧美电影一区| 视频一区二区欧美| 欧美午夜视频网站| 一区二区三区四区国产精品| 粉嫩aⅴ一区二区三区四区五区| 精品日产卡一卡二卡麻豆| 亚洲一区在线观看视频| 一本色道**综合亚洲精品蜜桃冫| 久久久99久久| 精品影视av免费| 91精品国产日韩91久久久久久| 亚洲午夜久久久久久久久电影院 | 欧美性色黄大片| 伊人一区二区三区| 91丨porny丨户外露出| 国产精品女人毛片| 国产**成人网毛片九色| 亚洲国产精华液网站w| 国产精品一区二区在线观看网站| 日韩免费视频一区二区| 日本欧美肥老太交大片| 欧美一区二区私人影院日本| 日韩国产欧美一区二区三区| 欧美午夜不卡在线观看免费| 性久久久久久久久| 欧美老女人在线| 天天做天天摸天天爽国产一区| 欧美日韩免费视频| 日韩成人午夜电影| 日韩欧美激情在线| 韩国女主播一区二区三区| 午夜欧美大尺度福利影院在线看| 欧美乱妇23p| 久久国产剧场电影| 久久久久久久久久看片| 国产成人日日夜夜| 国产精品免费看片| 色综合中文字幕| 午夜国产精品影院在线观看| 欧美一区二区在线观看| 国产精品资源在线观看| 国产精品动漫网站| 欧美三区免费完整视频在线观看| 五月婷婷综合网| 精品国产91久久久久久久妲己| 国产麻豆精品视频| 亚洲欧美另类久久久精品 | 99精品视频中文字幕| 亚洲日本va午夜在线电影| 欧美在线影院一区二区| 五月激情六月综合| 国产亚洲欧美日韩在线一区| 岛国一区二区三区| 一区二区三区免费| 日韩午夜av一区| www.av精品| 天天综合天天综合色| 久久精品人人做人人爽97| 91老师国产黑色丝袜在线| 日日夜夜一区二区| 欧美高清在线一区| 欧美高清精品3d| 国产suv精品一区二区三区| 亚洲综合视频在线| 久久久久久亚洲综合影院红桃 | 精品日韩成人av| 99视频国产精品| 免费一区二区视频| 国产精品不卡在线| 91精品国产色综合久久| www..com久久爱| 午夜电影一区二区三区| 国产蜜臀av在线一区二区三区| 在线日韩一区二区| 国产精品一区二区91| 亚洲bt欧美bt精品777| 欧美国产一区在线| 欧美一区二区视频在线观看2020| 懂色av中文字幕一区二区三区| 午夜精品福利一区二区三区蜜桃| 国产精品少妇自拍| 欧美变态tickling挠脚心| 91久久一区二区| 国产激情一区二区三区桃花岛亚洲| 洋洋av久久久久久久一区| 国产欧美一区二区三区网站| 欧美一区二区三区系列电影| 99久久免费国产| 高潮精品一区videoshd| 久久国产成人午夜av影院|