@@ -557,10 +557,22 @@ void OPN2::setPan(size_t c, uint8_t value)
557557
558558void OPN2::silenceAll () // Silence all OPL channels.
559559{
560+ size_t chip;
561+ uint8_t port;
562+ uint32_t cc;
563+
560564 for (size_t c = 0 ; c < m_numChannels; ++c)
561565 {
566+ getOpnChannel (c, chip, port, cc);
567+
562568 noteOff (c);
563569 touchNote (c, 0 );
570+
571+ for (uint8_t op = 0 ; op < 4 ; op++)
572+ {
573+ writeRegI (chip, port, 0x30 + (0x10 * 1 ) + (op * 4 ) + cc, 0x7F );
574+ writeRegI (chip, port, 0x30 + (0x10 * 5 ) + (op * 4 ) + cc, 0xFF );
575+ }
564576 }
565577}
566578
@@ -629,7 +641,7 @@ void OPN2::clearChips()
629641
630642void OPN2::reset (int emulator, unsigned long PCM_RATE, OPNFamily family, void *audioTickHandler)
631643{
632- bool rebuild_needed = m_curState.cmp (emulator, m_numChips);
644+ bool rebuild_needed = m_curState.cmp (emulator, m_numChips, family );
633645
634646 if (rebuild_needed)
635647 clearChips ();
@@ -646,10 +658,10 @@ void OPN2::reset(int emulator, unsigned long PCM_RATE, OPNFamily family, void *a
646658 const struct OpnTimbre defaultInsCache =
647659 {
648660 {
649- {0 , 0 , 0 , 0 , 0 , 0 , 0 },
650- {0 , 0 , 0 , 0 , 0 , 0 , 0 },
651- {0 , 0 , 0 , 0 , 0 , 0 , 0 },
652- {0 , 0 , 0 , 0 , 0 , 0 , 0 }
661+ {0 , 0x7F , 0 , 0 , 0 , 0xFF , 0 },
662+ {0 , 0x7F , 0 , 0 , 0 , 0xFF , 0 },
663+ {0 , 0x7F , 0 , 0 , 0 , 0xFF , 0 },
664+ {0 , 0x7F , 0 , 0 , 0 , 0xFF , 0 }
653665 }, 0 , 0 , 0
654666 };
655667
0 commit comments