簡體   English   中英

C# Windows 表單應用程序 - 選擇 output 音頻設備

[英]C# Windows Form App - choose output audio device

我正在嘗試使用 c# 中的 System.Speech.Synthesis 做一些基本的應用程序

它只是一個帶有文本輸入的基本表單,按下回車后它會使用 ss.SpeakAsync(); 讀取文本。

目標是在 Windows 上的精確音頻 output 設備上播放該聲音,但我無法實現。

  1. 我已經嘗試通過 windows 設置、應用音量和設備偏好設置,但它不起作用,不知道為什么。

在此處輸入圖像描述

我正在設置正確的設備,但不管我做什么,它都以“默認”播放。 它可以正確地與任何其他應用程序(例如瀏覽器)一起工作,而我的卻不行。 當我將所有系統音頻更改為該設備時,它可以工作,但主要目標是我只希望這個應用程序使用“有線輸入”。

  1. 我嘗試使用一些第 3 方軟件來執行此操作( https://github.com/a-sync/audio-router )但它也不起作用。 我設置了所有內容,當我在我的應用程序中單擊“播放”時,我的應用程序崩潰並出現異常:“[17132] TrayReader.exe”以代碼-1073741819 (0xc0000005)“訪問沖突”退出。

所以也許我可以在代碼中設置正確的音頻 output 設備? 或者我該如何修復以前的錯誤? 也許我需要添加一些特權或什么? 我主要是 web 開發人員,這是我第一次使用 windows 應用程序。

//edit -> 它可以工作,當我將所有系統音頻更改為電纜輸入時,播放一些聲音,然后 go 回到我的主設備。 這似乎是一個 windows 錯誤?

您可以使用第三個 lib Nadio; 下面的示例顯示了如何在播放器正在播放歌曲的情況下返回到當前 position。 關鍵代碼是 player.DeviceNumber = deviceNum; 其中 deviceNum 為 0、1、2... 取決於您的 PC 中可用的揚聲器數量。 Naudio 的一個缺點是它會在播放前完全加載歌曲,而且速度很慢。

        var playback = player.PlaybackState;
        if (playback == PlaybackState.Stopped) // change and exit
        {
            player.DeviceNumber = deviceNum;
            return;
        }
        var currentTime = reader.CurrentTime;
        player.Stop(); // must stop to change output
        player.DeviceNumber = deviceNum;
        player.Init(reader);
        reader.CurrentTime = currentTime;
        if (playback == PlaybackState.Playing)
            player.Play();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM