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

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

?? sndkit.c

?? 在linux下做的錄音和播放的程序
?? C
字號:
/*
Name: SndKit.c
Copyright: GPLv2
Author: rockins(ybc2084@163.com)
Date: 15-10-06 18:22
Description: implent raw sound record/play
run: ./SndKit [-h] [-d device] [-c channel] [-b bits] [-f hz] [-l len] <-r|-p file>
e.g.:
./SndKit -h      show help information
./SndKit -r record.wav                  record audio from microphone(/dev/dsp)
./SndKit -d /dev/dsp -p record.wav       playback record.wav via /dev/dsp
./SndKit -b 8 -f 22 -r reacord.wav       record audio in 8 bit & 22k hz
./SndKit -d /dev/dsp -c 2 -r record.wav record audio in /dev/dsp and stereo
./SndKit -r -l 40 record.wav    record 40k audio data
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <linux/soundcard.h> /*for OSS style sound programing */
#define TRUE   1
#define FALSE   0
#define FMT8BITS AFMT_U8 /*unsigned 8 bits(for almost PC) */
#define FMT16BITS AFMT_S16_LE /*signed 16 bits,little endian */
#define FMT8K   8000 /*default sampling rate */
#define FMT11K 11025 /*11,22,44,48 are three pop rate */
#define FMT22K 22050
#define FMT44K 44100
#define FMT48K   48000
#define MONO    1
#define STEREO 2
#define ACT_RECORD 0
#define ACT_PLAY 1
#define DFT_SND_DEV "/dev/dsp"
#define DFT_SND_FMT FMT8BITS
#define DFT_SND_SPD FMT8K
#define DFT_SND_CHN MONO
#define DFT_LEN   1024 /*default record length:40k */
#define BUFF_SIZE 512 /*buffer size:512 Bytes */
/************** function prototype ********************/
void Usage(void);
int OpenDevice(const char *, unsigned int);
int OpenFile(const char *, unsigned int);
int CloseDevice(unsigned int);
int CloseFile(unsigned int);
/************** function implementation **************/
int main(int argc, char *argv[])
{
    unsigned int snd_fmt = DFT_SND_FMT; /*sound format,bits */
    unsigned int snd_chn = DFT_SND_CHN; /*sound channel number */
    unsigned int snd_spd = DFT_SND_SPD; /*sound speed,frequency */
    unsigned char *s_file = NULL; /*file hold sound data */
    unsigned char *snd_device = DFT_SND_DEV; /*sound device */
    unsigned int recd_or_play = ACT_PLAY; /*flag(default play) */
    unsigned char buff[BUFF_SIZE]; /*sound buffer */
    unsigned long len = DFT_LEN * 1024; /*record or play length(k) */
    int snd_fd;    /*sound device descriptor */
    int s_fd;    /*sound data file descrit */
    ssize_t n;    /*bytes already in or out */
    ssize_t nRD;   /*bytes readin */
    ssize_t nWR;   /*bytes write out */
    unsigned int opt_chr; /*hold cli option */
    unsigned int opt_err = FALSE; /*indicate whether parse option error */
    /*parse cli option via getopt routine */
    optind = 0;     /*set optindex to 0 */
    while ((opt_chr = getopt(argc, argv, "hd:c:b:f:l:r:p:")) != -1)
    {
        switch (opt_chr)
        {
        case 'h':
            Usage();
            return (0);    /*return, 0 denote success */
            break;
        case 'd':
            snd_device = optarg; /*sound device name */
            break;
        case 'c':
            if (atoi(optarg) == 1) /*select channel number */
            snd_chn = MONO;
            else if (atoi(optarg) == 2)
            snd_chn = STEREO;
            else
            {
                opt_err = 1;   /*error occur */
                fprintf(stderr, "wrong channel setting,"
                "should be 1 or 2(default 1,MONO)\n");
            }
            break;
        case 'b':
            if (atoi(optarg) == 8) /*select data bit */
            snd_fmt = FMT8BITS;
            else if (atoi(optarg) == 16)
            snd_fmt = FMT16BITS;
            else
            {
                opt_err = 1;   /*error occur */
                fprintf(stderr, "wrong bits setting,"
                "should be 8 or 16(default 8)\n");
            }
            break;
        case 'f':
            if (atoi(optarg) == 8)
            snd_spd = FMT8K; /*sampling rate:8kbps */
            else if (atoi(optarg) == 11)
            snd_spd = FMT11K; /*smapling rate:11.025k */
            else if (atoi(optarg) == 22)
            snd_spd = FMT22K; /*sampling rate:22.050k */
            else if (atoi(optarg) == 44)
            snd_spd = FMT44K; /*sampling rate:44.100k */
            else if (atoi(optarg) == 48)
            snd_spd = FMT48K; /*sampling rate:48k */
            else
            {
                opt_err = 1;   /*error occur */
                fprintf(stderr, "wrong sampling rate,"
                "should be 8,11,22,or 44(default 8kbps)\n");
            }
            break;
        case 'l':
            len = atoi(optarg) * 1024; /*record length(k) */
            break;
        case 'r':
            recd_or_play = ACT_RECORD;
            s_file = optarg;   /*file to record sound */
            break;
        case 'p':
            recd_or_play = ACT_PLAY;
            s_file = optarg;   /*file to play sound */
            break;
        case '?':
            opt_err = 1;
            fprintf(stderr, "unknown option:%c\n", optopt);
            break;
            default:
            opt_err = 1;
            fprintf(stderr, "getopt error:%d\n", opterr);
            break;
        }
    }
    /*check if cli option parsed right*/
    if (opt_err || argc < 2)
    {
        fprintf(stderr, "parse command option failed!!!\n"
        "run ./SndKit -h for help\n");
        return (-1);
    }
    /*open device */
    if ((snd_fd = OpenDevice(snd_device, recd_or_play)) < 0)
    {
        fprintf(stderr, "cannot open device %s:%s\n", snd_device,
        strerror(errno));
        return (-1);
    }
    /*open sound data file */
    if ((s_fd = OpenFile(s_file, recd_or_play)) < 0)
    {
        fprintf(stderr, "cannot open sound file %s:%s\n", s_file,
        strerror(errno));
        return (-1);
    }
    /*set sound format */
    if (SetFormat(snd_fd, snd_fmt, snd_chn, snd_spd) < 0)
    {
        fprintf(stderr, "cannot set %s in bit %d, channel %d, speed %d\n",
        snd_device, snd_fmt, snd_chn, snd_spd);
        return (-1);
    }
    /*do real action:record or playback */
    if (recd_or_play == ACT_RECORD)
    {   /*record sound into data file*/
        n = 0;
        while (n < len)
        {
            nRD = 0;   /*amount read from sound device */
            if ((nRD = read(snd_fd, buff, BUFF_SIZE)) < 0)
            {
                perror("read sound device failed");
                return (-1);
            }
            if (n + nRD <= len) /*the len is not full */
            nWR = nRD; /*write amount to sound data file */
            else
            nWR = len - n; /*len will be overflow */
            unsigned long old_nWR = nWR; /*s hold nWR's old value */
            unsigned long t = 0L;   /*temp counter */
    
            while (nWR > 0)
            {
                if ((t = write(s_fd, buff, nWR)) < 0)
                {
                    perror("write sound data file failed");
                    return (-1);
                }
                nWR -= t;
            }
            n += old_nWR;
        }
    } 
    else if (recd_or_play == ACT_PLAY)
    { /*write sound data to device*/
        while (TRUE)
        {
            nRD = 0L;    /*read amount from sound device */
            if ((nRD = read(s_fd, buff, BUFF_SIZE)) < 0)
            {
                perror("read sound data file failed");
                return (-1);
            }
            else if (nRD == 0)
            { /*nRD == 0 means all sound stream output */
                printf("sound data play complete!\n");
                exit(0);
            }
            nWR = nRD;
            while (nWR > 0)
            {   /*write into device*/
                if ((n = write(snd_fd, buff, nWR)) < 0)
                {
                    perror("write sound device file failed");
                    return (-1);
                }
                nWR -= n;
            }
        }
    }
    /*close sound device and sound data file*/
    CloseDevice(snd_fd);
    CloseFile(s_fd);
    return (0);
}
/*
* OpenDevice():open sound device
* params:
* dev_name -- device name,such as /dev/dsp
* flag -- flag(ACT_RECORD or ACT_PLAY)
* returns:
* file descriptor of sound device if sucess
* -1 if failed
*/
int OpenDevice(const char *dev_name, unsigned int flag)
{
    int dev_fd;
    /*open sound device */
    if (flag == ACT_RECORD)
    {
        if ((dev_fd = open(dev_name, O_RDONLY)) < 0)
        {
            return (-1);
        }
    }
    else if (flag == ACT_PLAY)
    {
        if ((dev_fd = open(dev_name, O_WRONLY)) < 0)
        {
            return (-1);
        }
    }
    return (dev_fd);
}
/*
* CloseDevice():close the sound device
* params:
* dev_fd -- the sound device's file descriptor
* returns:
* 0 if success
* -1 if error occured
*/
int CloseDevice(unsigned int dev_fd)
{
    return (close(dev_fd));
}
/*
* OpenFile():open sound data file
* params:
* file_name -- file name,e.g,record.wav
* flag -- flag(ACT_RECORD or ACT_PLAY)
* returns:
* file descriptor of sound data file if sucess
* -1 if failed
*/
int OpenFile(const char *file_name, unsigned int flag)
{
    int file_fd;
    /*open sound data file */
    if (flag == ACT_RECORD)
    {
        if ((file_fd = open(file_name, O_WRONLY)) < 0)
        {
            return (-1);
        }
    }
    else if (flag == ACT_PLAY)
    {
        if ((file_fd = open(file_name, O_RDONLY)) < 0)
        {
            return (-1);
        }
    }
    return (file_fd);
}
/*
* CloseFile():close the sound data file
* params:
* file_fd -- the sound data file's descriptor
* returns:
* 0 if success
* -1 if error occured
*/
int CloseFile(unsigned int file_fd)
{
    return (close(file_fd));
}
/*
* SetFormat():Set Record and Playback format
* params;
* fd -- device file descriptor
* chn -- channel(MONO or STEREO)
* bits -- FMT8BITS(8bits), FMT16BITS(16bits)
* hz -- FMT8K(8000HZ), FMT16K(16000HZ), FMT22K(22000HZ),
* FMT44K(44000HZ),FMT48K(48000HZ)
* returns:
* return 0 if success, else return -1
* notes:
* parameter setting order should be like as:
* 1.sample format(number of bits)
* 2.number of channels(mono or stereo)
* 3.sampling rate(speed)
*/
int SetFormat(unsigned int fd, unsigned int bits, unsigned int chn,
unsigned int hz)
{
    int ioctl_val;
    /* set bit format */
    ioctl_val = bits;
    if (ioctl(fd, SNDCTL_DSP_SETFMT, &ioctl_val) == -1)
    {
        fprintf(stderr, "Set fmt to bit %d failed:%s\n", bits,
        strerror(errno));
        return (-1);
    }
    if (ioctl_val != bits)
    {
        fprintf(stderr, "do not support bit %d, supported %d\n", bits,
        ioctl_val);
        return (-1);
    }
    /*set channel */
    ioctl_val = chn;
    if ((ioctl(fd, SNDCTL_DSP_CHANNELS, &ioctl_val)) == -1)
    {
        fprintf(stderr, "Set Audio Channels %d failed:%s\n", chn,
        strerror(errno));
        return (-1);
    }
    if (ioctl_val != chn)
    {
        fprintf(stderr, "do not support channel %d,supported %d\n", chn,
        ioctl_val);
        return (-1);
    }
    /*set speed */
    ioctl_val = hz;
    if (ioctl(fd, SNDCTL_DSP_SPEED, &ioctl_val) == -1)
    {
        fprintf(stderr, "Set speed to %d failed:%s\n", hz,
        strerror(errno));
        return (-1);
    }
    if (ioctl_val != hz)
    {
        fprintf(stderr, "do not support speed %d,supported is %d\n", hz,
        ioctl_val);
        return (-1);
    }
    return (0);
}
/*
* Usage():print help information
* params:(none)
* returns:(none)
*/
void Usage(void)
{
    printf
    ("run: ./SndKit [-h] [-d device] [-c channel] [-b bits] [-f hz] [-l len] <-r|-p file>\n"
    "Description: implent raw sound record/play\n" "option:\n"
    "\t -h: print help informations\n"
    "\t -d device: assign sound device to record or playback(default /dev/dsp)\n"
    "\t -c channel: indicate in MONO or STEREO channel(default MONO)\n"
    "\t -b bits: assign sampling bits depth(default 8bits unsigned)\n"
    "\t -f hz: indicate sampling rate,i.e,frequence(default 8kbps)\n"
    "\t -l len: indicate recording sound's length(default 1024k)\n"
    "\t -r|-p file: indicate record in or playback(no default,must give out explicitly)\n"
    "e.g.:\n"
    "\t ./SndKit -h     show help information\n"
    "\t ./SndKit -r record.wav    record audio from microphone(/dev/dsp)\n"
    "\t ./SndKit -d /dev/dsp -p record.wav playback record.wav via /dev/dsp\n"
    "\t ./SndKit -b 8 -f 22 -r reacord.wav record audio in 8 bit & 22k hz\n"
    "\t ./SndKit -d /dev/dsp -c 2 -r record.wav record audio in /dev/dsp and stereo\n"
    "\t ./SndKit -r -l 40 record.wav   record 40k audio data in record.wav\n");
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人在线免费观看| 欧美高清在线精品一区| 99综合电影在线视频| 美日韩黄色大片| 日本亚洲一区二区| 天涯成人国产亚洲精品一区av| 日韩一区中文字幕| 亚洲免费观看视频| 亚洲国产一区二区三区| 日日夜夜免费精品| 日本系列欧美系列| 狠狠色狠狠色综合系列| 国产高清不卡二三区| 国产精品亚洲视频| 91在线免费看| 欧美老年两性高潮| 精品久久久久久无| 国产午夜精品久久久久久久 | 亚洲一二三专区| 夜夜嗨av一区二区三区四季av| 亚洲第一会所有码转帖| 日韩精品一二三四| 国内精品第一页| 91在线无精精品入口| 欧美日韩卡一卡二| 精品粉嫩aⅴ一区二区三区四区| 久久久五月婷婷| 亚洲精品国产无天堂网2021 | 欧美一区二区三区影视| 亚洲精品一区二区精华| 欧美三级电影在线看| 亚洲一区二区三区视频在线| 国产精品美女久久久久aⅴ| 综合欧美亚洲日本| 免费视频最近日韩| 盗摄精品av一区二区三区| 色婷婷国产精品综合在线观看| 欧美日韩在线不卡| 国产性色一区二区| 亚洲成人777| 风间由美一区二区av101| 欧美午夜精品一区二区三区| 精品国产精品一区二区夜夜嗨| 亚洲国产成人在线| 日韩中文字幕亚洲一区二区va在线| 久久97超碰色| 欧美视频一区在线观看| 国产日韩欧美一区二区三区综合| 亚洲在线视频免费观看| 国产福利视频一区二区三区| 欧美日韩国产首页| 亚洲免费观看高清完整版在线观看 | 日韩欧美资源站| 伊人一区二区三区| 国产a区久久久| 日韩精品自拍偷拍| 亚洲va国产va欧美va观看| 成人av影视在线观看| 日韩精品一区二区三区在线播放| 亚洲一区二区免费视频| 国产成人精品aa毛片| 精品入口麻豆88视频| 亚洲无人区一区| 9久草视频在线视频精品| 日韩美一区二区三区| 同产精品九九九| 欧美日韩一区二区三区免费看| 国产精品婷婷午夜在线观看| 久久aⅴ国产欧美74aaa| 91麻豆精品国产自产在线观看一区 | 欧美v日韩v国产v| 丝袜亚洲另类丝袜在线| 欧美私模裸体表演在线观看| 亚洲品质自拍视频| 91亚洲国产成人精品一区二区三| 久久久国产精品不卡| 国产精品自拍三区| 中文字幕免费观看一区| 粉嫩av亚洲一区二区图片| 2023国产精华国产精品| 国产一区三区三区| 久久久久国产精品麻豆ai换脸| 另类综合日韩欧美亚洲| 精品少妇一区二区三区免费观看| 日韩国产欧美在线播放| 日韩免费高清av| 国产乱人伦偷精品视频不卡| 国产精品女人毛片| 色一情一伦一子一伦一区| 亚洲欧美一区二区三区孕妇| 色88888久久久久久影院按摩| 夜夜嗨av一区二区三区四季av | 精品一区二区三区久久久| 亚洲精品在线电影| 床上的激情91.| 一区二区三区国产精品| 欧美美女一区二区三区| 久久99久久99| 国产精品免费av| 91福利国产成人精品照片| 婷婷一区二区三区| 久久夜色精品一区| 91亚洲午夜精品久久久久久| 日韩一区精品字幕| 久久综合九色综合欧美亚洲| 国产白丝精品91爽爽久久| 最好看的中文字幕久久| 在线综合亚洲欧美在线视频| 福利电影一区二区| 亚洲va欧美va人人爽午夜| 精品日韩一区二区三区| 91亚洲男人天堂| 久久精品国产999大香线蕉| 国产精品国产自产拍高清av| 欧美日韩精品一区视频| 国产精品99久| 日韩国产欧美在线视频| 国产精品乱码人人做人人爱| 欧美精品1区2区3区| 国产成人av一区二区三区在线| 亚洲一二三四久久| 中文字幕电影一区| 欧美一区午夜视频在线观看| av在线播放成人| 老司机精品视频一区二区三区| 中文字幕亚洲区| 久久伊99综合婷婷久久伊| 在线精品视频小说1| 粉嫩一区二区三区在线看| 视频一区二区中文字幕| 国产精品国产三级国产普通话蜜臀| 91精品中文字幕一区二区三区| av午夜一区麻豆| 风间由美一区二区三区在线观看 | 国产日产欧美一区| 日韩三级在线免费观看| 欧美日韩综合色| 色一区在线观看| 91精品91久久久中77777| 成人激情校园春色| 国产成人免费视频网站| 精品夜夜嗨av一区二区三区| 免费观看一级特黄欧美大片| 亚洲影院免费观看| 一区二区高清视频在线观看| 中文字幕日本不卡| 一区在线观看免费| 中文字幕一区二区视频| 国产精品人成在线观看免费| 国产欧美日韩三区| 亚洲国产高清不卡| |精品福利一区二区三区| 国产精品日产欧美久久久久| www日韩大片| 久久久久一区二区三区四区| 欧美一级二级三级蜜桃| 日韩欧美不卡一区| 欧美顶级少妇做爰| 欧美在线一区二区三区| 狠狠狠色丁香婷婷综合激情 | 日韩精品国产欧美| 日本不卡视频在线观看| 亚洲国产精品久久久久秋霞影院| 国产精品不卡在线| 欧美精品一区二区三区一线天视频 | 亚洲美女电影在线| 国产精品传媒在线| 日本一区二区三区四区在线视频| 欧美sm美女调教| 欧美极品aⅴ影院| 国产人成亚洲第一网站在线播放| 精品国产一区二区三区忘忧草| 欧美一区二区三区白人| 久久午夜羞羞影院免费观看| 日韩欧美中文一区二区| 欧美精品日韩综合在线| 91免费看`日韩一区二区| 欧美午夜在线观看| 色婷婷av久久久久久久| 色天天综合色天天久久| 91麻豆免费看片| 日本二三区不卡| 日本道精品一区二区三区| 在线亚洲一区二区| 日韩欧美第一区| 国产精品污www在线观看| 久久久精品tv| 国产精品色哟哟| 亚洲一区二区三区中文字幕在线| 亚洲精品伦理在线| 日韩影院精彩在线| 成人av在线一区二区| 91麻豆国产在线观看| 欧美日本精品一区二区三区| 欧美成人福利视频| 一区二区欧美国产| 美国欧美日韩国产在线播放| 国产精品自拍网站| 日韩精品一区二区三区中文精品| 国产欧美一区二区精品婷婷|