             }
             let ringtoneUri: NSURL? = getRingtoneUri(ringtoneUriType)
             if ringtoneUri == nil {
-                print("no available ringtone")
+                print("startRingtone(): no available media")
                 return
             }
+            
+            // --- ios has Ringer/Silent switch, so just play without check ringer volume.
             self.storeOriginalAudioSetup()
             self.mRingtone = try AVAudioPlayer(contentsOfURL: ringtoneUri!)
             self.mRingtone.delegate = self

        NSNotificationCenter.defaultCenter().removeObserver(observer, name: name, object: object)
    }

    func getRingbackUri(_type: String) -> NSURL? {
        let fileBundle: String = "incallmanager_ringback"
        let fileBundleExt: String = "mp3"
        let fileSysWithExt: String = "vc~ringing.caf"
        let fileSysPath: String = "/System/Library/Audio/UISounds"
        let type = (_type == "" || _type == "_DEFAULT_" ? fileSysWithExt : _type)
        return self.getAudioUri(type, fileBundle, fileBundleExt, fileSysWithExt, fileSysPath, &self.bundleRingbackUri, &self.defaultRingbackUri)
    }

    func startRingback(ringbackUriType: String) -> Void {
        // you may rejected by apple when publish app if you use system sound instead of bundled sound.
        print("startRingback()")
        do {
            if self.mRingback != nil {
                if self.mRingback.playing {
                    return
                } else {
                    self.stopRingback()
                }
            }
            let ringbackUri: NSURL? = getRingbackUri(ringbackUriType)
            if ringbackUri == nil {
                print("no available ringback")
                return
            }
            //self.storeOriginalAudioSetup()

        }
    }

    // --- _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(): 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("startBusytone(): no available media")
                return false
            }
            //self.storeOriginalAudioSetup()
