Ich habe eine Funktion, die ich über Android AudioTrack
statt MediaPlayer
anstelle von MediaPlayer
, wegen ein paar gut bekannten Bugs mit MediaPlayer
, wie die kleine Lücke, die zwischen Looping-Tracks erscheint.Play looping audio mit AudioTrack
Ich wurde empfohlen, AudioTrack
zu verwenden, aber habe nicht zu viele Beispiele dafür gefunden. Ich habe eine Frage finden auf SO AudioTrack
Bezug und einen Teil dieses Code verwendet zu hacken zusammen etwas:
public class TestActivity extends Activity implements Runnable {
Button playButton;
byte[] byteData = null;
int bufSize;
AudioTrack myAT = null;
Thread playThread = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
playButton = (Button) findViewById(R.id.testButton);
InputStream inputStream = getResources().openRawResource(R.raw.whitenoise_wav);
try {
byteData = new byte[ inputStream.available()];
} catch (IOException e) {
e.printStackTrace();
}
try {
inputStream.read(byteData);
inputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
initialize();
playButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
playThread.start();
}
});
}
void initialize() {
bufSize = android.media.AudioTrack.getMinBufferSize(44100,
AudioFormat.CHANNEL_CONFIGURATION_STEREO,
AudioFormat.ENCODING_PCM_16BIT);
myAT = new AudioTrack(AudioManager.STREAM_MUSIC,
44100, AudioFormat.CHANNEL_CONFIGURATION_STEREO,
AudioFormat.ENCODING_PCM_16BIT, bufSize,
AudioTrack.MODE_STREAM);
myAT.setVolume(.2f);
playThread = new Thread(this);
}
public void run() {
if (myAT != null) {
myAT.play();
myAT.setLoopPoints(0, byteData.length, 6);
myAT.write(byteData, 0, byteData.length);
}
}
}
dies nicht so scheint die gesamte Audiospur (~ 1: 00 min) zu spielen und hält dann an. Jetzt ist das Endziel hier zwei haben zwei separate Audio-Tracks spielen und Looping zur gleichen Zeit. Ich habe derzeit die Audiospuren im Verzeichnis /res/raw/
, aber ich kann sie in einen einfachen Ordner assets
verschieben, wenn das besser wäre. Ist meine aktuelle Implementierung von AudioTrack
korrekt? Wenn ja, wie würde ich es in die Schleife bekommen?
Zusammenfassend: Wie können Sie looping Audio ohne eine Lücke mit AudioTrack
?
Vorschläge für alternative Möglichkeiten zum Erhalten von Audio-Schleifen, wie zum Beispiel Bibliotheken von Drittanbietern, sind willkommen.
Willst du die beiden Tracks gleichzeitig abspielen und auch das Audio einmal richtig beenden? –
Das ist richtig. – Orbit
Überprüfen Sie dies: http://developer.android.com/reference/android/media/SoundPool.html –