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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? audio_nas.c

?? 用JAVA寫的MP3,MP2,MP1解碼源代碼
?? C
字號:
/*  *  simple audio Lib ..  *  Network Audio System? (NAS) */#include <sys/types.h>#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <stdlib.h>#include <audio/audiolib.h>#include <audio/soundlib.h>#include "audio.h"typedef struct{    AuServer            *aud;    AuFlowID            flow;    AuDeviceAttributes  *da;    int                 numDevices;    char                *buf;    AuUint32            buf_size;    AuUint32            buf_cnt;    AuBool              data_sent;    AuBool              finished;} InfoRec, *InfoPtr;#define NAS_SOUND_PORT_DURATION 5 /* seconds */#define NAS_SOUND_LOW_WATER_MARK 25 /* percent */#define NAS_MAX_FORMAT 10 /* currently, there are 7 supported formats */static InfoRec info;/* NAS specific routines */static voidnas_sendData(AuServer *aud, InfoPtr i, AuUint32 numBytes){    if (numBytes < i->buf_cnt) {        AuWriteElement(aud, i->flow, 0, numBytes, i->buf, AuFalse, NULL);        memmove(i->buf, i->buf + numBytes, i->buf_cnt - numBytes);        i->buf_cnt = i->buf_cnt - numBytes;    }    else {         AuWriteElement(aud, i->flow, 0, i->buf_cnt, i->buf,                        (numBytes > i->buf_cnt), NULL);         i->buf_cnt = 0;    }    i->data_sent = AuTrue;}static AuBoolnas_eventHandler(AuServer *aud, AuEvent *ev, AuEventHandlerRec *handler){    InfoPtr         i = (InfoPtr) handler->data;    switch (ev->type)    {        case AuEventTypeMonitorNotify:            i->finished = AuTrue;            break;       case AuEventTypeElementNotify:           {               AuElementNotifyEvent *event = (AuElementNotifyEvent *) ev;               switch (event->kind)               {                   case AuElementNotifyKindLowWater:                       nas_sendData(aud, i, event->num_bytes);                       break;                   case AuElementNotifyKindState:                       switch (event->cur_state)                       {                           case AuStatePause:                               if (event->reason != AuReasonUser)                                   nas_sendData(aud, i, event->num_bytes);                               break;                            case AuStateStop:                                i->finished = AuTrue;                                break;                       }               }           }    }    return AuTrue;}void nas_createFlow(struct audio_info_struct *ai){    AuDeviceID      device = AuNone;    AuElement       elements[2];    unsigned char   format;    AuUint32        buf_samples;    int             i;     switch(ai->format) {    case AUDIO_FORMAT_SIGNED_16:    default:		if (((char) *(short *)"x")=='x') /* ugly, but painless */			format = AuFormatLinearSigned16LSB; /* little endian */		else		format = AuFormatLinearSigned16MSB; /* big endian */        break;    case AUDIO_FORMAT_UNSIGNED_8:        format = AuFormatLinearUnsigned8;        break;    case AUDIO_FORMAT_SIGNED_8:        format = AuFormatLinearSigned8;        break;    case AUDIO_FORMAT_ULAW_8:        format = AuFormatULAW8;        break;    }    /* look for an output device */    for (i = 0; i < AuServerNumDevices(info.aud); i++)       if (((AuDeviceKind(AuServerDevice(info.aud, i)) ==              AuComponentKindPhysicalOutput) &&             AuDeviceNumTracks(AuServerDevice(info.aud, i))             ==  ai->channels )) {            device = AuDeviceIdentifier(AuServerDevice(info.aud, i));            break;       }    if (device == AuNone) {       fprintf(stderr,                "Couldn't find an output device providing %d channels\n",                ai->channels);        exit(1);    }    /* set gain */    if(ai->gain >= 0) {        info.da = AuGetDeviceAttributes(info.aud, device, NULL);        if ((info.da)!=NULL) {            AuDeviceGain(info.da) = AuFixedPointFromSum(ai->gain, 0);            AuSetDeviceAttributes(info.aud, AuDeviceIdentifier(info.da),                                  AuCompDeviceGainMask, info.da, NULL);        }        else            fprintf(stderr,"audio/gain: setable Volume/PCM-Level not supported");    }        if (!(info.flow = AuCreateFlow(info.aud, NULL))) {        fprintf(stderr, "Couldn't create flow\n");        exit(1);    }    buf_samples = ai->rate * NAS_SOUND_PORT_DURATION;    AuMakeElementImportClient(&elements[0],        /* element */                              (unsigned short) ai->rate,                                                   /* rate */                              format,              /* format */                              ai->channels,        /* channels */                              AuTrue,              /* ??? */                              buf_samples,         /* max samples */                              (AuUint32) (buf_samples / 100                                  * NAS_SOUND_LOW_WATER_MARK),                                                   /* low water mark */                              0,                   /* num actions */                              NULL);               /* actions */    AuMakeElementExportDevice(&elements[1],        /* element */                              0,                   /* input */                              device,              /* device */                              (unsigned short) ai->rate,                                                   /* rate */                              AuUnlimitedSamples,  /* num samples */                              0,                   /* num actions */                              NULL);               /* actions */    AuSetElements(info.aud,                        /* Au server */                  info.flow,                       /* flow ID */                  AuTrue,                          /* clocked */                  2,                               /* num elements */                  elements,                        /* elements */                  NULL);                           /* return status */    AuRegisterEventHandler(info.aud,               /* Au server */                           AuEventHandlerIDMask,   /* value mask */                           0,                      /* type */                           info.flow,              /* id */                           nas_eventHandler,       /* callback */                           (AuPointer) &info);     /* data */    info.buf_size = buf_samples * ai->channels * AuSizeofFormat(format);    info.buf = (char *) malloc(info.buf_size);    if (info.buf == NULL) {        fprintf(stderr, "Unable to allocate input/output buffer of size %ld\n",             info.buf_size);        exit(1);    }    info.buf_cnt = 0;    info.data_sent = AuFalse;    info.finished = AuFalse;        AuStartFlow(info.aud,                          /* Au server */                info.flow,                         /* id */                NULL);                             /* status */}void nas_flush(){    AuEvent         ev;        while ((!info.data_sent) && (!info.finished)) {        AuNextEvent(info.aud, AuTrue, &ev);        AuDispatchEvent(info.aud, &ev);    }    info.data_sent = AuFalse;}/* required functions */int audio_open(struct audio_info_struct *ai){    if(!ai)        return -1;    if (!(info.aud = AuOpenServer(ai->device, 0, NULL, 0, NULL, NULL))) {        if (ai->device==NULL)            fprintf(stderr,"could not open default NAS server\n");        else            fprintf(stderr,"could not open NAS server %s\n",                    ai->device);        exit(1);    }    info.buf_size = 0;            return 0;}    int audio_reset_parameters(struct audio_info_struct *ai){    int ret;    ret = audio_close(ai);    if (ret >= 0)        ret = audio_open(ai);    return ret;}extern int audio_rate_best_match(struct audio_info_struct *ai){    int maxRate, minRate;    if(!ai || ai->rate < 0)        return -1;    maxRate =  AuServerMaxSampleRate(info.aud);    minRate =  AuServerMinSampleRate(info.aud);    if (ai->rate > maxRate) ai->rate = maxRate;    if (ai->rate < minRate) ai->rate = minRate;    return 0;}int audio_set_rate(struct audio_info_struct *ai){    return 0;}int audio_set_channels(struct audio_info_struct *ai){    return 0;}int audio_set_format(struct audio_info_struct *ai){    return 0;}int audio_get_formats(struct audio_info_struct *ai){    int i, j, k, ret;    ret=0;    j = AuServerNumFormats(info.aud);    for (i=0; i<j; i++) {        k=AuServerFormat(info.aud,i);        switch (k)        {        case AuFormatULAW8:            ret |= AUDIO_FORMAT_ULAW_8;            break;        case AuFormatLinearUnsigned8:            ret |= AUDIO_FORMAT_UNSIGNED_8;            break;        case AuFormatLinearSigned8:            ret |= AUDIO_FORMAT_SIGNED_8;            break;        case AuFormatLinearSigned16LSB:            ret |= AUDIO_FORMAT_SIGNED_16;            break;        }    }    return ret;}int audio_play_samples(struct audio_info_struct *ai,unsigned char *buf,int len){    int buf_cnt = 0;    if (info.buf_size == 0) nas_createFlow(ai);        while ((info.buf_cnt + (len - buf_cnt)) >  info.buf_size) {        memcpy(info.buf + info.buf_cnt,               buf + buf_cnt,               (info.buf_size - info.buf_cnt));        buf_cnt += (info.buf_size - info.buf_cnt);        info.buf_cnt += (info.buf_size - info.buf_cnt);        nas_flush();    }    memcpy(info.buf + info.buf_cnt,           buf + buf_cnt,           (len - buf_cnt));    info.buf_cnt += (len - buf_cnt);        return len;}int audio_close(struct audio_info_struct *ai){    if (info.aud == NULL) {        return 0;    }        if (info.buf_size == 0) {        /* Au server opened, but not yet initialized */        AuCloseServer(info.aud);        return 0;    }            while (!info.finished) {        nas_flush();    }    AuCloseServer(info.aud);    free(info.buf);        return 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩成人一区| www..com久久爱| 欧美一三区三区四区免费在线看| 一区二区三区中文字幕精品精品 | 国产宾馆实践打屁股91| 26uuu亚洲综合色| 国产成人综合网| 国产精品不卡在线观看| 97精品国产露脸对白| 艳妇臀荡乳欲伦亚洲一区| 欧美性猛交xxxx黑人交| 日韩精品视频网| 久久一夜天堂av一区二区三区| 另类成人小视频在线| 国产精品欧美极品| 欧美性猛交xxxx黑人交| 激情综合色综合久久综合| 国产精品情趣视频| 在线看不卡av| 韩国成人在线视频| 亚洲免费av在线| 日韩视频中午一区| 97久久久精品综合88久久| 日本免费新一区视频| 欧美国产在线观看| 欧美日韩国产片| 岛国精品在线播放| 午夜欧美视频在线观看| 国产欧美精品一区| 欧美欧美欧美欧美首页| 国产不卡视频在线播放| 午夜久久久久久| 国产精品福利电影一区二区三区四区 | 91久久精品一区二区三| 蜜桃视频在线观看一区二区| 国产精品久久久久毛片软件| 欧美久久久一区| eeuss影院一区二区三区| 日本vs亚洲vs韩国一区三区二区| 国产精品人妖ts系列视频| 欧美一区二区在线观看| 91在线观看高清| 国产一区二区伦理| 香蕉加勒比综合久久| 国产精品久久久久久久浪潮网站| 91精品国产综合久久国产大片| 99国产精品久久久久久久久久| 日韩vs国产vs欧美| 夜夜嗨av一区二区三区网页 | 91福利在线导航| 成人a免费在线看| 国产一区二区伦理片| 偷拍一区二区三区四区| 亚洲蜜臀av乱码久久精品蜜桃| 久久精品一区二区三区av| 3d动漫精品啪啪1区2区免费 | 亚洲欧洲av另类| 国产午夜亚洲精品不卡| 欧美一区二区在线看| 欧美日韩免费在线视频| 色综合一个色综合| 波波电影院一区二区三区| 韩国毛片一区二区三区| 蜜臀久久99精品久久久久宅男 | 欧美精品xxxxbbbb| 色婷婷狠狠综合| 99re这里只有精品视频首页| 国产乱妇无码大片在线观看| 久久精品99国产精品日本| 婷婷综合五月天| 亚洲成av人片在线| 亚洲高清久久久| 天天综合天天做天天综合| 亚洲国产一区二区视频| 亚洲综合区在线| 亚洲综合一区二区三区| 一区二区三区在线免费| 亚洲三级免费观看| 亚洲精品视频在线观看免费 | 欧美三级资源在线| 欧美群妇大交群的观看方式| 欧美三级欧美一级| 91精品久久久久久久91蜜桃| 91.com视频| 日韩欧美一级特黄在线播放| 精品少妇一区二区三区| 久久亚洲一级片| 国产偷国产偷精品高清尤物| 亚洲国产精品成人综合| 亚洲欧美自拍偷拍| 亚洲444eee在线观看| 久久国产精品区| 成人综合在线观看| av一本久道久久综合久久鬼色| 99久久精品国产精品久久| 欧美性受xxxx黑人xyx| 91精品在线免费| 久久久精品国产99久久精品芒果 | 激情国产一区二区| 成人小视频在线观看| 91免费观看视频在线| 精品视频色一区| 欧美精品一区二区三区四区| 国产精品免费久久| 亚洲综合激情网| 日本不卡一二三区黄网| 国产成人久久精品77777最新版本| 风间由美一区二区av101| 一本色道a无线码一区v| 欧美理论在线播放| 久久精品这里都是精品| 亚洲青青青在线视频| 奇米精品一区二区三区四区| 国产精品12区| 欧美性受极品xxxx喷水| 久久久久久久av麻豆果冻| 一区二区在线电影| 精品一二线国产| 色综合中文字幕国产 | 国产女主播视频一区二区| 亚洲美女屁股眼交| 理论片日本一区| 色综合夜色一区| 久久久久青草大香线综合精品| 亚洲精品免费一二三区| 国产一区 二区| 在线播放中文一区| 成人欧美一区二区三区1314| 麻豆视频观看网址久久| 91在线精品秘密一区二区| 日韩欧美国产电影| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | www.综合网.com| 91精品国产手机| 亚洲制服丝袜av| 99在线热播精品免费| 久久先锋影音av鲁色资源网| 亚洲国产精品自拍| 99re8在线精品视频免费播放| 亚洲精品一区二区三区四区高清| 亚洲精品精品亚洲| 成人精品高清在线| 久久久夜色精品亚洲| 日韩精品一卡二卡三卡四卡无卡| 91一区二区三区在线播放| 精品久久久久久综合日本欧美| 亚洲最新视频在线观看| 91一区二区在线| 欧美国产一区在线| 国产乱码精品一区二区三区五月婷| 欧美日韩国产在线观看| 一区二区在线观看视频| 成人18精品视频| 国产人成亚洲第一网站在线播放| 免费人成网站在线观看欧美高清| 欧美三级乱人伦电影| 亚洲综合在线视频| 91老师片黄在线观看| 国产精品久久久久久久久动漫| 国产揄拍国内精品对白| 欧美r级在线观看| 另类小说视频一区二区| 欧美电影精品一区二区| 麻豆91在线观看| 日韩美女视频在线| 国内精品嫩模私拍在线| 久久婷婷色综合| 国产精品911| 国产亚洲va综合人人澡精品 | 亚洲色图欧美激情| 99在线精品免费| 亚洲精品欧美激情| 欧美写真视频网站| 午夜视频一区在线观看| 欧美精品久久一区二区三区| 婷婷亚洲久悠悠色悠在线播放| 欧美日韩中文另类| 蜜桃av噜噜一区| 久久久久国产成人精品亚洲午夜| 狠狠色丁香久久婷婷综合丁香| 久久综合国产精品| 成人福利视频网站| 亚洲黄色免费网站| 欧美疯狂做受xxxx富婆| 免费人成网站在线观看欧美高清| 日韩欧美国产一区二区三区| 久久99久久99| 国产精品久久三| 欧美色综合影院| 久久99久久久久| 国产精品久久久久久久久动漫 | 26uuu亚洲婷婷狠狠天堂| 国产精品一区免费视频| 亚洲色欲色欲www在线观看| 欧美日韩aaaaaa| 国产福利91精品一区二区三区| 日韩一区在线免费观看| 欧美一区三区二区| 成人一区二区三区| 午夜视频一区二区|