mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@216 385bec56-5757-e545-9c3a-d8741f4650f1
149 lines
4.4 KiB
C
149 lines
4.4 KiB
C
/*---------------------------------------------------------------------------*
|
|
Project: Horizon
|
|
File: wave.h
|
|
|
|
Copyright (C)2009 Nintendo Co., Ltd. All rights reserved.
|
|
|
|
These coded instructions, statements, and computer programs contain
|
|
proprietary information of Nintendo of America Inc. and/or Nintendo
|
|
Company Ltd., and are protected by Federal copyright law. They may
|
|
not be disclosed to third parties or copied or duplicated in any form,
|
|
in whole or in part, without the prior written consent of Nintendo.
|
|
|
|
$Rev$
|
|
*---------------------------------------------------------------------------*/
|
|
|
|
#ifndef __WAVE_HEADER__
|
|
#define __WAVE_HEADER__
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* includes */
|
|
#include <nn/types.h>
|
|
#include <nn/fs.h>
|
|
#ifndef NN_BUILD_RELEASE // Release ビルドでは HostIO は使えません。
|
|
#include <nn/hio.h>
|
|
#endif // NN_BUILD_RELEASE
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* constants */
|
|
|
|
#define MAKE_WAVE_TAG_VALUE(c1, c2, c3, c4) \
|
|
( c1 | (c2<<8) | (c3<<16) | (c4<<24) )
|
|
|
|
#define MAKE_WAVE_TAG_STRING(str, val) \
|
|
{ \
|
|
str[3] = (char) ( (val>>24)&0xff ) ; \
|
|
str[2] = (char) ( (val>>16)&0xff ) ; \
|
|
str[1] = (char) ( (val>> 8)&0xff ) ; \
|
|
str[0] = (char) ( (val )&0xff ) ; \
|
|
str[4] = (char) ( 0 ) ; \
|
|
}
|
|
|
|
#define MAKE_FMT_CHUNK(ch, s) \
|
|
{ \
|
|
ch.tag = MAKE_WAVE_TAG_VALUE('f', 'm', 't', ' '); \
|
|
ch.size = s; \
|
|
}
|
|
|
|
#define MAKE_DATA_CHUNK(ch, s) \
|
|
{ \
|
|
ch.tag = MAKE_WAVE_TAG_VALUE('d', 'a', 't', 'a'); \
|
|
ch.size = s; \
|
|
}
|
|
|
|
#define saturate(v, min, max) \
|
|
{ \
|
|
if ( v < min ) {v = min;} \
|
|
else if ( v > max ) {v = max;} \
|
|
}
|
|
|
|
#define swap(v,t) swap_##t##_(v)
|
|
|
|
#define swap_u16_(v) \
|
|
{ \
|
|
v = (u16)(((v)>> 8)&0x00ff | \
|
|
((v)<< 8)&0xff00); \
|
|
}
|
|
|
|
#define swap_s16_(v) \
|
|
{ \
|
|
v = (s16)(((v)>> 8)&0x00ff | \
|
|
((v)<< 8)&0xff00); \
|
|
}
|
|
|
|
#define swap_u32_(v) \
|
|
{ \
|
|
v = (u32)(((v)>>24)&0x000000ff | \
|
|
((v)>> 8)&0x0000ff00 | \
|
|
((v)<< 8)&0x00ff0000 | \
|
|
((v)<<24)&0xff000000); \
|
|
}
|
|
|
|
#define swap_s32_(v) \
|
|
{ \
|
|
v = (s32)(((v)>>24)&0x000000ff | \
|
|
((v)>> 8)&0x0000ff00 | \
|
|
((v)<< 8)&0x00ff0000 | \
|
|
((v)<<24)&0xff000000); \
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* typedef */
|
|
typedef struct _riff
|
|
{
|
|
u32 tag;
|
|
u32 size;
|
|
u32 type;
|
|
}
|
|
WaveRiff;
|
|
|
|
typedef struct _chunk
|
|
{
|
|
u32 tag;
|
|
u32 size;
|
|
}
|
|
WaveChunk;
|
|
|
|
typedef struct _fmt
|
|
{
|
|
u16 fmt_id;
|
|
u16 channel;
|
|
u32 sample_rate;
|
|
u32 trans_rate;
|
|
u16 block_size;
|
|
u16 quantum_bits;
|
|
}
|
|
WaveFmt;
|
|
|
|
typedef struct _data
|
|
{
|
|
u32 size;
|
|
u8* buf;
|
|
}
|
|
WaveData;
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* prototype */
|
|
|
|
void LoadWaveCore(nn::fs::FileReader&, WaveFmt*, WaveData*, bool);
|
|
static inline void LoadWave(nn::fs::FileReader& reader, WaveFmt* fmt, WaveData* data)
|
|
{
|
|
LoadWaveCore(reader, fmt, data, false);
|
|
}
|
|
static inline int GetWaveLength(nn::fs::FileReader& reader)
|
|
{
|
|
WaveFmt fmt;
|
|
WaveData data;
|
|
LoadWaveCore(reader, &fmt, &data, true);
|
|
return data.size;
|
|
}
|
|
#ifndef NN_BUILD_RELEASE // Release ビルドでは HostIO は使えません。
|
|
void WriteWaveHeader(nn::hio::CTR::HostFile& hostFile, WaveFmt* fmt, s32 size);
|
|
#endif // NN_BUILD_RELEASE
|
|
|
|
#endif // __WAVE_HEADER__
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* end of file */
|
|
/*---------------------------------------------------------------------------*/
|