下面列出了android.media.AudioTrack#ERROR_BAD_VALUE 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public boolean startPlayer(int streamType, int sampleRateInHz, int channelConfig, int audioFormat) {
if (mIsPlayStarted) {
Log.e(TAG, "Player already started !");
return false;
}
mMinBufferSize = AudioTrack.getMinBufferSize(sampleRateInHz,channelConfig,audioFormat);
if (mMinBufferSize == AudioTrack.ERROR_BAD_VALUE) {
Log.e(TAG, "Invalid parameter !");
return false;
}
Log.d(TAG , "getMinBufferSize = "+mMinBufferSize+" bytes !");
mAudioTrack = new AudioTrack(streamType,sampleRateInHz,channelConfig,audioFormat,mMinBufferSize,DEFAULT_PLAY_MODE);
if (mAudioTrack.getState() == AudioTrack.STATE_UNINITIALIZED) {
Log.e(TAG, "AudioTrack initialize fail !");
return false;
}
mIsPlayStarted = true;
Log.d(TAG, "Start audio player success !");
return true;
}
/**
* Initialize AudioTrack by getting buffersize
*
* @param sampleRate the sample rate for the audio to be played
*/
private void initPlayer(int sampleRate) {
synchronized (this) {
int bufferSize = AudioTrack.getMinBufferSize(
sampleRate,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT);
if (bufferSize == AudioTrack.ERROR_BAD_VALUE) {
throw new RuntimeException("Could not determine buffer size for audio");
}
audioTrack = new AudioTrack(
AudioManager.STREAM_MUSIC,
sampleRate,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT,
bufferSize,
AudioTrack.MODE_STREAM
);
audioTrack.play();
}
}
@WorkerThread
public synchronized boolean play(byte[] data, int size) {
if (mAudioTrack != null) {
try {
int ret = mAudioTrack.write(data, 0, size);
switch (ret) {
case AudioTrack.ERROR_INVALID_OPERATION:
Log.w(TAG, "play fail: ERROR_INVALID_OPERATION");
return false;
case AudioTrack.ERROR_BAD_VALUE:
Log.w(TAG, "play fail: ERROR_BAD_VALUE");
return false;
case AudioManager.ERROR_DEAD_OBJECT:
Log.w(TAG, "play fail: ERROR_DEAD_OBJECT");
return false;
default:
return true;
}
} catch (IllegalStateException e) {
Log.w(TAG, "play fail: " + e.getMessage());
return false;
}
}
Log.w(TAG, "play fail: null mAudioTrack");
return false;
}
public boolean startPlayer(int streamType, int sampleRateInHz, int channelConfig, int audioFormat) {
if (mIsPlayStarted) {
Log.e(TAG, "Player already started !");
return false;
}
mMinBufferSize = AudioTrack.getMinBufferSize(sampleRateInHz,channelConfig,audioFormat);
if (mMinBufferSize == AudioTrack.ERROR_BAD_VALUE) {
Log.e(TAG, "Invalid parameter !");
return false;
}
Log.d(TAG , "getMinBufferSize = "+mMinBufferSize+" bytes !");
mAudioTrack = new AudioTrack(streamType,sampleRateInHz,channelConfig,audioFormat,mMinBufferSize,DEFAULT_PLAY_MODE);
if (mAudioTrack.getState() == AudioTrack.STATE_UNINITIALIZED) {
Log.e(TAG, "AudioTrack initialize fail !");
return false;
}
mIsPlayStarted = true;
Log.d(TAG, "Start audio player success !");
return true;
}
@Override
public void run() {
try {
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
byte[] tempBuffer = new byte[bufferSize];
int readCount = 0;
while (true) {
if(!isLoop && dis.available() <= 0){
break;
}
if(dis.available() <= 0){
dis.reset();
}
readCount= dis.read(tempBuffer);
if (readCount == AudioTrack.ERROR_INVALID_OPERATION || readCount == AudioTrack.ERROR_BAD_VALUE) {
continue;
}
if (readCount != 0 && readCount != -1) {
audioTrack.play();
audioTrack.write(tempBuffer, 0, readCount);
}
}
stopPlay();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected boolean validSize(int size) {
return size != AudioTrack.ERROR && size != AudioTrack.ERROR_BAD_VALUE;
}
@Override
protected boolean validSize(int size) {
return size != AudioTrack.ERROR && size != AudioTrack.ERROR_BAD_VALUE;
}