• 使用/dev/dsp的wav文件播放器源码


    转载于:http://blog.csdn.net/dux003/article/details/5459423

     

    #include
    #include
    #include
    #include
    #include

    void usage(const char* self)
    {
        printf("usage:/n");
        printf("/t%s [-c channels -r rate -s samplesize] wavfile/n", self);
    };

    int set_fmt(int fd, int channels, int rate, int samplesize)
    {
        int c = channels;
        if (ioctl(fd, SNDCTL_DSP_CHANNELS, &c) == -1)
            exit(1);

        if (ioctl(fd, SNDCTL_DSP_SPEED, &rate) == -1)
            exit(1);

        if (ioctl(fd, SNDCTL_DSP_SAMPLESIZE, &samplesize) == -1)
            exit(1);

        return 0;
    }

    int main(int argc, char **argv)
    {
        int i = 1;
        char* filename = NULL;
        int channels = 1;
        int samplerate = 8000;
        int samplesize = 16;

        int dsp;
        int fd;
        char buf[1024];
        int len;

        if (argc%2)
        {
            usage(argv[0]);
            exit(1);
        }

        while (i < argc)
        {
            if (argv[i][0] != '-')
            {
                filename = argv[i];
                i++;
            }
            else
            {
                if (i+1 < argc)
                 switch (argv[i][1])
                    {
                        case 'c':
                            channels = atoi(argv[i+1]);
                            i += 2;
                                break;

                        case 'r':
                            samplerate = atoi(argv[i+1]);
                            i += 2;
                            break;

                        case 's':
                            samplesize = atoi(argv[i+1]);
                            i += 2;
                            break;

                        default:
                            perror("bad option/n");
                            exit(1);
                    }
                }
                else
                {
                    perror("bad options/n");
                    exit(1);
                }
            }
        }

        dsp = open("/dev/dsp", O_RDWR);
        if (dsp == -1)
        {
            perror("can not open /dev/dsp/n");
            exit(1);
        }

        set_fmt(dsp, channels, samplerate, samplesize);

        fd = open(filename, O_RDWR);
        if (fd == -1)
        {
            close(dsp);

            fprintf(stderr, "can not open file %s/n", filename);
            exit(1);
        }

        while ((len = read(fd, buf, 1024)) > 0)
        {
            write(dsp, buf, len);
        }

        close(fd);
        close(dsp);

        return 0;

  • 相关阅读:
    C#导出EXCEL方法总结
    C#程序——多条件查询
    C# checklistbox控件用法总结(怎样得到多选的值,以及动态加载数据)
    C#获取当前日期时间(转)
    C# winform 中MessageBox用法大全(附效果图)
    多条件查询
    vs2013 c#连接mysql数据库并显示查询结果到DataGridView上
    C# 登录界面从数据库取用户名密码匹配结束后进入登录界面
    Chart控件X轴显示不全的解决方法
    bootstrap + vue 简易留言板(todolist)
  • 原文地址:https://www.cnblogs.com/songfeixiang/p/3733787.html
Copyright © 2020-2023  润新知