Android SoundPool 只能播放 6 秒的 mp3?

Posted

技术标签:

【中文标题】Android SoundPool 只能播放 6 秒的 mp3?【英文标题】:Android SoundPool can only play 6 seconds mp3? 【发布时间】:2017-03-28 04:46:35 【问题描述】:

我发现 android SoundPool 只能播放 6 秒的 mp3,我该如何打破这个限制?除了 MediaPlay,还有其他的 mp3 播放器吗?

【问题讨论】:

【参考方案1】:

您也可以继续使用 soundpool 来获得更长的声音。您可以播放近 30 秒左右。但是您可能需要修改文件。您应该将您的声音文件转换为 ogg,使用 soundpool 时它总是给我更好的结果。

    将声音文件的采样率更改为 16000 Hz 将您的音频通道更改为单声道,而不是立体声。 确保在这些过程之后您的文件小于 1 mb。

现在,我使用在线转换器来做到这一点。您可以通过在线转换器完成所有这些步骤。 这是我使用的链接:http://audio.online-convert.com/convert-to-ogg

【讨论】:

您是否注意到频率较高的文件的播放长度较短?我有几个音符文件,全部记录为 24 位 22 kHz,高音音符只播放 5.5 秒,而低音音符播放 12 秒。 我没有注意到,但这是非常有趣的发现。我会检查一些时间:) 绝妙的解决方案!!非常感谢!【参考方案2】:

使用媒体播放器类代替 Soundpool

首先创建媒体播放器对象

MediaPlayer mediaPlayer;

之后初始化它 - 在项目的 Res 文件夹中创建一个 Raw 文件夹 并将 MP3 文件放入这个 Raw 文件夹并初始化。

mediaPlayer = MediaPlayer.create(this, R.raw.song);

之后使用这两种方法进行播放暂停

mediaPlayer.play(); // 播放音乐mediaPlayer.Pause(); // 暂停音乐

更多关于媒体播放器的知识 使用这些教程

https://www.tutorialspoint.com/android/android_mediaplayer.htm

如果您想使用 URL 播放音乐,请使用本教程

http://www.javatpoint.com/playing-audio-in-android-example

【讨论】:

【参考方案3】:

首先,soundpool 仅用于小尺寸音频,时间不受限制。所以认为它只能播放 6 秒的音频是完全错误的,它可以缓冲的文件大小限制为最大 1 兆字节。

所以你可以使用最大 1M 的大小。

我怎样才能打破这个限制?

你可以使用android提供的MediaPlayer类,see the documentation.

如果你想要step by step tutorial, here is a one.

Here你可以阅读更多。

以下是如何播放可用作本地原始资源(保存在应用程序的 res/raw/ 目录中)的音频的示例:

MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
mediaPlayer.start(); // no need to call prepare(); create() does that for you

以下是您可以如何从系统中本地可用的 URI 播放(例如,您通过内容解析器获得):

Uri myUri = ....; // initialize Uri here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudiostreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();

【讨论】:

但我想同时播放不同的声音。好像MediaPlayer也解决不了;我可以为 SoundPool 构建一个缓冲区管理器吗... 在 soundpool 中,您可以在初始化构造函数时执行此操作,您可以传递任意数量的数字,请参阅此答案:***.com/questions/5957444/… 你对游戏背景音乐有什么建议?带有soundpoolmediaplayer<1mb 文件? @TapanHP 好的 - 如果我想要背景音乐和点击时的短促爆炸声怎么办?我应该把它们混合起来吗? 好吧,我没有完全按照你说的做任何实现,但这真的取决于你的用例,但我不是这个人有这么多经验,所以最好你单独问提问或阅读文档并实施它

以上是关于Android SoundPool 只能播放 6 秒的 mp3?的主要内容,如果未能解决你的问题,请参考以下文章

Android使用SoundPool播放语音,并实现按顺序延时播放

Android 音频播放之SoundPool的使用和封装

为啥我的 SoundPool 声音第一次在 Android 上没有播放?

示例 1 未准备好 - Android 2.1 中的 Soundpool

Android 编程 - 如何从广播接收器播放 SoundPool 声音?

Android中使用SoundPool来播放音频