diff --git a/bbc_micro_de1.vhd b/bbc_micro_de1.vhd
index 5cc666c..462e507 100644
--- a/bbc_micro_de1.vhd
+++ b/bbc_micro_de1.vhd
@@ -437,7 +437,7 @@ component sn76489_top is
     we_n_i     : in  std_logic;
     ready_o    : out std_logic;
     d_i        : in  std_logic_vector(0 to 7);
-    aout_o     : out signed(0 to 7)
+    aout_o     : out signed(0 to 15)
   );
 
 end component;
@@ -445,7 +445,7 @@ end component;
 component i2s_intf is
 generic(
 	mclk_rate : positive := 12000000;
-	sample_rate : positive := 8000;
+	sample_rate : positive := 48000;
 	preamble : positive := 1; -- I2S
 	word_length : positive := 16
 	);
@@ -713,7 +713,7 @@ signal keyb_break		:	std_logic;
 -- Sound generator
 signal sound_ready		:	std_logic;
 signal sound_di			:	std_logic_vector(7 downto 0);
-signal sound_ao			:	signed(7 downto 0);
+signal sound_ao			:	signed(15 downto 0);
 signal pcm_inl			:	std_logic_vector(15 downto 0);
 signal pcm_inr			:	std_logic_vector(15 downto 0);
 
@@ -938,13 +938,13 @@ begin
 		clock, mhz4_clken,
 		reset_n, '0', sound_enable_n,
 		sound_ready, sound_di,
-		sound_ao
+		sound_ao 
 		);
 	i2s : i2s_intf port map (
 		CLOCK_24(0), reset_n,
 		pcm_inl, pcm_inr,
-		std_logic_vector(sound_ao) & "00000000",
-		std_logic_vector(sound_ao) & "00000000",
+		std_logic_vector(sound_ao),
+		std_logic_vector(sound_ao),
 		AUD_XCK, AUD_DACLRCK,
 		AUD_BCLK, AUD_DACDAT, AUD_ADCDAT
 		);
diff --git a/i2c_loader.vhd b/i2c_loader.vhd
index 61bdd22..e0a7115 100644
--- a/i2c_loader.vhd
+++ b/i2c_loader.vhd
@@ -84,8 +84,8 @@ constant init_regs : regs := (
 	X"0C", X"62",
 	-- Format 16-bit I2S, no bit inversion or phase changes
 	X"0E", X"02",
-	-- Sampling control, 8 kHz USB mode (MCLK = 250fs * 6)
-	X"10", X"0D",
+	-- Sampling control, 48 kHz USB mode (MCLK = 250fs)
+	X"10", X"01", 
 	-- Activate
 	X"12", X"01"
 	);
diff --git a/i2s_intf.vhd b/i2s_intf.vhd
index 49b6efb..dc00622 100644
--- a/i2s_intf.vhd
+++ b/i2s_intf.vhd
@@ -43,7 +43,7 @@ use IEEE.STD_LOGIC_UNSIGNED.ALL;
 entity i2s_intf is
 generic(
 	mclk_rate : positive := 12000000;
-	sample_rate : positive := 8000;
+	sample_rate : positive := 48000;
 	preamble : positive := 1; -- I2S
 	word_length : positive := 16
 	);
diff --git a/sn76489-1.0/sn76489_attenuator.vhd b/sn76489-1.0/sn76489_attenuator.vhd
index 444064e..a160a05 100644
--- a/sn76489-1.0/sn76489_attenuator.vhd
+++ b/sn76489-1.0/sn76489_attenuator.vhd
@@ -53,7 +53,7 @@ entity sn76489_attenuator is
   port (
     attenuation_i : in  std_logic_vector(0 to 3);
     factor_i      : in  signed(0 to 1);
-    product_o     : out signed(0 to 7)
+    product_o     : out signed(0 to 15)
   );
 
 end sn76489_attenuator;
@@ -83,7 +83,7 @@ begin
 
     type     volume_t is array (natural range 0 to 15) of natural;
     constant volume_c : volume_t :=
-      (31, 25, 20, 16, 12, 10, 8, 6, 5, 4, 3, 2, 2, 2, 1, 0);
+        ( 1905, 1514, 1202, 955, 758, 602, 479, 380, 302, 240, 191, 151, 120, 95, 76, 0);
 
     variable attenuation_v  : unsigned(attenuation_i'range);
     variable volume_v       : signed(product_o'range);
diff --git a/sn76489-1.0/sn76489_comp_pack-p.vhd b/sn76489-1.0/sn76489_comp_pack-p.vhd
index c5fcc90..88c5c23 100644
--- a/sn76489-1.0/sn76489_comp_pack-p.vhd
+++ b/sn76489-1.0/sn76489_comp_pack-p.vhd
@@ -18,7 +18,7 @@ package sn76489_comp_pack is
     port (
       attenuation_i : in  std_logic_vector(0 to 3);
       factor_i      : in  signed(0 to 1);
-      product_o     : out signed(0 to 7)
+      product_o     : out signed(0 to 15)
     );
   end component;
 
@@ -33,7 +33,7 @@ package sn76489_comp_pack is
       rst_a_i  : in  std_logic_vector(0 to 3);
       rst_cnt_i: in  std_logic_vector(0 to 9);
       ff_o     : out std_logic;
-      tone_o   : out signed(0 to 7)
+      tone_o   : out signed(0 to 15)
     );
   end component;
 
@@ -46,7 +46,7 @@ package sn76489_comp_pack is
       d_i        : in  std_logic_vector(0 to 7);
       addr_i     : in  std_logic_vector(0 to 1);
       tone3_ff_i : in  std_logic;
-      noise_o    : out signed(0 to 7)
+      noise_o    : out signed(0 to 15)
     );
   end component;
 
@@ -74,7 +74,7 @@ package sn76489_comp_pack is
       we_n_i     : in  std_logic;
       ready_o    : out std_logic;
       d_i        : in  std_logic_vector(0 to 7);
-      aout_o     : out signed(0 to 7)
+      aout_o     : out signed(0 to 15)
     );
   end component;
 
diff --git a/sn76489-1.0/sn76489_noise.vhd b/sn76489-1.0/sn76489_noise.vhd
index 035adab..a19df77 100644
--- a/sn76489-1.0/sn76489_noise.vhd
+++ b/sn76489-1.0/sn76489_noise.vhd
@@ -58,7 +58,7 @@ entity sn76489_noise is
     d_i        : in  std_logic_vector(0 to 7);
     addr_i     : in  std_logic_vector(0 to 1);
     tone3_ff_i : in  std_logic;
-    noise_o    : out signed(0 to 7)
+    noise_o    : out signed(0 to 15)
   );
 
 end sn76489_noise;
@@ -81,7 +81,7 @@ architecture rtl of sn76489_noise is
          shift_source_q    : std_logic;
   signal shift_rise_edge_s : boolean;
 
-  signal lfsr_q            : std_logic_vector(0 to 7);
+  signal lfsr_q            : std_logic_vector(0 to 15);
 
   signal freq_s      : signed(0 to 1);
 
diff --git a/sn76489-1.0/sn76489_tone.vhd b/sn76489-1.0/sn76489_tone.vhd
index f1b6885..4421423 100644
--- a/sn76489-1.0/sn76489_tone.vhd
+++ b/sn76489-1.0/sn76489_tone.vhd
@@ -60,7 +60,7 @@ entity sn76489_tone is
     rst_a_i  : in  std_logic_vector(0 to 3);
     rst_cnt_i: in  std_logic_vector(0 to 9);
     ff_o     : out std_logic;
-    tone_o   : out signed(0 to 7)
+    tone_o   : out signed(0 to 15)
   );
 
 end sn76489_tone;
diff --git a/sn76489-1.0/sn76489_top.vhd b/sn76489-1.0/sn76489_top.vhd
index 2f6a01c..512521f 100644
--- a/sn76489-1.0/sn76489_top.vhd
+++ b/sn76489-1.0/sn76489_top.vhd
@@ -72,7 +72,7 @@ entity sn76489_top is
     we_n_i     : in  std_logic;
     ready_o    : out std_logic;
     d_i        : in  std_logic_vector(0 to 7);
-    aout_o     : out signed(0 to 7)
+    aout_o     : out signed(0 to 15)
   );
 
 end sn76489_top;