• Simple2D-18(音乐播放器)使用 bass 音频库


    BASS 简介


      BASS是一个在多个平台上用于软件的音频库。其目的是为开发人员提供功能强大且高效的示例流(MP3,MP2,MP1,OGG,WAV,AIFF),MOD 音乐(XM,IT,S3M,MOD ,MTM,UMX),MO3 音乐(MP3 / OGG压缩MOD)和录音功能。提供了 C / C ++,Delphi 和 Visual Basic API,适用于AndroidiOSWindows Store / PhoneWinCE 和 ARM Linux 平台。

      BASS 对于非商业用途是免费的。如果您是非商业实体(例如个人),并且您没有从您的产品(通过销售,广告等)赚钱,那么您可以免费使用BASS。

      你可以在这个链接 http://www.un4seen.com 下载 BASS:

      这次的播放器就是使用 BASS 播放音频文件,下载 BASS 后将文件 bass.lib、bass.dll 和 bass.h 拷贝到项目即可。

    使用 BASS


      配置好并引入头文件 bass.h 后,通过以下代码播放音频文件:

            BASS_Init(-1, 44100, 0, 0, nullptr);
    
            HSTREAM stream = BASS_StreamCreateFile(FALSE, "filename", 0, 0, 0);
            BASS_ChannelPlay(stream, FALSE);
    
            /* 播放结束 */
            //BASS_StreamFree(stream);

      进度调节:

            /* 获取播放进度 */
            double pos = BASS_ChannelBytes2Seconds(stream, BASS_ChannelGetPosition(stream, BASS_POS_BYTE));
    
            /* 设置播放进度 */
            BASS_ChannelSetPosition(stream, BASS_ChannelSeconds2Bytes(stream, pos), BASS_POS_BYTE);

      音量调节:

            /* 设置 stream 音量,0 - 10000 */
            BASS_SetConfig(BASS_CONFIG_GVOL_STREAM, 200);
    
            /* 获取 stream 音量,0 - 10000 */
            BASS_GetConfig(BASS_CONFIG_GVOL_STREAM);
            /* 获取系统音量 */
            float volume = BASS_GetVolume();
    
            /* 设置系统音量 */
            BASS_SetVolume(volume);

      获取频谱数据:

            static float fft[128];
            BASS_ChannelGetData(stream, fft, BASS_DATA_FFT256);

      获取播放状态:

            DWORD result = BASS_ChannelIsActive(stream);
            switch ( result ) {
            case BASS_ACTIVE_PAUSED:  return PS_Paused;
            case BASS_ACTIVE_PLAYING: return PS_Playing;
            case BASS_ACTIVE_STOPPED: return PS_Stopped;
            }

      以上是这次播放器用到的 BASS API,详细内容可以查看 BASS 帮助文档,也可以阅读 BASS 演示源码。

    BASS 封装


      将 BASS API 封装成一个类,从而管理所有的音频文件。可以设计一个单例类 SoundManager,以便在任何位置实现音频文件的管理。由于播放器不需要复杂的功能,所以将上面的 BASS API 进行添加到单例类中即可。

      详细内容请参考源码。

      源码下载:Simple2D-14.rar

  • 相关阅读:
    HashMap 的实现原理(1.8)
    HashMap 的实现原理(1.7)
    Java面试总结 -2018(补录)
    在java中写出完美的单例模式
    ArrayList实现原理分析
    Ngigx+Tomcat配置动静分离,负载均衡
    微信小程序——常用快捷键【四】
    Linux服务器下安装vmware虚拟机
    微信小程序——部署云函数【三】
    微信小程序——安装开发工具和环境【二】
  • 原文地址:https://www.cnblogs.com/ForEmail5/p/7230270.html
Copyright © 2020-2023  润新知