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 位深度似乎工作正常,同时播放多个文件似乎没有大问题。