How nhatle1909/wpf_digital-piano works
WPF_Digital-Piano is a Windows desktop instrument: a user triggers notes through the on-screen keyboard or computer keys, which map to frequencies and play synthesized audio. The application also has settings and MIDI-song playback/viewing components. The main window and several view-model relationships are visible in the source index, but unsampled implementations limit confidence about some wiring; those links are marked unverified rather than asserted as calls.
Main entry points: PianoButtonVM.cs Piano keyboard · SongPlayerVM.cs Song transport · MainWindow.xaml.cs Main window · MainViewVM.cs Main view model
Components 22
Desktop interface
- Main window
WPF_Piano/MainWindow.xaml.cs - Settings window
WPF_Piano/SettingsWindow.xaml.cs - Main view model
WPF_Piano/ViewModel/MainViewVM.cs - Scroll behavior
WPF_Piano/Behavior/ScrollViewerBehavior.cs - Command adapter
WPF_Piano/ViewModel/RelayCommand.cs
Piano instrument
- Piano keyboard
WPF_Piano/ViewModel/PianoButtonVM.cs - Piano button model
WPF_Piano/Model/PianoButton.cs - Note frequencies
WPF_Piano/StaticValue/NoteValue.cs - Key mapping
WPF_Piano/Helper/OemStringMapper.cs - Custom key control
WPF_Piano/CustomPianoButton.cs - Sound synthesis
WPF_Piano/Helper/PianoPlaySound.cs
Song playback
- Song selection
WPF_Piano/ViewModel/SongVM.cs - Song transport
WPF_Piano/ViewModel/SongPlayerVM.cs - Song model
WPF_Piano/Model/Song.cs - Transport state
WPF_Piano/Model/SongPlayer.cs - MIDI note view
WPF_Piano/NoteControl.cs
Configuration
- Settings view model
WPF_Piano/ViewModel/PianoSettingsVM.cs - Piano settings
WPF_Piano/Helper/PianoSettings.cs - Settings models
WPF_Piano/Model/Settings.cs - JSON configuration
WPF_Piano/appsettings.json
Other components
- Player
- Windows audio output
Connections 24
- Player → Main window: uses
- Main window → Main view model: connects
WPF_Piano/MainWindow.xaml.cs - Main window → Song transport: connects
WPF_Piano/MainWindow.xaml.cs - Main window → Piano keyboard: connects
WPF_Piano/MainWindow.xaml.cs - Main window → Scroll behavior: configures
WPF_Piano/MainWindow.xaml.cs - Main view model → Piano keyboard: references
WPF_Piano/ViewModel/MainViewVM.cs - Main view model → Song transport: references
WPF_Piano/ViewModel/MainViewVM.cs - Main view model → Song selection: references
WPF_Piano/ViewModel/MainViewVM.cs - Piano keyboard → Piano button model: creates
WPF_Piano/ViewModel/PianoButtonVM.cs - Piano keyboard → Note frequencies: gets frequencies
WPF_Piano/ViewModel/PianoButtonVM.cs - Piano keyboard → Key mapping: converts keys
WPF_Piano/ViewModel/PianoButtonVM.cs - Piano keyboard → Custom key control: renders
WPF_Piano/ViewModel/PianoButtonVM.cs - Piano keyboard → Sound synthesis: plays notes
WPF_Piano/ViewModel/PianoButtonVM.cs - Sound synthesis → Piano settings: reads synthesis
WPF_Piano/Helper/PianoPlaySound.cs - Sound synthesis → Windows audio output: streams audio
WPF_Piano/Helper/PianoPlaySound.cs - Settings window → Settings view model: connects
- Settings view model → Piano settings: updates
WPF_Piano/ViewModel/PianoSettingsVM.cs - Piano settings → Settings models: uses models
WPF_Piano/Helper/PianoSettings.cs - Piano settings → JSON configuration: loads settings
WPF_Piano/Helper/PianoSettings.cs - Song transport → Transport state: updates state
WPF_Piano/ViewModel/SongPlayerVM.cs - Song transport → Command adapter: creates commands
WPF_Piano/ViewModel/SongPlayerVM.cs - Song transport → Sound synthesis: calculates duration
WPF_Piano/ViewModel/SongPlayerVM.cs - Song selection → Song model: uses model
WPF_Piano/ViewModel/SongVM.cs - Song transport → MIDI note view: displays MIDI