[RK3288][Android6.0] 调试笔记 --- Audio之分离DTMF tones

来源:互联网 发布:协方差矩阵怎么求 编辑:程序博客网 时间:2024/06/03 16:00

Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92

Android的原始设计会将若干stream type最终归成一类,比如STREAM_DTMF、 STREAM_MUSIC、STREAM_TTS都属于STREAM_MUSIC,STREAM_SYSTEM、STREAM_SYSTEM_ENFORCED、STREAM_RING最终归类成STREAM_RING,也就说细分只是针对app,归类会根据情景模式划分,因此针对不同的platform,比如用的是TV、BOX,那么对应的划分也是不同的。这部分在AudioService.java中体现,分别有三个alias,
STREAM_VOLUME_ALIAS_VOICE, STREAM_VOLUME_ALIAS_TELEVISION以及STREAM_VOLUME_ALIAS_DEFAULT。

当前需求是要将dtmf独立分来出来作为单独一个stream通道,目标是不受其他stream影响,下面是代码改动,其他stream要分离出来也可以用同样的方法。

--- a/services/core/java/com/android/server/audio/AudioService.java+++ b/services/core/java/com/android/server/audio/AudioService.java@@ -330,7 +330,8 @@ public class AudioService extends IAudioService.Stub {         AudioSystem.STREAM_RING,            // STREAM_NOTIFICATION         AudioSystem.STREAM_BLUETOOTH_SCO,   // STREAM_BLUETOOTH_SCO         AudioSystem.STREAM_RING,            // STREAM_SYSTEM_ENFORCED-        AudioSystem.STREAM_RING,            // STREAM_DTMF+        //Kris+        AudioSystem.STREAM_DTMF,            // STREAM_DTMF         AudioSystem.STREAM_MUSIC            // STREAM_TTS     };     private int[] mStreamVolumeAlias;@@ -1350,7 +1351,10 @@ public class AudioService extends IAudioService.Stub {     private void onSetStreamVolume(int streamType, int index, int flags, int device,             String caller) {         final int stream = mStreamVolumeAlias[streamType];-        setStreamVolumeInt(stream, index, device, false, caller);+   /*Kris, 20160106, seperate DTMF stream. {*/+       // setStreamVolumeInt(stream, index, device, false, caller);+   setStreamVolumeInt(streamType, index, device, false, caller);+   /*Kris, 20160106, seperate DTMF stream. }*/         // setting volume on ui sounds stream type also controls silent mode         if (((flags & AudioManager.FLAG_ALLOW_RINGER_MODES) != 0) ||                 (stream == getUiSoundsStreamType())) {@@ -1362,7 +1366,10 @@ public class AudioService extends IAudioService.Stub {             } else {                 newRingerMode = AudioManager.RINGER_MODE_NORMAL;             }-            setRingerMode(newRingerMode, TAG + ".onSetStreamVolume", false /*external*/);+       /*Kris, 20160106, seperate DTMF stream.  {*/+            //setRingerMode(newRingerMode, TAG + ".onSetStreamVolume", false /*external*/);+           setRingerMode(AudioManager.RINGER_MODE_NORMAL, TAG + ".onSetStreamVolume", false /*external*/);+            /*Kris, 20160106, seperate DTMF stream.  }*/         }         // setting non-zero volume for a muted stream unmutes the stream and vice versa         mStreamStates[stream].mute(index == 0);@@ -3821,7 +3828,9 @@ public class AudioService extends IAudioService.Stub {                     }                 }                 mIndexMap.put(device, index);-+          /* Kris, 20151111, mask StreamVolumeAlias. {*/+                           return true;+                /*                 changed = oldIndex != index;                 if (changed) {                     // Apply change to all streams using this one as alias@@ -3859,8 +3868,11 @@ public class AudioService extends IAudioService.Stub {                 mVolumeChanged.putExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE_ALIAS,                         mStreamVolumeAlias[mStreamType]);                 sendBroadcastToAll(mVolumeChanged);-            }+              return changed;+            */+            /* Kris, 20151111, mask StreamVolumeAlias. }*/+      }         }         public int getIndex(int device) {@@ -4044,7 +4056,8 @@ public class AudioService extends IAudioService.Stub {             synchronized (VolumeStreamState.class) {                 // Apply volume                 streamState.applyDeviceVolume_syncVSS(device);-+          /* Kris, 20160106, mask StreamVolumeAlias. {*/+           /*                 // Apply change to all streams using this one as alias                 int numStreamTypes = AudioSystem.getNumStreamTypes();                 for (int streamType = numStreamTypes - 1; streamType >= 0; streamType--) {@@ -4060,7 +4073,9 @@ public class AudioService extends IAudioService.Stub {                         mStreamStates[streamType].applyDeviceVolume_syncVSS(streamDevice);                     }                 }-            }+              */+               /* Kris, 20160106, mask StreamVolumeAlias. }*/+   }             // Post a persist volume msg             sendMsg(mAudioHandler,                     MSG_PERSIST_VOLUME,@@ -4345,7 +4360,9 @@ public class AudioService extends IAudioService.Stub {                     break;                 case MSG_SET_ALL_VOLUMES:-                    setAllVolumes((VolumeStreamState) msg.obj);+        /*Kris, 20160106, seperate DTMF stream.  {*/+                   // setAllVolumes((VolumeStreamState) msg.obj);+                    /*Kris, 20160106, seperate DTMF stream.  }*/                     break;                 case MSG_PERSIST_VOLUME:@@ -896,8 +896,12 @@ public class AudioService extends IAudioService.Stub {         int numStreamTypes = AudioSystem.getNumStreamTypes();         VolumeStreamState[] streams = mStreamStates = new VolumeStreamState[numStreamTypes];-        for (int i = 0; i < numStreamTypes; i++) {-            streams[i] = new VolumeStreamState(System.VOLUME_SETTINGS[mStreamVolumeAlias[i]], i);+       for (int i = 0; i < numStreamTypes; i++) {+           //Kris,170719, fix isssue that seperating dtmf stream will cause crash.+           if (i == 8)+               streams[i] = new VolumeStreamState("volume_dtmf", i);+           else+                streams[i] = new VolumeStreamState(System.VOLUME_SETTINGS[mStreamVolumeAlias[i]], i);         }         checkAllFixedVolumeDevices();@@ -945,6 +949,9 @@ public class AudioService extends IAudioService.Stub {             }         }+       //Kris,170719, fix isssue that seperating dtmf stream will cause crash.+       dtmfStreamAlias = AudioSystem.STREAM_DTMF;+         mStreamVolumeAlias[AudioSystem.STREAM_DTMF] = dtmfStreamAlias;         if (updateVolumes) {             mStreamStates[AudioSystem.STREAM_DTMF].setAllIndexes(mStreamStates[dtmfStreamAlias],
阅读全文
1 0
原创粉丝点击