         }
     }
 
-    func getBusytoneUri(_type: String) -> NSURL? {
-        let fileBundle: String = "incallmanager_busytone"
-        let fileBundleExt: String = "mp3"
-        let fileSysWithExt: String = "ct-busy.caf" //ct-congestion.caf
-        let fileSysPath: String = "/System/Library/Audio/UISounds"
-        let type = (_type == "" || _type == "_DEFAULT_" ? fileSysWithExt : _type)
-        return self.getAudioUri(type, fileBundle, fileBundleExt, fileSysWithExt, fileSysPath, &self.bundleBusytoneUri, &self.defaultBusytoneUri)
-    }
-
-    func startBusytone(busytoneUriType: String) -> Bool {
+    // --- _busytoneUriType: never go here with  be empty string.
+    func startBusytone(_busytoneUriType: String) -> Bool {
         // you may rejected by apple when publish app if you use system sound instead of bundled sound.
-        print("startBusytone()")
+        print("startBusytone(): UriType=\(_busytoneUriType)")
         do {
             if self.mBusytone != nil {
                 if self.mBusytone.playing {
+                    print("startBusytone(): is already playing")
                     return false
                 } else {
                     self.stopBusytone()
                 }
             }
+
+            // ios don't have embedded DTMF tone generator. use system dtmf sound files.
+            let busytoneUriType: String = (_busytoneUriType == "_DTMF_" ? "_DEFAULT_" : _busytoneUriType)
             let busytoneUri: NSURL? = getBusytoneUri(busytoneUriType)
             if busytoneUri == nil {
-                print("no available busytone")
+                print("startBusytone(): no available media")
                 return false
             }
             //self.storeOriginalAudioSetup()

        if uriDefault == nil {
            let target: String = "\(fileSysPath)/\(type)"
            uriDefault = self.getSysFileUri(target)
            if uriDefault == nil {
                return nil
            }
        }
        return uriDefault;
    }

    func getSysFileUri(target: String) -> NSURL? {

        }
    }

    // --- ringtoneUriType May be empty
    @objc func startRingtone(ringtoneUriType: String) -> Void {
        // you may rejected by apple when publish app if you use system sound instead of bundled sound.
        print("startRingtone(): UriType=\(ringtoneUriType)")
        do {
            if self.mRingtone != nil {
                if self.mRingtone.playing {
                    print("startRingtone(): is already playing.")
                    return
                } else {
                    self.stopRingtone()
