@@ -71,6 +71,7 @@ public class NotesViewModel : ViewModelBase, ICmdSubscriber {
7171 [ Reactive ] public double ExpTrackHeight { get ; set ; }
7272 [ Reactive ] public double ExpShadowOpacity { get ; set ; }
7373 [ Reactive ] public UVoicePart ? Part { get ; set ; }
74+ [ Reactive ] public Bitmap ? Avatar { get ; set ; }
7475 [ Reactive ] public Bitmap ? Portrait { get ; set ; }
7576 [ Reactive ] public IBrush ? PortraitMask { get ; set ; }
7677 [ Reactive ] public string WindowTitle { get ; set ; } = "Piano Roll" ;
@@ -381,12 +382,28 @@ private void LoadPart(UPart part, UProject project) {
381382 private void LoadPortrait ( UPart ? part , UProject ? project ) {
382383 if ( part == null || project == null ) {
383384 lock ( portraitLock ) {
385+ Avatar = null ;
384386 Portrait = null ;
385387 portraitSource = null ;
386388 }
387389 return ;
388390 }
389391 var singer = project . tracks [ part . trackNo ] . Singer ;
392+ lock ( portraitLock ) {
393+ Avatar ? . Dispose ( ) ;
394+ Avatar = null ;
395+ if ( singer != null && singer . AvatarData != null ) {
396+ try {
397+ using ( var stream = new MemoryStream ( singer . AvatarData ) ) {
398+ Avatar = new Bitmap ( stream ) ;
399+ }
400+ } catch ( Exception e ) {
401+ Avatar ? . Dispose ( ) ;
402+ Avatar = null ;
403+ Log . Error ( e , $ "Failed to load Avatar { singer . Avatar } ") ;
404+ }
405+ }
406+ }
390407 if ( singer == null || string . IsNullOrEmpty ( singer . Portrait ) || ! Preferences . Default . ShowPortrait ) {
391408 lock ( portraitLock ) {
392409 Portrait = null ;
@@ -396,14 +413,14 @@ private void LoadPortrait(UPart? part, UProject? project) {
396413 }
397414 if ( portraitSource != singer . Portrait ) {
398415 lock ( portraitLock ) {
416+ Portrait ? . Dispose ( ) ;
399417 Portrait = null ;
400418 portraitSource = null ;
401419 }
402420 PortraitMask = new SolidColorBrush ( Colors . White , singer . PortraitOpacity ) ;
403421 Task . Run ( ( ) => {
404422 lock ( portraitLock ) {
405423 try {
406- Portrait ? . Dispose ( ) ;
407424 var data = singer . LoadPortrait ( ) ;
408425 if ( data == null ) {
409426 Portrait = null ;
0 commit comments