CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
hrydgard

CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!

GitHub Repository: hrydgard/ppsspp
Path: blob/master/Core/HLE/sceAudio.h
Views: 1401
1
// Copyright (c) 2012- PPSSPP Project.
2
3
// This program is free software: you can redistribute it and/or modify
4
// it under the terms of the GNU General Public License as published by
5
// the Free Software Foundation, version 2.0 or later versions.
6
7
// This program is distributed in the hope that it will be useful,
8
// but WITHOUT ANY WARRANTY; without even the implied warranty of
9
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
// GNU General Public License 2.0 for more details.
11
12
// A copy of the GPL 2.0 should have been included with the program.
13
// If not, see http://www.gnu.org/licenses/
14
15
// Official git repository and contact information can be found at
16
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
17
18
#pragma once
19
20
#include <queue>
21
22
#include "CommonTypes.h"
23
#include "sceKernel.h"
24
25
class PointerWrap;
26
27
enum PspAudioFormats { PSP_AUDIO_FORMAT_STEREO = 0, PSP_AUDIO_FORMAT_MONO = 0x10 };
28
enum PspAudioFrequencies { PSP_AUDIO_FREQ_44K = 44100, PSP_AUDIO_FREQ_48K = 48000 };
29
30
#define SCE_ERROR_AUDIO_CHANNEL_NOT_INIT 0x80260001
31
#define SCE_ERROR_AUDIO_CHANNEL_BUSY 0x80260002
32
#define SCE_ERROR_AUDIO_INVALID_CHANNEL 0x80260003
33
#define SCE_ERROR_AUDIO_PRIV_REQUIRED 0x80260004
34
#define SCE_ERROR_AUDIO_NO_CHANNELS_AVAILABLE 0x80260005
35
#define SCE_ERROR_AUDIO_OUTPUT_SAMPLE_DATA_SIZE_NOT_ALIGNED 0x80260006
36
#define SCE_ERROR_AUDIO_INVALID_FORMAT 0x80260007
37
#define SCE_ERROR_AUDIO_CHANNEL_NOT_RESERVED 0x80260008
38
#define SCE_ERROR_AUDIO_NOT_OUTPUT 0x80260009
39
#define SCE_ERROR_AUDIO_INVALID_FREQUENCY 0x8026000A
40
#define SCE_ERROR_AUDIO_INVALID_VOLUME 0x8026000B
41
#define SCE_ERROR_AUDIO_CHANNEL_ALREADY_RESERVED 0x80268002
42
43
44
const u32 PSP_AUDIO_CHANNEL_MAX = 8;
45
46
const int PSP_AUDIO_CHANNEL_SRC = 8;
47
const int PSP_AUDIO_CHANNEL_OUTPUT2 = 8;
48
const int PSP_AUDIO_CHANNEL_VAUDIO = 8;
49
50
struct AudioChannelWaitInfo {
51
SceUID threadID;
52
int numSamples;
53
};
54
55
struct AudioChannel {
56
int index = 0;
57
bool reserved = false;
58
59
// last sample address
60
u32 sampleAddress = 0;
61
u32 sampleCount = 0; // Number of samples written in each OutputBlocking
62
u32 leftVolume = 0;
63
u32 rightVolume = 0;
64
u32 format = 0;
65
66
std::vector<AudioChannelWaitInfo> waitingThreads;
67
68
void DoState(PointerWrap &p);
69
70
void reset();
71
void clear();
72
};
73
74
// The extra channel is for SRC/Output2/Vaudio (who all share, apparently.)
75
extern AudioChannel chans[PSP_AUDIO_CHANNEL_MAX + 1];
76
77
void Register_sceAudio();
78
79
80