Exo播放器2:在某些设备上剪切了mp3文件的最后一个单词/音节

时间:2017-11-11 16:07:06

标签: android audio exoplayer exoplayer2.x

问题描述

我尝试实施Exoplayer,以便在点击事件播放的同时播放循环和语音中的背景音乐。 我无法在文件的末尾添加静音,因为我在raw中播放它们会产生如下句子:

文件一:"选择"

文件二:"一个类别"

这就是为什么我不能在2个文件之间存在沉默的差距,并且应用程序中有大约1500个文件,所以我这样做是为了节省空间。

起初我和MediaPlayer在一起,但发现在某些手机上(One plus A0001)我不能让2个媒体播放器同时工作,所以我决定选择Exoplayer。 这2名球员正在服役。

背景音乐是​​原始文件夹中的ogg文件,效果很好。

我无法从原始文件夹中播放mp3语音文件,所以我将它们放在资源文件夹中,我设法播放它们。 我现在面临的问题是,在我的一些设备上切断每个mp3文件的末尾。切割的长度取决于设备。

我做错了吗?

感谢您的帮助

这是我的soundPlayer代码

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);

这是我的musicPlayer代码

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)

0 个答案:

没有答案