mirror of
https://github.com/yawut/SDL.git
synced 2026-04-26 09:07:00 -05:00
audio/wiiu: Add maps for mono and stereo audio
This commit is contained in:
parent
f7568b7d97
commit
71e63524fc
|
|
@ -31,6 +31,7 @@
|
||||||
#include "../SDL_audiodev_c.h"
|
#include "../SDL_audiodev_c.h"
|
||||||
#include "../SDL_sysaudio.h"
|
#include "../SDL_sysaudio.h"
|
||||||
#include "SDL_wiiuaudio.h"
|
#include "SDL_wiiuaudio.h"
|
||||||
|
#include "SDL_wiiuaudio_mix.h"
|
||||||
|
|
||||||
#include <sndcore2/core.h>
|
#include <sndcore2/core.h>
|
||||||
#include <sndcore2/voice.h>
|
#include <sndcore2/voice.h>
|
||||||
|
|
@ -63,24 +64,6 @@ static int WIIUAUDIO_OpenDevice(_THIS, void* handle, const char* devname, int is
|
||||||
AXVoiceVeData vol = {
|
AXVoiceVeData vol = {
|
||||||
.volume = 0x8000,
|
.volume = 0x8000,
|
||||||
};
|
};
|
||||||
//TODO: AXGetDeviceChannelCount. For now we'll use Decaf's values and
|
|
||||||
//configure for stereo (muted surrounds).
|
|
||||||
//According to Decaf, the TV has 6 channels and the gamepad has 4. We set up
|
|
||||||
//both arrays with 6, the Gamepad callbacks just won't use the whole buffer.
|
|
||||||
AXVoiceDeviceMixData l_mix[6] = {
|
|
||||||
[0] = { // left channel
|
|
||||||
.bus = {
|
|
||||||
{ .volume = 0x8000 }, //bus 0 (master)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
|
||||||
AXVoiceDeviceMixData r_mix[6] = {
|
|
||||||
[1] = { //right channel
|
|
||||||
.bus = {
|
|
||||||
{ .volume = 0x8000 }, //bus 0 (master)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
|
||||||
uint32_t old_affinity;
|
uint32_t old_affinity;
|
||||||
float srcratio;
|
float srcratio;
|
||||||
|
|
||||||
|
|
@ -102,9 +85,9 @@ static int WIIUAUDIO_OpenDevice(_THIS, void* handle, const char* devname, int is
|
||||||
AXInitWithParams(&initparams);
|
AXInitWithParams(&initparams);
|
||||||
} else printf("DEBUG: AX already up?\n");
|
} else printf("DEBUG: AX already up?\n");
|
||||||
|
|
||||||
/* Stereo only for now TODO */
|
|
||||||
if (this->spec.channels < 1) this->spec.channels = 1;
|
if (this->spec.channels < 1) this->spec.channels = 1;
|
||||||
if (this->spec.channels > 2) this->spec.channels = 2;
|
if (this->spec.channels > WIIU_MAX_VALID_CHANNELS)
|
||||||
|
this->spec.channels = WIIU_MAX_VALID_CHANNELS;
|
||||||
|
|
||||||
/* Force wiiu-compatible audio formats.
|
/* Force wiiu-compatible audio formats.
|
||||||
TODO verify - unsigned or signed? */
|
TODO verify - unsigned or signed? */
|
||||||
|
|
@ -163,14 +146,21 @@ static int WIIUAUDIO_OpenDevice(_THIS, void* handle, const char* devname, int is
|
||||||
AXVoiceBegin(this->hidden->voice[i]);
|
AXVoiceBegin(this->hidden->voice[i]);
|
||||||
AXSetVoiceType(this->hidden->voice[i], 0);
|
AXSetVoiceType(this->hidden->voice[i], 0);
|
||||||
|
|
||||||
/* Set the voice's volume. TODO temp hack for l/r pan, make actual maps */
|
/* Set the voice's volume. */
|
||||||
AXSetVoiceVe(this->hidden->voice[i], &vol);
|
AXSetVoiceVe(this->hidden->voice[i], &vol);
|
||||||
if (i == 0) {
|
switch (this->spec.channels) {
|
||||||
AXSetVoiceDeviceMix(this->hidden->voice[i], AX_DEVICE_TYPE_DRC, 0, l_mix);
|
case 1: /* mono */ {
|
||||||
AXSetVoiceDeviceMix(this->hidden->voice[i], AX_DEVICE_TYPE_TV, 0, l_mix);
|
AXSetVoiceDeviceMix(this->hidden->voice[i],
|
||||||
} else {
|
AX_DEVICE_TYPE_DRC, 0, mono_mix[i]);
|
||||||
AXSetVoiceDeviceMix(this->hidden->voice[i], AX_DEVICE_TYPE_DRC, 0, r_mix);
|
AXSetVoiceDeviceMix(this->hidden->voice[i],
|
||||||
AXSetVoiceDeviceMix(this->hidden->voice[i], AX_DEVICE_TYPE_TV, 0, r_mix);
|
AX_DEVICE_TYPE_TV, 0, mono_mix[i]);
|
||||||
|
} break;
|
||||||
|
case 2: /* stereo */ {
|
||||||
|
AXSetVoiceDeviceMix(this->hidden->voice[i],
|
||||||
|
AX_DEVICE_TYPE_DRC, 0, stereo_mix[i]);
|
||||||
|
AXSetVoiceDeviceMix(this->hidden->voice[i],
|
||||||
|
AX_DEVICE_TYPE_TV, 0, stereo_mix[i]);
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the samplerate conversion ratio
|
/* Set the samplerate conversion ratio
|
||||||
|
|
|
||||||
65
src/audio/wiiu/SDL_wiiuaudio_mix.h
Normal file
65
src/audio/wiiu/SDL_wiiuaudio_mix.h
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_wiiuaudio_mix_h_
|
||||||
|
#define SDL_wiiuaudio_mix_h_
|
||||||
|
|
||||||
|
/* Some defines to help make the code below more readable */
|
||||||
|
#define AX_VOICE(x) x
|
||||||
|
#define AX_CHANNEL_LEFT 0
|
||||||
|
#define AX_CHANNEL_RIGHT 1
|
||||||
|
#define AX_BUS_MASTER 0
|
||||||
|
|
||||||
|
/* TODO: AXGetDeviceChannelCount. For now we'll use Decaf's values.
|
||||||
|
* According to Decaf, the TV has 6 channels and the gamepad has 4. We set up
|
||||||
|
* both arrays with 6, the Gamepad callbacks just won't use the whole buffer. */
|
||||||
|
#define AX_NUM_CHANNELS 6
|
||||||
|
|
||||||
|
static AXVoiceDeviceMixData stereo_mix[2 /* voices */][AX_NUM_CHANNELS] = {
|
||||||
|
[AX_VOICE(0)] = {
|
||||||
|
[AX_CHANNEL_LEFT] = {
|
||||||
|
.bus = {
|
||||||
|
[AX_BUS_MASTER] = { .volume = 0x8000 },
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[AX_VOICE(1)] = {
|
||||||
|
[AX_CHANNEL_RIGHT] = {
|
||||||
|
.bus = {
|
||||||
|
[AX_BUS_MASTER] = { .volume = 0x8000 },
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
static AXVoiceDeviceMixData mono_mix[1 /* voice */][AX_NUM_CHANNELS] = {
|
||||||
|
[AX_VOICE(0)] = {
|
||||||
|
[AX_CHANNEL_LEFT] = { .bus = {
|
||||||
|
[AX_BUS_MASTER] = { .volume = 0x8000 },
|
||||||
|
}},
|
||||||
|
[AX_CHANNEL_RIGHT] = { .bus = {
|
||||||
|
[AX_BUS_MASTER] = { .volume = 0x8000 },
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
#define WIIU_MAX_VALID_CHANNELS 2
|
||||||
|
|
||||||
|
#endif //SDL_wiiuaudio_mix_h_
|
||||||
Loading…
Reference in New Issue
Block a user