如何使用Processing播放声音?

Processing教学 专栏收录该内容
11 篇文章 3 订阅
图形做多了,有时候我们也想玩玩音乐,比如你做了个塔防的游戏,没有配音那怎么行。。。
然而,声音到底怎么写?是呀,声音到底怎么写,擦?


官方的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();
   }
}

  • 10
    点赞
  • 2
    评论
  • 29
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值