Android AudioTrack spielt nicht alle Samples ab

8

Ich verwende AudioTrack , um eine Sequenz von Sinuswellen zu spielen, aber wenn ich es auf meinem HTC M9 starte, spielt es nur einen Teil der Samples ab und wie lange es gespielt wird, ist zufällig. e. G. Ich habe 20 Töne zu spielen, aber es spielt nur 2 bis 17.5 Töne von ihnen. Und ja, es wird sogar mitten in einem Ton aufhören.

Hier ist mein Code, aus einer anderen Antwort:

%Vor%

Hat jemand eine Idee? Danke!

    
Romulus Urakagi Ts'ai 19.01.2016, 10:05
quelle

2 Antworten

0

Es ist wahrscheinlich die Garbage Collection, die dieses Problem verursacht. Ich habe diesen Code in einer Methode geschrieben, die sofort zurückkehrt, da audioTrack object den Verweis darauf verliert. Wenn während der Wiedergabe eine Speicherbereinigung stattfindet, wird audioTrack abgeschlossen und hört auf, Töne wiederzugeben. Daher tritt dieses Problem gelegentlich auf, je nachdem wie aktiv der GC beim Abspielen von Tönen ist.

Also muss ich den AudioTrack Objektreferenz beibehalten, bis die Wiedergabe endet. Ich denke, es gibt viele Möglichkeiten, dies zu tun, aber schließlich verwende ich den einfachsten Weg:

%Vor%

MediaPlayer hat auch diese Fallstricke, und so habe ich das Problem gefunden, da es Protokoll schreiben wird, dass es abgeschlossen ist, bevor es veröffentlicht wird.

    
Romulus Urakagi Ts'ai 27.06.2016, 07:03
quelle
2

Sie verwenden AudioTrack.MODE_STATIC, das für kurze Sounds und niedrige Latenzanforderungen gedacht ist, während Sie AudioTrack.MODE_STREAM verwenden sollten. AudioTrack.MODE_STREAM ist für längere Streams gedacht, aber ich weiß nicht, wie lange Ihre Samples sind. So können Sie versuchen, AudioTrack zu ändern:

%Vor%

Auch AudioTrack benötigt die Puffergröße in Bytes, ein kurzer Wert muss mit zwei multipliziert werden, um die korrekte Menge an benötigten Bytes zu berechnen. Du könntest es so hacken:

%Vor%     
jobbert 03.05.2016 07:18
quelle

Tags und Links