Android SoundPool只能玩6秒mp3吗?

时间:2017-03-28 04:46:36

标签: android audio

我发现Android SoundPool只能播放6秒mp3,我怎样才能打破这个限制?还有除MediaPlay之外的其他MP3播放器吗?

3 个答案:

答案 0 :(得分:2)

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

  1. 将声音文件的采样率更改为16000 Hz
  2. 将您的音频频道更改为单声道,而不是立体声。
  3. 确保这些过程后的文件小于1 mb。
  4. 现在,我使用在线转换器来做到这一点。您可以通过在线转换器执行所有这些步骤。 这是我使用的链接:http://audio.online-convert.com/convert-to-ogg

答案 1 :(得分:1)

取代Soundpool,使用Media Player Class

首先创建媒体播放器对象

  

MediaPlayer mediaPlayer;

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

  

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

使用这两种方法播放暂停

  

mediaPlayer.play(); //适用于Play音乐    mediaPlayer.Pause(); //暂停音乐

了解有关Media Player的更多信息 使用Thsese教程

  

link

如果您想使用网址播放音乐,请使用此教程

  

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

答案 2 :(得分:0)

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

因此,您可以使用最大大小为1M。

  

如何突破这个限制?

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

如果您需要step by step tutorial, here is a one.

Here你可以阅读更多相关信息。

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

blogs = Blog.where(main_post_yn: true) // get all blogs with `main_post_yn` as true

@post_ids = []

blogs.each do |blog|
    @post_ids << blog.posts.pluck(:id) // push post-Id's of those blogs into an array
end

@posts = Post.where(id: @post_ids) // get all posts with those post-Id's

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

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