【发布时间】:2017-04-28 03:42:18
【问题描述】:
我似乎在尝试获取并发(在这种情况下为四个)音频文件以在树莓派上的 Processing3 中播放时遇到了很多麻烦。音频最终变得非常断断续续,每隔半秒左右就一直断断续续,直到我决定将其关闭。
我也尝试过播放一个音频文件来检查它,它开始时非常不稳定,持续了好几秒钟,然后才变得有点不稳定(始终每隔约 5 秒左右出现一次断断续续的声音)。
我的第一次尝试是使用 Minim 库,但我也尝试过 Beads 库(这在 pi 上完全失败,冻结直到显示“内存不足错误”)。我也尝试过 Processing 的 Sound 库,但无法让这个库首先在我的开发机器上运行(windows 7 和 java 1.8 只是崩溃)并且似乎不受 ARM 支持。
我正在尝试播放的文件目前是 mp3 文件,尽管我对此有控制权并尝试了 wav 以及具有几种不同比特率(48、96、128、192 kbps)的 mp3。无论我尝试哪种文件类型,我都听不到任何差异。
我使用的 rpi 是 B+,最初运行 wheezy,但现在我已经迁移到 jessie-lite 的新映像(手动安装了运行 Processing3 所需的东西,包括 java 1.8)。内存分配被分成 50%(256mb 到 gpu)。
这是我现在如何使用 Minim 播放声音的代码:
import ddf.minim.*;
private final String TYPE = ".mp3";
private final String MUSIC_A = "01-09_mixdown";
private final String MUSIC_B = "10-18_mixdown";
private final String MUSIC_C = "19-27_mixdown";
private final String MUSIC_D = "28-35_mixdown";
private final String SOUND_LOCATION = "sounds/";
Minim minim;
AudioPlayer[] audioPlayers= new AudioPlayer[4];
// have played with this a few times, trying 512, 1024, and 2048 as well as leaving this out altogether (default was 2048 I think)
int BUFFER_SIZE = 4096;
float changeRate = 0.05;
float[] volumes;
void setup(){
this.frameRate = 24;
size(320, 240, P2D);
minim = new Minim(this);
audioPlayers[0] = minim.loadFile(SOUND_LOCATION + MUSIC_A + TYPE, BUFFER_SIZE);
audioPlayers[1] = minim.loadFile(SOUND_LOCATION + MUSIC_B + TYPE, BUFFER_SIZE);
audioPlayers[2] = minim.loadFile(SOUND_LOCATION + MUSIC_C + TYPE, BUFFER_SIZE);
audioPlayers[3] = minim.loadFile(SOUND_LOCATION + MUSIC_D + TYPE, BUFFER_SIZE);
volumes = new float[4];
volumes[0] = 0.5;
volumes[1] = 0.5;
volumes[2] = 0.5;
volumes[3] = 0.5;
audioPlayers[0].loop();
audioPlayers[1].loop();
audioPlayers[2].loop();
audioPlayers[3].loop();
println("Playing now");
}
void draw(){
// no drawing for this test
}
最后,尝试在处理之外播放音频是成功的(使用 omxplayer 没有问题)。
想知道接下来我还能尝试什么,有什么想法吗?
【问题讨论】:
标签: java audio raspberry-pi processing playback