效果图:

使用了 BASS.dll、  BASS.NET.dll   和  PeakMeterCtrl.dll

前面两个负责播放   最后一个负责绘制频谱,本文重点讲的是频谱部分,播放音频部分注意一点就是,下载的两个 bass文件  bass.dll是直接丢在debug目录,bass.net.dll是通过项目引入进来的。

这里直接省略了找官网下载步骤。

完整代码:

 using System;
using System.Windows.Forms;
using Un4seen.Bass; namespace WindowsFormsApp3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
//启动频谱(参数是响应延迟,数字越小,音柱回起速度越快)
peakMeterCtrl1.Start( / Int32.Parse(cbo_fps.Text)); //-1 表示 默认设备输出
//44100 表示 输出采样率
//BASS_DEVICE_CPSPEAKERS 表示输出模式
if (!Bass.BASS_Init(-, , BASSInit.BASS_DEVICE_CPSPEAKERS, this.Handle))
{
MessageBox.Show("出错了," + Bass.BASS_ErrorGetCode().ToString());
} Timer t = new Timer();
t.Interval = ;
t.Tick += T_Tick;
t.Start();
} string fileName;
int stream; private void btn_open_Click(object sender, EventArgs e)
{
OpenFileDialog o = new OpenFileDialog();
if (o.ShowDialog() == DialogResult.OK)
{
fileName = o.FileName; //第一个参数是文件名,
//第二个参数是文件流开始位置,
//第三个是文件流长度 0为使用文件整个长度,
//最后一个是流的创建模式
stream = Bass.BASS_StreamCreateFile(fileName, 0L, 0L, BASSFlag.BASS_SAMPLE_FLOAT);
}
} private void btn_play_Click(object sender, EventArgs e)
{
Bass.BASS_ChannelPlay(stream, true); //开始播放
} private void btn_pause_Click(object sender, EventArgs e)
{
Bass.BASS_ChannelPause(stream);//音乐暂停
} private void btn_resume_Click(object sender, EventArgs e)
{
Bass.BASS_ChannelPlay(stream, false);
} private void btn_stop_Click(object sender, EventArgs e)
{
Bass.BASS_ChannelStop(stream); //停止播放
} private void btn_close_Click(object sender, EventArgs e)
{
Bass.BASS_Stop(); //停止所有输出
Bass.BASS_Free(); //释放所有资源 if (!Bass.BASS_Init(-, , BASSInit.BASS_DEVICE_CPSPEAKERS, this.Handle))
{
MessageBox.Show("出错了," + Bass.BASS_ErrorGetCode().ToString());
}
} private void btn_test_Click(object sender, EventArgs e)
{
this.peakMeterCtrl1.SetRange(, , );
} private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Bass.BASS_ChannelStop(stream); //停止播放
Bass.BASS_StreamFree(stream); //释放音频流
Bass.BASS_Stop(); //停止所有输出
Bass.BASS_Free(); //释放所有资源
} const int BandsCount = ;
int[] FFTPeacks = new int[BandsCount];
int[] FFTFall = new int[BandsCount];
int rate = ; /// <summary>
/// 用计时器绘制频谱(如果有更好的思路欢迎留言)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void T_Tick(object sender, EventArgs e)
{
if (Bass.BASS_ChannelIsActive(stream) != BASSActive.BASS_ACTIVE_PLAYING) return;
int[] FFTFall = Array.ConvertAll<float, int>(GetFFTData(), delegate (float f) { return (int)Math.Abs(f * rate); });
this.peakMeterCtrl1.SetData(FFTFall, , FFTFall.Length);
} // 获取FFT采样数据,返回128个浮点采样数据
public float[] GetFFTData()
{
float[] fft = new float[BandsCount];
Bass.BASS_ChannelGetData(stream, fft, (int)BASSData.BASS_DATA_FFT256);
return fft;
} private void cbo_fps_SelectedIndexChanged(object sender, EventArgs e)
{
peakMeterCtrl1.Stop();
peakMeterCtrl1.Start( / Int32.Parse(cbo_fps.Text)); //fps
} private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
rate = Int32.Parse(numericUpDown1.Value.ToString()); //增益效果
} private void txt_LEDCount_TextChanged(object sender, EventArgs e)
{
peakMeterCtrl1.LEDCount = Convert.ToInt32(txt_LEDCount.Text);//纵向格子数量
} private void txt_BANDSCount_TextChanged(object sender, EventArgs e)
{
peakMeterCtrl1.BandsCount = Convert.ToInt32(txt_BANDSCount.Text); //横向格子数量
} private void cheb_ShowGrid_CheckedChanged(object sender, EventArgs e)
{
peakMeterCtrl1.ShowGrid = cheb_ColoredGrid.Enabled = cheb_ShowGrid.Checked; //显示背景格子
} private void cheb_ColoredGrid_CheckedChanged(object sender, EventArgs e)
{
peakMeterCtrl1.ColoredGrid = cheb_ColoredGrid.Checked; //显示彩色背景格子
} private void cheb_FalloffEffect_CheckedChanged(object sender, EventArgs e)
{
peakMeterCtrl1.FalloffEffect = cheb_FalloffEffect.Checked; //显示回落效果
}
} }

最后附上网盘下载地址:https://pan.baidu.com/s/1xQI2YTeYN-SUghhC1gCH_g 提取码: iirb

C# BASS音频库 + 频谱基本用法的更多相关文章

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

    BASS 简介 BASS是一个在多个平台上用于软件的音频库.其目的是为开发人员提供功能强大且高效的示例流(MP3,MP2,MP1,OGG,WAV,AIFF),MOD 音乐(XM,IT,S3M,MOD ...

  2. Waud.js – 使用HTML5降级处理的Web音频库

    Waud.js 是一个Web音频库,有一个HTML5音频降级处理方案. 它允许您利用Web音频API为你的Web应用程序控制音频功能.在不支持Web音频API的非现代浏览器使用HTML5音频降级方案. ...

  3. 移植eac3音频库

    2016-5-26 移植eac3音频库,从ffmpeg库中移植.经过验证是切实可行的. 感觉开源软件就是时间黑洞,有多少时间搭进去都不为过.已经3周过去了,ffmpeg还是没有熟悉完. 真正的移植工作 ...

  4. c/c++ 重载运算符 标准库function的用法

    重载运算符 标准库function的用法 问题:int(int, int)算不算一种比较通用的类型?? 比如函数: int add(int a, int b); 比如lambda:auto mod = ...

  5. Python爬虫入门之Urllib库的高级用法

    1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...

  6. Python爬虫Urllib库的高级用法

    Python爬虫Urllib库的高级用法 设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Head ...

  7. $python爬虫系列(2)—— requests和BeautifulSoup库的基本用法

    本文主要介绍python爬虫的两大利器:requests和BeautifulSoup库的基本用法. 1. 安装requests和BeautifulSoup库 可以通过3种方式安装: easy_inst ...

  8. Python爬虫入门四之Urllib库的高级用法

    1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...

  9. 转 Python爬虫入门四之Urllib库的高级用法

    静觅 » Python爬虫入门四之Urllib库的高级用法 1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我 ...

随机推荐

  1. 《C Prime Plus》第九节笔记

    第九节 函数 9.1 复习函数 函数原型 function prototype 函数调用 function call 函数定义 function definition 形参 实参 典型的ANSI C函 ...

  2. 106)PHP,缩略图代码和结果展示

    首先是 代码展示: <?php class CImage { /** * 生成保持原图纵横比的缩略图,支持.png .jpg .gif * 缩略图类型统一为.png格式 *@param $src ...

  3. OpenCV C++常用功能介绍

    显示图片 IplImage* img = cvLoadImage("-/temp.jpeg", 1); //create a window to display the image ...

  4. Query对象与DOM对象之间的转换

    什么是jQuery对象? ---就是通过jQuery包装DOM对象后产生的对象.jQuery对象是jQuery独有的,其可以使用jQuery里的方法. 比如: $("#test") ...

  5. JavaScript中对象数组去重方法

    在一次对后端返回的对象数组的操作时想通过indexOf()或者includes()的方法来实现对对象数组的去重但是行不通,因为用indexOf()返回的都是-1,一下记录两种对象数组(更具指定属性)去 ...

  6. 地理位置(Geolocation)API 简介

    一.开篇简述 Geolocation API(地理位置应用程序接口)提供了一个可以准确知道浏览器用户当前位置的方法.且目前看来浏览器的支持情况还算不错(因为新版本的IE支持了该API),这使得在不久之 ...

  7. TCP并发、GIL全局锁、多线程讨论

    TCP实现并发 #client客户端 import socket client = socket.socket() client.connect(('127.0.0.1',8080)) while T ...

  8. GPU PassThrough in KVM

    实现步骤 环境 OS: # cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) # uname -a Linux hyhive 3 ...

  9. mysql启动报错ERROR! The server quit without updating PID file处理

    从其它服务器拷贝编译安装后的MySQL5.7目录后启动时报错如下: ERROR! The server quit without updating PID file(/path/to/XXX.pid) ...

  10. 2019-04-18-NFV基础概念

    NFV技术的起源和概念 在移动互联网时代,运营商面临内外困局.就自身而言,采用的流量增长-网络扩容-收入增长的商业模型正在失效,庞大.僵化的电信基础网络,不能够满足用户的丰富需求:就竞争对手而言,互联 ...