mirror of
https://github.com/moonlight-stream/moonlight-android.git
synced 2025-07-01 23:35:28 +00:00
71 lines
1.5 KiB
Java
71 lines
1.5 KiB
Java
package com.limelight.binding.audio;
|
|
|
|
import android.media.AudioFormat;
|
|
import android.media.AudioManager;
|
|
import android.media.AudioTrack;
|
|
|
|
import com.limelight.LimeLog;
|
|
import com.limelight.nvstream.av.audio.AudioRenderer;
|
|
|
|
public class AndroidAudioRenderer implements AudioRenderer {
|
|
|
|
public static final int FRAME_SIZE = 960;
|
|
|
|
private AudioTrack track;
|
|
|
|
@Override
|
|
public boolean streamInitialized(int channelCount, int sampleRate) {
|
|
int channelConfig;
|
|
int bufferSize;
|
|
|
|
switch (channelCount)
|
|
{
|
|
case 1:
|
|
channelConfig = AudioFormat.CHANNEL_OUT_MONO;
|
|
break;
|
|
case 2:
|
|
channelConfig = AudioFormat.CHANNEL_OUT_STEREO;
|
|
break;
|
|
default:
|
|
LimeLog.severe("Decoder returned unhandled channel count");
|
|
return false;
|
|
}
|
|
|
|
bufferSize = Math.max(AudioTrack.getMinBufferSize(sampleRate,
|
|
channelConfig,
|
|
AudioFormat.ENCODING_PCM_16BIT),
|
|
FRAME_SIZE * 2);
|
|
|
|
// Round to next frame
|
|
bufferSize = (((bufferSize + (FRAME_SIZE - 1)) / FRAME_SIZE) * FRAME_SIZE);
|
|
|
|
LimeLog.info("Audio track buffer size: "+bufferSize);
|
|
track = new AudioTrack(AudioManager.STREAM_MUSIC,
|
|
sampleRate,
|
|
channelConfig,
|
|
AudioFormat.ENCODING_PCM_16BIT,
|
|
bufferSize,
|
|
AudioTrack.MODE_STREAM);
|
|
|
|
track.play();
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void playDecodedAudio(byte[] audioData, int offset, int length) {
|
|
track.write(audioData, offset, length);
|
|
}
|
|
|
|
@Override
|
|
public void streamClosing() {
|
|
if (track != null) {
|
|
track.release();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int getCapabilities() {
|
|
return 0;
|
|
}
|
|
}
|