⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sportstervoice.c

📁 语音Email/语音Modem程序包
💻 C
📖 第 1 页 / 共 2 页
字号:
    write(fd, buf, 1);        fclose(fp);    fclose(gsmfp);    /* untoast the gsm file */    String toast = String(TOAST_PATH) + " -dlc " + gsmFile + " > " + rawFile;    system(toast.cstr());    /* convert to wav */    FILE* wavfp = fopen(wavFile.cstr(), "w");    FILE* rawfp = fopen(rawFile.cstr(), "r");    struct stat mystat;    stat(rawFile.cstr(), &mystat);    numRead = mystat.st_size;        int recBitsPerSample = 16;    int recSamplesPerSec = 8000;    int recNumChannels = 1;    //double recSecFraction = 0.25;        char groupID[8], riffType[5], chunkID[5];    long chunkSize;    short wFormatTag;    unsigned short wChannels;    unsigned long dwSamplesPerSec;    unsigned long dwAvgBytesPerSec;    unsigned short wBlockAlign;    unsigned short wBitsPerSample;        int bufSize = numRead;    unsigned char* recBuf = new unsigned char[bufSize];            strcpy(groupID, "RIFF");    strcpy(riffType, "WAVE");    strcpy(chunkID, "fmt ");    chunkSize = 16;        wFormatTag = 1;    wChannels = recNumChannels;    dwSamplesPerSec = recSamplesPerSec;    wBlockAlign = recNumChannels*recBitsPerSample/8;    dwAvgBytesPerSec = recSamplesPerSec*wBlockAlign;    wBitsPerSample = recBitsPerSample;        fwrite(groupID,sizeof(char),8,wavfp);    fwrite(riffType,sizeof(char),4,wavfp);    fwrite(chunkID,sizeof(char),4,wavfp);    fwrite(&chunkSize,sizeof(long),1,wavfp);    fwrite(&wFormatTag,sizeof(short),1,wavfp);    fwrite(&wChannels,sizeof(unsigned short),1,wavfp);    fwrite(&dwSamplesPerSec,sizeof(unsigned long),1,wavfp);    fwrite(&dwAvgBytesPerSec,sizeof(unsigned long),1,wavfp);    fwrite(&wBlockAlign,sizeof(unsigned short),1,wavfp);    fwrite(&wBitsPerSample,sizeof(unsigned short),1,wavfp);        strcpy(chunkID, "data");    chunkSize = numRead;        fwrite(chunkID,sizeof(char),4,wavfp);    fwrite(&chunkSize,sizeof(long),1,wavfp);        for(int i=0; i< numRead; i+= bufSize) {	fread(recBuf, sizeof(char), bufSize, rawfp);	fwrite(recBuf, sizeof(char), bufSize, wavfp);    }    fclose(rawfp);            fclose(wavfp);    /* done with conversion */        String newBuf;        newBuf = readLine();    while(okMessages.find(newBuf) == okMessages.end() && errorMessages.find(newBuf) == errorMessages.end()) {	newBuf = readLine();    }        writeLine("at#vls=0");    writeLine("at#cls=0");        writeLine(MODEM_RESET);    writeLine(MODEM_INIT);}#endif#ifdef VOICEvoid SportsterVoice::playFile(String& file, target where){    unsigned char buf[1024];    String newBuf;        FILE* fp;        struct pollfd pollRead[1];    struct pollfd pollWrite[1];        pollRead[0].fd = fd;    pollRead[0].events = POLLIN;    pollWrite[0].fd = fd;    pollWrite[0].events = POLLOUT;        if( (fp = fopen(file.cstr(), "r")) == NULL) {	return;    }        writeLine("AT&F1");    /* select voice mode */    writeLine("at#cls=8");    writeLine("AT #VSM=128,8000");    /* select speaker output device */        switch(where) {    case line:	writeLine("AT #VLS=0");	break;    case handset:	writeLine("AT #VLS=1");	break;    case speaker:	writeLine("AT #VLS=2");	break;    case microphone:	writeLine("AT #VLS=3");	break;    case line_speaker:	writeLine("AT #VLS=4");	break;    case speakerphone:	writeLine("AT #VLS=6");	break;	    }        writeLine("at#vtx");        while(!feof(fp)) {	int n = fread(buf, sizeof(unsigned char), 1, fp);	if(n == 1) {	    if(buf[0] == DLE) {		write(fd, buf, n);	    }	    write(fd, buf, n);	}    }        char temp[4];    temp[0] = DLE;    temp[1] = ETX;    write(fd, temp, 2);        fclose(fp);        newBuf = readLine();    while(okMessages.find(newBuf) == okMessages.end() && errorMessages.find(newBuf) == errorMessages.end()) {	newBuf = readLine();    }        writeLine("at#vls=0");    writeLine("at#cls=0");        writeLine(MODEM_RESET);    writeLine(MODEM_INIT);}#endif#ifdef VOICEvoid SportsterVoice::answerCall(String& greetingFile, String& messageFile){    String gsmFile = messageFile + ".gsm";    String wavFile = messageFile + ".wav";    String rawFile = messageFile + ".raw";    writeLine("AT&F1");    /* select voice mode */    writeLine("AT #CLS=8");        writeLine("AT #VSM=128,8000");        //writeLine("AT S41=4");        /* select telephone line device */        writeLine("AT #VLS=0");        unsigned char buf[1024];    String newBuf;        FILE* fp;    if( (fp = fopen(greetingFile.cstr(), "r")) == NULL) {	return;    }        writeLine("AT A");        writeLine("AT #VTX");        while(!feof(fp)) {	int n = fread(buf, sizeof(unsigned char), 1, fp);	if(n == 1) {	    if(buf[0] == DLE) {		write(fd, buf, n);	    }	    write(fd, buf, n);	}    }        char temp[4];    temp[0] = DLE;    temp[1] = ETX;    write(fd, temp, 2);        newBuf = readLine();    while(okMessages.find(newBuf) == okMessages.end() && errorMessages.find(newBuf) == errorMessages.end()) {	newBuf = readLine();    }        fclose(fp);        writeLine("AT #VTS=\"{3,10}\"");        /*      greeting done, record message    */        fp = fopen(messageFile.cstr(), "w");    FILE* gsmfp = fopen(gsmFile.cstr(), "w");#ifdef SILENCE            writeLine("AT #VSP=20");    writeLine("AT #VSD=1");    writeLine("AT #VSS=1");#endif        writeLine("AT #VRX");        bool bunny = true;    int numRead = 0;    int numFrame = 3000;    int bytesPerFrame = 38;    bool thisFrameQuiet = false;    bool lastFrameQuiet = false;    bool firstByteQuiet = false;     bool secndByteQuiet = false;     int numQuietFrame = 0;    int maxQuietFrame = 100;    for(int i=0; (i<numFrame) && bunny; i++) {#ifdef DEBUG	printf("Frame %d: ", i);#endif	lastFrameQuiet = thisFrameQuiet;	thisFrameQuiet = false;	for(int j=0; (j<bytesPerFrame); j++) {	    numRead = read(fd, buf, 1);	    if(numRead == 1) {		if(buf[0] != DLE) {		    if(j == 0) {			if(buf[0] == 0xb6) {			    firstByteQuiet = true;			}			else {			    firstByteQuiet = false;			}		    }		    else if(j == 1) {			if(buf[0] == 0xb6) {			    secndByteQuiet = true;			}			else {			    secndByteQuiet = false;			}						if( firstByteQuiet && secndByteQuiet ) {			    thisFrameQuiet = true;			}			else {			    thisFrameQuiet = false;			}			if(thisFrameQuiet && lastFrameQuiet) {			    numQuietFrame++;			}			else {			    numQuietFrame = 0;			}			if(numQuietFrame > maxQuietFrame) {			    bunny = false;			}		    }#ifdef DEBUG		    printf("%02x", buf[0]);#endif		    fwrite(buf, sizeof(char), numRead, fp);		    if(j > 1 && j < (bytesPerFrame-3)) {			fwrite(buf, sizeof(char), 1, gsmfp);		    }		}		else {		    numRead = read(fd, buf, 1);		    		    while(numRead != 1) {			numRead = read(fd, buf, 1);		    }		    buf[1]=0;		    if(buf[0] == DLE) {			printf("%02x", buf[0]);			fwrite(buf, sizeof(unsigned char), 1, fp);			fwrite(buf, sizeof(char), 1, gsmfp);		    }		    else {			j--;		    }		}	    }	    else {		j--;	    }	}#ifdef DEBUG	printf("\n");#endif    }        buf[0]=0x10;    write(fd, buf, 1);        fclose(fp);    fclose(gsmfp);    /* untoast the gsm file */    String toast = String(TOAST_PATH) + " -dlc " + gsmFile + " > " + rawFile;    system(toast.cstr());    /* convert to wav */    FILE* wavfp = fopen(wavFile.cstr(), "w");    FILE* rawfp = fopen(rawFile.cstr(), "r");    struct stat mystat;    stat(rawFile.cstr(), &mystat);    numRead = mystat.st_size;        int recBitsPerSample = 16;    int recSamplesPerSec = 8000;    int recNumChannels = 1;    //double recSecFraction = 0.25;        char groupID[8], riffType[5], chunkID[5];    long chunkSize;    short wFormatTag;    unsigned short wChannels;    unsigned long dwSamplesPerSec;    unsigned long dwAvgBytesPerSec;    unsigned short wBlockAlign;    unsigned short wBitsPerSample;        int bufSize = numRead;    unsigned char* recBuf = new unsigned char[bufSize];            strcpy(groupID, "RIFF");    strcpy(riffType, "WAVE");    strcpy(chunkID, "fmt ");    chunkSize = 16;        wFormatTag = 1;    wChannels = recNumChannels;    dwSamplesPerSec = recSamplesPerSec;    wBlockAlign = recNumChannels*recBitsPerSample/8;    dwAvgBytesPerSec = recSamplesPerSec*wBlockAlign;    wBitsPerSample = recBitsPerSample;        fwrite(groupID,sizeof(char),8,wavfp);    fwrite(riffType,sizeof(char),4,wavfp);    fwrite(chunkID,sizeof(char),4,wavfp);    fwrite(&chunkSize,sizeof(long),1,wavfp);    fwrite(&wFormatTag,sizeof(short),1,wavfp);    fwrite(&wChannels,sizeof(unsigned short),1,wavfp);    fwrite(&dwSamplesPerSec,sizeof(unsigned long),1,wavfp);    fwrite(&dwAvgBytesPerSec,sizeof(unsigned long),1,wavfp);    fwrite(&wBlockAlign,sizeof(unsigned short),1,wavfp);    fwrite(&wBitsPerSample,sizeof(unsigned short),1,wavfp);        strcpy(chunkID, "data");    chunkSize = numRead;        fwrite(chunkID,sizeof(char),4,wavfp);    fwrite(&chunkSize,sizeof(long),1,wavfp);        for(int i=0; i< numRead; i+= bufSize) {	fread(recBuf, sizeof(char), bufSize, rawfp);	fwrite(recBuf, sizeof(char), bufSize, wavfp);    }    fclose(rawfp);            fclose(wavfp);    /* done with conversion */        newBuf = readLine();    while(okMessages.find(newBuf) == okMessages.end() && errorMessages.find(newBuf) == errorMessages.end()) {	newBuf = readLine();    }        writeLine("AT H0");        //writeLine("at#vls=0");    writeLine("at#cls=0");        writeLine(MODEM_RESET);    writeLine(MODEM_INIT);    }#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -