图形做多了,有时候我们也想玩玩音乐,比如你做了个塔防的游戏,没有配音那怎么行。。。
然而,声音到底怎么写?是呀,声音到底怎么写,擦?
官方的Sound库在新的Processing版本下无法运行,反正,我是不行了。你行你玩吧,顺便教教我,嘿。
这里墙裂推荐Minim库,要深可深,要浅可浅,深浅随意~
Minim库
音频播放库,提供了易于使用的类,记录、分析和合成声音的办法。
你可以直接使用Processing的菜单->工具->添加工具->Libraries->搜索Minim下载即可
基本的结构
常用方法
Minim 对象
AudioPlayer 对象
示例
然而,声音到底怎么写?是呀,声音到底怎么写,擦?
官方的Sound库在新的Processing版本下无法运行,反正,我是不行了。你行你玩吧,顺便教教我,嘿。
这里墙裂推荐Minim库,要深可深,要浅可浅,深浅随意~
Minim库
音频播放库,提供了易于使用的类,记录、分析和合成声音的办法。
你可以直接使用Processing的菜单->工具->添加工具->Libraries->搜索Minim下载即可
基本的结构
Java 代码,双击复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// 头
import
ddf.minim.*;
// 库引用
Minim minim;
// 申请minim对象
AudioPlayer player;
// 申请音乐对象
// 初始化
minim =
new
Minim(
this
);
// 初始化minim对象
// 像读图的方法一样 在工程目录下的data文件夹里读取文件,
// 也可以读取绝对地址的文件
player = minim.loadFile(
"lty.mp3"
);
// 运作
player.play();
// 播放
|
常用方法
Minim 对象
- loadFile("String"); // 读取音频文件
AudioPlayer 对象
- play() // 播放
- isPlaying() // 正在播放?
- pause() // 暂停
- rewind() // 倒带,回到开头
- bufferSize() // 音乐缓冲数据大小
- position() // 当前播放位置
- length() // 音乐数据长度
- left.get() // 左声道数据提取
- right.get() // 右声道数据提取
示例
Java 代码,双击复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
import
ddf.minim.*;
Minim minim;
AudioPlayer player;
void
setup() {
size(
512
,
200
);
// 通过 Minim 可以加载文件
minim =
new
Minim(
this
);
// 像读图的方法一样 在工程目录下的data文件夹里读取文件
// 也可以读取绝对地址的文件
player = minim.loadFile(
"lty.mp3"
);
}
void
draw() {
background(
0
);
stroke(
255
);
// 绘制波形
// 由 left.get() 和 right.get() 返回的值将是-1 和 1 之间,
// 所以需要映射到合适的大小
// 如果是MONO单声道文件,left.get() 和 right.get() 将返回相同的值
for
(
int
i=
0
; i<player.bufferSize() -
1
; i++) {
float
x1 = map( i,
0
, player.bufferSize(),
0
, width );
float
x2 = map( i+
1
,
0
, player.bufferSize(),
0
, width);
line( x1,
50
+ player.left.get(i)*
50
, x2,
50
+ player.left.get(i+
1
)*
50
);
line( x2,
150
+ player.right.get(i)*
50
, x2,
150
+ player.right.get(i+
1
)*
50
);
}
// 画一条线以显示歌曲当前播放的位置
float
posx = map(player.position(),
0
, player.length(),
0
, width);
stroke(
0
,
200
,
0
);
line(posx,
0
, posx, height);
if
( player.isPlaying() )
{
text(
"Press any to pause playback."
,
10
,
20
);
}
else
{
text(
"Press any key to start playback."
,
10
,
20
);
}
}
void
keyPressed()
{
if
( player.isPlaying() ) {
player.pause();
}
// 如果播放到文件末尾
// 我们使他再播一遍
else
if
( player.position() == player.length() ) {
player.rewind();
player.play();
}
else
{
player.play();
}
}
|