亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
久久av资源网| 成人黄色电影在线| 国产一区二区三区日韩| 91美女在线观看| 精品欧美久久久| 综合久久久久久久| 麻豆精品视频在线| 欧美日韩国产片| 曰韩精品一区二区| 成人黄色一级视频| 亚洲天堂成人在线观看| 欧美日韩国产在线播放网站| 日韩中文字幕区一区有砖一区| www.久久久久久久久| 国产婷婷一区二区| 国产一区二区不卡在线| 成人免费一区二区三区视频| 成人av在线资源| 亚洲精品免费一二三区| 在线播放日韩导航| 亚洲午夜一区二区三区| 欧美三级蜜桃2在线观看| 亚洲综合色在线| 欧美在线视频全部完| 国产一区二区91| 亚洲欧美另类小说| 97精品久久久午夜一区二区三区| 国产亚洲综合在线| 在线观看日韩电影| 国产成人在线视频网址| 国产亚洲精品中文字幕| 色天使色偷偷av一区二区| 亚洲免费在线视频一区 二区| 91麻豆精品91久久久久同性| 青青国产91久久久久久| 欧美成人bangbros| 99久久精品国产观看| 精品一区二区三区免费毛片爱| 久久婷婷色综合| 国产成人8x视频一区二区| 国产精品美女久久久久久| 成人高清视频在线观看| 奇米色一区二区| 亚洲精品成人少妇| 久久精品一区四区| 69久久夜色精品国产69蝌蚪网| 成人精品在线视频观看| 亚洲免费观看高清完整版在线 | 成人97人人超碰人人99| 日本午夜一区二区| 日韩精品一区二区三区老鸭窝| 狠狠色伊人亚洲综合成人| 国产免费成人在线视频| 色婷婷激情综合| 国产99久久久久久免费看农村| 天天爽夜夜爽夜夜爽精品视频| 精品久久久久久无| 91 com成人网| 在线观看国产91| 成人av网站在线| 国产成人精品免费一区二区| 久久99精品国产麻豆婷婷洗澡| 亚洲 欧美综合在线网络| 欧美一区二区三区在线电影| 国产精品99久久久久久久女警| 亚洲男同性视频| 国产精品麻豆欧美日韩ww| 精品999在线播放| 色婷婷激情久久| 久久精品在这里| 久久亚洲一区二区三区明星换脸 | 美女在线视频一区| 五月综合激情网| 亚洲成人一区在线| 亚洲成人1区2区| 日韩在线观看一区二区| 午夜精品成人在线视频| 日韩精彩视频在线观看| 婷婷综合在线观看| 日韩av中文字幕一区二区| 丝袜亚洲精品中文字幕一区| 五月综合激情婷婷六月色窝| 日韩va欧美va亚洲va久久| 另类成人小视频在线| 久久99热狠狠色一区二区| 美国欧美日韩国产在线播放| 黑人精品欧美一区二区蜜桃| 国产在线视频一区二区三区| 国产精品亚洲一区二区三区在线| 国产成人精品免费在线| www.成人在线| 在线观看欧美精品| 欧美一级电影网站| 欧美专区亚洲专区| 欧美日韩一区二区欧美激情| 7777精品伊人久久久大香线蕉经典版下载 | 成人va在线观看| 色美美综合视频| 成人av先锋影音| 色综合久久久久综合体桃花网| 色系网站成人免费| 欧美日韩国产成人在线免费| 欧美一区二区三区色| 久久五月婷婷丁香社区| 成人免费小视频| 日韩精品久久久久久| 久久99精品国产麻豆婷婷洗澡| 国产精品99久| 欧美色视频在线观看| 日韩欧美在线网站| 国产精品毛片a∨一区二区三区| 亚洲三级电影网站| 奇米精品一区二区三区在线观看一| 精品系列免费在线观看| av电影天堂一区二区在线观看| 欧美亚洲高清一区| 在线观看一区二区精品视频| 日韩欧美卡一卡二| 中文字幕一区二| 日韩国产高清影视| 成人18视频日本| 欧美精品粉嫩高潮一区二区| 国产欧美日韩视频在线观看| 午夜在线成人av| 成人妖精视频yjsp地址| 欧美一级理论片| 亚洲激情六月丁香| 国产精品影音先锋| 欧美久久免费观看| 中文字幕在线播放不卡一区| 免费日韩伦理电影| 在线观看一区不卡| 国产精品福利影院| 亚洲日本在线a| 国产精品夜夜爽| 69av一区二区三区| 亚洲人成网站影音先锋播放| 国产乱淫av一区二区三区| 欧美日韩色一区| 亚洲激情网站免费观看| 成人涩涩免费视频| 日韩精品一区二区三区在线| 亚洲大片免费看| 在线观看免费成人| 亚洲卡通欧美制服中文| www.亚洲国产| 国产日韩欧美激情| 国产又黄又大久久| 日韩你懂的电影在线观看| 五月天中文字幕一区二区| 日本乱码高清不卡字幕| 中文字幕在线一区二区三区| 国产黑丝在线一区二区三区| 欧美一区二区啪啪| 亚洲va国产天堂va久久en| 欧美在线一二三| 亚洲一区二区不卡免费| 色婷婷综合久久| 亚洲欧美国产三级| 色天天综合色天天久久| 亚洲免费在线电影| 色素色在线综合| 一区二区三区蜜桃网| 紧缚奴在线一区二区三区| 日韩一区国产二区欧美三区| 婷婷丁香久久五月婷婷| 在线不卡欧美精品一区二区三区| 亚洲一二三区在线观看| 在线观看www91| 亚洲国产中文字幕在线视频综合 | 成人永久免费视频| 国产喂奶挤奶一区二区三区| 国产精品一区2区| 国产欧美va欧美不卡在线| 成人一区二区在线观看| 国产精品国产精品国产专区不蜜| bt欧美亚洲午夜电影天堂| 国产精品白丝在线| 91福利在线免费观看| 视频在线观看国产精品| 日韩一区二区三区免费看 | 国产精品视频在线看| 成人精品小蝌蚪| 亚洲宅男天堂在线观看无病毒| 欧美另类高清zo欧美| 久久aⅴ国产欧美74aaa| 欧美激情中文字幕| 国产资源精品在线观看| 国产精品另类一区| 欧美在线免费观看视频| 欧美aaa在线| wwwwww.欧美系列| av电影在线观看不卡 | 久久精品二区亚洲w码| 欧美精品一区二区三区四区 | 亚洲午夜精品久久久久久久久| 91精品国产综合久久久久| 国产91对白在线观看九色| 亚洲欧美色综合| 日韩精品专区在线影院重磅|