2012-11-14 7 views
14

Ich benutze Soundpool in meiner App, bis jetzt funktioniert es gut, aber ich habe eine WAV-Datei, die 10 Sekunden ist. Leider spielt Soundpool nur die ersten 5 Sekunden. Wie mache ich Soundpool um den ganzen Track zu spielen? Ich habe wav in - ogg und mp3 immer noch das gleiche Problem umgewandelt. Es spielt nur die ersten 5 Sekunden. Jede Hilfe würde sehr geschätzt werden.Soundpool spielt nur die ersten 5 Sekunden der Datei. Warum?

//set up audio player 
mSoundPool = new SoundPool(20, AudioManager.STREAM_MUSIC, 0); 
//load fx 
mSoundPoolMap.put(RAW_1_1, mSoundPool.load(this, R.raw.loop1, 1)); 
//playing soundpool 
case R.id.button1:   
mSoundPool.stop(mStream1); 
mStream1= mSoundPool.play(mSoundPoolMap.get(RAW_1_1), streamVolume, streamVolume, 1, LOOP_1_TIME, 1f); 

UPD Last: Vielleicht hat jemand finden es hier und es lesen. Scheint, dass der Soundpool nicht länger als 5 Sekunden spielen kann. Es ist sein Maximum, für längere Sounds benutzen Sie den MediaPlayer. Ich hoffe, dass Sie nicht so viel Zeit verbringen wie ich)

+1

Zeigen Sie Ihre Datei und Code – Yahor10

+0

@ Yahor10, ich habe ein Stück Code hinzugefügt, möchten Sie diese WAV-Datei auch haben? Weil ich mit anderen Wavs versucht habe, das gleiche Ergebnis nicht mehr als 5 Sekunden – Daler

+0

Alles in Ihrem Logcat? Ich weiß, dass Soundpool-Dateien nur sehr kurz sind (1MB unkomprimierte PCM-Daten), vielleicht ist es zu lang? Es sollte eine Nachricht im Logcat sein, denke ich. – Tim

Antwort

12

Also ich glaube, Sie die 1 M Grenze in Soundpool erreicht.

SoundPool ist harte Code die Puffergröße als 1M, für alle geladene Datei, im PCM-Format speichern.

So kümmert es sich nicht um OGG oder WAV.

+1

em, für Audio gibt es auch eine harte Grenze von 32 aktiven AudioTrack-Objekten (SoundPool, MediaPlayer verwenden AudioTrack zum Abspielen) pro _device_ (nicht pro App). – ifreedom

+0

Wie kann ich 1M Grenze erreichen? 2shared.com/audio/aYty0aVm/loop1.html (Klicken Sie auf die zweite Download-Zeile) - laden Sie diese Loop herunter und überprüfen Sie sie auf Ihrer Seite mit Soundpool, wenn Sie Erfolg haben. Fügen Sie nur diese Schleife hinzu und es ist weniger als 1M. Ich denke, Soundpool wurde entwickelt, um kurze Sounds zu spielen, und 5 Sekunden ist es seine Obergrenze. – Daler

+0

Ist das * überall * dokumentiert? Ich hätte nicht gerade zwei Stunden meines Lebens verschwendet, wenn die [SoundPool-Seite] (http://developer.android.com/reference/android/media/SoundPool.html) erwähnt hätte, dass meine Sounds möglicherweise zu lang sind. –

3

Diese Aktivität ist für mich Werke

public class MainActivity extends Activity { 

    private Integer soundID; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     this.setVolumeControlStream(AudioManager.STREAM_MUSIC); 
     // Load the sound 
     AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); 
     float actualVolume = (float) audioManager 
      .getStreamVolume(AudioManager.STREAM_MUSIC); 
     float maxVolume = (float) audioManager 
      .getStreamMaxVolume(AudioManager.STREAM_MUSIC); 
     final float volume = actualVolume/maxVolume; 

     SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); 

     soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() { 
      @Override 
      public void onLoadComplete(SoundPool soundPool, int sampleId, 
       int status) { 
         @Override 
     public void onLoadComplete(SoundPool soundPool, int sampleId, 
      int status) { 
      soundPool.play(soundID, volume, volume, 1, 0, 1f); 
      try { 
      Thread.sleep(5000); // play twice 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
      soundPool.play(soundID, volume, volume, 1, 0, 1f); 
     } 
    }); 
      } 
     }); 
     soundID = soundPool.load(this, R.raw.sound2, 1); 
     //load fx 
     //playing soundpool 

    } 
} 

Sie müssen Sie Asynchronität klingen laden und Audio-Cache überprüfen - es Überlauf sein kann.

Lesen Sie diesen Artikel http://www.google.by/url?http://www.vogella.com/articles/AndroidMedia/article.html

Sein sehr achtsam

+0

in Ihrem Code nichts anderes, meins ist das gleiche. Ich erstelle App für minsdk-7 onLoad benötigt api-8. Wenn der Sound nicht geladen wird, wird er überhaupt nicht abgespielt.Warum muss ich überprüfen, ob es geladen ist oder nicht? In meinem Fall spielt es aber nur die ersten 5 Sekunden. Scheint, es ist Soundpool-Problem. Versuchen Sie es selbst, wenn Sie eine Datei abspielen können, die länger als 5 Sekunden ist, versuchen Sie, 10 Sek. Abzuspielen. – Daler

+0

Zeigen Sie Ihre Datei an. Ich werde versuchen, es in meinen Code zu setzen – Yahor10

+0

hier ist ein Link http://www.2shared.com/audio/aYty0aVm/loop1.html, klicken Sie auf "Download" zweiten - root .. Tahnks für Ihre Hilfe – Daler

10

Wir haben ein ähnliches Problem gelöst, indem wir die Abtastrate * .ogg effects verringern. Unsere anfänglichen Abtastrate betragen 44 kHz ~ und nur 10 sec von Ton gespielt wird, abnehmend auf 16 kHz Erhöhung Spielbarkeit bis 30 Sekunden

Lösung in this discussion

+1

+1 über Auswirkungen der Abtastrate auf die Wiedergabedauer. Wir können jedoch die Sample-Raten nicht immer reduzieren, daher wäre es für längere Töne eine gute Entscheidung, den MediaPlayer zu verwenden. Beide haben ihre Vorteile, daher sollte die Entscheidung von Dev getroffen werden. Nochmals vielen Dank für die Veröffentlichung Ihrer Lösung, es ist interessant. – Daler

7

Soundpool gefunden wurde entworfen kurze Toneffekte zu spielen. So spielen Sie Musik (große Audio-Dateien) benötigen Sie MediaPlayer

// R.raw.audio_file - res/raw/audio_file.mp3 

mediaPlayer = MediaPlayer.create(this, R.raw.audio_file); 
mediaPlayer.start(); 
0

Ihre Datei zu verwenden, ist wahrscheinlich zu groß. Versuchen Sie, von Stereo zu Mono zu wechseln, wenn Sie ohnehin kein Stereo benötigen. Oder versuchen Sie, Ihre Datei zu verkleinern.

In meinem Fall funktioniert das Reduzieren der Filesice.

Verwandte Themen