【问题标题】:Choppy/Stuttering audio using minim on rpi在 rpi 上使用 minim 时出现断断续续/断断续续的音频
【发布时间】: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


    【解决方案1】:

    我终于想出了如何在给定库和环境的情况下正确播放某种音频:

    我的猜测是 mp3 解码器的处理非常密集。我可能是错的,但是一个文件与四个 mp3 文件的差异使我得出了这个结论(即使两个结果都断断续续/断断续续)。

    相反,我可以使用 wav 文件。

    他们以前没有工作,因为我以 32 浮动位深度导出它们,我猜这与 minim 不兼容。 16 位深度似乎工作正常,同时播放多个文件似乎没有大问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 2017-06-18
      • 2021-04-11
      相关资源
      最近更新 更多