如何使用Processing播放声音?

图形做多了,有时候我们也想玩玩音乐,比如你做了个塔防的游戏,没有配音那怎么行。。。
然而,声音到底怎么写?是呀,声音到底怎么写,擦?


官方的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+10, 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."1020 );
  }
  else
  {
    text("Press any key to start playback."1020 );
  }
}
 
 
void keyPressed()
{
  if ( player.isPlaying() ) {
    player.pause();
  }
  // 如果播放到文件末尾
  // 我们使他再播一遍
  else if ( player.position() == player.length() ) {
    player.rewind();
    player.play();
  else {
   player.play();
  }
}

发布了12 篇原创文章 · 获赞 13 · 访问量 4万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览