none
How to play audio file after sending the DTMF tones?

    Question

  • Hi,

    In our application, we will send the phone number (destination  number) to the gateway in the form of DTMF tones.

    After sending DTMF tone it will take some time to connect the destination number, during the time interval we want to play audio file until the call connected to the dial number.

    Please help me.

    Thanks in advance.

    Regards,
    Bhima

    Friday, June 5, 2009 10:51 AM

Answers

  • Hi Bhima,

    Please check the class below 

    public class Sound
        {
            private byte[] m_soundBytes;
            private string m_fileName;

            public static bool isLooping = false;

            private enum Flags
            {
                SND_SYNC = 0x0000,  /* play synchronously (default) */
                SND_ASYNC = 0x0001,  /* play asynchronously */
                SND_NODEFAULT = 0x0002,  /* silence (!default) if sound not found */
                SND_MEMORY = 0x0004,  /* pszSound points to a memory file */
                SND_LOOP = 0x0008,  /* loop the sound until next sndPlaySound */
                SND_NOSTOP = 0x0010,  /* don't stop any currently playing sound */
                SND_NOWAIT = 0x00002000, /* don't wait if the driver is busy */
                SND_ALIAS = 0x00010000, /* name is a registry alias */
                SND_ALIAS_ID = 0x00110000, /* alias is a predefined ID */
                SND_FILENAME = 0x00020000, /* name is file name */
                SND_RESOURCE = 0x00040004 /* name is resource name or atom */
                // SND_HIGH = 0xFFFF
            }

            [DllImport("CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true)]
            private extern static int WCE_PlaySound(string szSound, IntPtr hMod, int flags);

            [DllImport("CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true)]
            private extern static int WCE_PlaySoundBytes(byte[] szSound, IntPtr hMod, int flags);

            public enum Volumes : int
            {

                OFF = 0,

                LOW = 858993459,

                NORMAL = 1717986918,

                MEDIUM = -1717986919,

                HIGH = -858993460,

                VERY_HIGH = -1

            }

            [DllImport("coredll.dll", SetLastError = true)]

            public static extern int waveOutSetVolume(IntPtr device, int volume);

            [DllImport("coredll.dll", SetLastError = true)]

            public static extern int waveOutGetVolume(IntPtr device, ref int volume);


            public static Volumes Volume
            {
                get
                {
                    int v = (int)0;
                    waveOutGetVolume(IntPtr.Zero, ref v);
                    switch (v)
                    {

                        case (int)Volumes.OFF: return Volumes.OFF;
                        case (int)Volumes.LOW: return Volumes.LOW;
                        case (int)Volumes.NORMAL: return Volumes.NORMAL;
                        case (int)Volumes.MEDIUM: return Volumes.MEDIUM;
                        case (int)Volumes.HIGH: return Volumes.HIGH;
                        case (int)Volumes.VERY_HIGH: return Volumes.VERY_HIGH;

                        default: return Volumes.OFF;

                    }

                }

                set { waveOutSetVolume(IntPtr.Zero, (int)value); }

            }

            /// <summary>
            /// Construct the Sound object to play sound data from the specified file.
            /// </summary>
            public Sound(string fileName)
            {
                m_fileName = fileName;
            }

            /// <summary>
            /// Construct the Sound object to play sound data from the specified stream.
            /// </summary>
            public Sound(Stream stream)
            {
                // read the data from the stream
                m_soundBytes = new byte[stream.Length];
                stream.Read(m_soundBytes, 0, (int)stream.Length);
            }

            /// <summary>
            /// Play the sound
            /// </summary>
            public void Play(bool isLoop)
            {
                // if a file name has been registered, call WCE_PlaySound,
                //  otherwise call WCE_PlaySoundBytes
                try
                {
                    //waveOutSetVolume(IntPtr.Zero, (int)Volumes.NORMAL);
                    if (isLoop) isLooping = true;

                    if (isLooping == false || isLoop == true)
                        if (m_fileName != null)
                            if (isLoop)
                                WCE_PlaySound(m_fileName, IntPtr.Zero, (int)(Flags.SND_ASYNC | Flags.SND_LOOP | Flags.SND_FILENAME));
                            else
                                WCE_PlaySound(m_fileName, IntPtr.Zero, (int)(Flags.SND_ASYNC | Flags.SND_FILENAME));
                        else
                            WCE_PlaySoundBytes(m_soundBytes, IntPtr.Zero, (int)(Flags.SND_ASYNC | Flags.SND_MEMORY));
                }
                catch
                {
                    throw;
                }
            }

            public void StopPlay()
            {   // if a file name has been registered, call WCE_PlaySound,
                //  otherwise call WCE_PlaySoundBytes
                try
                {
                    if (isLooping == false)
                    {
                        //waveOutSetVolume(IntPtr.Zero, (int)Volumes.OFF);
                        if (m_fileName != null)
                            WCE_PlaySound(m_fileName, IntPtr.Zero, (int)(Flags.SND_SYNC | Flags.SND_FILENAME));
                        else
                            WCE_PlaySoundBytes(m_soundBytes, IntPtr.Zero, (int)(Flags.SND_NODEFAULT | Flags.SND_MEMORY));
                    }
                }
                catch
                {
                    throw;
                }
            }
        }


    You just need to create the object of sound class & call  play() & StopPlay() accordingly  :
    Sound objSound = new Sound(@"fileName");
                                objSound.Play();




    Hope this will help.


    Regards,
    Mohsin S.


    Thanks
    Friday, June 5, 2009 11:23 AM

All replies

  • Hi Bhima,

    Please check the class below 

    public class Sound
        {
            private byte[] m_soundBytes;
            private string m_fileName;

            public static bool isLooping = false;

            private enum Flags
            {
                SND_SYNC = 0x0000,  /* play synchronously (default) */
                SND_ASYNC = 0x0001,  /* play asynchronously */
                SND_NODEFAULT = 0x0002,  /* silence (!default) if sound not found */
                SND_MEMORY = 0x0004,  /* pszSound points to a memory file */
                SND_LOOP = 0x0008,  /* loop the sound until next sndPlaySound */
                SND_NOSTOP = 0x0010,  /* don't stop any currently playing sound */
                SND_NOWAIT = 0x00002000, /* don't wait if the driver is busy */
                SND_ALIAS = 0x00010000, /* name is a registry alias */
                SND_ALIAS_ID = 0x00110000, /* alias is a predefined ID */
                SND_FILENAME = 0x00020000, /* name is file name */
                SND_RESOURCE = 0x00040004 /* name is resource name or atom */
                // SND_HIGH = 0xFFFF
            }

            [DllImport("CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true)]
            private extern static int WCE_PlaySound(string szSound, IntPtr hMod, int flags);

            [DllImport("CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true)]
            private extern static int WCE_PlaySoundBytes(byte[] szSound, IntPtr hMod, int flags);

            public enum Volumes : int
            {

                OFF = 0,

                LOW = 858993459,

                NORMAL = 1717986918,

                MEDIUM = -1717986919,

                HIGH = -858993460,

                VERY_HIGH = -1

            }

            [DllImport("coredll.dll", SetLastError = true)]

            public static extern int waveOutSetVolume(IntPtr device, int volume);

            [DllImport("coredll.dll", SetLastError = true)]

            public static extern int waveOutGetVolume(IntPtr device, ref int volume);


            public static Volumes Volume
            {
                get
                {
                    int v = (int)0;
                    waveOutGetVolume(IntPtr.Zero, ref v);
                    switch (v)
                    {

                        case (int)Volumes.OFF: return Volumes.OFF;
                        case (int)Volumes.LOW: return Volumes.LOW;
                        case (int)Volumes.NORMAL: return Volumes.NORMAL;
                        case (int)Volumes.MEDIUM: return Volumes.MEDIUM;
                        case (int)Volumes.HIGH: return Volumes.HIGH;
                        case (int)Volumes.VERY_HIGH: return Volumes.VERY_HIGH;

                        default: return Volumes.OFF;

                    }

                }

                set { waveOutSetVolume(IntPtr.Zero, (int)value); }

            }

            /// <summary>
            /// Construct the Sound object to play sound data from the specified file.
            /// </summary>
            public Sound(string fileName)
            {
                m_fileName = fileName;
            }

            /// <summary>
            /// Construct the Sound object to play sound data from the specified stream.
            /// </summary>
            public Sound(Stream stream)
            {
                // read the data from the stream
                m_soundBytes = new byte[stream.Length];
                stream.Read(m_soundBytes, 0, (int)stream.Length);
            }

            /// <summary>
            /// Play the sound
            /// </summary>
            public void Play(bool isLoop)
            {
                // if a file name has been registered, call WCE_PlaySound,
                //  otherwise call WCE_PlaySoundBytes
                try
                {
                    //waveOutSetVolume(IntPtr.Zero, (int)Volumes.NORMAL);
                    if (isLoop) isLooping = true;

                    if (isLooping == false || isLoop == true)
                        if (m_fileName != null)
                            if (isLoop)
                                WCE_PlaySound(m_fileName, IntPtr.Zero, (int)(Flags.SND_ASYNC | Flags.SND_LOOP | Flags.SND_FILENAME));
                            else
                                WCE_PlaySound(m_fileName, IntPtr.Zero, (int)(Flags.SND_ASYNC | Flags.SND_FILENAME));
                        else
                            WCE_PlaySoundBytes(m_soundBytes, IntPtr.Zero, (int)(Flags.SND_ASYNC | Flags.SND_MEMORY));
                }
                catch
                {
                    throw;
                }
            }

            public void StopPlay()
            {   // if a file name has been registered, call WCE_PlaySound,
                //  otherwise call WCE_PlaySoundBytes
                try
                {
                    if (isLooping == false)
                    {
                        //waveOutSetVolume(IntPtr.Zero, (int)Volumes.OFF);
                        if (m_fileName != null)
                            WCE_PlaySound(m_fileName, IntPtr.Zero, (int)(Flags.SND_SYNC | Flags.SND_FILENAME));
                        else
                            WCE_PlaySoundBytes(m_soundBytes, IntPtr.Zero, (int)(Flags.SND_NODEFAULT | Flags.SND_MEMORY));
                    }
                }
                catch
                {
                    throw;
                }
            }
        }


    You just need to create the object of sound class & call  play() & StopPlay() accordingly  :
    Sound objSound = new Sound(@"fileName");
                                objSound.Play();




    Hope this will help.


    Regards,
    Mohsin S.


    Thanks
    Friday, June 5, 2009 11:23 AM
  • Thanks

    This above code will makes to play the sound given at sound path file. 

    We are indeed requirement of playing a sound file during the time interval of call dial stage to call connected stage.

    We had a scenario for which a  Dialing number will take more time to connect destination number, In the meanwhile we have  to  parallel  run a sound  file such that the calling customer should not  feel delay or uneasy.

     

     






    Regards,
    Bhima
    Thursday, June 11, 2009 11:00 AM