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

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

?? buffer.cpp

?? 一個KDE下的錄音程序
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <errno.h>#include <fcntl.h>#include <qobject.h>#include <qlistbox.h>#include <kmessagebox.h>#include <klocale.h>#include "byteorder.h"#include "sound.h"#include "buffer.moc"extern KLocale      *globalKlocale;/* ---------------------------------------------------------------------- */voidxperror(const char *msg){    char text[256];    sprintf(text,"%s: %s", msg, strerror(errno));    KMessageBox::error(NULL, text);}/* ---------------------------------------------------------------------- */AudioBuffer::AudioBuffer(){    size = 0;    busy = 0;    position = 0;    clippedsamples = 0;}AudioBuffer::~AudioBuffer() {}int   AudioBuffer::is_busy()     { return busy; }void  AudioBuffer::balloc(void){    busy++;    if (busy != 1)	fprintf(stderr,"alloc: buffer reference count bug: %d\n",busy);}void  AudioBuffer::bfree(void){    busy--;    if (busy != 0)	fprintf(stderr,"free: buffer reference count bug: %d\n",busy);}int   AudioBuffer::start_write(struct SOUNDPARAMS*) { return 0; }void  AudioBuffer::stop_write() {}struct SOUNDPARAMS* AudioBuffer::get_params() { return NULL; }int   AudioBuffer::get_size() { return 0; }char* AudioBuffer::name() { return NULL; }void* AudioBuffer::read_audio(int len) { return 0; }int   AudioBuffer::write_audio(int len, void *data) { return 0; }int   AudioBuffer::seek(int pos) { return 0; }int   AudioBuffer::tell() { return 0; }/* ---------------------------------------------------------------------- */#define BUFFER_SIZE   0x10000#define BUFFER_MASK   0x0ffff#define BUFFER_SHIFT       16RAMBuffer::RAMBuffer(){    static int counter = 0;    memset(&params,0,sizeof(struct SOUNDPARAMS));    sprintf(bufname,"buffer #%d",++counter);    buffers = (char**)malloc(sizeof(void*));    buffers[0] = (char*)malloc(BUFFER_SIZE);    bufcount = 1;    position = 0;}RAMBuffer::~RAMBuffer(){    int i;    for (i = 0; i < bufcount; i++) {	free(buffers[i]);    }    free(buffers);}intRAMBuffer::start_write(struct SOUNDPARAMS *p){    memcpy(&params,p,sizeof(struct SOUNDPARAMS));    return 0;}void RAMBuffer::stop_write() {};struct SOUNDPARAMS*RAMBuffer::get_params(){    return &params;}intRAMBuffer::get_size(){    return size;}char*RAMBuffer::name(){    return bufname;}void*RAMBuffer::read_audio(int len){    /* FIXME (?): one can't read over buffer boundaries */    char *ptr;        if (position+len > size)	return NULL;    ptr  = buffers[position>>BUFFER_SHIFT];    ptr += (position&BUFFER_MASK);    position += len;    return ptr;}intRAMBuffer::write_audio(int len, void *data){    /* dito for write - not over buffer boundaries */    if ((position>>BUFFER_SHIFT) >= bufcount) {	buffers = (char**)realloc(buffers,sizeof(void*)*(bufcount+1));	if (NULL == (buffers[bufcount] = (char*)malloc(BUFFER_SIZE)))	    return -1;	bufcount++;    }    memcpy(buffers[position>>BUFFER_SHIFT]+(position&BUFFER_MASK), data, len);    position += len;    if (size < position)	size = position;    return 0;}intRAMBuffer::seek(int pos){    if (pos > size)	return -1;    position = pos;    return position;}intRAMBuffer::tell(){    return position;}/* ---------------------------------------------------------------------- */FileBuffer::FileBuffer(){    memset(&params,0,sizeof(struct SOUNDPARAMS));    fd = -1;    size = position = 0;    bstart = bstop = 0;}FileBuffer::~FileBuffer(){    if (fd == -1)	return;    close(fd);}voidFileBuffer::init_header(){    /* stolen from cdda2wav */    int nBitsPerSample = 8;    if (params.format == FMT_16BIT)	nBitsPerSample = 16;    unsigned long nBlockAlign = params.channels * ((nBitsPerSample + 7) / 8);    unsigned long nAvgBytesPerSec = nBlockAlign * params.rate;    unsigned long temp = /* data length */ 0 +	sizeof(WAVEHDR) - sizeof(CHUNKHDR);	    fileheader.chkRiff.ckid    = cpu_to_le32(FOURCC_RIFF);    fileheader.fccWave         = cpu_to_le32(FOURCC_WAVE);    fileheader.chkFmt.ckid     = cpu_to_le32(FOURCC_FMT);    fileheader.chkFmt.dwSize   = cpu_to_le32(16);    fileheader.wFormatTag      = cpu_to_le16(WAVE_FORMAT_PCM);    fileheader.nChannels       = cpu_to_le16(params.channels);    fileheader.nSamplesPerSec  = cpu_to_le32(params.rate);    fileheader.nAvgBytesPerSec = cpu_to_le32(nAvgBytesPerSec);    fileheader.nBlockAlign     = cpu_to_le16(nBlockAlign);    fileheader.wBitsPerSample  = cpu_to_le16(nBitsPerSample);    fileheader.chkData.ckid    = cpu_to_le32(FOURCC_DATA);    fileheader.chkRiff.dwSize  = cpu_to_le32(temp);    fileheader.chkData.dwSize  = cpu_to_le32(0 /* data length */);}intFileBuffer::attach(const char *file){    int new_file = 0;        if (-1 != fd)	close(fd);        ro = 0;    position = 0;    size = 0;    offset = sizeof(WAVEHDR);    strcpy(filename,file);    if (-1 == (fd = open(filename,O_RDWR))) {	if (errno == ENOENT) {	    if (-1 == (fd = open(filename,O_RDWR|O_CREAT,0666))) {		xperror(i18n("can't create wav file"));		return -1;	    }	    new_file = 1;	} else {	    if (-1 == (fd = open(filename,O_RDONLY))) {		xperror(i18n("can't open wav file"));		return -1;	    } else		ro = 1;	}    }    fcntl(fd,F_SETFD,FD_CLOEXEC);    if (!new_file) {	read(fd,&fileheader,offset);	if (!IS_STD_WAV_HEADER(fileheader)) {#if 0	    /* nice for debugging, but annonying for everyday usage */	    KMessageBox::error(NULL, i18n("not a wav file"));#endif	    return -1;	}	if (le16_to_cpu(fileheader.wFormatTag) != WAVE_FORMAT_PCM) {	    KMessageBox::error(NULL,i18n("unsupported audio format"));	    return -1;	}	params.format = FMT_8BIT;	if (16 == le16_to_cpu(fileheader.wBitsPerSample))	    params.format = FMT_16BIT;	params.channels = le16_to_cpu(fileheader.nChannels);	params.rate = cpu_to_le32(fileheader.nSamplesPerSec);	size = le32_to_cpu(fileheader.chkData.dwSize);    }    return 0;}intFileBuffer::start_write(struct SOUNDPARAMS *p){    memcpy(&params,p,sizeof(struct SOUNDPARAMS));    init_header();    lseek(fd,0,SEEK_SET);    write(fd,&fileheader,offset);    return 0;}voidFileBuffer::stop_write(){    unsigned long temp = size + sizeof(WAVEHDR) - sizeof(CHUNKHDR);    fileheader.chkRiff.dwSize = cpu_to_le32(temp);    fileheader.chkData.dwSize = cpu_to_le32(size);    lseek(fd,0,SEEK_SET);    write(fd,&fileheader,offset);}struct SOUNDPARAMS*FileBuffer::get_params(){    return &params;}intFileBuffer::get_size(){    return size;}char*FileBuffer::name(){    return filename;}void*FileBuffer::read_audio(int len){    int rc;        if (position+len > size)	return NULL;    /* printf("[%d - %d (+%d) - %d] / %d\n",bstart,position,len,bstop,size); */    if (position < bstart || position+len > bstop) {	rc = read(fd,buffer,65536);#if BYTE_ORDER == BIG_ENDIAN	if (params.format == FMT_16BIT) {	    /* byteswap 16bit pcm on bigendian machines */	    int i;	    char h;	    for (i = 0; i < rc; i += 2) {		h           = buffer[i];		buffer[i]   = buffer[i+1];		buffer[i+1] = h;	    }	}#endif	if (-1 == rc)	    return NULL;	bstart = position, bstop = position+rc;    }    position += len;    return buffer+position-bstart-len;}intFileBuffer::write_audio(int len, void *data){    int rc;#if BYTE_ORDER == BIG_ENDIAN    char *buf;    int  i;    if (params.format == FMT_16BIT) {	/* byteswap 16bit pcm on bigendian machines */	buf = (char*)malloc(len);	for (i = 0; i < len; i += 2) {	    buf[i] = ((char*)data)[i+1];	    buf[i+1] = ((char*)data)[i];	}	rc = write(fd,buf,len);	free(buf);    } else {	rc = write(fd,data,len);    }#else    rc = write(fd,data,len);#endif    if (len == rc) {	position += len;	if (position > size)	    size = position;	return 0;    } else	return -1;}intFileBuffer::seek(int pos){    if (pos > size)	return -1;    position = pos;    if (-1 == lseek(fd,position+offset,SEEK_SET))	perror("fb: lseek");    return 0;}intFileBuffer::tell(){    return position;}/* ---------------------------------------------------------------------- */BufferList::BufferList(QListBox *l, Soundcard *c){    listbox   = l;    card      = c;    count     = 0;    brecord   = -1;    bplayback = -1;    mon       = 0;    level     = 0;    wait      = 0;    new_buffer_count = 0;    connect(card,SIGNAL(newparams(struct SOUNDPARAMS*)),	    this, SLOT(new_params(struct SOUNDPARAMS*)));    connect(card,SIGNAL(senddata(void*)),	    this, SLOT(new_data(void*)));    connect(card,SIGNAL(receivedata(void*)),	    this, SLOT(post_data(void*)));}intBufferList::add_filebuffer(const char *filename){    FileBuffer *fbuffer;    fbuffer = new FileBuffer();    if (-1 == fbuffer->attach(filename)) {	delete fbuffer;	return -1;    }    add_buffer(fbuffer);    return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91免费版pro下载短视频| 精品少妇一区二区三区| 在线播放一区二区三区| 久久久精品免费网站| 亚洲已满18点击进入久久| 麻豆国产精品一区二区三区 | 毛片av中文字幕一区二区| 国产精品一区二区无线| 欧美视频在线一区二区三区| 国产欧美中文在线| 免费高清在线视频一区·| 欧美性做爰猛烈叫床潮| 日本一区二区三区四区 | 国产成人av电影在线| 欧美人与z0zoxxxx视频| 亚洲欧洲无码一区二区三区| 国产一区二区三区最好精华液| 欧美日韩国产综合视频在线观看 | 国产丝袜美腿一区二区三区| 免费不卡在线视频| 在线成人午夜影院| 一区二区三区国产豹纹内裤在线| 成人午夜大片免费观看| 欧美精品一区二区三区四区 | 日韩免费视频一区二区| 五月婷婷另类国产| 欧美视频中文字幕| 亚洲午夜影视影院在线观看| 91一区二区三区在线观看| 中文字幕av一区二区三区| 五月激情综合婷婷| 欧美日韩三级视频| 日日摸夜夜添夜夜添国产精品| 欧美天堂亚洲电影院在线播放| 亚洲女厕所小便bbb| 欧洲精品视频在线观看| 中文字幕日韩av资源站| 色婷婷综合久久久| 亚洲一卡二卡三卡四卡无卡久久 | 欧美一区二区三区小说| 日本vs亚洲vs韩国一区三区| 欧美一级国产精品| 久久精品国产亚洲一区二区三区| 日韩精品一区二区三区中文不卡| 偷拍日韩校园综合在线| 日韩视频国产视频| 国产一区视频导航| 国产女人aaa级久久久级| 99精品欧美一区二区三区小说| 亚洲欧美日韩久久| 欧美福利视频导航| 久草在线在线精品观看| 欧美激情在线看| 一本大道久久a久久精品综合| 一区二区不卡在线视频 午夜欧美不卡在| 91精彩视频在线观看| 天天亚洲美女在线视频| 2023国产一二三区日本精品2022| 国产成a人无v码亚洲福利| 亚洲欧美在线视频观看| 欧美中文字幕一二三区视频| 日韩影院在线观看| 国产亚洲欧洲一区高清在线观看| 99精品视频一区二区三区| 午夜激情久久久| 国产精品天干天干在观线| 久久久午夜电影| 一本大道久久a久久综合| 免费在线观看成人| 国产精品成人在线观看| 91精品国产欧美一区二区18| 国产乱子轮精品视频| 亚洲精品精品亚洲| 精品久久久久av影院| 99视频热这里只有精品免费| 奇米精品一区二区三区在线观看| 日本一区二区三区四区| 4438成人网| 99国产精品久| 国产在线播精品第三| 亚洲一区日韩精品中文字幕| 欧美经典一区二区| 欧美一区二区三区日韩视频| 波多野结衣欧美| 美女视频黄免费的久久 | 麻豆精品一区二区三区| 依依成人精品视频| 国产亚洲精品超碰| 在线观看91精品国产麻豆| 99久久精品费精品国产一区二区| 久久av中文字幕片| 丝袜诱惑制服诱惑色一区在线观看 | 欧美日韩国产经典色站一区二区三区| 精品伊人久久久久7777人| 一区二区三区精品| 国产精品成人免费在线| 国产日韩欧美精品在线| 日韩一级成人av| 欧美日韩国产色站一区二区三区| 成人h精品动漫一区二区三区| 免费成人美女在线观看| 亚洲一区二区三区自拍| 亚洲欧洲性图库| 欧美国产综合色视频| 精品美女一区二区三区| 欧美夫妻性生活| 欧美丝袜第三区| 欧洲一区在线电影| 91官网在线免费观看| 91丨九色丨国产丨porny| 国产·精品毛片| 国产成人av一区二区三区在线观看| 麻豆一区二区三区| 婷婷六月综合亚洲| 日韩激情中文字幕| 日本午夜精品一区二区三区电影| 亚洲国产视频在线| 午夜精品久久一牛影视| 天堂在线一区二区| 日产国产欧美视频一区精品| 日韩电影免费一区| 久久成人综合网| 国产精品中文有码| 成人高清视频免费观看| 91美女精品福利| 欧美伊人久久大香线蕉综合69| 一本久久a久久精品亚洲| 日本高清免费不卡视频| 欧美在线视频全部完| 欧美一区二区三区在线电影| 日韩欧美亚洲一区二区| 欧美精品一区二区久久久| 国产亚洲精久久久久久| 亚洲丝袜美腿综合| 亚洲国产wwwccc36天堂| 麻豆中文一区二区| 国产成人精品网址| 欧美影院精品一区| 欧美成人精品福利| 国产精品福利一区| 亚洲一二三专区| 六月丁香综合在线视频| 国产精品1024久久| 欧美亚洲国产一区在线观看网站| 91精品国产一区二区三区蜜臀 | 香蕉加勒比综合久久| 蜜臀av亚洲一区中文字幕| 国产福利一区二区三区视频| 色综合天天综合网国产成人综合天 | 久久综合999| 一区二区三区美女视频| 精品一区二区三区在线视频| jvid福利写真一区二区三区| 欧美在线免费观看视频| 精品国产乱码久久久久久夜甘婷婷| 国产精品美女久久久久久久久| 五月婷婷综合网| 97成人超碰视| 精品国产乱码久久久久久影片| 亚洲男人的天堂在线aⅴ视频 | 日本不卡一区二区| av不卡免费电影| 日韩精品一区二区三区视频| 亚洲精品亚洲人成人网| 国产一区二区三区在线观看精品 | 精品一区二区免费看| 色综合视频在线观看| 久久久久久麻豆| 日本aⅴ免费视频一区二区三区| 成人激情综合网站| 精品久久久网站| 三级不卡在线观看| 日本精品一区二区三区高清| 久久精品免费在线观看| 青青草国产精品亚洲专区无| 色综合天天综合给合国产| 久久精品欧美日韩| 紧缚奴在线一区二区三区| 欧美三级日本三级少妇99| 亚洲欧美影音先锋| 国产精品中文欧美| 欧美精品一区二区三区四区| 免费成人在线网站| 在线成人av网站| 三级久久三级久久久| 欧美日韩不卡一区二区| 亚洲精品免费播放| 色综合欧美在线视频区| 国产精品欧美一区二区三区| 国产在线播精品第三| 精品av久久707| 麻豆国产一区二区| 精品国精品自拍自在线| 蜜臀av性久久久久蜜臀av麻豆| 欧美高清激情brazzers| 日韩高清不卡一区二区三区| 欧美日韩三级一区二区| 日韩黄色免费电影| 日韩一区二区三区在线视频| 美女www一区二区|