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

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

?? smp16bit.c

?? 十七種模擬器源代碼 非常有用的作課程設計不可缺少的
?? C
字號:
/******************************************************************************//*                                                                            *//*     16-BIT SAMPLE PLAYBACK (odd samples - nichibutsu dac, cabal adpcm)     *//*                                                                            *//******************************************************************************/#include "raine.h"#include "sasound.h"#include "smp16bit.h"#ifdef RAINE_DEBUG#include "debug.h"#include "ingame.h"#endif/*todo:- different sample rate for each sample, maybe also volume and panning?*/static DEF_INLINE int aLimit( int val, int max, int min ){  if ( val > max )    val = max;  else if ( val < min )    val = min;  return val;}static int ad_sample;static int ad_index;static int ad_index_table[8] ={  -1, -1, -1, -1, 2, 4, 6, 8};static int ad_offset_table[49] ={  0x0010, 0x0011, 0x0013, 0x0015, 0x0017, 0x0019, 0x001c, 0x001f,  0x0022, 0x0025, 0x0029, 0x002d, 0x0032, 0x0037, 0x003c, 0x0042,  0x0049, 0x0050, 0x0058, 0x0061, 0x006b, 0x0076, 0x0082, 0x008f,  0x009d, 0x00ad, 0x00be, 0x00d1, 0x00e6, 0x00fd, 0x0117, 0x0133,  0x0151, 0x0173, 0x0198, 0x01c1, 0x01ee, 0x0220, 0x0256, 0x0292,  0x02d4, 0x031c, 0x036c, 0x03c3, 0x0424, 0x048e, 0x0502, 0x0583,  0x0610};static void ad_decode(int ad_code){  int ad_base;  int ad_offset;  ad_base   = ad_offset_table[ad_index];  ad_offset = ad_base/8;    if( ad_code&0x01 ) ad_offset += ad_base>>2;  if( ad_code&0x02 ) ad_offset += ad_base>>1;  if( ad_code&0x04 ) ad_offset += ad_base;  if( ad_code&0x08 ) ad_offset  = 0 - ad_offset;  ad_sample = aLimit( ad_sample + ad_offset , 0x7FF, -0x800 );  ad_index = aLimit( ad_index + ad_index_table[ad_code&7], 48, 0 );}// Type 0 - adpcm (cabal)void decode_sample_adpcm(UINT8 *src, UINT32 size, UINT16 *dest, int volume){   UINT32 ta;   ad_sample = 0;   ad_index = 0;   for(ta=0;ta<size;ta++){      ad_decode((src[ta]>>4)&0x0F);      *dest++ = (INT16) aLimit((((ad_sample * 16) * volume)/16), 0x7FFF, -0x8000);      ad_decode((src[ta]>>0)&0x0F);      *dest++ = (INT16) aLimit((((ad_sample * 16) * volume)/16), 0x7FFF, -0x8000);   }}// Type 1 - 8bit dac (nichibutsu)void decode_sample_8bit(UINT8 *src, UINT32 size, UINT16 *dest, int volume){   UINT32 ta;   ad_sample = 0;   ad_index = 0;   for(ta=0;ta<size;ta++){      *dest++ = (INT16) aLimit(((((src[ta]-0x80) * 256) * volume)/16), 0x7FFF, -0x8000);   }}SMP16Rec SMP16_entry[SMP16BF_MAX], *SMP16;static int chip_max;static int sample_len;static int emu_rate;static int stream[SMP16BF_MAX];#define UPDATE_SHIFT (8)/**************************************************//*    sh start                                    *//**************************************************/int SMP16buffer_sh_start( struct SMP16buffer_interface *intf ){  char buf[40];  int ta, i;  int rate;  SMP16_ROM *rom;  SMP16_SAMPLE *sample_decode;  rate       = audio_sample_rate;  chip_max   = intf->num;  sample_len = rate / 60;  emu_rate   = sample_len * 60;  for( i = 0; i < chip_max; i++ ){    SMP16_entry[i].rate    = intf->sample_rate[i];    SMP16_entry[i].command = -1;    SMP16_entry[i].add     = (UINT32) (((float)intf->sample_rate[i] / (float)emu_rate)*(1<<UPDATE_SHIFT));    SMP16_entry[i].offset  = (UINT32) -1;    SMP16_entry[i].req_len = 0;    SMP16_entry[i].req_buf = NULL;    // rom bank base pointers    rom = intf->rom[i];    // Calculate sample count    ta=0;    while(rom[ta].data){       ta++;    }    SMP16_entry[i].samples = ta;    // Make decode rom data    sample_decode = (SMP16_SAMPLE *) malloc(SMP16_entry[i].samples * sizeof(SMP16_SAMPLE));    SMP16_entry[i].sample_decode = sample_decode;    // malloc error    if(!sample_decode)       SMP16_entry[i].samples = 0;    // Decode them    for(ta = 0; (UINT32)ta < SMP16_entry[i].samples; ta++){       switch(rom[ta].type){       case 0x00:       sample_decode[ta].len  = (UINT32)  (rom[ta].size * 2);       sample_decode[ta].data = (INT16 *) malloc(sample_decode[ta].len * 2);       decode_sample_adpcm(rom[ta].data, rom[ta].size, sample_decode[ta].data, 24);       break;       case 0x01:       sample_decode[ta].len  = (UINT32)  (rom[ta].size * 1);       sample_decode[ta].data = (INT16 *) malloc(sample_decode[ta].len * 2);       decode_sample_8bit(rom[ta].data, rom[ta].size, sample_decode[ta].data, 24);       break;       }    }    // Stream setup    sprintf( buf, "SMP16 #%d", i );    stream[i] = stream_init( buf, emu_rate, 16, i, SMP16buffer_UpdateOne );  }  return 0;}/**************************************************//*    sh end                                      *//**************************************************/void SMP16buffer_sh_stop( void ){  int ta,i;  SMP16_SAMPLE *sample_decode;  for(i = 0; i < chip_max; i++){    sample_decode = SMP16_entry[i].sample_decode;    for(ta = 0; (UINT32)ta < SMP16_entry[i].samples; ta++){       if(sample_decode[ta].data) free(sample_decode[ta].data);    }  }  chip_max = 0;}/**************************************************//*    request                                     *//**************************************************/void SMP16buffer_request( int num, int code ){   SMP16_SAMPLE *sample_decode;   if( num >= chip_max ) return;   SMP16 = &SMP16_entry[num];   sample_decode = SMP16->sample_decode;   if((sample_decode) && ((UINT32)code < SMP16->samples)){      SMP16->req_buf = (INT16 *) (sample_decode[code].data);      SMP16->req_len = (sample_decode[code].len) << UPDATE_SHIFT;      SMP16->offset  = 0;   }   else{      SMP16->req_buf = NULL;   }   if(!(SMP16->req_buf)){      SMP16->offset = (UINT32) -1;#ifdef RAINE_DEBUG      print_ingame(120,"Now SMP16(%d) not samp[%02x]", num, code );#endif   }}/**************************************************//*    read status                                 *//**************************************************/// 0 = not playing// 1 = playingint SMP16buffer_status( int num ){  int ret;  if( num >= chip_max ) return 0;  ret = 0;  SMP16 = &SMP16_entry[num];  if( SMP16->offset != (UINT32) -1 ) ret |= 1;  return ret;}/**************************************************//*    update                                      *//**************************************************/void SMP16buffer_UpdateOne( int num, void *buffer, int length ){   int data;   INT16 *sp;   if(!length) return;   sp = (INT16 *) buffer;   SMP16 = &SMP16_entry[num];   do{      data = 0;      if(SMP16->offset != (UINT32) -1){         data += *( SMP16->req_buf + (SMP16->offset >> UPDATE_SHIFT) );         if( (SMP16->offset += SMP16->add) >= SMP16->req_len )            SMP16->offset = (UINT32) -1;      }      *sp++ = aLimit( data, 32767, -32768 );   }while(--length);}/**************** end of file ****************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成av人影院在线观看网| 亚洲柠檬福利资源导航| 色呦呦日韩精品| 成人精品一区二区三区四区| 国产成人免费在线| 丁香亚洲综合激情啪啪综合| 国产精品白丝jk白祙喷水网站 | aa级大片欧美| 成人丝袜高跟foot| www.欧美亚洲| 91极品视觉盛宴| 91精品久久久久久久99蜜桃 | 久久久三级国产网站| 精品久久久久一区| 久久精品网站免费观看| 国产欧美一区二区在线| 中文字幕永久在线不卡| 自拍偷拍国产精品| 天天av天天翘天天综合网色鬼国产| 亚洲成人资源网| 韩国欧美一区二区| 成人一级片网址| 在线亚洲精品福利网址导航| 欧美酷刑日本凌虐凌虐| 日韩免费视频一区| 国产精品国产三级国产普通话三级| 亚洲视频中文字幕| 首页综合国产亚洲丝袜| 国产精品系列在线观看| 欧美视频你懂的| 久久五月婷婷丁香社区| 一个色妞综合视频在线观看| 麻豆freexxxx性91精品| 99久久久国产精品免费蜜臀| 欧美精选午夜久久久乱码6080| 久久人人爽人人爽| 亚洲一二三区在线观看| 国产成人综合在线| 欧美一区二区精品在线| 国产精品久久久久久久蜜臀| 午夜免费久久看| 国产 欧美在线| 日韩一区二区视频在线观看| 亚洲天堂成人在线观看| 国产综合久久久久久久久久久久 | 欧美日韩免费一区二区三区| 精品福利一二区| 亚洲国产视频a| 成人综合在线观看| 精品免费视频一区二区| 午夜精品福利一区二区三区蜜桃| 成人午夜视频福利| 精品国产人成亚洲区| 亚洲韩国一区二区三区| 99久久er热在这里只有精品66| 久久影院视频免费| 日本不卡一二三| 欧美日韩午夜影院| 亚洲最大的成人av| 在线视频国产一区| 亚洲精品高清在线观看| 不卡视频一二三四| 国产亚洲精品免费| 国产精品一区二区久激情瑜伽 | 久久一区二区三区四区| 免费日本视频一区| 91精品国产综合久久久久| 亚洲午夜电影在线| 91成人免费网站| 亚洲乱码日产精品bd| av电影天堂一区二区在线观看| 中文字幕高清不卡| 成人av在线电影| 成人欧美一区二区三区黑人麻豆| 成人精品视频.| 亚洲女女做受ⅹxx高潮| 欧洲亚洲精品在线| 亚洲一区二区三区四区的| 欧美四级电影网| 亚洲成人一区二区| 欧美高清视频不卡网| 青青草成人在线观看| 日韩精品一区二区三区三区免费| 蜜桃视频在线观看一区| 久久久久久影视| 国产69精品久久99不卡| 国产精品国产自产拍高清av王其| 97久久精品人人做人人爽 | 欧美日韩高清一区二区三区| 亚洲午夜电影在线观看| 欧美一区二区女人| 国产精品99久久久久久似苏梦涵| 国产婷婷色一区二区三区四区| 粉嫩久久99精品久久久久久夜| 国产精品色呦呦| 在线一区二区三区四区五区 | 欧美日韩中文字幕精品| 无吗不卡中文字幕| 国产片一区二区| 欧美在线制服丝袜| 狠狠色丁香婷综合久久| 亚洲免费观看高清完整版在线观看| 欧美午夜在线观看| 久久精品国产一区二区| 国产精品毛片久久久久久| 这里只有精品视频在线观看| 国产高清不卡二三区| 午夜影院在线观看欧美| 久久亚洲精品国产精品紫薇| 在线观看区一区二| 国产精品一级片| 婷婷综合久久一区二区三区| 国产欧美一区二区在线观看| 欧美日本不卡视频| 99精品欧美一区二区三区综合在线| 丝袜脚交一区二区| 中日韩av电影| 91精品国产欧美一区二区18| av在线综合网| 国产精品一区免费视频| 亚洲成a人片在线不卡一二三区| 国产日产欧美一区二区三区| 在线播放中文字幕一区| av中文字幕一区| 国产一区在线看| 人禽交欧美网站| 亚洲成人精品在线观看| 亚洲同性同志一二三专区| 日韩精品一区二区三区三区免费| 色婷婷久久久综合中文字幕 | 免费不卡在线视频| 亚洲一区在线播放| 亚洲欧洲日韩在线| 国产精品视频一二三区| 精品国产乱码久久久久久免费| 欧美日韩一区中文字幕| 色诱亚洲精品久久久久久| 99精品视频一区| 不卡高清视频专区| 粉嫩av一区二区三区粉嫩| 激情文学综合网| 老司机精品视频导航| 日日摸夜夜添夜夜添精品视频 | 久久国产精品区| 日韩中文字幕麻豆| 午夜精品久久久久久| 午夜电影一区二区| 亚洲.国产.中文慕字在线| 亚洲精品久久久蜜桃| 亚洲理论在线观看| 亚洲二区视频在线| 亚洲成人福利片| 视频一区二区中文字幕| 午夜成人免费电影| 丝袜亚洲另类欧美| 免费亚洲电影在线| 精品一区二区成人精品| 国内精品伊人久久久久av影院| 美女视频一区二区| 国产在线播放一区| 成人免费电影视频| 91久久香蕉国产日韩欧美9色| 91蜜桃免费观看视频| 欧美影视一区在线| 欧美一三区三区四区免费在线看 | 欧美一区二区三区四区高清| 久久99国产精品久久99果冻传媒| 日日摸夜夜添夜夜添亚洲女人| 午夜精品久久久久久久99樱桃| 亚洲大型综合色站| 免费在线看成人av| 国产一区二区调教| 北条麻妃国产九九精品视频| 不卡在线视频中文字幕| 在线观看日韩高清av| 欧美一区二区三区精品| 久久久www免费人成精品| 国产精品福利一区| 五月开心婷婷久久| 国产成人av网站| 欧美日韩电影在线播放| 337p日本欧洲亚洲大胆色噜噜| 国产精品网站在线播放| 亚洲国产日韩av| 国产成人免费在线观看| 欧美日韩精品欧美日韩精品| 久久久午夜电影| 亚洲v日本v欧美v久久精品| 国产麻豆精品theporn| 99热在这里有精品免费| 91精品国产麻豆| 亚洲图片激情小说| 国产一区二区精品久久99| 91久久精品一区二区二区| 欧美大片顶级少妇| 亚洲香蕉伊在人在线观| 国产成人精品免费看| 日韩久久久久久| 亚洲国产日韩一级| 色婷婷精品久久二区二区蜜臀av |