none
Win7背景播放.wav的問題 RRS feed

  • 問題

  • 各位大大您好,

    我使用VS2008,編寫一個小程式它會重複播放wav音效,

    我使用的方法如下

    My.Computer.Audio.Play(Application.StartupPath & "\1.wav", _
                      AudioPlayMode.BackgroundLoop)

    遇到的問題:

    我在桌上PC,作業系統是XP的環境執行程式,音效的聲音可以順利播放。

    可是在NB,Win7(32bit)環境下執行程式,卻沒有音效聲音出來,也沒有任何錯誤訊息(直接用播放軟體是有聲音的)。

    是Win7不能用此種方法播放嗎?還是有其他方法可以使用,或者還有哪些注意事項呢?麻煩各位大大指導一下,多謝。

    2011年1月25日 上午 09:39

解答

  • 小歐您好,

    我把你的檔案放在我的Test資料夾內,可以播放,我比較一下你的檔案的內容,好像都一樣,所以不是檔案的問題嗎?

    那為什麼您的檔案,我的程式可以播放,我的音效檔卻不行?請教問題是出在哪,可以再指點一下嗎?感激不盡。


    您好

    其實我猜的方向是 wav 編碼問題,而您的 wav 在 Windows 7 可以使用音樂軟體撥放,可能您有安裝 K-Lite Codec Pack 之類的影音轉碼器

    不然就是您把有問題的 wav 上傳到 SkyDrive 讓網友測試看看


    歡迎參觀我的Blog.NET菜鳥自救會
    • 已標示為解答 mingluh 2011年1月26日 上午 09:14
    2011年1月26日 上午 05:41
    版主

所有回覆

  • 我想又是Session 0 Isolate的問題, 因為從 Vista以後的作業系統, 會把Service和桌面使用者的Session分開.

    你可以參考一下曹祖聖老師寫的這一篇

    [Windows 7 與 Windows Server 2008 應用程式相容性 ] 其中的 4 服務隔離

     

    忘了講一個, 我記得 Application.StartupPath不能用在Windows Service才對吧, 因為這樣好像取得的目錄會是 Windows/System32


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年1月25日 上午 09:57
    版主
  • 您好

    測試看看以下程式碼是否可以撥放

        My.Computer.Audio.Play("C:\Windows\Media\Windows Print Complete.wav", AudioPlayMode.BackgroundLoop)
    
    

    歡迎參觀我的Blog.NET菜鳥自救會
    2011年1月25日 下午 12:57
    版主
  • 直接在Service中播放應該是不可行, 因為Windows Vista以後的版本應該是要在 Desktop session (意即誰取得桌面的使用權) 才能播放音效.
    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年1月25日 下午 04:01
    版主
  • Windows 7支援這種播放方式, 您可以參考這篇說明, 看應用程式的型態是否在支行的清單中, 另外執行您的程式時記得用系統管理員身份執行:

    Audio.Play 方法 (Byte(), AudioPlayMode)

    2011年1月26日 上午 02:42
  • 小歐您好,

    我測試您提供的方法,

     My.Computer.Audio.Play("C:\Windows\Media\Windows Print Complete.wav", AudioPlayMode.BackgroundLoop),音效有播放。

    但是我嘗試使用自己的路徑

    My.Computer.Audio.Play("E:\Test\1.wav", AudioPlayMode.BackgroundLoop),無法播放。

    再嘗試把音效檔複製到 C:\Windows\Media\ 下

     My.Computer.Audio.Play("C:\Windows\Media\1.wav", AudioPlayMode.BackgroundLoop),無法播放。

    以上是我有測試的結果,我有檢視兩個檔案內容的差別,安全性頁籤內的差別,我的檔案權限是淺黑的打勾選項,有嘗試修改,無法變更淺黑的勾選項目。

    但是在Windows Print Complete.wav檔案內容,安全性頁籤內的權限都是粗黑的打勾選項。

    想請教這是檔案存取權限的問題(我是以admin群組的帳號登入)?,還是跟Bill大大提到的取得桌面的使用權有關係,那我該如何取得桌面的權限,有點小複雜尚未弄清楚,麻煩在指導小弟一下,謝謝。

    2011年1月26日 上午 02:49
  • 您好

    1. 下載  1.zip 解壓縮後得到 1.wav,然後放到你的電腦測試看看是否能撥放

    2. 參考此文設定您的程式執行檔以系統管理員身分執行 一點通 - 在 Windows 7 設定程式以系統管理員身分執行 (MVP 撰寫)


    歡迎參觀我的Blog.NET菜鳥自救會
    2011年1月26日 上午 02:57
    版主
  • 小歐您好,

    我把你的檔案放在我的Test資料夾內,可以播放,我比較一下你的檔案的內容,好像都一樣,所以不是檔案的問題嗎?

    那為什麼您的檔案,我的程式可以播放,我的音效檔卻不行?請教問題是出在哪,可以再指點一下嗎?感激不盡。

    2011年1月26日 上午 03:18
  • 呃,  我一直以為背景指的是使用 Windows Service. 原來我搞錯發問的意思.

    至於這個的問題, 原因是UAC, 因為即使你以Administrator登入, 若沒有以管理者身份執行程式, 還是無法存取某些特殊目錄

    如: Windows , Program Files等等

    曹老師關於UAC的說明

    [使用者帳戶控制 (User Account Control, UAC) ]


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年1月26日 上午 04:04
    版主
  • 小歐您好,

    我把你的檔案放在我的Test資料夾內,可以播放,我比較一下你的檔案的內容,好像都一樣,所以不是檔案的問題嗎?

    那為什麼您的檔案,我的程式可以播放,我的音效檔卻不行?請教問題是出在哪,可以再指點一下嗎?感激不盡。


    您好

    其實我猜的方向是 wav 編碼問題,而您的 wav 在 Windows 7 可以使用音樂軟體撥放,可能您有安裝 K-Lite Codec Pack 之類的影音轉碼器

    不然就是您把有問題的 wav 上傳到 SkyDrive 讓網友測試看看


    歡迎參觀我的Blog.NET菜鳥自救會
    • 已標示為解答 mingluh 2011年1月26日 上午 09:14
    2011年1月26日 上午 05:41
    版主
  • 小歐您好,

    我把音效檔案重新轉檔過後,再做測試,的確是檔案編碼的問題,目前重新轉檔過後的檔案已可以播放。

    因為一開始XP環境是可以的播放,到筆電Win7卻不行,才沒懷疑檔案有問題,於是才思考是不是程式與環境的問題,沒想到竟然是檔案的問題。

    不過還是非常感謝其他大大,提供的觀念與方法,讓我對XP和Win7環境的差別,加深許多,感謝。

     

    2011年1月26日 上午 09:14