【问题标题】:Vibrate during play a ringtone in netcf C#在netcf C#中播放铃声时振动
【发布时间】:2010-11-29 12:43:40
【问题描述】:

我需要在播放铃声时振动手机。

这是我的代码:

   public static bool PlaySound(string soundName)
    {
        try
        {
            WMPLib.WindowsMediaPlayer player = new WMPLib.WindowsMediaPlayer();
            string MediaFile = Assembly.GetExecutingAssembly().GetName().CodeBase.Substring(0, Assembly.GetExecutingAssembly().GetName().CodeBase.LastIndexOf("\\")) + "\\Resources\\" + soundName;
            player.URL = MediaFile;
            WindowsMediaPlayerClass wmp = new WindowsMediaPlayerClass();

            player.settings.volume = 100;
            player.controls.play();
            SetVibrate(true);
            System.Threading.Thread.Sleep((int)wmp.newMedia(MediaFile).duration*1000 + 100);
            SetVibrate(false);
            return true;
        }
        catch
        {
            return false;
        }
    }

我的问题是手机首先振动,然后播放声音.. 在声音的持续时间内不可能振动?

谢谢。

@x86shadow:我尝试了线程但没有工作:(

   public static bool PlaySound(string soundName)
    {
        try
        {
            // 29/11/2010 Luca - Aggiungo vibrazione durante il suono del messaggio.
            WMPLib.WindowsMediaPlayer player = new WMPLib.WindowsMediaPlayer();

            string MediaFile = Assembly.GetExecutingAssembly().GetName().CodeBase.Substring(0, Assembly.GetExecutingAssembly().GetName().CodeBase.LastIndexOf("\\")) + "\\Resources\\" + soundName;
            player.URL = MediaFile;
            WindowsMediaPlayerClass wmp = new WindowsMediaPlayerClass();

            player.settings.volume = 100;
            RingDuration = (int) wmp.newMedia(MediaFile).duration*1000 + 100;

            VibrateWhilePlayingThread = new Thread(VibrateWhilePlaying);


            VibrateWhilePlayingThread.Start();

            player.controls.play();

            VibrateWhilePlayingThread.Join();

            return true;
        }
        catch
        {
            return false;
        }
    }

    private static int RingDuration;

    public static Thread VibrateWhilePlayingThread;

    public static void VibrateWhilePlaying()
    {
        SetVibrate(true);
        System.Threading.Thread.Sleep(RingDuration);
        SetVibrate(false);

    }

【问题讨论】:

  • 您可能需要使用两个线程来执行此操作,一个用于振动,一个用于播放声音。
  • @x86shadow:你能给我举个例子吗?
  • stackoverflow.com/questions/2533266/… 这不是您想要的,但可能会有所帮助。我使用了两个线程,一个监听在另一个线程中完成的工作,两个线程都在运行。

标签: c# windows-mobile compact-framework audio vibration


【解决方案1】:

添加事件处理程序:

Player.PlayStateChanged += new AxWMPLib._WMPOCXEvents_PlayChangeEventHandler(player_PlayStateChange);

尝试创建一个事件:

    private void player_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
    {
        if (Player.playState == WMPLib.WMPPlayState.wmppsPlaying)
        {
            SetVibrate(true);
        }
        else
        {
            SetVibrate(false);
        }
    }

【讨论】:

  • 是的,对不起。该链接适用于 Windows mobile 6.5:msdn.microsoft.com/en-us/library/bb416323.aspx
  • 谢谢,但我至少需要保持与 WM5-WM6.1 的兼容性。为什么如果我把振动放在线程中没有任何变化?我必须把剧本放在线程中吗?
  • Play() 函数没有返回值,所以虽然我认为不可能存在.. :(
  • 好吧,我很困惑...不存在任何事件吗?例如播放器的停止事件?
  • 是的,我尝试了一些 WmpLib 事件,但没有任何效果:(
猜你喜欢
  • 2021-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
相关资源
最近更新 更多