Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. public class Demo {
  2.  
  3. void onRemoteAudioAvailable(String userId, ByteBuffer audioData, int size, int bitsPerSample, int sampleRate,
  4. int numberOfChannels) {
  5. byte[] temp = new byte[size];
  6. audioData.rewind();
  7. audioData.get(temp, 0, size);
  8. double volume = AudioUtil.doubleCalculateVolume(temp) / MAV_VOLUME; //[ 0 到 1 范围取值]
  9. }
  10.  
  11. /**
  12. * byte[] temp = new byte[size]; for (int i = 0; i < size; i++) { temp[i] =
  13. * Byte.MAX_VALUE; } maxVolume = AudioUtil.doubleCalculateVolume(temp);
  14. */
  15. private static final double MAV_VOLUME = 39.11730073691797;
  16.  
  17. /**
  18. * 计算每个 buffer 的平均音量值 位宽按照 16bit 计算
  19. */
  20. public static double doubleCalculateVolume(byte[] buffer) {
  21. double sumVolume = 0.0;
  22. double avgVolume = 0.0;
  23. double volume = 0.0;
  24. for (int i = 0; i < buffer.length; i += 2) {
  25. int v1 = buffer[i] & 0xFF;
  26. int v2 = buffer[i + 1] & 0xFF;
  27. int temp = v1 + (v2 << 8);
  28. if (temp >= 0x8000) {
  29. temp = 0xffff - temp;
  30. }
  31. sumVolume += Math.abs(temp);
  32. }
  33. avgVolume = sumVolume / buffer.length / 2;
  34. volume = Math.log10(1 + avgVolume) * 10;
  35. return volume;
  36. }
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement