第1章 “Minim” 视觉加工厂:AudioBuffer类之get()方法

来源:互联网 发布:开淘宝店保证金怎么交 编辑:程序博客网 时间:2024/04/30 11:41

AudioBuffer是一个相当于单通道流式音频的浮点样本缓冲区。其只可读,但使用toArray方法可以获取缓冲区样本的副本。实际上,在绘制声波形时,我们应该使用toArray方法,而不是迭代缓冲区本身。因为在调用get方法期间,缓冲区中的样本可能会被新的样本所替代,从而导致波形似乎有不连续的地方。

get()方法

简要概述

获取缓冲区中的第i个样本。 该方法不会做边界检查,所以可能会抛出一个异常。

基本语法

float get(int i)

参数

i — int: 您想要获取的样本的角标

返回

float:第i个样本

相关

AudioBuffer

实例演示

/**  * 此例说明了如何使用AudioPlayer的AudioBuffer对象  * 播放音乐时绘制其波形和音级  * 这些相同的AudioBuffer对象同样适用于AudioInput, AudioOuput, and AudioSample,  * 因此,在这些情况下,相同的绘图代码也会起作用。  *  */import ddf.minim.*;Minim minim;AudioPlayer groove;  //音频播放器void setup(){  size(1024, 200);  minim = new Minim(this);  groove = minim.loadFile("groove.mp3", 1024);  //导入音频文件  groove.loop();  //循环播放}void draw(){  background(0);  stroke( 255 );  // 绘制波形  // left.get()和right.get()的返回值会在-1到1之间  // 所以我们需要放大它们才能看到波形  // 注意: 如果文件是单声道,left.get()和right.get()将返回相同的值。   for(int i = 0; i < groove.bufferSize() - 1; i++){    float x1 = map( i, 0, groove.bufferSize(), 0, width );    float x2 = map( i+1, 0, groove.bufferSize(), 0, width );    line( x1, 50 + groove.left.get(i)*50, x2, 50 + groove.left.get(i+1)*50 );    line( x1, 150 + groove.right.get(i)*50, x2, 150 + groove.right.get(i+1)*50 );  }  noStroke();  fill( 255, 128 );  // level方法返回的是该音频当前缓冲区的RMS(均方根)值  // 更多访问: http://en.wikipedia.org/wiki/Root_mean_square  rect( 0, 0, groove.left.level()*width, 100 );  rect( 0, 100, groove.right.level()*width, 100 );}

运行结果:
这里写图片描述

原文链接

http://code.compartmental.net/minim/audiobuffer_method_get.html

原创粉丝点击