diff --git a/src/apu.rs b/src/apu.rs
index 6a9b9a0af832ce32ee503787ecb5b08c54d43391..efa48fcd4146da7d2c0c53fcd48347158f9707ac 100644
--- a/src/apu.rs
+++ b/src/apu.rs
@@ -57,7 +57,7 @@ pub struct Apu {
     ch3_position: u8,
     ch3_output: u8,
     ch3_dac: bool,
-    ch3_length_timer: u8,
+    ch3_length_timer: u16,
     ch3_output_level: u8,
     ch3_wave_length: u16,
     ch3_length_enabled: bool,
@@ -551,7 +551,7 @@ impl Apu {
             }
             // 0xFF1B — NR31: Channel 3 length timer
             0xff1b => {
-                self.ch3_length_timer = value;
+                self.ch3_length_timer = value as u16;
             }
             // 0xFF1C — NR32: Channel 3 output level
             0xff1c => {
@@ -572,7 +572,7 @@ impl Apu {
                 if trigger {
                     self.trigger_ch3();
                 }
-                if length_trigger && self.ch3_length_timer >= 64 {
+                if length_trigger && self.ch3_length_timer >= 256 {
                     self.ch3_enabled = false;
                 }
             }
@@ -770,7 +770,7 @@ impl Apu {
                     return;
                 }
                 self.ch3_length_timer = self.ch3_length_timer.saturating_add(1);
-                if self.ch3_length_timer >= 64 {
+                if self.ch3_length_timer >= 256 {
                     self.ch3_enabled = false;
                     self.ch3_length_timer = 0;
                 }