mirror of
https://github.com/yawut/SDL.git
synced 2026-03-21 17:34:36 -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_sysaudio.h"
|
||||
#include "SDL_wiiuaudio.h"
|
||||
#include "SDL_wiiuaudio_mix.h"
|
||||
|
||||
#include <sndcore2/core.h>
|
||||
#include <sndcore2/voice.h>
|
||||
|
|
@ -63,24 +64,6 @@ static int WIIUAUDIO_OpenDevice(_THIS, void* handle, const char* devname, int is
|
|||
AXVoiceVeData vol = {
|
||||
.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;
|
||||
float srcratio;
|
||||
|
||||
|
|
@ -102,9 +85,9 @@ static int WIIUAUDIO_OpenDevice(_THIS, void* handle, const char* devname, int is
|
|||
AXInitWithParams(&initparams);
|
||||
} 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 > 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.
|
||||
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]);
|
||||
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);
|
||||
if (i == 0) {
|
||||
AXSetVoiceDeviceMix(this->hidden->voice[i], AX_DEVICE_TYPE_DRC, 0, l_mix);
|
||||
AXSetVoiceDeviceMix(this->hidden->voice[i], AX_DEVICE_TYPE_TV, 0, l_mix);
|
||||
} else {
|
||||
AXSetVoiceDeviceMix(this->hidden->voice[i], AX_DEVICE_TYPE_DRC, 0, r_mix);
|
||||
AXSetVoiceDeviceMix(this->hidden->voice[i], AX_DEVICE_TYPE_TV, 0, r_mix);
|
||||
switch (this->spec.channels) {
|
||||
case 1: /* mono */ {
|
||||
AXSetVoiceDeviceMix(this->hidden->voice[i],
|
||||
AX_DEVICE_TYPE_DRC, 0, mono_mix[i]);
|
||||
AXSetVoiceDeviceMix(this->hidden->voice[i],
|
||||
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
|
||||
|
|
|
|||
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