同时播放Android FMOD歌曲

时间:2013-08-13 13:41:16

标签: android android-ndk fmod

我需要同时播放一些歌曲(同时播放)。我的代码是:

#define SIZE 9

FMOD_SYSTEM *gSystem = 0;
FMOD_CHANNEL *gChannel[SIZE];
FMOD_SOUND *gSound[SIZE];
const char *tracks[SIZE];

FMOD_RESULT result = FMOD_OK;
result = FMOD_System_Create(&gSystem);
result = FMOD_System_Init(gSystem, 1024, FMOD_INIT_NORMAL, 0);

FMOD_MODE soundParams = FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_OFF | FMOD_CREATESTREAM
                | FMOD_ACCURATETIME;

for (int i = 0; i < tracksSize; i++)
    result = FMOD_System_CreateSound(gSystem, tracks[i], soundParams, 0, &gSound[i]);

for (int i=0; i<tracksSize; i++) {
    result = FMOD_System_PlaySound(gSystem, FMOD_CHANNEL_FREE, gSound[i], true, &gChannel[i]);

    FMOD_Channel_SetMode(gChannel[i], FMOD_LOOP_NORMAL);
    FMOD_Channel_SetLoopCount(gChannel[i], -1);
    FMOD_Channel_SetPaused(gChannel[i], false);
}

但歌曲间歇性地播放。请帮帮我。

1 个答案:

答案 0 :(得分:0)

我没有看到您的代码出现任何问题,看来您正在创建和播放9个音频流。我担心的是在Android(移动)设备上播放9个流的CPU成本。如果您使用的是复杂的压缩格式,如MP3,则可能会使CPU饱和。您可以使用System :: getCPUUsage()来检查这一点,看一下'总'CPU值,它是否超过或接近100%?如果是这样,那将是你的问题。

解决方案是选择较少的通道同时播放,或选择较少CPU密集的压缩格式,如ADPCM。