繁体   English   中英

在RPI上使用Minim产生断断续续/口吃的音频

[英]Choppy/Stuttering audio using minim on rpi

我试图在树莓派的Processing3中获取并发(本例中为四个)音频文件来播放时遇到很多麻烦。 音频最终变得非常断断续续,每隔半秒左右就会持续发出口吃声,直到我决定将其关闭为止。

我还尝试了一个音频文件的播放,只是为了检查它,它起伏不定,持续了好几秒钟,然后才变得有点断断续续(通常每5秒钟左右发出断断续续的声音)。

我的第一个尝试是使用Minim库,但是我也尝试了Beads库(这在pi上完全失败,直到显示“内存不足错误”都冻结了)。 我也尝试过Processing的Sound库,但是无法在我的开发机上首先使用它(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位深度似乎可以正常工作,并且同时播放多个文件似乎没有什么大问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM