LoginSignup
1
0

C#でWinRT APIを呼び出す

Last updated at Posted at 2024-04-25

環境

Windows 11 Pro (64bit)
Visual Studio Community 2022

参考

Visual Studio 2022

C# コンソールアプリ
プロジェクト名:ConsoleApp1
フレームワーク:.NET 8.0
☑最上位レベルのステートメントを使用しない

プロジェクト→プロジェクトファイルの編集
変更前:<TargetFramework>net8.0</TargetFramework>
変更後:<TargetFramework>net6.0-windows10.0.22000.0</TargetFramework>

Program.cs
using Windows.Media.Core;
using Windows.Media.Playback;
using Windows.Media.SpeechSynthesis;

namespace ConsoleApp1
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            var text = "こんにちは、世界";
            var synth = new SpeechSynthesizer();
            var stream = await synth.SynthesizeTextToStreamAsync(text);
            var player = new MediaPlayer();
            player.Source = MediaSource.CreateFromStream(
                stream, stream.ContentType);
            var tcs = new TaskCompletionSource<int>();
            player.MediaEnded += (sender, e) => tcs.SetResult(0);
            player.Play();
            await tcs.Task;
        }
    }
}

dotnetコマンド

適当なプロジェクト名のディレクトリを用意する。
例:C:\Projects\.NET\SpHello

dev.bat
@echo off
prompt $e[33m$p$g$e[m
cmd
dotnet new console

というコマンドで(プロジェクト名).csprojProgram.csファイルが作られる。

SpHello.csproj
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0-windows10.0.22000.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>
Program.cs
using Windows.Media.Core;
using Windows.Media.Playback;
using Windows.Media.SpeechSynthesis;

namespace ConsoleApp1
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            var text = "こんにちは、世界";
            var synth = new SpeechSynthesizer();
            var stream = await synth.SynthesizeTextToStreamAsync(text);
            var player = new MediaPlayer();
            player.Source = MediaSource.CreateFromStream(
                stream, stream.ContentType);
            var tcs = new TaskCompletionSource<int>();
            player.MediaEnded += (sender, e) => tcs.SetResult(0);
            player.Play();
            await tcs.Task;
        }
    }
}
dotnet build

というコマンドで"bin\Debug\net6.0-windows10.0.22000.0\SpHello.exeが作られる。

Visual Studio 2022 (.NET Framework)

C# コンソールアプリ (.NET Framework)
プロジェクト名:ConsoleApp2
フレームワーク:.NET Framework 4.7.2

[ツール]->[NuGetパッケージマネージャー]->[パッケージマネージャー設定]
既定のパッケージ管理形式:PackageReference

[プロジェクト]->[NuGetパッケージの管理]
[参照]タブでMicrosoft.Windows.SDK.Contractsを検索してインストール。
例:最新の安定板 10.0.22621.3233

Program.cs
using System;
using System.Threading.Tasks;
using Windows.Media.Core;
using Windows.Media.Playback;
using Windows.Media.SpeechSynthesis;

namespace ConsoleApp2
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            var text = "こんにちは、世界";
            var synth = new SpeechSynthesizer();
            var stream = await synth.SynthesizeTextToStreamAsync(text);
            var player = new MediaPlayer();
            player.Source = MediaSource.CreateFromStream(
                stream, stream.ContentType);
            var tcs = new TaskCompletionSource<int>();
            player.MediaEnded += (sender, e) => tcs.SetResult(0);
            player.Play();
            await tcs.Task;
        }
    }
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0