summaryrefslogtreecommitdiffstats
path: root/src/audio_core/renderer/voice/voice_channel_resource.h
blob: 4f19c2fcc38b46913831c13c7e914e4938639e43 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once

#include <array>

#include "audio_core/common/common.h"
#include "common/common_types.h"

namespace AudioCore::Renderer {
/**
 * Represents one channel for mixing a voice.
 */
class VoiceChannelResource {
public:
    struct InParameter {
        /* 0x00 */ u32 id;
        /* 0x04 */ std::array<f32, MaxMixBuffers> mix_volumes;
        /* 0x64 */ bool in_use;
        /* 0x65 */ char unk65[0xB];
    };
    static_assert(sizeof(InParameter) == 0x70,
                  "VoiceChannelResource::InParameter has the wrong size!");

    explicit VoiceChannelResource(u32 id_) : id{id_} {}

    /// Current volume for each mix buffer
    std::array<f32, MaxMixBuffers> mix_volumes{};
    /// Previous volume for each mix buffer
    std::array<f32, MaxMixBuffers> prev_mix_volumes{};
    /// Id of this resource
    const u32 id;
    /// Is this resource in use?
    bool in_use{};
};

} // namespace AudioCore::Renderer