zoukankan      html  css  js  c++  java
  • 业余写的一个播放器SDK,求点意见

    好久没写博客了

    现大致花了半年时间私下写一个音频SDK,想请csdn的达人提点意见,看看还需要增加哪些功能惊讶

    我对这个的定位如下:

    可以在游戏开发中播放音乐,作为一般的音频播放器后端,作为音频编辑器后端

    ---------------------------------------------------------------------------------------------------------------------------------

    下一步打算实现的东西:

    3D effect/八路混音/flanger音效/C#绑定/wavpack格式支持

    ----------------------------------------------------------------------------------------------------------------------------------

    当前功能如下(具体以配置而定):

     当前支持播放的音频格式
      au/aiff/wav/flac/mp3/ogg/it/mod/xm/s3m/midi/mpc/tta
     当前支持录制的音频格式
     ape/au/aiff/wav/flac/mp2/mp3/ogg/voc/wv
     当前支持的平台
     linux/windows32
     当前支持的实时音效
     boost/phaser/fft/autowah/echo/fade in /fade out/变速/声道交换/反转/distortion/modulator

    其他我觉得的具备的优点:

     跨平台(貌似废话),插件式结构,使用简单

    ----------------------------------------------------------------------------------------------------------------------------------

    关于音频编解码和音效代码有些是自己写的,有些是找第三方

    更新日志如下:
    gaudio是一个基于C/C++混合编程的跨平台音频库,当前支持windows32操作系统和linux32位操作系统

    修改记录
    1.2013.04.01
        初次发布
    2.2013.04.10
        完成对wav格式采样频率8000-48000,采样格式4,8,16,24,32的支持     
    3.2013.05.01
        a.版本提升为1.4.0.8
        b.修改一个退出异常
        c.支持二源混音
        d.使用载入插件的方式提供对wav播放的支持
        e.增加对au格式的支持
        f.增加echo音效
        g.增加bassboost音效
        h.增加函数gaudio_address_get
        i.增加使用例子:echo/mixer/stream/boost
        j.把设置,获取音源三维空间信息的函数调整为: gaudio_source_set_float3,gaudio_source_get_float3
        k.修改解码器结构为回调模式
    4.2013.05.10
        a.版本提升为1.6.8.0
        b.优化部分代码
        c.增加speedchanger音效
        d.增加音频翻转(g168)
        e.增加音频声道交换(g168)
        f.增加声道合并(g168)
        g.增加speedchanger/invert测试用例
        h.增加vc调用静态链接库libgaudio.lib
        i.增加调制音效和测试例子
        j.修改解码器框架
        k.修改获取音频采样编码格式不正确的问题
        l.解决seek定位不准的问题
        m.增加音效链测试例子
        n.增加函数gaudio_set_long,gaudio_get_long
        o.修改stream例子
        p.支持压缩mpc音频格式
        q.支持ogg/vorbis格式
        r.修改获取采样格式错误的bug
        t.增加接口说明文档    
    5.2013.06.10
        a.版本提升为1.7.2.0
        b.gaudio_source_set_error_callback回调函数增加音源参数
        c.gaudio_source_set_finish_callback回调函数增加音源参数
        d.移除gaudio_get_version函数
        e.gaudio_effect_setcallback函数调整为gaudio_effect_set_callback
        f.使用插件式的音频驱动模式 - gwinmm
        g.gaudio代码优化
        h.增加音频源码率的获取
        i.增加feature范例
        j.完善文档
        k.增加对mp3的支持
        l.移除invert/modulator/bassboost例子
        m.增加balance
    6.2013.07.07
        a.版本提升到1.8.0.2
        b.增加对交换文件aiff的支持
        c.修改音频驱动插件实现
        d.增加移相器音效
        e.修改部分API接口使用的long为int32_t以方便移植
        f.增加code::blocks测试工程
        g.增加msvc2008测试工程
        h.增加函数接口gaudio_source_create_from_buffer2以播放raw音频数据
        i.把各个音效参数提到单独文件
        j.简化wav解码
        k.修改几处内存泄漏
        l.增加音频回录功能,输出格式MP2,MP3,APE,WV,AAC,WAV,AU,AIFF,VOC,CAF,OGG
        当前录制信息:16位音频,双声道,采样频率44100
        m.增加音频回录的例子recorder
        n.测试例子使用getopt和usage提示
        o.增加对tta格式的支持    
    7.2013.07.29
        a.版本提升到1.9.8.6                    
        b.解决了wav,au,aiff播放进度不准的故障  
        c.优化wav/au/aiff解码性能               
        d.增加distortion音效                   
        e.增加foldback distortion音效         
        f.增加distortion音效使用例子          
        g.增加声音穿透力                     
        h.修改结构最大支持八声道           
        i.增加portaudio插件驱动(win32&linux)
        j.完成g168,bassbost的liux版本       
        k.完成wav,au音频格式的linux版本      
        l.代码增加部分注释(未完成)             
        m.尝试性支持linux操作系统           
        n.支持midi/mid音乐格式              
        o.解决了mixer混音退出报错的问题   
        p.把对id3v1标签的解析移入gaudio
    7.2013.08.16
        a.版本提升到2.0.0.1                    
        b.变量宏增加AUDIO_ENUM前缀
        c.增加非标准插件gsndfile支持flac/ogg/au/wav/aiff/voc/caf/..基于(sndfile)
        d.改用mpg123解码mp3
        e.支持FFT频谱
    8.2013.09.08
        a.版本提升到2.0.6.0
        b.修改CROSSFEED宏和相关    
        c.引入200号插件支持s3m/mod/it/xm音频格式
        d.整理测试用例
        e.增加autowah音效
        f.增加驱动检测

    ----------------------------------------------------------------------------------------------------------------------------------

    一个简单的使用代码如下:

    /*
    	GAudio 2.0.6.0, (C)2013 by Eric Du(E)
    	This program is a part of the GAudio SDK.
    	Use GAudio's echo effect
    */
    #include <stdlib.h>
    #include <conio.h>
    #include <stdio.h>
    #ifdef WIN32
        #include "getopt.h"
    #else
        #include<unistd.h>
    #endif
    #include "gaudio.h"
    
    void usage() 
    {
    	printf("
    usage:	echo -i file -m mode
    
    ");
        printf("	-h	print this help
    ");
        printf("	-i	for playing input file
    ");
        printf("	-m	for echo bind mode,0 bind to global and 1 bind to source
    ");
    }
    
    int main(int argc,char* argv[])
    {
        if(argc < 3)
        {
            usage();    
            return -1;
        }
    
        printf("echo created by duwenhua
    ");
        
        char* filename = 0;
        int32_t mode = 0;
        
        int ch;  
        opterr = 0;  
        while((ch = getopt(argc,argv,"i:hm:"))!=-1)  
        {  
            switch(ch)  
            {  
            case 'i':  
                filename = optarg;  
                break;  
            case 'h':  
                usage();  
                break;  
            case 'm':
                mode = atoi(optarg);  
                break;        
            default:      
                usage();  
                return -1;
            }  
        }  
    
        if(mode < 0 || mode > 1)
            mode = 0;
            
    #ifdef WIN32
        gaudio_init("addons");
    #else
        gaudio_init("/usr/local/lib/gaudio/");
    #endif
        
        //! load soundfont for midi/mid music file
        gaudio_set_string(AUDIO_ENUM_SOUNDFONT,"instruments\snd.cfg");
    
        gsource* source = gaudio_source_create_from_file(filename,FALSE);
        if(source == NULL)
        {   
            printf("load file:%s error!
    ",filename);
            printf("bad source.
    error code:%d.
    ",gaudio_error_get());
            gaudio_deinit();
            return -1;
        }
    
        gaudio_source_set_int32(source,AUDIO_ENUM_LOOP,TRUE);
        printf("play filename:%s
    ",filename);
        
        geffect* effect = gaudio_effect_create(AUDIO_EFFECT_ECHO,0);
        if(!effect)
        {   
            printf("not support echo effect
    ");
            gaudio_source_destroy(source);
            gaudio_deinit();
            return -1;     
        }
        
        gaudio_effect_set_float(effect,AUDIO_EFFECT_ECHO_DELAY,1.0f);
        gaudio_effect_set_float(effect,AUDIO_EFFECT_ECHO_DECAY,0.2f);
        
        if(mode == 0)
            gaudio_effect_bind(effect,0);
        else
            gaudio_effect_bind_to_source(effect,source);
            
        gaudio_source_start(source,FALSE);
    
        printf("
    playing, press any key to quit.
    ");
    	getch();
            
        if(mode == 0)
            gaudio_effect_unbind(effect);
        else
            gaudio_effect_unbind_from_source(effect,source);
            
        gaudio_effect_destroy(effect);
        gaudio_source_stop(source);
        gaudio_source_destroy(source);
        
        gaudio_deinit();
        system("PAUSE");
        return EXIT_SUCCESS;
    }

    具体下载链接在这里:

    欢迎下载不要钱啊

    http://download.csdn.net/detail/ccsdu2004/6262273


    -------------------------------------------------------------------------------------------------------------

    另外楼主在西安一家大型公司从事android开发,现在考虑换份工作,求推荐(具体从事的项目这里就不写了)

    工作五年

    本人会的技能如下(后面的数字代表使用的月数):

    熟悉C++QT框架|良好 | 28

    音频音效处理和算法设计|熟练 | 24

    熟悉数据结构和算法设计|熟练 | 60

    有良好的分析,设计,调试测试软件的能力|精通 | 72

    熟练掌握软件测试工具c++ test|良好 | 4

    熟悉Opengl图形接口|良好 | 24

    熟悉面向对象设计与泛型编程|熟练 | 48

    熟悉GUI框架设计 |熟悉 | 26

    C/C++|精通 | 76

    Linux操作系统|一般 | 18

    Python|良好 | 11

    android开发和项目所需要的各种技能|精通 | 24

    JAVA|良好 | 31



  • 相关阅读:
    计算机入门知识
    iOS学习之-开机引导图
    学习笔记之09-空指针和野指针
    学习笔记之08-self关键字
    学习笔记之07-自定义构造方法和description方法
    学习笔记之06-点语法
    学习笔记之05-第一个OC的类
    学习笔记之04-第一个OC程序解析
    学习笔记之03-第一个OC程序
    hdoj1016 [dfs]
  • 原文地址:https://www.cnblogs.com/riskyer/p/3320224.html
Copyright © 2011-2022 走看看