问题描述
我正在尝试实现 Exoplayer 以循环播放背景音乐,同时在点击事件上播放语音。我无法在文件末尾添加静音,因为我以原始方式播放它们以制作如下句子:
文件一:“选择”
文件二:“一个类别”
这就是为什么我不能在 2 个文件之间有一个静音间隔,并且应用程序中有大约 1500 个文件,所以我这样做是为了节省空间。
起初我使用 MediaPlayer,但发现在某些手机(一加 A0001)上我不能同时使用 2 个 Mediaplayer,所以我决定使用 Exoplayer。2 名玩家正在服务中运行。
背景音乐是原始文件夹中的 ogg 文件,效果很好。
我无法播放原始文件夹中的 mp3 语音文件,所以我将它们放在资产文件夹中并设法播放它们。我现在面临的问题是,在我的某些设备上,每个 mp3 文件最后都会被剪切。切割的长度取决于设备。
我做错什么了吗?
谢谢你的帮助
这是我的声音播放器代码
DefaultRenderersFactory renderersFactorySound = new DefaultRenderersFactory(this,null, DefaultRenderersFactory.EXTENSION_RENDERER_MODE_OFF);
exoPlayerSound = ExoPlayerFactory.newSimpleInstance(renderersFactorySound, new DefaultTrackSelector(), new DefaultLoadControl());
exoPlayerSound.addListener(playerSoundEventListener);
exoPlayerSound.setVolume(1.0f);
exoPlayerSound.setRepeatMode(Player.REPEAT_MODE_OFF);
final AssetDataSource dataSource = new AssetDataSource(this);
DataSpec dataSpec = new DataSpec(Uri.parse("asset:///sounds/" + soundsToPlay.get(0) + ".mp3"));
try {
dataSource.open(dataSpec);
} catch (AssetDataSource.AssetDataSourceException e) {
e.printStackTrace();
}
DataSource.Factory factoryMusic = new DataSource.Factory() {
@Override
public DataSource createDataSource() {
return dataSource;
}
};
MediaSource audioSource = new ExtractorMediaSource(Uri.parse("asset:///sounds/" + soundsToPlay.get(0) + ".mp3"), factoryMusic, Mp3Extractor.FACTORY, null, null);
exoPlayerSound.prepare(audioSource);
exoPlayerSound.setPlayWhenReady(true);
这是我的音乐播放器代码
DefaultRenderersFactory renderersFactoryMusic = new DefaultRenderersFactory(this, null, DefaultRenderersFactory.EXTENSION_RENDERER_MODE_OFF);
playerMusic = ExoPlayerFactory.newSimpleInstance(renderersFactoryMusic, new DefaultTrackSelector(), new DefaultLoadControl());
playerMusic.setVolume(0.4f);
playerMusic.setRepeatMode(Player.REPEAT_MODE_ONE);
DataSpec dataSpecMusic = new DataSpec(RawResourceDataSource.buildRawResourceUri(songId));
final RawResourceDataSource rawResourceDataSourceMusic = new RawResourceDataSource(this);
try {
rawResourceDataSourceMusic.open(dataSpecMusic);
} catch (RawResourceDataSource.RawResourceDataSourceException e) {
e.printStackTrace();
}
DataSource.Factory factoryMusic = new DataSource.Factory() {
@Override
public DataSource createDataSource() {
return rawResourceDataSourceMusic;
}
};
MediaSource audioSourceMusic = new ExtractorMediaSource(rawResourceDataSourceMusic.getUri(), factoryMusic, OggExtractor.FACTORY, null, null);
playerMusic.prepare(audioSourceMusic);
playerMusic.setPlayWhenReady(true);
正在使用的 ExoPlayer 版本
compile 'com.google.android.exoplayer:exoplayer-core:r2.5.4'
正在使用的 Android 设备和版本
有问题的设备:Samung Galaxy note 3 SM-N9005 (Android v5.0) Acer Iconia B1-710 (Android v4.1.2)
没有问题的设备:一加 A0001 (Android v6.0.1) Samung Galaxy note 1 GT-N7000 (Android v4.1.2)