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

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

?? pa_unix_oss.c

?? Audacity是一款用於錄音和編輯聲音的、免費(fèi)的開放源碼軟體。它可以執(zhí)行於Mac OS X、Microsoft Windows、GNU/Linux和其它作業(yè)系統(tǒng)
?? C
字號(hào):
/* * PortAudio Portable Real-Time Audio Library * Latest Version at: http://www.portaudio.com * Linux OSS Implementation by douglas repetto and Phil Burk * * Copyright (c) 1999-2000 Phil Burk * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files * (the "Software"), to deal in the Software without restriction, * including without limitation the rights to use, copy, modify, merge, * publish, distribute, sublicense, and/or sell copies of the Software, * and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * Any person wishing to distribute modifications to the Software is * requested to send the modifications to the original developer so that * they can be incorporated into the canonical version. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * *//* Modification history:   20020621: pa_unix_oss.c split into pa_unix.c, pa_unix.h, pa_unix_oss.c by       Augustus Saunders. See pa_unix.c for previous history. Pa_FlushStream       added by Augustus Saunders for Solaris compatibility.   PLB20021018 - Fill device info table with actual sample rates instead of wished for rates.               - Allow stream to open if sample rate within 10% of desired rate.*/#include "pa_unix.h"#ifdef __linux__#include <linux/soundcard.h>#else#include <machine/soundcard.h> /* JH20010905 */#endif#ifndef AFMT_S16_NE#define AFMT_S16_NE  Get_AFMT_S16_NE()/********************************************************************* * Some versions of OSS do not define AFMT_S16_NE. So check CPU. * PowerPC is Big Endian. X86 is Little Endian. */int Get_AFMT_S16_NE( void ){    long testData = 1;     char *ptr = (char *) &testData;    int isLittle = ( *ptr == 1 ); /* Does address point to least significant byte? */    return isLittle ? AFMT_S16_LE : AFMT_S16_BE;}#endif /* AFMT_S16_NE *//********************************************************************* * Try to open the named device. * If it opens, try to set various rates and formats and fill in  * the device info structure. */PaError Pa_QueryDevice( const char *deviceName, internalPortAudioDevice *pad ){    int result = paHostError;    int tempDevHandle;    int numChannels, maxNumChannels;    int format;    int numSampleRates;    int sampleRate;    int numRatesToTry;    int lastRate;    int ratesToTry[9] = {96000, 48000, 44100, 32000, 24000, 22050, 16000, 11025, 8000};    int i;    /* douglas:     we have to do this querying in a slightly different order. apparently     some sound cards will give you different info based on their settings.      e.g. a card might give you stereo at 22kHz but only mono at 44kHz.     the correct order for OSS is: format, channels, sample rate         */    if ( (tempDevHandle = open(deviceName,O_WRONLY|O_NONBLOCK))  == -1 )    {        DBUG(("Pa_QueryDevice: could not open %s\n", deviceName ));        return paHostError;    }    /*  Ask OSS what formats are supported by the hardware. */    pad->pad_Info.nativeSampleFormats = 0;    if (ioctl(tempDevHandle, SNDCTL_DSP_GETFMTS, &format) == -1)    {        ERR_RPT(("Pa_QueryDevice: could not get format info\n" ));        goto error;    }    if( format & AFMT_U8 )     pad->pad_Info.nativeSampleFormats |= paUInt8;    if( format & AFMT_S16_NE ) pad->pad_Info.nativeSampleFormats |= paInt16;    /* Negotiate for the maximum number of channels for this device. PLB20010927     * Consider up to 16 as the upper number of channels.     * Variable numChannels should contain the actual upper limit after the call.     * Thanks to John Lazzaro and Heiko Purnhagen for suggestions.     */    maxNumChannels = 0;    for( numChannels = 1; numChannels <= 16; numChannels++ )    {        int temp = numChannels;        DBUG(("Pa_QueryDevice: use SNDCTL_DSP_CHANNELS, numChannels = %d\n", numChannels ))        if(ioctl(tempDevHandle, SNDCTL_DSP_CHANNELS, &temp) < 0 )        {            /* ioctl() failed so bail out if we already have stereo */            if( numChannels > 2 ) break;        }        else        {            /* ioctl() worked but bail out if it does not support numChannels.             * We don't want to leave gaps in the numChannels supported.             */            if( (numChannels > 2) && (temp != numChannels) ) break;            DBUG(("Pa_QueryDevice: temp = %d\n", temp ))            if( temp > maxNumChannels ) maxNumChannels = temp; /* Save maximum. */        }    }    /* The above negotiation may fail for an old driver so try this older technique. */    if( maxNumChannels < 1 )    {        int stereo = 1;        if(ioctl(tempDevHandle, SNDCTL_DSP_STEREO, &stereo) < 0)        {            maxNumChannels = 1;        }        else        {            maxNumChannels = (stereo) ? 2 : 1;        }        DBUG(("Pa_QueryDevice: use SNDCTL_DSP_STEREO, maxNumChannels = %d\n", maxNumChannels ))    }    pad->pad_Info.maxOutputChannels = maxNumChannels;    DBUG(("Pa_QueryDevice: maxNumChannels = %d\n", maxNumChannels))    /* During channel negotiation, the last ioctl() may have failed. This can     * also cause sample rate negotiation to fail. Hence the following, to return     * to a supported number of channels. SG20011005 */    {        int temp = maxNumChannels;        if( temp > 2 ) temp = 2; /* use most reasonable default value */        ioctl(tempDevHandle, SNDCTL_DSP_CHANNELS, &temp);    }    /* FIXME - for now, assume maxInputChannels = maxOutputChannels.     *    Eventually do separate queries for O_WRONLY and O_RDONLY    */    pad->pad_Info.maxInputChannels = pad->pad_Info.maxOutputChannels;    DBUG(("Pa_QueryDevice: maxInputChannels = %d\n",          pad->pad_Info.maxInputChannels))    /* Determine available sample rates by trying each one and seeing result.     * OSS often supports funky rates such as 44188 instead of 44100!     */    numSampleRates = 0;    lastRate = 0;    numRatesToTry = sizeof(ratesToTry)/sizeof(int);    for (i = 0; i < numRatesToTry; i++)    {        sampleRate = ratesToTry[i];        if (ioctl(tempDevHandle, SNDCTL_DSP_SPEED, &sampleRate) >= 0 ) /* PLB20010817 */        {            /* Use whatever rate OSS tells us. PLB20021018 */            if (sampleRate != lastRate)            {                DBUG(("Pa_QueryDevice: adding sample rate: %d\n", sampleRate))                pad->pad_SampleRates[numSampleRates] = (float)sampleRate;                numSampleRates++;                lastRate = sampleRate;            }            else            {                DBUG(("Pa_QueryDevice: dang - got sample rate %d again!\n", sampleRate))            }        }    }    DBUG(("Pa_QueryDevice: final numSampleRates = %d\n", numSampleRates))    if (numSampleRates==0)   /* HP20010922 */    {        /* Desparate attempt to keep running even though no good rates found! */        ERR_RPT(("Pa_QueryDevice: no supported sample rate (or SNDCTL_DSP_SPEED ioctl call failed). Force 44100 Hz\n" ));        pad->pad_SampleRates[numSampleRates++] = 44100;    }    pad->pad_Info.numSampleRates = numSampleRates;    pad->pad_Info.sampleRates = pad->pad_SampleRates; /* use pointer to embedded array */    pad->pad_Info.name = deviceName;    result = paNoError;error:    /* We MUST close the handle here or we won't be able to reopen it later!!!  */    close(tempDevHandle);    return result;}/*******************************************************************************************/PaError Pa_SetupDeviceFormat( int devHandle, int numChannels, int sampleRate ){    PaError result = paNoError;    int     tmp;    /* Set format, channels, and rate in this order to keep OSS happy. */    /* Set data format. FIXME - handle more native formats. */    tmp = AFMT_S16_NE;    if( ioctl(devHandle,SNDCTL_DSP_SETFMT,&tmp) == -1)    {        ERR_RPT(("Pa_SetupDeviceFormat: could not SNDCTL_DSP_SETFMT\n" ));        return paHostError;    }    if( tmp != AFMT_S16_NE )    {        ERR_RPT(("Pa_SetupDeviceFormat: HW does not support AFMT_S16_NE\n" ));        return paHostError;    }    /* Set number of channels. */    tmp = numChannels;    if (ioctl(devHandle, SNDCTL_DSP_CHANNELS, &numChannels) == -1)    {        ERR_RPT(("Pa_SetupDeviceFormat: could not SNDCTL_DSP_CHANNELS\n" ));        return paHostError;    }    if( tmp != numChannels)    {        ERR_RPT(("Pa_SetupDeviceFormat: HW does not support %d channels\n", numChannels ));        return paHostError;    }    /* Set playing frequency. */    tmp = sampleRate;    if( ioctl(devHandle,SNDCTL_DSP_SPEED,&tmp) == -1)    {        ERR_RPT(("Pa_SetupDeviceFormat: could not SNDCTL_DSP_SPEED\n" ));        return paHostError;    }    else if( tmp != sampleRate )    {        int percentError = abs( (100 * (sampleRate - tmp)) / sampleRate );        PRINT(("Pa_SetupDeviceFormat: warning - requested sample rate = %d Hz - closest = %d\n",            sampleRate, tmp ));        /* Allow sample rate within 10% off of requested rate. PLB20021018        * Sometimes OSS uses a funky rate like 44188 instead of 44100.        */        if( percentError > 10 )        {            ERR_RPT(("Pa_SetupDeviceFormat: HW does not support %d Hz sample rate\n",sampleRate ));           return paHostError;        }    }        return result;}PaError Pa_SetupOutputDeviceFormat( int devHandle, int numChannels, int sampleRate ){  return Pa_SetupDeviceFormat(devHandle, numChannels, sampleRate);}PaError Pa_SetupInputDeviceFormat( int devHandle, int numChannels, int sampleRate ){  return Pa_SetupDeviceFormat(devHandle, numChannels, sampleRate);}/********************************************************************************************* Set number of fragments and size of fragments to achieve desired latency.*/static int CalcHigherLogTwo( int n ){    int log2 = 0;    while( (1<<log2) < n ) log2++;    return log2;}void Pa_SetLatency( int devHandle, int numBuffers, int framesPerBuffer, int channelsPerFrame  ){    int     tmp;    int     bufferSize, powerOfTwo;    /* Increase size of buffers and reduce number of buffers to reduce latency inside driver. */    while( numBuffers > 8 )    {        numBuffers = (numBuffers + 1) >> 1;        framesPerBuffer = framesPerBuffer << 1;    }    /* calculate size of buffers in bytes */    bufferSize = framesPerBuffer * channelsPerFrame * sizeof(short); /* FIXME - other sizes? */    /* Calculate next largest power of two */    powerOfTwo = CalcHigherLogTwo( bufferSize );    DBUG(("Pa_SetLatency: numBuffers = %d, framesPerBuffer = %d, powerOfTwo = %d\n",          numBuffers, framesPerBuffer, powerOfTwo ));    /* Encode info into a single int */    tmp=(numBuffers<<16) + powerOfTwo;    if(ioctl(devHandle,SNDCTL_DSP_SETFRAGMENT,&tmp) == -1)    {        ERR_RPT(("Pa_SetLatency: could not SNDCTL_DSP_SETFRAGMENT\n" ));        /* Don't return an error. Best to just continue and hope for the best. */        ERR_RPT(("Pa_SetLatency: numBuffers = %d, framesPerBuffer = %d, powerOfTwo = %d\n",                 numBuffers, framesPerBuffer, powerOfTwo ));    }}/***********************************************************************/PaTimestamp Pa_StreamTime( PortAudioStream *stream ){    internalPortAudioStream *past = (internalPortAudioStream *) stream;    PaHostSoundControl *pahsc;    count_info    info;    unsigned int  delta;    unsigned int  numchan;    if( past == NULL ) return paBadStreamPtr;        pahsc = (PaHostSoundControl *) past->past_DeviceData;    if( pahsc->pahsc_NativeOutputBuffer )    {       ioctl(pahsc->pahsc_OutputHandle, SNDCTL_DSP_GETOPTR, &info);       numchan = past->past_NumOutputChannels;    }    else    {       ioctl(pahsc->pahsc_InputHandle, SNDCTL_DSP_GETIPTR, &info);       numchan = past->past_NumInputChannels;    }        delta = info.bytes - pahsc->pahsc_LastPosPtr;        if (delta > 0x000FFFFF)    	delta = 0;    	    return (pahsc->pahsc_LastStreamBytes + delta) / (numchan * sizeof(short));}void Pa_UpdateStreamTime(PaHostSoundControl *pahsc){    count_info   info;    unsigned int delta;  /* Update current stream time (using a double so that     we don't wrap around like info.bytes does) */  if( pahsc->pahsc_NativeOutputBuffer )  {    ioctl(pahsc->pahsc_OutputHandle, SNDCTL_DSP_GETOPTR, &info);  }  else  {    ioctl(pahsc->pahsc_InputHandle, SNDCTL_DSP_GETIPTR, &info);  }  delta = info.bytes - pahsc->pahsc_LastPosPtr;    if (delta <= 0x000FFFFF) {  	pahsc->pahsc_LastStreamBytes += delta;  	pahsc->pahsc_LastPosPtr = info.bytes;	}}PaError Pa_FlushStream(int devHandle){  /* AS: This doesn't do anything under OSS; it was added for Solaris.*/  return paNoError;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产精品成人| 精品区一区二区| 美女被吸乳得到大胸91| 国产精品久久久久三级| 日韩欧美一卡二卡| 91精彩视频在线| 成人午夜碰碰视频| 久久机这里只有精品| 亚洲综合色婷婷| 日本一区二区免费在线| 欧美一级视频精品观看| 色噜噜狠狠色综合中国| 成人网在线免费视频| 久久99精品久久久久久动态图| 亚洲嫩草精品久久| 欧美激情综合五月色丁香| 欧美一级在线免费| 欧美日韩国产美| 色婷婷狠狠综合| 成人精品国产一区二区4080| 国产一区二区伦理| 老司机精品视频在线| 天堂在线一区二区| 亚洲国产视频在线| 亚洲综合免费观看高清在线观看| 国产精品美女久久久久aⅴ| 2023国产精品| 欧美精品一区二区在线观看| 91精品国产欧美一区二区18| 欧美日韩精品一区二区三区蜜桃| 99r精品视频| 91在线你懂得| 91色乱码一区二区三区| 成a人片亚洲日本久久| 成人午夜av电影| 成人av片在线观看| 成人久久18免费网站麻豆| 粉嫩欧美一区二区三区高清影视| 国产麻豆视频一区二区| 国产精品一区二区在线观看不卡| 国精产品一区一区三区mba桃花| 日韩福利电影在线观看| 三级亚洲高清视频| 日本女优在线视频一区二区| 午夜视黄欧洲亚洲| 青青草原综合久久大伊人精品| 青青草伊人久久| 久久66热偷产精品| 国产成人av一区二区| 大胆亚洲人体视频| 91丨porny丨户外露出| 91久久久免费一区二区| 欧美在线高清视频| 欧美一区二区三区小说| 精品久久一区二区三区| 久久久久国产精品人| 国产欧美一区视频| 亚洲免费在线观看视频| 五月激情综合网| 精品亚洲成a人| 成人高清在线视频| 欧美中文字幕一区| 欧美一级理论片| 日本一区二区综合亚洲| 亚洲女同一区二区| 日韩经典一区二区| 国产美女主播视频一区| 99re这里只有精品首页| 欧美日韩一区三区| 精品久久人人做人人爰| 国产精品高清亚洲| 亚洲成av人片在www色猫咪| 蜜桃一区二区三区在线观看| 夫妻av一区二区| 欧美色偷偷大香| 国产香蕉久久精品综合网| 亚洲视频在线一区二区| 日韩在线观看一区二区| 国产91在线|亚洲| 欧美日韩高清一区二区不卡| wwww国产精品欧美| 一区二区三区欧美在线观看| 免费在线一区观看| www.欧美色图| 日韩你懂的在线播放| 中文字幕欧美国产| 日韩av电影免费观看高清完整版在线观看| 国产精品一区一区| 欧美美女一区二区在线观看| 久久精品亚洲乱码伦伦中文| 亚洲国产欧美在线人成| 国产成人午夜视频| 欧美一区二视频| 亚洲欧美日本在线| 国产伦精品一区二区三区免费迷| 欧美性xxxxxxxx| 中文字幕成人av| 捆绑紧缚一区二区三区视频| 91久久久免费一区二区| 欧美激情中文不卡| 蜜臀av国产精品久久久久| 在线观看日韩国产| 中文字幕不卡在线| 国内久久精品视频| 6080亚洲精品一区二区| 综合色天天鬼久久鬼色| 国产麻豆精品在线观看| 欧美一区二区在线免费观看| 一区二区在线观看视频| 国产不卡视频在线观看| 欧美成人aa大片| 日韩激情一二三区| 欧美视频在线观看一区二区| 国产精品初高中害羞小美女文 | 图片区小说区国产精品视频| 成人午夜视频免费看| 欧美精品一区二区三区蜜桃视频| 亚洲午夜久久久| 色菇凉天天综合网| 最好看的中文字幕久久| 成人av手机在线观看| 国产丝袜在线精品| 国产精品综合av一区二区国产馆| 91精品国产高清一区二区三区| 亚洲二区在线观看| 在线视频一区二区免费| 亚洲另类春色国产| 91啦中文在线观看| 亚洲欧洲一区二区三区| www.日韩在线| 中文字幕亚洲一区二区av在线 | 欧美精品 国产精品| 亚洲与欧洲av电影| 欧美性猛片aaaaaaa做受| 亚洲特级片在线| 91麻豆国产自产在线观看| 亚洲人成影院在线观看| 成人黄色在线看| 综合色天天鬼久久鬼色| 91美女福利视频| 亚洲一区二区欧美日韩| 欧美日韩精品高清| 日韩和欧美一区二区三区| 91麻豆精品国产无毒不卡在线观看| 亚洲一二三四在线观看| 欧美日韩国产片| 蜜臀99久久精品久久久久久软件| 日韩欧美在线影院| 国产精品一区二区无线| 中文字幕二三区不卡| 色综合天天综合给合国产| 一区二区三区在线免费视频| 欧美亚洲综合网| 青青草国产精品97视觉盛宴| 欧美成人精品3d动漫h| 国产成人精品亚洲777人妖| 日本一区二区免费在线| 色综合一区二区三区| 日韩精品久久理论片| 欧美va亚洲va香蕉在线| 成人性视频免费网站| 一区二区视频在线看| 8x福利精品第一导航| 黄页视频在线91| 亚洲欧洲韩国日本视频| 欧美日本韩国一区| 国产精品乡下勾搭老头1| 亚洲欧美色综合| 欧美一区二区三区人| 国产a区久久久| 一区二区三区高清在线| 欧美成人精品福利| 91香蕉国产在线观看软件| 五月激情六月综合| 国产婷婷色一区二区三区四区| 一本大道av伊人久久综合| 秋霞国产午夜精品免费视频| 国产亚洲欧美日韩在线一区| 欧美专区亚洲专区| 国产精品一级片在线观看| 一区二区久久久久久| 精品区一区二区| 在线欧美日韩国产| 国产剧情av麻豆香蕉精品| 亚洲一区自拍偷拍| 久久久精品国产免大香伊| 欧美三级资源在线| 粉嫩在线一区二区三区视频| 日韩在线播放一区二区| 亚洲天堂中文字幕| 精品国产乱码久久久久久老虎| 91麻豆福利精品推荐| 国产中文字幕精品| 亚洲国产精品久久久男人的天堂 | 91免费看片在线观看| 国产一区二区三区黄视频 | 色天使色偷偷av一区二区| 九色综合国产一区二区三区| 一区二区三区精品| 国产精品伦理一区二区|