An open API service indexing awesome lists of open source software.

https://github.com/drumsmidi/drummidieditorapp

ドラム耳コピ用に作成したアプリ
https://github.com/drumsmidi/drummidieditorapp

csharp desktop drum win2d winui3

Last synced: about 1 year ago
JSON representation

ドラム耳コピ用に作成したアプリ

Awesome Lists containing this project

README

          

# 概要

ドラム耳コピ用に作成したアプリ
- BGMの再生、および入力した譜面を元にMIDI-OUTイベントの発行を行います。
image

- オーディオインタフェースやドラム音源は自前で用意する必要があります。
image

- DrumMidiPlayerApp試作中
[![](https://i.ytimg.com/vi/v3fcRcVwsrM/hqdefault.jpg?sqp=-oaymwFBCNACELwBSFryq4qpAzMIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB8AEB-AH-CYAC0AWKAgwIABABGGUgZShlMA8=&rs=AOn4CLCV7OXxpnmJqPrwb1lnRD8pDyKFCQ)](https://www.youtube.com/watch?v=v3fcRcVwsrM)

## 技術要素

- C#
- .NET9
- WinUI3
- Win2D

## 使用パッケージ

| 使用パッケージ | メモ |
| --- | --- |
| Microsoft.Windows.SDK.BuildTools | |
| Microsoft.WindowsAppSDK | |
| Microsoft.Graphics.Win2D | Canvasの描画に使用 |
| Microsoft.ML | 機械学習に使用(活用できてません) |
| NAudio | BGM再生、周波数解析に使用 |
| OpenCvSharp4.Windows | MP4の動画出力に使用 |
| LiteDB | ローカルDB |

## ソリューション構成

| 使用パッケージ | メモ |
| --- | --- |
| NAudio | NAudioのソースを一部組込 |
| DrumMidiLibrary | エディター・プレイヤー共通ライブラリ |
| DrumMidiEditorApp | エディター |
| DrumMidiEditorApp.Package | エディター |
| DrumMidiPlayerApp | プレイヤー(試作中) |
| DrumMidiPlayerApp.Package | プレイヤー(試作中) |

-----------------------------------------------------------------------------
# Github設定メモ

## Actions によるビルド設定

### 署名の作成

[証明書の選択]より、証明書の作成を行う。

image

> 署名のパスワードは後ほど使用

### Githubへの署名登録

1. Visual Studioで[ツール]-[コマンドライン]-[開発者用 PowerShell]をクリックしてPowerShellを起動し、下記コマンドを実行

```BAT
cd '.\DrumMidiEditorApp\DrumMidiEditorApp (Package)\'

$pfx_cert = Get-Content '.\DrumMidiEditorApp (Package)_TemporaryKey.pfx' -Encoding Byte
[System.Convert]::ToBase64String($pfx_cert) | Out-File 'DrumMidiEditorApp (Package)_TemporaryKey.txt'
```

> DrumMidiEditorApp (Package)_TemporaryKey.txt に暗号化キーが出力される

2. Githubの [Settings] - [Secrets] - [Actions] の [New repository secret]ボタンより下記2つの設定を登録

- 1個目
- Name:"Base64_Encoded_Pfx"
- Value:1で作成した「DrumMidiEditorApp (Package)_TemporaryKey.txt」の中身

- 2個目
- Name:"Pfx_Key"
- Value:署名のパスワード

> 上記設定は workflow実行時に参照される

### Workflowの追加

image

[参考:WinUI 3 アプリの継続的インテグレーションをセットアップする](https://docs.microsoft.com/ja-jp/windows/apps/package-and-deploy/ci-for-winui3?pivots=winui3-packaged-csharp)

設定メモ
```yaml
name: .NET Core Desktop

on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]

jobs:

build:

strategy:
matrix:
configuration: [Release]
#configuration: [Debug, Release]
platform: [x64]

runs-on: windows-latest # For a list of available runner types, refer to
# https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on

env:
Solution_Name: DrumMidiEditorApp.sln
Test_Project_Path: none
Wap_Project_Directory: DrumMidiEditorApp\DrumMidiEditorApp (Package)
Wap_Project_Path: DrumMidiEditorApp\DrumMidiEditorApp (Package)\DrumMidiEditorApp (Package).wapproj

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

# Install the .NET Core workload
- name: Install .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.x

# Add MSBuild to the PATH: https://github.com/microsoft/setup-msbuild
- name: Setup MSBuild.exe
uses: microsoft/setup-msbuild@v2

# Execute all unit tests in the solution
# - name: Execute unit tests
# run: dotnet test

# Restore the application to populate the obj folder with RuntimeIdentifiers
- name: Restore the application
run: msbuild $env:Solution_Name /t:Restore /p:Configuration=$env:Configuration
env:
Configuration: ${{ matrix.configuration }}

# Decode the base 64 encoded pfx and save the Signing_Certificate
- name: Decode the pfx
run: |
$pfx_cert_byte = [System.Convert]::FromBase64String("${{ secrets.Base64_Encoded_Pfx }}")
$certificatePath = Join-Path -Path $env:Wap_Project_Directory -ChildPath GitHubActionsWorkflow.pfx
[IO.File]::WriteAllBytes("$certificatePath", $pfx_cert_byte)

# Create the app package by building and packaging the Windows Application Packaging project
- name: Create the app package
run: msbuild $env:Wap_Project_Path /p:Configuration=$env:Configuration /p:UapAppxPackageBuildMode=$env:Appx_Package_Build_Mode /p:AppxBundle=$env:Appx_Bundle /p:PackageCertificateKeyFile=GitHubActionsWorkflow.pfx /p:PackageCertificatePassword=${{ secrets.Pfx_Key }}
env:
Appx_Bundle: Never
#Appx_Bundle: Always
Appx_Bundle_Platforms: x64
#Appx_Bundle_Platforms: x86|x64
Appx_Package_Build_Mode: SideloadOnly
#Appx_Package_Build_Mode: StoreUpload
Configuration: ${{ matrix.configuration }}
Platform: ${{ matrix.platform }}

# Remove the pfx
- name: Remove the pfx
run: Remove-Item -path $env:Wap_Project_Directory\GitHubActionsWorkflow.pfx

# Upload the MSIX package: https://github.com/marketplace/actions/upload-a-build-artifact
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: DrumMidiEditorApp(MSIX Package)
path: ${{ env.Wap_Project_Directory }}\AppPackages
```

-----------------------------------------------------------------------------
# インストール方法

1. [リリースフォルダ](https://github.com/drumsmidi/DrumMidiEditorApp/releases)から「DrumMidiEditorApp.MSIX.Package.zip」をダウンロード

2. ダウンロードしたファイルを解凍後、「DrumMidiEditorApp (Package)_0.3.0.0_x64.cer」を実行し、[証明書のインストール]を実行する。

image

> 「ローカルコンピューター」、「信頼されたルート証明機関」として登録が必要

3. 「DrumMidiEditorApp (Package)_0.3.0.0_x64.msix」を実行し、インストールを行う

> 正しく設定されていない場合は、下記エラーが発生する。
>
> このアプリ パッケージの発行元証明書を検証できませんでした。
> 確認済みの証明書を含む新しいアプリ パッケージを取得するには、システム管理者またはアプリ開発者に問い合わせてください。
> アプリ パッケージ内の署名のルート証明書とすべての即時証明書を確認する必要があります (0x800B010A)

-----------------------------------------------------------------------------
# 画面仕様

-----------------------------------------------------------------------------
## Config画面

### システム設定

現時点では設定なし

### デバイス設定

image

#### Midi-Out デバイス

MIDI 出力先のデバイスを選択します。

#### Midi-Out 遅延

Midi-Outイベント送信から実際に音が鳴るまでの遅延時間(秒)を設定します。

### ビデオ出力設定

image

MP4ファイル出力時のエンコードを設定します。
MP4ファイルの作成は、[opencvsharp](https://github.com/shimat/opencvsharp)を使用しています。

> 未設定のままでも出力可能です(逆に設定するとエラーになることもあります)

### エディター設定

image

### プレイヤー共通設定

image

### プレイヤー個別設定:ScoreType2

image

#### DarkMode

プレイヤーのダークモードON/OFF切替(未実装)

#### 現在のBpm表示

再生位置のBPM値表示ON/OFFを切替えます。

#### 音量によるノートサイズ変更

ノート音量に合わせてノートサイズ変更を行うかON/OFFを切替えます。

> テキスト表示のノートには適用されません

#### 音量0のノート表示

音量0ノート表示ON/OFFを切替えます。

#### ノートテキスト表示

MidiMapタブで"ScaleText"に入力した先頭1文字のテキストで表示を行うかON/OFFを切替えます。

#### カーソル塗潰し

再生位置を表示するカーソルより前の表示塗潰しON/OFFを切替えます。

#### 背景色

プレイヤーの背景色を指定します。

#### 小節番号高さ

小節番号表示エリアの高さを指定します。

#### ノート間隔 高さ・横幅

1セル間の高さと横幅を指定します。

#### ノート 高さ・横幅

ノート音量最大値のノートサイズを指定します。

#### 小節線

縦線の横幅サイズと色を指定します。

#### 表示設定

表へ追加したレイアウトで、プレイヤーの譜面情報を表示します。
表示するノート位置は、MidiMapタブページのScaleKeyとで紐づけて描画されます。

Display項目は、横線(太線)の表示ON/OFFを切替えます。

> システム共通の設定です

### プレイヤー個別設定:Sequence

未メンテ

### プレイヤー個別設定:Simuration

未メンテ

-----------------------------------------------------------------------------
## メニューバー

image

### File

| メニュー | 概要 |
| --- | --- |
| New | 編集中の情報を破棄し、新しいデータを作成します |
| Open | DMSファイルを開きます |
| Save | 編集中のDMSファイルを上書きします |
| SaveAs | 編集中のDMSファイルを別名で保存します |
| Export > Midi | MIDIファイルを出力します |
| Export > Pdf | 譜面をPdfファイルとして保存します (ScoreType2のみ対応) |
| Export > Video | シーケンスを動画として保存します。
Playerウィンドウの設定と [Config]-[Video] の設定を元に動画を作成します。(対応形式:MP4)|
| Import | MIDIファイルを取込みます。 ※未サポート |

### Ch選択

編集対象のチャンネルを切替えます。 <Ch.9 固定>

> 非推奨:試しに追加しましたがチャンネル切替に対する考慮ができていません。

### Bgm

BGM再生のON/OFFを切替えます。

### Midi-Out

ノート再生(MIDI-OUTイベント)の ON/OFF を切替えます。

### 再生

最初から再生します。

### 停止

再生を停止します。

### ループ再生

小節開始番号~終了番号までの区間をループ再生します。

### 小節開始番号

ループ再生の開始小節位置を指定します。 (0~999)

### 小節終了番号

ループ再生の終了小節位置を指定します。 (0~999)
CONボタンを ON に設定している場合、変更できません。

### 小説連結

ループ再生の小節連結 ON/OFFを切替えます。
ONに設定した場合、[小節終了番号] = [小説開始番号] + [小説連結数] の計算式で自動設定されます。

### 小説連結数

小節連携数を指定します。(0-100)

### プレイヤー表示

プレイヤーの表示 ON/OFF を切替えます。

-----------------------------------------------------------------------------
## MusicInfoタブ

耳コピ対象のBGM情報を設定する画面です。

image

### BGMファイルパス

BGMのファイルパスを指定します。(対応形式:MP3、WAV)

### BPM

ベースとなるBPMを設定します。

### BGM再生開始位置

BGMの再生開始位置(秒)を設定します。

> 小節番号0の先頭位置を基準に、入力した秒数後にBGMを再生します。

### BGM音量

BGMの音量を設定します。(0~100)

### 自由入力欄

自由入力欄です。

### イコライザ設定
BGMのイコライザを設定します。
(左クリックで入力、右クリックで削除、左ドラッグ&ドロップで移動)

- X軸:Hz(20~20000Hz)
- Y軸:音量(db)の増減値(-60db~10db)

> 譜面保存時/アプリ終了時にイコライザの設定は保存されません。

#### リセット

Equalizer の入力をリセットします。

#### イコライザ

Equalizer ON/OFFを切替えます。

#### 波形

Equalizer 波形の表示ON/OFFを切替えます。 

> 未サポート

-----------------------------------------------------------------------------
## MidiMapタブ

MidiMapSet を設定する画面です。
image

### 適用ボタン

編集中の MidiMapSet の内容を正本に反映します。

### インポートボタン

取込対象のテンプレートファイル(.dms)を選択後
『既存⇒インポート先へのMidiMap置換』と『インポートMidiMapSet』を表示します。

image

> テンプレートファイル保管
> https://github.com/drumsmidi/Template-MidiMapSet

#### 『既存⇒インポート先へのMidiMap置換』

既存MidiMapSetでノートの入力があるMidiMapの一覧を表示します。

image

- 上部

 既存MidiMapSetでノートの入力があるMidiMap

- 下部

 インポートMidiMapSetのMidiMap(ノート置換先)
 初期値として、置換先のMidiMap で同一のMIDI番号が設定されているアイテムの情報を設定します。

> 『インポートMidiMapSet』 のアイテムをドラッグし
> 『既存⇒インポート先へのMidiMap置換』へドロップすることで、置換先のMidiMapを設定できます。

### エクスポートボタン

出力先ファイルを指定し、MidiMapSetのテンプレートファイル(.dms)を保存します。
(現在編集中の情報を保存)

出力ファイルの中身(サンプル)
```XML




























```

### キー変更

既存MidiMapSetでノートの入力があるMidiMapの一覧を表示します。

- キー変更対象の MidiMap を選択し、キー変更ボタン押下

 image

- 変更後の MidiMap を選択し、OKボタン押下

 image

- 確認画面が表示されるので、Yesボタン押下でキー変換実行

 image

- キー変換完了

 image

-----------------------------------------------------------------------------
## Editerタブ

image

### シート操作

#### 小節移動

選択した小節番号の位置へ移動します。
image

#### シート移動

シート移動を左クリック
image

ポップアップされた領域をマウス左でスライドさせ、シート位置を移動
(ドラッグ開始位置を基準に、スライドした位置までの差分を等間隔で移動させます)
image

#### 小節分割数

1小節内の分割数を指定することで、指定した間隔でノート入力を行えます
image

128分割で入力
image

16分割で入力
image

#### サポート線

[Measure no] の赤枠の範囲内で、マウス左でスライドさせるとスライドした分の等間隔のサポート線を表示します
(マウス右クリックで、サポート線を解除)
image
image

#### シートの行列の幅調整

1セルのサイズを指定します
image

image

image

### ノート編集

#### 入力音量

ノートON の音量を指定します。
image

指定後、ノートONを設定すると指定した音量でノートONが登録されます。
image

#### ノート入力・削除

ノートON/OFF の入力切替を行います。
image

指定位置で
- マウス左クリックでノート入力
- マウス右クリックでノート削除
image

> ノートOFF は試しに作成したので、使用はお勧めしません

#### 範囲選択

image

マウス左押下後、マウスを移動させることで範囲選択モードとなります。
image

| タイプ | イメージ |
| --- | --- |
| Normal | 入力した範囲内を選択
image |
| Split | 範囲内の左 または 右側の全てを選択します
image |
| All | 範囲内の行全てを選択します
image |

##### 範囲選択 機能

範囲選択を
- マウス左 ドラッグ&ドロップで、ノート/BPMの移動
- マウス右クリックで範囲選択内のノート/BPMを削除
- Ctrl + マウス左クリックで、範囲選択内のノート/BPMをコピー
再度、Ctrl + マウス左クリックすることで、その位置を基準にコピーした情報を貼り付けます

> BPMは、[範囲選択にBPMノートを含める] を ON にしている場合のみ対象となります

#### MidiMap選択

選択した MidiMapGroup or MidiMap の音量を Volume 領域に表示します。
image

#### 音量編集モード

音量編集モードを指定します。
image

Volumeエリアで音量編集モード別の操作で対象ノートONの音量変更を行います。
image

| モード | イメージ |
| --- | --- |
| FreeHand | フリーハンド
image |
| StraightLine | 直線
image |
| Curve1 | ベジエ曲線
image |
| Curve2 | ベジエ曲線
image }
| Curve3 | ベジエ曲線
image |
| Curve4 | ベジエ曲線
image |
| UpDown | 始点と終点間の音量差を加算
image
image |
| IntonationHL | 始点と終点間の音量差を加算
但し、始点より高い音量は+、始点より低い音量はーで加算
image
image |
| IntonationH | 始点と終点間の音量差を加算
但し、始点より高い音量のみ加算
image
image |
| IntonationL | 始点と終点間の音量差を加算
但し、始点より低い音量のみ加算
image
image |

#### Undo/Redo

ノート/BPM 入力の Undo/Redo を実行します。

> 検証不十分:不具合あり

#### WaveForm

周波数解析 試作

> 自動採譜とか自作できないかなと思って、試作した機能。非推奨

image

-----------------------------------------------------------------------------
## Scoreタブ

1画面内で全小節の情報を表示します。
image

### 音量によるノートサイズ変更

音量による ノートサイズ縮小 ON/OFF 切替

### 音量0のノート表示

音量=0 のノート表示 ON/OFF 切替

### ノート高さ

ノートサイズの高さ

### ノート横幅

ノートサイズの横幅

> 現時点では、機能拡張予定はありません

-----------------------------------------------------------------------------
## Player表示

Editで入力したノート情報のシーケンスを表示する機能です。

### プレイヤー表示

メニューバーの[プレイヤー表示スイッチ]押下で、プレイヤーの表示/非表示を切替えます。
また、プレイヤーウィンドウを右クリックすることでも非表示に切替えます。

image

### プレイヤー表示位置移動

プレイヤーをマウス左でドラッグすることでプレイヤーの位置を移動できます。

> アプリ内の範囲でのみ移動可能です。(別ウィンドウの作成は未対応です)

### プレイヤー表示タイプ

現在、3種類作成していますが、ScoreType2 以外はメンテしてません。

| 種類 | 概要 |
| --- | --- |
| ScoreType2 | 譜面表示を目標とした作り
image |
| Sequence | ノートを右から左へ または 上から下へ流す作り
imageimage |
| Simuration | ドラムを上から見たような構図の作り
image |

-----------------------------------------------------------------------------