# Alice Project 独自の音声ライブラリ開発について

> DRAFT
> 
> この文章は、アイデア資料です。正式決定や指針ではありません。

## 背景

C# (.NET) で利用できる音声ライブラリは、殆どがクロスプラットフォーム対応がなく、Windows のみの対応になっていることが多いです。

標準ライブラリで利用が容易な `System` の [`Console.Beep()`](https://learn.microsoft.com/dotnet/api/system.console.beep) は一応デスクトップ端末なら利用可能ですが、周波数と時間指定 (`Console.Beep(周波数, 時間指定)`) は Windows でしか利用できません。

また、音声ライブラリで最も有名な `NAudio` についても、Windows に根幹から依存しているらしく[^n]、最終リリースが2023年と最近はリリースされていないようです。(Commit はされているようなので、更新されていないというわけではありませんが)

[^n]: <https://qiita.com/SousiOmine/items/976ed486803fc70992ad#以下おまけ>

他の主要ライブラリについても、数年更新されていないか、低層の操作が必要で利用が難しいものが多いようです。

そこで Alice Project で、容易に利用できる音声ライブラリの開発を行うことを考えました。基本的には、Silk.NET をベースとします。

Silk.NET の OpenAL は、OpenTK の開発者たちがより良い音声バインディングの開発を目指して作成したもので、.NET Foundation 傘下ということもあり、開発は順調に進んでいるようです。ただ、低層の操作が必要でやや複雑なため、これを簡単に利用できるライブラリ開発を行います。

### 補足

Alice Novel (.NET MAUI ベース) では、`CommunityToolkit.Maui.MediaElement` を利用しています。

Aqua Notes (Blazor) では、ブラウザの音声再生機能を利用する予定です。ただ、今回開発したものが Web Assembly でも利用できる場合は、そちらを利用したいと考えています。

## 目標

- クロスプラットフォーム対応
  - (特に) コンソールで利用可能
- 簡単な音声操作機能
  - 周波数と秒数指定して、音を鳴らす機能 (`Console.Beep(周波数, 時間指定)` 相当)
  - 音声ファイルから再生する機能 (mp3、wav、m4a、ogg あたりはサポートしたい)

## 参考

- <https://qiita.com/SousiOmine/items/976ed486803fc70992ad>
