summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/audio_core/codec.cpp4
-rw-r--r--src/audio_core/codec.h4
-rw-r--r--src/audio_core/hle/source.h2
-rw-r--r--src/audio_core/interpolate.cpp2
-rw-r--r--src/audio_core/interpolate.h4
5 files changed, 9 insertions, 7 deletions
diff --git a/src/audio_core/codec.cpp b/src/audio_core/codec.cpp
index 7a3bd7eb3..6fba9fdae 100644
--- a/src/audio_core/codec.cpp
+++ b/src/audio_core/codec.cpp
@@ -117,7 +117,9 @@ StereoBuffer16 DecodePCM16(const unsigned num_channels, const u8* const data,
117 ret[i].fill(sample); 117 ret[i].fill(sample);
118 } 118 }
119 } else { 119 } else {
120 std::memcpy(ret.data(), data, sample_count * 2 * sizeof(u16)); 120 for (size_t i = 0; i < sample_count; ++i) {
121 std::memcpy(&ret[i], data + i * sizeof(s16) * 2, 2 * sizeof(s16));
122 }
121 } 123 }
122 124
123 return ret; 125 return ret;
diff --git a/src/audio_core/codec.h b/src/audio_core/codec.h
index 2b0c395e6..877b2202d 100644
--- a/src/audio_core/codec.h
+++ b/src/audio_core/codec.h
@@ -5,13 +5,13 @@
5#pragma once 5#pragma once
6 6
7#include <array> 7#include <array>
8#include <vector> 8#include <deque>
9#include "common/common_types.h" 9#include "common/common_types.h"
10 10
11namespace Codec { 11namespace Codec {
12 12
13/// A variable length buffer of signed PCM16 stereo samples. 13/// A variable length buffer of signed PCM16 stereo samples.
14using StereoBuffer16 = std::vector<std::array<s16, 2>>; 14using StereoBuffer16 = std::deque<std::array<s16, 2>>;
15 15
16/// See: Codec::DecodeADPCM 16/// See: Codec::DecodeADPCM
17struct ADPCMState { 17struct ADPCMState {
diff --git a/src/audio_core/hle/source.h b/src/audio_core/hle/source.h
index ccb7f064f..c4d2debc2 100644
--- a/src/audio_core/hle/source.h
+++ b/src/audio_core/hle/source.h
@@ -108,7 +108,7 @@ private:
108 108
109 u32 current_sample_number = 0; 109 u32 current_sample_number = 0;
110 u32 next_sample_number = 0; 110 u32 next_sample_number = 0;
111 std::vector<std::array<s16, 2>> current_buffer; 111 AudioInterp::StereoBuffer16 current_buffer;
112 112
113 // buffer_id state 113 // buffer_id state
114 114
diff --git a/src/audio_core/interpolate.cpp b/src/audio_core/interpolate.cpp
index 16e68bc5c..83573d772 100644
--- a/src/audio_core/interpolate.cpp
+++ b/src/audio_core/interpolate.cpp
@@ -47,7 +47,7 @@ static void StepOverSamples(State& state, StereoBuffer16& input, float rate,
47 state.xn1 = input[inputi + 1]; 47 state.xn1 = input[inputi + 1];
48 state.fposition = fposition - inputi * scale_factor; 48 state.fposition = fposition - inputi * scale_factor;
49 49
50 input.erase(input.begin(), input.begin() + inputi + 2); 50 input.erase(input.begin(), std::next(input.begin(), inputi + 2));
51} 51}
52 52
53void None(State& state, StereoBuffer16& input, float rate, DSP::HLE::StereoFrame16& output, 53void None(State& state, StereoBuffer16& input, float rate, DSP::HLE::StereoFrame16& output,
diff --git a/src/audio_core/interpolate.h b/src/audio_core/interpolate.h
index 59f59bc14..8dff6111a 100644
--- a/src/audio_core/interpolate.h
+++ b/src/audio_core/interpolate.h
@@ -5,14 +5,14 @@
5#pragma once 5#pragma once
6 6
7#include <array> 7#include <array>
8#include <vector> 8#include <deque>
9#include "audio_core/hle/common.h" 9#include "audio_core/hle/common.h"
10#include "common/common_types.h" 10#include "common/common_types.h"
11 11
12namespace AudioInterp { 12namespace AudioInterp {
13 13
14/// A variable length buffer of signed PCM16 stereo samples. 14/// A variable length buffer of signed PCM16 stereo samples.
15using StereoBuffer16 = std::vector<std::array<s16, 2>>; 15using StereoBuffer16 = std::deque<std::array<s16, 2>>;
16 16
17struct State { 17struct State {
18 /// Two historical samples. 18 /// Two historical samples.