我试图在树莓派的Processing3中获取并发(本例中为四个)音频文件来播放时遇到很多麻烦。音频最终变得非常断断续续,每隔半秒左右就会持续发出口吃,直到我决定将其关闭。
我还尝试了一个音频文件的播放,只是为了检查它,它开始断断续续地播放了好几秒钟,然后才变得有点断断续续(通常每5秒钟左右会发出断断续续的声音)。
我的第一个尝试是使用Minim库,但是我也尝试了Beads库(这在pi上完全失败,直到显示“内存不足错误”都冻结了)。我也尝试过Processing的声音库,但是无法在我的开发机上首次使用它(Windows 7和Java 1.8崩溃),并且ARM似乎不支持它。
我尝试播放的文件是当前的mp3文件,尽管我对此有控制权,并尝试了wav以及具有几个不同比特率(48、96、128、192 kbps)的mp3。无论我尝试哪种文件类型,我都听不到任何差异。
我正在使用的RPI是B +,最初运行时很忙,但是现在我迁移到了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没有问题)。
想知道接下来我还能尝试什么,有什么想法吗?
最佳答案
我终于想出了在给定的库和环境下如何正确播放某种音频的方法:
我的猜测是mp3解码器的处理非常密集。我可能是错的,但是一个文件与四个mp3文件之间的差异使我得出了这个结论(即使两个结果都是断断续续/口吃)。
相反,我有wav文件可以工作。
他们以前没有工作过,因为事实证明我以32位浮点深度导出它们,我猜这与minim不兼容。 16位深度似乎可以正常工作,并且同时播放多个文件似乎没有什么大问题。
关于java - 在RPI上使用Minim产生断断续续/口吃的音频,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43671600/