mirror of
https://github.com/rvtr/TwlIPL_commit-99.git
synced 2025-10-31 06:21:11 -04:00
1314 lines
42 KiB
C
Executable File
1314 lines
42 KiB
C
Executable File
/*---------------------------------------------------------------------------*
|
||
Project: NITRO-System - libraries - snd
|
||
File: sndarc.c
|
||
|
||
Copyright 2004-2008 Nintendo. 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.
|
||
|
||
$Revision: 172 $
|
||
*---------------------------------------------------------------------------*/
|
||
#include <nnsys/snd/sndarc.h>
|
||
#include <nnsys/snd/config.h>
|
||
|
||
/* if include from Other Environment for exsample VC or BCB, */
|
||
/* please define NNS_FROM_TOOL */
|
||
#ifndef NNS_FROM_TOOL
|
||
|
||
#include <nitro/snd.h>
|
||
#include <nnsys/misc.h>
|
||
#include <nnsys/snd/player.h>
|
||
|
||
#else
|
||
|
||
#define NNS_ASSERT(exp) ((void) 0)
|
||
#define NNS_NULL_ASSERT(exp) ((void) 0)
|
||
#define NNS_ALIGN4_ASSERT(exp) ((void) 0)
|
||
#define NNS_MAX_ASSERT(exp, max) ((void) 0)
|
||
|
||
static NNS_SND_INLINE
|
||
void MI_CpuCopy32( register const void *srcp, register void *destp, register u32 size )
|
||
{
|
||
const u32* sp = (const u32*)srcp;
|
||
u32* dp = (u32*)destp;
|
||
u32* dpe = (u32*)((char*)dp + size);
|
||
|
||
while( dp < dpe ) {
|
||
*dp++ = *sp++;
|
||
}
|
||
}
|
||
|
||
#ifdef _MSC_VER
|
||
#pragma warning( disable : 4018 ) // warning: signed/unsigned mismatch
|
||
#pragma warning( disable : 4311 ) // warning: pointer truncation from 'type' to 'type'
|
||
#pragma warning( disable : 4312 ) // warning: conversion from 'type' to 'type' of greater size
|
||
#endif
|
||
|
||
#endif // NNS_FROM_TOOL
|
||
|
||
/******************************************************************************
|
||
static variable
|
||
******************************************************************************/
|
||
|
||
static const char null_string = '\0';
|
||
static NNSSndArc* sCurrent = NULL;
|
||
|
||
/******************************************************************************
|
||
static function declaration
|
||
******************************************************************************/
|
||
|
||
static const char* GetSymbol(
|
||
const NNSSndArcOffsetTable* table,
|
||
int index,
|
||
const void* base
|
||
);
|
||
static void* GetPtr( void* base, u32 offset );
|
||
static const void* GetPtrConst( const void* base, u32 offset );
|
||
static const NNSSndArcOffsetTable* GetOffsetTable( const NNSSndArcInfo* info, u32 offset );
|
||
static void InfoDisposeCallback( void* mem, u32 size, u32 data1, u32 data2 );
|
||
static void FatDisposeCallback( void* mem, u32 size, u32 data1, u32 data2 );
|
||
static void SymbolDisposeCallback( void* mem, u32 size, u32 data1, u32 data2 );
|
||
|
||
/******************************************************************************
|
||
inline functions
|
||
******************************************************************************/
|
||
|
||
static NNS_SND_INLINE
|
||
void* GetPtr( void* base, u32 offset )
|
||
{
|
||
if ( offset == 0 ) return NULL;
|
||
return (u8*)base + offset;
|
||
}
|
||
|
||
static NNS_SND_INLINE
|
||
const void* GetPtrConst( const void* base, u32 offset )
|
||
{
|
||
if ( offset == 0 ) return NULL;
|
||
return (const u8*)base + offset;
|
||
}
|
||
|
||
static NNS_SND_INLINE
|
||
const NNSSndArcOffsetTable* GetOffsetTable( const NNSSndArcInfo* info, u32 offset )
|
||
{
|
||
return (const NNSSndArcOffsetTable*)GetPtrConst( info, offset );
|
||
}
|
||
|
||
/******************************************************************************
|
||
public functions
|
||
******************************************************************************/
|
||
|
||
#ifndef SDK_SMALL_BUILD
|
||
|
||
#ifndef NNS_FROM_TOOL
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcInit
|
||
|
||
Description: <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>\<5C><><EFBFBD>̂<EFBFBD><CC82><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
Arguments: arc - <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
|
||
filePath - <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̃p<CC83>X
|
||
heap - <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>q<EFBFBD>[<5B>v
|
||
symbolLoadFlag - <20>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>f<EFBFBD>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>邩<EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD>̃t<CC83><74><EFBFBD>O
|
||
|
||
Returns: None.
|
||
*---------------------------------------------------------------------------*/
|
||
void NNS_SndArcInit( NNSSndArc* arc, const char* filePath, NNSSndHeapHandle heap, BOOL symbolLoadFlag )
|
||
{
|
||
BOOL result;
|
||
|
||
NNS_ASSERT( FS_IsAvailable() );
|
||
NNS_NULL_ASSERT( arc );
|
||
|
||
/* NNSSndArc<72>\<5C><><EFBFBD>̂̏<CC82><CC8F><EFBFBD><EFBFBD><EFBFBD> */
|
||
arc->info = NULL;
|
||
arc->fat = NULL;
|
||
arc->symbol = NULL;
|
||
arc->loadBlockSize = 0;
|
||
|
||
/* <20>t<EFBFBD>@<40>C<EFBFBD><43>ID<49>̎擾 */
|
||
result = FS_ConvertPathToFileID( & arc->fileId, filePath );
|
||
NNS_ASSERTMSG( result, "Cannot find file %s\n", filePath );
|
||
if ( ! result ) return;
|
||
|
||
/* <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD><4A> */
|
||
FS_InitFile( & arc->file );
|
||
result = FS_OpenFileFast( & arc->file, arc->fileId );
|
||
NNS_ASSERTMSG( result, "Cannot open file %s\n", filePath );
|
||
if ( ! result ) return;
|
||
|
||
arc->file_open = TRUE;
|
||
|
||
/* <20>Z<EFBFBD>b<EFBFBD>g<EFBFBD>A<EFBFBD>b<EFBFBD>v */
|
||
result = NNS_SndArcSetup( arc, heap, symbolLoadFlag );
|
||
NNS_ASSERT( result );
|
||
if ( ! result ) return;
|
||
|
||
/* <20>J<EFBFBD><4A><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>Ƃ<EFBFBD><C682>Đݒ<C490> */
|
||
sCurrent = arc;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcInitWithResult
|
||
|
||
Description: <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>\<5C><><EFBFBD>̂<EFBFBD><CC82><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ԃ<EFBFBD><D482>l<EFBFBD>L<EFBFBD><4C><EFBFBD>j
|
||
|
||
Arguments: arc - <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
|
||
filePath - <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̃p<CC83>X
|
||
heap - <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>q<EFBFBD>[<5B>v
|
||
symbolLoadFlag - <20>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>f<EFBFBD>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>邩<EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD>̃t<CC83><74><EFBFBD>O
|
||
|
||
Returns: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǂ<EFBFBD><C782><EFBFBD>
|
||
*---------------------------------------------------------------------------*/
|
||
BOOL NNS_SndArcInitWithResult( NNSSndArc* arc, const char* filePath, NNSSndHeapHandle heap, BOOL symbolLoadFlag )
|
||
{
|
||
BOOL result;
|
||
|
||
NNS_ASSERT( FS_IsAvailable() );
|
||
NNS_NULL_ASSERT( arc );
|
||
|
||
/* NNSSndArc<72>\<5C><><EFBFBD>̂̏<CC82><CC8F><EFBFBD><EFBFBD><EFBFBD> */
|
||
arc->info = NULL;
|
||
arc->fat = NULL;
|
||
arc->symbol = NULL;
|
||
arc->loadBlockSize = 0;
|
||
|
||
/* <20>t<EFBFBD>@<40>C<EFBFBD><43>ID<49>̎擾 */
|
||
result = FS_ConvertPathToFileID( & arc->fileId, filePath );
|
||
if ( ! result ) return FALSE;
|
||
|
||
/* <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD><4A> */
|
||
FS_InitFile( & arc->file );
|
||
result = FS_OpenFileFast( & arc->file, arc->fileId );
|
||
if ( ! result ) return FALSE;
|
||
|
||
arc->file_open = TRUE;
|
||
|
||
/* <20>Z<EFBFBD>b<EFBFBD>g<EFBFBD>A<EFBFBD>b<EFBFBD>v */
|
||
result = NNS_SndArcSetup( arc, heap, symbolLoadFlag );
|
||
if ( ! result ) return FALSE;
|
||
|
||
/* <20>J<EFBFBD><4A><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>Ƃ<EFBFBD><C682>Đݒ<C490> */
|
||
sCurrent = arc;
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcSetup
|
||
|
||
Description: <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>\<5C><><EFBFBD>̂<EFBFBD><CC82>Z<EFBFBD>b<EFBFBD>g<EFBFBD>A<EFBFBD>b<EFBFBD>v
|
||
|
||
Arguments: arc - <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
|
||
heap - <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>q<EFBFBD>[<5B>v
|
||
symbolLoadFlag - <20>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>f<EFBFBD>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>邩<EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD>̃t<CC83><74><EFBFBD>O
|
||
|
||
Returns: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǂ<EFBFBD><C782><EFBFBD>
|
||
*---------------------------------------------------------------------------*/
|
||
BOOL NNS_SndArcSetup( NNSSndArc* arc, NNSSndHeapHandle heap, BOOL symbolLoadFlag )
|
||
{
|
||
BOOL result;
|
||
s32 readSize;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_ASSERT( arc->file_open );
|
||
|
||
/* <20>w<EFBFBD>b<EFBFBD>_<EFBFBD>̃<EFBFBD><CC83>[<5B>h */
|
||
result = FS_SeekFile( & arc->file, 0, FS_SEEK_SET );
|
||
if ( ! result ) return FALSE;
|
||
|
||
readSize = FS_ReadFile(
|
||
& arc->file,
|
||
& arc->header,
|
||
sizeof( arc->header )
|
||
);
|
||
if ( readSize != sizeof( arc->header ) ) return FALSE;
|
||
NNS_ASSERT(
|
||
arc->header.fileHeader.signature[0] == 'S' &&
|
||
arc->header.fileHeader.signature[1] == 'D' &&
|
||
arc->header.fileHeader.signature[2] == 'A' &&
|
||
arc->header.fileHeader.signature[3] == 'T'
|
||
);
|
||
NNS_ASSERT( arc->header.fileHeader.version >= NNS_SND_ARC_SUPPORTED_FILE_VERSION );
|
||
|
||
if ( heap != NNS_SND_HEAP_INVALID_HANDLE )
|
||
{
|
||
/* <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>[<5B>u<EFBFBD><75><EFBFBD>̃<EFBFBD><CC83>[<5B>h */
|
||
arc->info = (NNSSndArcInfo*)NNS_SndHeapAlloc( heap, arc->header.infoSize, InfoDisposeCallback, (u32)arc, 0 );
|
||
if ( arc->info == NULL ) return FALSE;
|
||
result = FS_SeekFile( & arc->file, (s32)( arc->header.infoOffset ), FS_SEEK_SET );
|
||
if ( ! result ) return FALSE;
|
||
readSize = FS_ReadFile( & arc->file, arc->info, (s32)( arc->header.infoSize ) );
|
||
if ( readSize != arc->header.infoSize ) return FALSE;
|
||
NNS_ASSERT( arc->info->blockHeader.kind == NNS_SND_ARC_SIGNATURE_INFO );
|
||
|
||
/* <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>A<EFBFBD><41><EFBFBD>P<EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>[<5B>u<EFBFBD><75><EFBFBD>̃<EFBFBD><CC83>[<5B>h */
|
||
arc->fat = (NNSSndArcFat*)NNS_SndHeapAlloc( heap, arc->header.fatSize, FatDisposeCallback, (u32)arc, 0 );
|
||
if ( arc->fat == NULL ) return FALSE;
|
||
result = FS_SeekFile( & arc->file, (s32)( arc->header.fatOffset ), FS_SEEK_SET );
|
||
if ( ! result ) return FALSE;
|
||
readSize = FS_ReadFile( & arc->file, arc->fat, (s32)( arc->header.fatSize ) );
|
||
if ( readSize != arc->header.fatSize ) return FALSE;
|
||
NNS_ASSERT( arc->fat->blockHeader.kind == NNS_SND_ARC_SIGNATURE_FAT );
|
||
|
||
/* <20>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>e<EFBFBD>[<5B>u<EFBFBD><75><EFBFBD>̃<EFBFBD><CC83>[<5B>h */
|
||
if ( symbolLoadFlag && arc->header.symbolDataSize > 0 )
|
||
{
|
||
arc->symbol = (NNSSndArcSymbol*)NNS_SndHeapAlloc( heap, arc->header.symbolDataSize, SymbolDisposeCallback, (u32)arc, 0 );
|
||
if ( arc->symbol == NULL ) return FALSE;
|
||
result = FS_SeekFile( & arc->file, (s32)( arc->header.symbolDataOffset ), FS_SEEK_SET );
|
||
if ( ! result ) return FALSE;
|
||
|
||
readSize = FS_ReadFile( & arc->file, arc->symbol, (s32)( arc->header.symbolDataSize ) );
|
||
if ( readSize != arc->header.symbolDataSize ) return FALSE;
|
||
NNS_ASSERT( arc->symbol->blockHeader.kind == NNS_SND_ARC_SIGNATURE_SYMB );
|
||
}
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
#endif // NNS_FROM_TOOL
|
||
|
||
#endif /* SDK_SMALL_BUILD */
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcInitOnMemory
|
||
|
||
Description: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̃T<CC83>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>f<EFBFBD>[<5B>^<5E><><EFBFBD>g<EFBFBD><67><EFBFBD>āA
|
||
<20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>\<5C><><EFBFBD>̂<EFBFBD><CC82><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
Arguments: arc - <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
|
||
data - <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>f<EFBFBD>[<5B>^<5E>̃|<7C>C<EFBFBD><43><EFBFBD>^
|
||
|
||
Returns: None.
|
||
*---------------------------------------------------------------------------*/
|
||
void NNS_SndArcInitOnMemory( NNSSndArc* arc, void* data )
|
||
{
|
||
NNSSndArcHeader* header = (NNSSndArcHeader*)data;
|
||
NNSSndArcFileInfo* file;
|
||
int fileId;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( data );
|
||
NNS_ALIGN4_ASSERT( data );
|
||
|
||
MI_CpuCopy32( header, &arc->header, sizeof( arc->header ) );
|
||
|
||
NNS_ASSERT(
|
||
arc->header.fileHeader.signature[0] == 'S' &&
|
||
arc->header.fileHeader.signature[1] == 'D' &&
|
||
arc->header.fileHeader.signature[2] == 'A' &&
|
||
arc->header.fileHeader.signature[3] == 'T'
|
||
);
|
||
NNS_ASSERT( arc->header.fileHeader.version >= NNS_SND_ARC_SUPPORTED_FILE_VERSION );
|
||
|
||
arc->info = (NNSSndArcInfo*)GetPtr( header, arc->header.infoOffset );
|
||
arc->fat = (NNSSndArcFat*)GetPtr( header, arc->header.fatOffset );
|
||
arc->symbol = (NNSSndArcSymbol*)GetPtr( header, arc->header.symbolDataOffset );
|
||
arc->loadBlockSize = 0;
|
||
|
||
NNS_NULL_ASSERT( arc->info );
|
||
NNS_NULL_ASSERT( arc->fat );
|
||
|
||
NNS_ASSERT( arc->info->blockHeader.kind == NNS_SND_ARC_SIGNATURE_INFO );
|
||
NNS_ASSERT( arc->fat->blockHeader.kind == NNS_SND_ARC_SIGNATURE_FAT );
|
||
NNS_ASSERT( arc->symbol == NULL || arc->symbol->blockHeader.kind == NNS_SND_ARC_SIGNATURE_SYMB );
|
||
|
||
for( fileId = 0; fileId < arc->fat->count ; fileId ++ )
|
||
{
|
||
file = & arc->fat->files[ fileId ];
|
||
|
||
file->mem = GetPtr( header, file->offset );
|
||
NNS_NULL_ASSERT( file->mem );
|
||
}
|
||
|
||
arc->file_open = FALSE;
|
||
|
||
/* <20>J<EFBFBD><4A><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>Ƃ<EFBFBD><C682>Đݒ<C490> */
|
||
sCurrent = arc;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcSetCurrent
|
||
|
||
Description: <20>J<EFBFBD><4A><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>̐ݒ<CC90>
|
||
|
||
Arguments: arc - <20>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u
|
||
|
||
Returns: <20>Z<EFBFBD>b<EFBFBD>g<EFBFBD>O<EFBFBD>̃J<CC83><4A><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u
|
||
*---------------------------------------------------------------------------*/
|
||
NNSSndArc* NNS_SndArcSetCurrent( NNSSndArc* arc )
|
||
{
|
||
NNSSndArc* oldArc = sCurrent;
|
||
sCurrent = arc;
|
||
return oldArc;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetCurrent
|
||
|
||
Description: <20>J<EFBFBD><4A><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD>擾
|
||
|
||
Arguments: None.
|
||
|
||
Returns: <20>J<EFBFBD><4A><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u
|
||
*---------------------------------------------------------------------------*/
|
||
NNSSndArc* NNS_SndArcGetCurrent( void )
|
||
{
|
||
return sCurrent;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetSeqParam
|
||
|
||
Description: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>[<5B>^<5E>̎擾
|
||
|
||
Arguments: seqNo - <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>ԍ<EFBFBD>
|
||
|
||
Returns: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>[<5B>^<5E>\<5C><><EFBFBD><EFBFBD>
|
||
*---------------------------------------------------------------------------*/
|
||
const NNSSndSeqParam* NNS_SndArcGetSeqParam( int seqNo )
|
||
{
|
||
const NNSSndArcSeqInfo* info;
|
||
|
||
info = NNS_SndArcGetSeqInfo( seqNo );
|
||
if ( info == NULL ) return NULL;
|
||
|
||
return & info->param;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetSeqArcParam
|
||
|
||
Description: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>[<5B>^<5E>̎擾
|
||
|
||
Arguments: seqArcNo - <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>ԍ<EFBFBD>
|
||
index - <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>C<EFBFBD><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X
|
||
|
||
Returns: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>[<5B>^<5E>\<5C><><EFBFBD><EFBFBD>
|
||
*---------------------------------------------------------------------------*/
|
||
const NNSSndSeqParam* NNS_SndArcGetSeqArcParam( int seqArcNo, int index )
|
||
{
|
||
const NNSSndArcSeqArcInfo* info;
|
||
const NNSSndSeqArc* seqArc;
|
||
const NNSSndSeqArcSeqInfo* sound;
|
||
|
||
info = NNS_SndArcGetSeqArcInfo( seqArcNo );
|
||
if ( info == NULL ) return NULL;
|
||
|
||
seqArc = (const NNSSndSeqArc*)NNS_SndArcGetFileAddress( info->fileId );
|
||
if ( seqArc == NULL ) return NULL;
|
||
|
||
sound = NNSi_SndSeqArcGetSeqInfo( seqArc, index );
|
||
if ( sound == NULL ) return NULL;
|
||
|
||
return & sound->param;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetSeqInfo
|
||
|
||
Description: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD>̎擾
|
||
|
||
Arguments: seqNo - <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>ԍ<EFBFBD>
|
||
|
||
Returns: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
|
||
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́ANULL
|
||
*---------------------------------------------------------------------------*/
|
||
const NNSSndArcSeqInfo* NNS_SndArcGetSeqInfo( int seqNo )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcOffsetTable* table;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->info );
|
||
|
||
table = GetOffsetTable( arc->info, arc->info->seqOffset );
|
||
if ( table == NULL ) return NULL;
|
||
|
||
if ( seqNo < 0 ) return NULL;
|
||
if ( seqNo >= table->count ) return NULL;
|
||
|
||
return (const NNSSndArcSeqInfo*)GetPtrConst( arc->info, table->offset[ seqNo ] );
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetSeqArcInfo
|
||
|
||
Description: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD>̎擾
|
||
|
||
Arguments: seqArcNo - <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>ԍ<EFBFBD>
|
||
|
||
Returns: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
|
||
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́ANULL
|
||
*---------------------------------------------------------------------------*/
|
||
const NNSSndArcSeqArcInfo* NNS_SndArcGetSeqArcInfo( int seqArcNo )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcOffsetTable* table;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->info );
|
||
|
||
table = GetOffsetTable( arc->info, arc->info->seqArcOffset );
|
||
if ( table == NULL ) return NULL;
|
||
|
||
if ( seqArcNo < 0 ) return NULL;
|
||
if ( seqArcNo >= table->count ) return NULL;
|
||
|
||
return (const NNSSndArcSeqArcInfo*)GetPtrConst( arc->info, table->offset[ seqArcNo ] );
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetBankInfo
|
||
|
||
Description: <20>o<EFBFBD><6F><EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD>̎擾
|
||
|
||
Arguments: bankNo - <20>o<EFBFBD><6F><EFBFBD>N<EFBFBD>ԍ<EFBFBD>
|
||
|
||
Returns: <20>o<EFBFBD><6F><EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
|
||
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́ANULL
|
||
*---------------------------------------------------------------------------*/
|
||
const NNSSndArcBankInfo* NNS_SndArcGetBankInfo( int bankNo )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcOffsetTable* table;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->info );
|
||
|
||
table = GetOffsetTable( arc->info, arc->info->bankOffset );
|
||
if ( table == NULL ) return NULL;
|
||
|
||
if ( bankNo < 0 ) return NULL;
|
||
if ( bankNo >= table->count ) return NULL;
|
||
|
||
return (const NNSSndArcBankInfo*)GetPtrConst( arc->info, table->offset[ bankNo ] );
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetWaveArcInfo
|
||
|
||
Description: <20>g<EFBFBD>`<60>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD>̎擾
|
||
|
||
Arguments: waveArcNo - <20>g<EFBFBD>`<60>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>ԍ<EFBFBD>
|
||
|
||
Returns: <20>g<EFBFBD>`<60>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
|
||
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́ANULL
|
||
*---------------------------------------------------------------------------*/
|
||
const NNSSndArcWaveArcInfo* NNS_SndArcGetWaveArcInfo( int waveArcNo )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcOffsetTable* table;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->info );
|
||
|
||
table = GetOffsetTable( arc->info, arc->info->waveArcOffset );
|
||
if ( table == NULL ) return NULL;
|
||
|
||
if ( waveArcNo < 0 ) return NULL;
|
||
if ( waveArcNo >= table->count ) return NULL;
|
||
|
||
return (const NNSSndArcWaveArcInfo*)GetPtrConst( arc->info, table->offset[ waveArcNo ] );
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetStrmInfo
|
||
|
||
Description: <20>X<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̎擾
|
||
|
||
Arguments: strmNo - <20>X<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD>ԍ<EFBFBD>
|
||
|
||
Returns: <20>X<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
|
||
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́ANULL
|
||
*---------------------------------------------------------------------------*/
|
||
const NNSSndArcStrmInfo* NNS_SndArcGetStrmInfo( int strmNo )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcOffsetTable* table;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->info );
|
||
|
||
table = GetOffsetTable( arc->info, arc->info->strmOffset );
|
||
if ( table == NULL ) return NULL;
|
||
|
||
if ( strmNo < 0 ) return NULL;
|
||
if ( strmNo >= table->count ) return NULL;
|
||
|
||
return (const NNSSndArcStrmInfo*)GetPtrConst( arc->info, table->offset[ strmNo ] );
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetPlayerInfo
|
||
|
||
Description: <20>v<EFBFBD><76><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>̎擾
|
||
|
||
Arguments: playerNo - <20>v<EFBFBD><76><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B>ԍ<EFBFBD>
|
||
|
||
Returns: <20>v<EFBFBD><76><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
|
||
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́ANULL
|
||
*---------------------------------------------------------------------------*/
|
||
const NNSSndArcPlayerInfo* NNS_SndArcGetPlayerInfo( int playerNo )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcOffsetTable* table;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->info );
|
||
|
||
table = GetOffsetTable( arc->info, arc->info->playerInfoOffset );
|
||
if ( table == NULL ) return NULL;
|
||
|
||
if ( playerNo < 0 ) return NULL;
|
||
if ( playerNo >= table->count ) return NULL;
|
||
|
||
return (const NNSSndArcPlayerInfo*)GetPtrConst( arc->info, table->offset[ playerNo ] );
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetStrmPlayerInfo
|
||
|
||
Description: <20>X<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD>v<EFBFBD><76><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>̎擾
|
||
|
||
Arguments: playerNo - <20>v<EFBFBD><76><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B>ԍ<EFBFBD>
|
||
|
||
Returns: <20>X<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD>v<EFBFBD><76><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
|
||
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́ANULL
|
||
*---------------------------------------------------------------------------*/
|
||
const NNSSndArcStrmPlayerInfo* NNS_SndArcGetStrmPlayerInfo( int playerNo )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcOffsetTable* table;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->info );
|
||
|
||
table = GetOffsetTable( arc->info, arc->info->strmPlayerInfoOffset );
|
||
if ( table == NULL ) return NULL;
|
||
|
||
if ( playerNo < 0 ) return NULL;
|
||
if ( playerNo >= table->count ) return NULL;
|
||
|
||
return (const NNSSndArcStrmPlayerInfo*)GetPtrConst( arc->info, table->offset[ playerNo ] );
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetGroupInfo
|
||
|
||
Description: <20>O<EFBFBD><4F><EFBFBD>[<5B>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD>̎擾
|
||
|
||
Arguments: groupNo - <20>O<EFBFBD><4F><EFBFBD>[<5B>v<EFBFBD>ԍ<EFBFBD>
|
||
|
||
Returns: <20>O<EFBFBD><4F><EFBFBD>[<5B>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
|
||
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́ANULL
|
||
*---------------------------------------------------------------------------*/
|
||
const NNSSndArcGroupInfo* NNS_SndArcGetGroupInfo( int groupNo )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcOffsetTable* table;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->info );
|
||
|
||
table = GetOffsetTable( arc->info, arc->info->groupInfoOffset );
|
||
if ( table == NULL ) return NULL;
|
||
|
||
if ( groupNo < 0 ) return NULL;
|
||
if ( groupNo >= table->count ) return NULL;
|
||
|
||
return (const NNSSndArcGroupInfo*)GetPtrConst( arc->info, table->offset[ groupNo ] );
|
||
}
|
||
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetSeqCount
|
||
|
||
Description: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>f<EFBFBD>[<5B>^<5E>̌<CC8C><C290>̎擾
|
||
|
||
Arguments: None.
|
||
|
||
Returns: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>f<EFBFBD>[<5B>^<5E>̌<CC8C>
|
||
*---------------------------------------------------------------------------*/
|
||
u32 NNS_SndArcGetSeqCount( void )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcOffsetTable* table;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->info );
|
||
|
||
table = GetOffsetTable( arc->info, arc->info->seqOffset );
|
||
if ( table == NULL ) return 0;
|
||
|
||
return table->count ;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetSeqArcCount
|
||
|
||
Description: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>f<EFBFBD>[<5B>^<5E>̌<CC8C><C290>̎擾
|
||
|
||
Arguments: None.
|
||
|
||
Returns: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>f<EFBFBD>[<5B>^<5E>̌<CC8C>
|
||
*---------------------------------------------------------------------------*/
|
||
u32 NNS_SndArcGetSeqArcCount( void )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcOffsetTable* table;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->info );
|
||
|
||
table = GetOffsetTable( arc->info, arc->info->seqArcOffset );
|
||
if ( table == NULL ) return 0;
|
||
|
||
return table->count ;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetBankCount
|
||
|
||
Description: <20>o<EFBFBD><6F><EFBFBD>N<EFBFBD>f<EFBFBD>[<5B>^<5E>̌<CC8C><C290>̎擾
|
||
|
||
Arguments: None.
|
||
|
||
Returns: <20>o<EFBFBD><6F><EFBFBD>N<EFBFBD>f<EFBFBD>[<5B>^<5E>̌<CC8C>
|
||
*---------------------------------------------------------------------------*/
|
||
u32 NNS_SndArcGetBankCount( void )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcOffsetTable* table;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->info );
|
||
|
||
table = GetOffsetTable( arc->info, arc->info->bankOffset );
|
||
if ( table == NULL ) return 0;
|
||
|
||
return table->count ;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetWaveArcCount
|
||
|
||
Description: <20>g<EFBFBD>`<60>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>f<EFBFBD>[<5B>^<5E>̌<CC8C><C290>̎擾
|
||
|
||
Arguments: None.
|
||
|
||
Returns: <20>g<EFBFBD>`<60>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>f<EFBFBD>[<5B>^<5E>̌<CC8C>
|
||
*---------------------------------------------------------------------------*/
|
||
u32 NNS_SndArcGetWaveArcCount( void )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcOffsetTable* table;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->info );
|
||
|
||
table = GetOffsetTable( arc->info, arc->info->waveArcOffset );
|
||
if ( table == NULL ) return 0;
|
||
|
||
return table->count ;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetStrmCount
|
||
|
||
Description: <20>X<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD>f<EFBFBD>[<5B>^<5E>̌<CC8C><C290>̎擾
|
||
|
||
Arguments: None.
|
||
|
||
Returns: <20>X<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD>f<EFBFBD>[<5B>^<5E>̌<CC8C>
|
||
*---------------------------------------------------------------------------*/
|
||
u32 NNS_SndArcGetStrmCount( void )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcOffsetTable* table;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->info );
|
||
|
||
table = GetOffsetTable( arc->info, arc->info->strmOffset );
|
||
if ( table == NULL ) return 0;
|
||
|
||
return table->count ;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetGroupCount
|
||
|
||
Description: <20>O<EFBFBD><4F><EFBFBD>[<5B>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD>̌<CC8C><C290>̎擾
|
||
|
||
Arguments: None.
|
||
|
||
Returns: <20>O<EFBFBD><4F><EFBFBD>[<5B>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD>̌<CC8C>
|
||
*---------------------------------------------------------------------------*/
|
||
u32 NNS_SndArcGetGroupCount( void )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcOffsetTable* table;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->info );
|
||
|
||
table = GetOffsetTable( arc->info, arc->info->groupInfoOffset );
|
||
if ( table == NULL ) return 0;
|
||
|
||
return table->count ;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetSeqArcSeqCount
|
||
|
||
Description: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD>̃V<CC83>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>̌<CC8C><C290>擾
|
||
|
||
Arguments: seqArcNo - <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>ԍ<EFBFBD>
|
||
|
||
Returns: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>̌<CC8C>
|
||
*---------------------------------------------------------------------------*/
|
||
u32 NNS_SndArcGetSeqArcSeqCount( int seqArcNo )
|
||
{
|
||
const NNSSndArcSeqArcInfo* info;
|
||
const NNSSndSeqArc* seqArc;
|
||
|
||
info = NNS_SndArcGetSeqArcInfo( seqArcNo );
|
||
if ( info == NULL ) return 0;
|
||
|
||
seqArc = (const NNSSndSeqArc*)NNS_SndArcGetFileAddress( info->fileId );
|
||
if ( seqArc == NULL ) return 0;
|
||
|
||
return NNSi_SndSeqArcGetSeqCount( seqArc );
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetFileOffset
|
||
|
||
Description: <20>t<EFBFBD>@<40>C<EFBFBD><43>ID<49><44><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>I<EFBFBD>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD>擾
|
||
|
||
Arguments: fileId - <20>t<EFBFBD>@<40>C<EFBFBD><43>ID
|
||
|
||
Returns: <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>I<EFBFBD>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
|
||
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́A0
|
||
*---------------------------------------------------------------------------*/
|
||
u32 NNS_SndArcGetFileOffset( u32 fileId )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->fat );
|
||
|
||
if ( fileId >= arc->fat->count ) return 0;
|
||
return arc->fat->files[ fileId ].offset;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetFileSize
|
||
|
||
Description: <20>t<EFBFBD>@<40>C<EFBFBD><43>ID<49><44><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD><59><EFBFBD>擾
|
||
|
||
Arguments: fileId - <20>t<EFBFBD>@<40>C<EFBFBD><43>ID
|
||
|
||
Returns: <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>T<EFBFBD>C<EFBFBD>Y
|
||
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́A0
|
||
*---------------------------------------------------------------------------*/
|
||
u32 NNS_SndArcGetFileSize( u32 fileId )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->fat );
|
||
|
||
if ( fileId >= arc->fat->count ) return 0;
|
||
return arc->fat->files[ fileId ].size;
|
||
}
|
||
|
||
/* if include from Other Environment for exsample VC or BCB, */
|
||
/* please define NNS_FROM_TOOL */
|
||
#ifndef NNS_FROM_TOOL
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcReadFile
|
||
|
||
Description: <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɓǂݏo<DD8F><6F>
|
||
|
||
Arguments: fileId - <20>t<EFBFBD>@<40>C<EFBFBD><43>ID
|
||
buffer - <20><><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD>b<EFBFBD>t<EFBFBD>@<40>̐擪<CC90>A<EFBFBD>h<EFBFBD><68><EFBFBD>X
|
||
size - <20><><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD>b<EFBFBD>t<EFBFBD>@<40>̃T<CC83>C<EFBFBD>Y
|
||
offset - <20>ǂݏo<DD8F><6F><EFBFBD>I<EFBFBD>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
|
||
|
||
Returns: <20>ǂݍ<C782><DD8D>T<F182BE83>C<EFBFBD>Y
|
||
<20>@<40>@<40>@<40>@<40>@<40>@<40>@<40><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>́A-1
|
||
*---------------------------------------------------------------------------*/
|
||
s32 NNS_SndArcReadFile( u32 fileId, void* buffer, s32 size, s32 offset )
|
||
{
|
||
#ifndef SDK_SMALL_BUILD
|
||
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcFileInfo* file;
|
||
s32 totalReadSize;
|
||
s32 readSize;
|
||
s32 blockSize;
|
||
s32 currentOffset;
|
||
s32 requestSize;
|
||
u8* destAddress;
|
||
|
||
NNS_ASSERT( FS_IsAvailable() );
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->fat );
|
||
NNS_NULL_ASSERT( buffer );
|
||
NNS_ASSERTMSG( arc->file_open, "Cannot use this function for the Sound Archive initialized by NNS_SndArcInitOnMemory\n" );
|
||
|
||
if ( fileId >= arc->fat->count ) return -1;
|
||
file = & arc->fat->files[ fileId ];
|
||
|
||
currentOffset = offset;
|
||
|
||
blockSize = arc->loadBlockSize;
|
||
if ( blockSize == 0 ) {
|
||
// <20>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD><59><EFBFBD>O<EFBFBD>̎<EFBFBD><CC8E>́A<CD81><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>Ȃ<EFBFBD>
|
||
blockSize = size;
|
||
}
|
||
totalReadSize = 0;
|
||
destAddress = (u8*)buffer;
|
||
|
||
while( totalReadSize < size )
|
||
{
|
||
// <20><><EFBFBD>[<5B>h<EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD>̌v<CC8C>Z
|
||
requestSize = size - totalReadSize;
|
||
if ( requestSize > blockSize ) requestSize = blockSize;
|
||
if ( requestSize > file->size - currentOffset ) {
|
||
requestSize = (s32)( file->size - currentOffset );
|
||
}
|
||
if ( requestSize == 0 ) {
|
||
// <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD><EFBFBD><F092B482>ēǂݍ<C782><DD8D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682><EFBFBD>
|
||
break;
|
||
}
|
||
|
||
// <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>ǂݍ<C782><DD8D><EFBFBD>
|
||
if ( ! FS_SeekFile( & arc->file, (s32)( file->offset + currentOffset ), FS_SEEK_SET ) ) {
|
||
return -1;
|
||
}
|
||
readSize = FS_ReadFile( & arc->file, destAddress, requestSize );
|
||
if ( readSize < 0 ) return readSize;
|
||
|
||
// <20><><EFBFBD>ԍX<D48D>V
|
||
totalReadSize += readSize;
|
||
currentOffset += readSize;
|
||
destAddress += readSize;
|
||
}
|
||
|
||
return totalReadSize;
|
||
|
||
#else /* SDK_SMALL_BUILD */
|
||
|
||
#pragma unused( fileId, buffer, size, offset )
|
||
return -1;
|
||
|
||
#endif /* SDK_SMALL_BUILD */
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetFileID
|
||
|
||
Description: <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>̃t<CC83>@<40>C<EFBFBD><43><EFBFBD>h<EFBFBD>c<EFBFBD>̎擾
|
||
|
||
Arguments: None.
|
||
|
||
Returns: <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>h<EFBFBD>c
|
||
*---------------------------------------------------------------------------*/
|
||
FSFileID NNS_SndArcGetFileID( void )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->fat );
|
||
NNS_ASSERTMSG( arc->file_open, "Cannot use this function for the Sound Archive initialized by NNS_SndArcInitOnMemory\n" );
|
||
|
||
return arc->fileId;
|
||
}
|
||
|
||
#endif // NNS_FROM_TOOL
|
||
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetFileAddress
|
||
|
||
Description: <20>L<EFBFBD><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>A<EFBFBD>h<EFBFBD><68><EFBFBD>X<EFBFBD><58><EFBFBD>擾
|
||
|
||
Arguments: fileId - <20>t<EFBFBD>@<40>C<EFBFBD><43>ID
|
||
|
||
Returns: <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>A<EFBFBD>h<EFBFBD><68><EFBFBD>X
|
||
*---------------------------------------------------------------------------*/
|
||
void* NNS_SndArcGetFileAddress( u32 fileId )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->fat );
|
||
|
||
if ( fileId >= arc->fat->count ) return NULL;
|
||
return arc->fat->files[ fileId ].mem;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcSetFileAddress
|
||
|
||
Description: <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>A<EFBFBD>h<EFBFBD><68><EFBFBD>X<EFBFBD><58><EFBFBD>L<EFBFBD><4C>
|
||
|
||
Arguments: fileId - <20>t<EFBFBD>@<40>C<EFBFBD><43>ID
|
||
address - <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>A<EFBFBD>h<EFBFBD><68><EFBFBD>X
|
||
|
||
Returns: None.
|
||
*---------------------------------------------------------------------------*/
|
||
void NNS_SndArcSetFileAddress( u32 fileId, void* address )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->fat );
|
||
NNS_MAX_ASSERT( fileId, arc->fat->count - 1 );
|
||
|
||
arc->fat->files[ fileId ].mem = address;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetLoadBlockSize
|
||
|
||
Description: <20><><EFBFBD>[<5B>h<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD><59><EFBFBD>擾
|
||
|
||
Arguments: None
|
||
|
||
Returns: <20><><EFBFBD>[<5B>h<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>T<EFBFBD>C<EFBFBD>Y
|
||
*---------------------------------------------------------------------------*/
|
||
s32 NNS_SndArcGetLoadBlockSize()
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
return arc->loadBlockSize;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcSetLoadBlockSize
|
||
|
||
Description: <20><><EFBFBD>[<5B>h<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD><59><EFBFBD>ݒ<EFBFBD>
|
||
|
||
Arguments: loadBlockSize - <20><><EFBFBD>[<5B>h<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>T<EFBFBD>C<EFBFBD>Y
|
||
|
||
Returns: None.
|
||
*---------------------------------------------------------------------------*/
|
||
void NNS_SndArcSetLoadBlockSize( s32 loadBlockSize )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
arc->loadBlockSize = loadBlockSize;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetSeqSymbol
|
||
|
||
Description: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>̎擾
|
||
|
||
Arguments: seqNo - <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>ԍ<EFBFBD>
|
||
|
||
Returns: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́A<CD81><EFBFBD><F395B68E><EFBFBD>
|
||
*---------------------------------------------------------------------------*/
|
||
const char* NNS_SndArcGetSeqSymbol( int seqNo )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcOffsetTable* table;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
|
||
if ( arc->symbol == NULL ) return & null_string;
|
||
|
||
table = (const NNSSndArcOffsetTable*)GetPtrConst( arc->symbol, arc->symbol->seqOffset );
|
||
if ( table == NULL ) return & null_string;
|
||
|
||
return GetSymbol( table, seqNo, arc->symbol );
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetSeqArcSymbol
|
||
|
||
Description: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>̎擾
|
||
|
||
Arguments: seqArcNo - <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>ԍ<EFBFBD>
|
||
|
||
Returns: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́A<CD81><EFBFBD><F395B68E><EFBFBD>
|
||
*---------------------------------------------------------------------------*/
|
||
const char* NNS_SndArcGetSeqArcSymbol( int seqArcNo )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcSeqArcOffsetTable* table;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
|
||
if ( arc->symbol == NULL ) return & null_string;
|
||
|
||
table = (const NNSSndArcSeqArcOffsetTable*)GetPtrConst( arc->symbol, arc->symbol->seqArcOffset );
|
||
if ( table == NULL ) return & null_string;
|
||
|
||
if ( seqArcNo < 0 ) return & null_string;
|
||
if ( seqArcNo >= table->count ) return & null_string;
|
||
|
||
if ( table->offset[ seqArcNo ].symbol == 0 ) return & null_string;
|
||
|
||
return (const char*)GetPtrConst( arc->symbol, table->offset[ seqArcNo ].symbol );
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetSeqArcIdxSymbol
|
||
|
||
Description: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>C<EFBFBD><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>̎擾
|
||
|
||
Arguments: seqArcNo - <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>ԍ<EFBFBD>
|
||
index - <20>C<EFBFBD><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD>ԍ<EFBFBD>
|
||
|
||
Returns: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>C<EFBFBD><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́A<CD81><EFBFBD><F395B68E><EFBFBD>
|
||
*---------------------------------------------------------------------------*/
|
||
const char* NNS_SndArcGetSeqArcIdxSymbol( int seqArcNo, int index )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcSeqArcOffsetTable* table;
|
||
const NNSSndArcOffsetTable* symbolTable;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
|
||
if ( arc->symbol == NULL ) return & null_string;
|
||
|
||
table = (const NNSSndArcSeqArcOffsetTable*)GetPtrConst( arc->symbol, arc->symbol->seqArcOffset );
|
||
if ( table == NULL ) return & null_string;
|
||
|
||
if ( seqArcNo < 0 ) return & null_string;
|
||
if ( seqArcNo >= table->count ) return & null_string;
|
||
|
||
symbolTable = (const NNSSndArcOffsetTable*)GetPtrConst( arc->symbol, table->offset[ seqArcNo ].table );
|
||
if ( symbolTable == NULL ) return & null_string;
|
||
|
||
return GetSymbol( symbolTable, index, arc->symbol );
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetBankSymbol
|
||
|
||
Description: <20>o<EFBFBD><6F><EFBFBD>N<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>̎擾
|
||
|
||
Arguments: bankNo - <20>o<EFBFBD><6F><EFBFBD>N<EFBFBD>ԍ<EFBFBD>
|
||
|
||
Returns: <20>o<EFBFBD><6F><EFBFBD>N<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́A<CD81><EFBFBD><F395B68E><EFBFBD>
|
||
*---------------------------------------------------------------------------*/
|
||
const char* NNS_SndArcGetBankSymbol( int bankNo )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcOffsetTable* table;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
|
||
if ( arc->symbol == NULL ) return & null_string;
|
||
|
||
table = (const NNSSndArcOffsetTable*)GetPtrConst( arc->symbol, arc->symbol->bankOffset );
|
||
if ( table == NULL ) return & null_string;
|
||
|
||
return GetSymbol( table, bankNo, arc->symbol );
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetWaveArcSymbol
|
||
|
||
Description: <20>g<EFBFBD>`<60>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>̎擾
|
||
|
||
Arguments: waveArcNo - <20>g<EFBFBD>`<60>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>ԍ<EFBFBD>
|
||
|
||
Returns: <20>g<EFBFBD>`<60>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́A<CD81><EFBFBD><F395B68E><EFBFBD>
|
||
*---------------------------------------------------------------------------*/
|
||
const char* NNS_SndArcGetWaveArcSymbol( int waveArcNo )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcOffsetTable* table;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
|
||
if ( arc->symbol == NULL ) return & null_string;
|
||
|
||
table = (const NNSSndArcOffsetTable*)GetPtrConst( arc->symbol, arc->symbol->waveArcOffset );
|
||
if ( table == NULL ) return & null_string;
|
||
|
||
return GetSymbol( table, waveArcNo, arc->symbol );
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetStrmSymbol
|
||
|
||
Description: <20>X<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>̎擾
|
||
|
||
Arguments: strmNo - <20>X<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD>ԍ<EFBFBD>
|
||
|
||
Returns: <20>X<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́A<CD81><EFBFBD><F395B68E><EFBFBD>
|
||
*---------------------------------------------------------------------------*/
|
||
const char* NNS_SndArcGetStrmSymbol( int strmNo )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcOffsetTable* table;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
|
||
if ( arc->symbol == NULL ) return & null_string;
|
||
|
||
table = (const NNSSndArcOffsetTable*)GetPtrConst( arc->symbol, arc->symbol->strmOffset );
|
||
if ( table == NULL ) return & null_string;
|
||
|
||
return GetSymbol( table, strmNo, arc->symbol );
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: NNS_SndArcGetGroupSymbol
|
||
|
||
Description: <20>O<EFBFBD><4F><EFBFBD>[<5B>v<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>̎擾
|
||
|
||
Arguments: groupNo - <20>O<EFBFBD><4F><EFBFBD>[<5B>v<EFBFBD>ԍ<EFBFBD>
|
||
|
||
Returns: <20>g<EFBFBD>`<60>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́A<CD81><EFBFBD><F395B68E><EFBFBD>
|
||
*---------------------------------------------------------------------------*/
|
||
const char* NNS_SndArcGetGroupSymbol( int groupNo )
|
||
{
|
||
NNSSndArc* arc = sCurrent;
|
||
const NNSSndArcOffsetTable* table;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
|
||
if ( arc->symbol == NULL ) return & null_string;
|
||
|
||
table = (const NNSSndArcOffsetTable*)GetPtrConst( arc->symbol, arc->symbol->groupOffset );
|
||
if ( table == NULL ) return & null_string;
|
||
|
||
return GetSymbol( table, groupNo, arc->symbol );
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
static functions
|
||
******************************************************************************/
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: GetSymbol
|
||
|
||
Description: <20>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>I<EFBFBD>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD>e<EFBFBD>[<5B>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD>擾<EFBFBD><E693BE><EFBFBD>܂<EFBFBD>
|
||
|
||
Arguments: table - <20>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>I<EFBFBD>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD>e<EFBFBD>[<5B>u<EFBFBD><75><EFBFBD>̃|<7C>C<EFBFBD><43><EFBFBD>^
|
||
index - <20>C<EFBFBD><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD>ԍ<EFBFBD>
|
||
base - <20>I<EFBFBD>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD>x<EFBFBD>[<5B>X<EFBFBD>A<EFBFBD>h<EFBFBD><68><EFBFBD>X
|
||
|
||
Returns: <20>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>ꍇ<EFBFBD>́A<CD81><EFBFBD><F395B68E><EFBFBD>
|
||
*---------------------------------------------------------------------------*/
|
||
static const char* GetSymbol( const NNSSndArcOffsetTable* table, int index, const void* base )
|
||
{
|
||
if ( index < 0 ) return & null_string;
|
||
if ( index >= table->count ) return & null_string;
|
||
|
||
if ( table->offset[ index ] == 0 ) return & null_string;
|
||
|
||
return (const char*)GetPtrConst( base, table->offset[ index ] );
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: InfoDisposeCallback
|
||
|
||
Description: <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>[<5B>u<EFBFBD><75><EFBFBD>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD>ɌĂ<C482><CE82><EFBFBD><EFBFBD>R<EFBFBD>[<5B><><EFBFBD>o<EFBFBD>b<EFBFBD>N<EFBFBD><EFBFBD>
|
||
|
||
Arguments: mem - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>̐擪<CC90>A<EFBFBD>h<EFBFBD><68><EFBFBD>X<EFBFBD>i<EFBFBD><69><EFBFBD>g<EFBFBD>p<EFBFBD>j
|
||
size - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>̃T<CC83>C<EFBFBD>Y<EFBFBD>i<EFBFBD><69><EFBFBD>g<EFBFBD>p<EFBFBD>j
|
||
data1 - <20><><EFBFBD>[<5B>U<EFBFBD>[<5B>f<EFBFBD>[<5B>^<5E>i<EFBFBD>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>̃|<7C>C<EFBFBD><43><EFBFBD>^<5E>j
|
||
data2 - <20><><EFBFBD>[<5B>U<EFBFBD>[<5B>f<EFBFBD>[<5B>^<5E>i<EFBFBD><69><EFBFBD>g<EFBFBD>p<EFBFBD>j
|
||
|
||
Returns: None.
|
||
*---------------------------------------------------------------------------*/
|
||
static void InfoDisposeCallback( void* mem, u32 size, u32 data1, u32 data2 )
|
||
{
|
||
NNSSndArc* arc = (NNSSndArc*)data1;
|
||
|
||
(void)mem;
|
||
(void)size;
|
||
(void)data2;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
|
||
arc->info = NULL;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: FatDisposeCallback
|
||
|
||
Description: <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>A<EFBFBD><41><EFBFBD>P<EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>[<5B>u<EFBFBD><75><EFBFBD>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD>ɌĂ<C482><CE82><EFBFBD><EFBFBD>R<EFBFBD>[<5B><><EFBFBD>o<EFBFBD>b<EFBFBD>N<EFBFBD><EFBFBD>
|
||
|
||
Arguments: mem - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>̐擪<CC90>A<EFBFBD>h<EFBFBD><68><EFBFBD>X<EFBFBD>i<EFBFBD><69><EFBFBD>g<EFBFBD>p<EFBFBD>j
|
||
size - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>̃T<CC83>C<EFBFBD>Y<EFBFBD>i<EFBFBD><69><EFBFBD>g<EFBFBD>p<EFBFBD>j
|
||
data1 - <20><><EFBFBD>[<5B>U<EFBFBD>[<5B>f<EFBFBD>[<5B>^<5E>i<EFBFBD>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>̃|<7C>C<EFBFBD><43><EFBFBD>^<5E>j
|
||
data2 - <20><><EFBFBD>[<5B>U<EFBFBD>[<5B>f<EFBFBD>[<5B>^<5E>i<EFBFBD><69><EFBFBD>g<EFBFBD>p<EFBFBD>j
|
||
|
||
Returns: None.
|
||
*---------------------------------------------------------------------------*/
|
||
static void FatDisposeCallback( void* mem, u32 size, u32 data1, u32 data2 )
|
||
{
|
||
NNSSndArc* arc = (NNSSndArc*)data1;
|
||
int i;
|
||
|
||
(void)mem;
|
||
(void)size;
|
||
(void)data2;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
NNS_NULL_ASSERT( arc->fat );
|
||
|
||
for( i = 0; i < arc->fat->count ; i++ ) {
|
||
#ifndef NNS_FROM_TOOL
|
||
NNS_ASSERTMSG(
|
||
arc->fat->files[ i ].mem == NULL,
|
||
"Cannot clear sndarc FAT block, because some file is on memory."
|
||
);
|
||
#endif // NNS_FROM_TOOL
|
||
}
|
||
|
||
arc->fat = NULL;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: SymbolDisposeCallback
|
||
|
||
Description: <20>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>f<EFBFBD>[<5B>^<5E>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD>ɌĂ<C482><CE82><EFBFBD><EFBFBD>R<EFBFBD>[<5B><><EFBFBD>o<EFBFBD>b<EFBFBD>N<EFBFBD><EFBFBD>
|
||
|
||
Arguments: mem - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>̐擪<CC90>A<EFBFBD>h<EFBFBD><68><EFBFBD>X<EFBFBD>i<EFBFBD><69><EFBFBD>g<EFBFBD>p<EFBFBD>j
|
||
size - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>̃T<CC83>C<EFBFBD>Y<EFBFBD>i<EFBFBD><69><EFBFBD>g<EFBFBD>p<EFBFBD>j
|
||
data1 - <20><><EFBFBD>[<5B>U<EFBFBD>[<5B>f<EFBFBD>[<5B>^<5E>i<EFBFBD>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>̃|<7C>C<EFBFBD><43><EFBFBD>^<5E>j
|
||
data2 - <20><><EFBFBD>[<5B>U<EFBFBD>[<5B>f<EFBFBD>[<5B>^<5E>i<EFBFBD><69><EFBFBD>g<EFBFBD>p<EFBFBD>j
|
||
|
||
Returns: None.
|
||
*---------------------------------------------------------------------------*/
|
||
static void SymbolDisposeCallback( void* mem, u32 size, u32 data1, u32 data2 )
|
||
{
|
||
NNSSndArc* arc = (NNSSndArc*)data1;
|
||
|
||
(void)mem;
|
||
(void)size;
|
||
(void)data2;
|
||
|
||
NNS_NULL_ASSERT( arc );
|
||
|
||
arc->symbol = NULL;
|
||
}
|
||
|
||
/*====== End of sndarc.c ======*/
|
||
|