Как запретить SoundPool обрезать звуки - PullRequest
1 голос
/ 22 августа 2011

У меня есть приложение для звуковой панели, и я использую SoundPool для управления воспроизведением моих звуков.Все работало замечательно, пока я не попытался добавить звук продолжительностью около 30 секунд.Когда я нажимаю кнопку этого звука, он воспроизводится всего несколько секунд, а затем останавливается.Есть ли способ предотвратить это с помощью SoundPool?Вот мой кодСпасибо!

public class SoundManager {

private  SoundPool mSoundPool; 
private  HashMap<Integer, Integer> mSoundPoolMap; 
private  AudioManager  mAudioManager;
private  Context mContext;


public SoundManager()
{

}

public void initSounds(Context theContext) { 
     mContext = theContext;
     mSoundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0); 
     mSoundPoolMap = new HashMap<Integer, Integer>(); 
     mAudioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);         
} 

public void addSound(int Index,int SoundID)
{
    mSoundPoolMap.put(Index, mSoundPool.load(mContext, SoundID, 1));

}

public void playSound(int index)
{
float streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
streamVolume = streamVolume / mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
    mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 1, 0, 1f);
}

public void playLoopedSound(int index)
{
    float streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
    streamVolume = streamVolume / mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
    mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 1, -1, 1f);
}
}

Ответы [ 4 ]

1 голос
/ 12 сентября 2014

Есть некоторая информация о Soundpool, которую я собираю при разработке музыкального приложения. Вот некоторые руководящие указания, которые не были рассмотрены в исходной документации на основе ограничений по длине звука:

   Length of Sound              Khz
--------------------      ---------------
     1-5 Secs.             44khz - Stereo
    6-11 Secs.             22khz - Stereo
   12-21 Secs.             11khz - Mono
     21+ Secs.              8khz - Mono 

Так что, если у вас есть какие-либо аудиофайлы, которые обрезаются SoundPool, конвертируйте их. Конечно, при преобразовании в 11 кГц или ниже звук начинает звучать немного низкого качества, но лучше, чем ничего. Программа, которую я использую для конвертации: Бесплатный MP3 WMA OGG Converter. Я всегда использую файлы ogg при работе с Soundpool. Надеюсь, это поможет людям.

0 голосов
/ 08 октября 2013

SoundPool имеет ограничение внутренней памяти 1 (один) Мб. Вы можете поразить это, если ваш звук очень высокого качества. Если у вас много звуков и вы достигаете этого предела, просто создайте больше звуковых пулов и распределите между ними звуки.

0 голосов
/ 30 ноября 2013

SoundPool - это легкий проигрыватель, который декодирует только первые 1 МБ данные, но если вы хотите использовать более качественный или длинный аудиофайл, вам необходимо:

* Use MediaPlayer interface instead of SoundPool. MediaPlayer is more complicated mechanism so the playback startup time longer than SoundPool.
* Use MediaCodec API to decode data firstly then call AudioTrack API to playback PCM data as requested.This solution will decode the data firstly then do PCM playback directly, so the delay will be the same as SoundPool but it's more complicated for programming.
0 голосов
/ 18 ноября 2011

предназначен только для воспроизведения коротких звуков, прочитайте страницу SDK.

...