我在processing中编写了一个程序,使用外部库“minim”进行音频播放。我是新来这家图书馆的,所以我对图书馆的了解相当缺乏。我的程序可以正常运行几天,但最终会出现以下错误:
标志和声音。pde:42:0:42:0:outofmemoryerror:java堆空间outofmemoryerror:您可能需要增加首选项中的内存设置。outofmemoryerror意味着您的代码由于错误而占用了太多内存,或者您的草图可能需要更多内存才能运行。
在我的代码中,我引用了大约20个音频文件,范围从500KB到5mb,大多数都在1mb左右。在处理ide中,我的最大可用内存设置为2000MB,这似乎已经足够了。因此,我的假设是,我有一个错误,我相信,错误是我无意中加载这些音频文件一遍又一遍到新的内存位置,而不是重新分配他们的内存空间。我很难通过查看代码来弄清楚我是如何做到这一点的。再说一次,我对minim不是很精通,所以我不理解这个库的微妙之处,也不知道我是如何做一些导致内存泄漏的事情的。我对processing/java也相当陌生。如果任何更精通processing/java/mini的人都能看看我的代码,并给我指出一些引起危险信号的行,我将不胜感激。
关于我的代码的一些相关信息:这只是3文件系统中的一个文件。此文件仅控制程序的音频应用程序。我有十个触摸传感器和一个独特的3个组合码触发音频和灯光事件列表。这些事件将音频文件Map到不同的dante设备,pc将其识别为声卡。当事件发生时,我将音频路由到正确的dante设备,然后播放音频。另外,在代码的开头,我有多个audiooutput和audioplayer类型的声明,它们没有被使用。这些是错误地加载的(我忘了取出它们),但是我决定在错误发生时保持代码的真实性。
Minim minim1 = new Minim(this);
String danteZone = "";
AudioOutput output1;
AudioOutput output2;
AudioOutput output3;
AudioOutput output4;
AudioOutput output5;
AudioOutput output6;
AudioPlayer player1;
AudioPlayer player2;
AudioPlayer player3;
AudioPlayer player4;
AudioPlayer player5;
AudioPlayer player6;
Mixer.Info[] mixerInfo;
//Variable to play audio
boolean played = false;
//Audio variables
int audioZones = 6; //Will be 6
void playEffect(String filename, String danteZone){
Mixer mixer1 = AudioSystem.getMixer(mixerInfo[0]);
mixerInfo = AudioSystem.getMixerInfo();
for (int i = 0; i < mixerInfo.length; i++){
if (mixerInfo[i].getName().equals(danteZone)){
mixer1 = AudioSystem.getMixer(mixerInfo[i]);
}
}
minim1.setOutputMixer(mixer1);
if (output1 != null){
output1.close();
}
output1 = minim1.getLineOut(Minim.STEREO);
player1 = minim1.loadFile(filename);
if (output1 != null){
player1.play();
}
}
void audioEvent(int code){
String wav = ".wav";
String fileName = str(code);
fileName = fileName + wav;
println(fileName);
//Using repetive if statements for code to be clearer
if (zoneIdentifier[0] == true){
//Zone 12
danteZone = zone12;
playEffect(fileName, danteZone);
}
if (zoneIdentifier[1] == true){
//Zone 13
danteZone = zone13;
playEffect(fileName, danteZone);
}
if (zoneIdentifier[2] == true){
//Zone 14
danteZone = zone14;
playEffect(fileName, danteZone);
}
if (zoneIdentifier[3] == true){
//Zone 15
danteZone = zone15;
playEffect(fileName, danteZone);
}
if (zoneIdentifier[4] == true){
//Zone 16
danteZone = zone16;
playEffect(fileName, danteZone);
}
if (zoneIdentifier[5] == true){
//Zone 17
danteZone = zone17;
playEffect(fileName, danteZone);
}
}
void loopAmbience(int i){
String filename = " ";
String danteCard = " ";
//println(mixerInfo[i].getName());
danteCard = mixerInfo[i].getName();
//println(danteCard);
println();
Mixer mixer1 = AudioSystem.getMixer(mixerInfo[i]);
if (danteCard.startsWith("Zone14")){
filename = "Zone14Ambience.wav";
}
else if (danteCard.startsWith("Zone17")){
filename = "Zone17Ambience.wav";
}
else if (danteCard.startsWith("Zone12")){
filename = "Zone12Ambience.wav";
}
else{
return;
}
minim1.setOutputMixer(mixer1);
if (output1 != null){
output1.close();
}
output1 = minim1.getLineOut(Minim.STEREO);
player1 = minim1.loadFile(filename);
if (output1 != null){
player1.loop();
}
}
暂无答案!
目前还没有任何答案,快来回答吧!