From 447050b720a6a126dd734679e258fae8cde376c1 Mon Sep 17 00:00:00 2001
From: faiface <faiface@ksp.sk>
Date: Fri, 14 Jul 2017 02:09:36 +0200
Subject: [PATCH] audio: wav: simplify Stream

---
 audio/wav/decode.go | 24 +++++++-----------------
 1 file changed, 7 insertions(+), 17 deletions(-)

diff --git a/audio/wav/decode.go b/audio/wav/decode.go
index 33e0fb1..116b426 100644
--- a/audio/wav/decode.go
+++ b/audio/wav/decode.go
@@ -116,47 +116,37 @@ func (s *decoder) Stream(samples [][2]float64) (n int, ok bool) {
 	if s.err != nil || s.pos >= s.h.DataSize {
 		return 0, false
 	}
-	var frameWidth int
-	switch {
-	case s.h.BitsPerSample == 8 && s.h.NumChans == 1:
-		frameWidth = 1
-	case s.h.BitsPerSample == 8 && s.h.NumChans >= 2:
-		frameWidth = int(s.h.NumChans)
-	case s.h.BitsPerSample == 16 && s.h.NumChans == 1:
-		frameWidth = 2
-	case s.h.BitsPerSample == 16 && s.h.NumChans >= 2:
-		frameWidth = int(s.h.NumChans) * 2
-	}
-	p := make([]byte, len(samples)*frameWidth)
+	bytesPerFrame := int(s.h.BytesPerFrame)
+	p := make([]byte, len(samples)*bytesPerFrame)
 	n, err := s.rsc.Read(p)
 	if err != nil {
 		s.err = err
 	}
 	switch {
 	case s.h.BitsPerSample == 8 && s.h.NumChans == 1:
-		for i, j := 0, 0; i < n-frameWidth; i, j = i+frameWidth, j+1 {
+		for i, j := 0, 0; i < n-bytesPerFrame; i, j = i+bytesPerFrame, j+1 {
 			val := float64(p[i])/(1<<8-1)*2 - 1
 			samples[j][0] = val
 			samples[j][1] = val
 		}
 	case s.h.BitsPerSample == 8 && s.h.NumChans >= 2:
-		for i, j := 0, 0; i < n-frameWidth; i, j = i+frameWidth, j+1 {
+		for i, j := 0, 0; i < n-bytesPerFrame; i, j = i+bytesPerFrame, j+1 {
 			samples[j][0] = float64(p[i+0])/(1<<8-1)*2 - 1
 			samples[j][1] = float64(p[i+1])/(1<<8-1)*2 - 1
 		}
 	case s.h.BitsPerSample == 16 && s.h.NumChans == 1:
-		for i, j := 0, 0; i < n-frameWidth; i, j = i+frameWidth, j+1 {
+		for i, j := 0, 0; i < n-bytesPerFrame; i, j = i+bytesPerFrame, j+1 {
 			val := float64(int16(p[i+0])+int16(p[i+1])*(1<<8)) / (1<<15 - 1)
 			samples[j][0] = val
 			samples[j][1] = val
 		}
 	case s.h.BitsPerSample == 16 && s.h.NumChans >= 2:
-		for i, j := 0, 0; i <= n-frameWidth; i, j = i+frameWidth, j+1 {
+		for i, j := 0, 0; i <= n-bytesPerFrame; i, j = i+bytesPerFrame, j+1 {
 			samples[j][0] = float64(int16(p[i+0])+int16(p[i+1])*(1<<8)) / (1<<15 - 1)
 			samples[j][1] = float64(int16(p[i+2])+int16(p[i+3])*(1<<8)) / (1<<15 - 1)
 		}
 	}
-	return n / frameWidth, true
+	return n / bytesPerFrame, true
 }
 
 func (s *decoder) Close() error {
-- 
GitLab