Choppy/Stuttering 音频在 rpi 上使用 minim
Choppy/Stuttering audio using minim on rpi
在 raspberry pi 上的 Processing3 中尝试同时播放(在本例中为四个)音频文件似乎遇到了很多麻烦。音频最终变得非常断断续续,每半秒左右一直断断续续,直到我决定将其关闭。
我也试过播放一个音频文件只是为了检查,它开始时断断续续的好几秒钟,然后才变得有点断断续续(每大约 5 秒左右一直断断续续)。
我第一次尝试使用 Minim 库,但我也尝试过 Beads 库(这在 pi 上完全失败,冻结直到显示 "out of memory error")。我也尝试过 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 文件的差异使我得出了这个结论(即使两个结果都是 choppy/stuttering)。
相反,我使用了 wav 文件。
它们之前没有工作,因为事实证明我导出它们时使用的是 32 位浮点深度,我猜这与 minim 不兼容。 16 位深度似乎工作正常,同时播放多个文件似乎没有大问题。
在 raspberry pi 上的 Processing3 中尝试同时播放(在本例中为四个)音频文件似乎遇到了很多麻烦。音频最终变得非常断断续续,每半秒左右一直断断续续,直到我决定将其关闭。
我也试过播放一个音频文件只是为了检查,它开始时断断续续的好几秒钟,然后才变得有点断断续续(每大约 5 秒左右一直断断续续)。
我第一次尝试使用 Minim 库,但我也尝试过 Beads 库(这在 pi 上完全失败,冻结直到显示 "out of memory error")。我也尝试过 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 文件的差异使我得出了这个结论(即使两个结果都是 choppy/stuttering)。
相反,我使用了 wav 文件。
它们之前没有工作,因为事实证明我导出它们时使用的是 32 位浮点深度,我猜这与 minim 不兼容。 16 位深度似乎工作正常,同时播放多个文件似乎没有大问题。