1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2024-11-15 14:09:35 +00:00
oot/tools/audio/aifc.h
Tharo d3b9ba17da
[Audio 4/?] Build Samplebanks, match Audiotable (#2032)
* [Audio 4/?] Build Samplebanks, match Audiotable

* Fix some makefile formatting

* Add missing scope in MARK chunk handling

* Add comment to generate asm file when buffer bug data is emitted, remove duplicate CC4 definition

* Adjust comment

* SBCFLAGS

* Remove unnecessary comments on notes_lut

* Split build directories creation command into several to avoid it becoming too long

* objcopy -j -> --only-section

* Fix mkdir warning when extracted/VERSION/assets doesn't exist
2024-08-14 20:54:31 -04:00

75 lines
1.6 KiB
C

/**
* SPDX-FileCopyrightText: Copyright (C) 2024 ZeldaRET
* SPDX-License-Identifier: MPL-2.0
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#ifndef AIFC_H_
#define AIFC_H_
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
typedef struct {
int32_t order;
int32_t npredictors;
} ALADPCMbookhead;
typedef int16_t ALADPCMbookstate[];
typedef struct {
uint32_t start;
uint32_t end;
uint32_t count;
int16_t state[16];
} ALADPCMloop;
typedef struct {
int16_t id;
uint32_t pos;
char *label;
} aifc_marker;
typedef struct {
const char *path; // for debugging
// COMM
uint32_t num_frames;
int16_t num_channels;
int16_t sample_size;
double sample_rate;
uint32_t compression_type;
char *compression_name;
// SSND
long ssnd_offset;
size_t ssnd_size;
// INST
bool has_inst;
int8_t basenote;
int8_t detune;
// MARK
size_t num_markers;
aifc_marker (*markers)[];
// APPL::stoc::VADPCMCODES
bool has_book;
ALADPCMbookhead book;
ALADPCMbookstate *book_state;
// APPL::stoc::VADPCMLOOPS
bool has_loop;
ALADPCMloop loop;
} aifc_data;
#define BUG_BUF_SIZE 0x10000
void
aifc_read(aifc_data *af, const char *path, uint8_t *match_buf, size_t *match_buf_pos);
void
aifc_dispose(aifc_data *af);
// Subtract 21, if negative wrap into [0, 128)
#define NOTE_MIDI_TO_Z64(b) (((b)-21 < 0) ? ((b)-21 + 128) : ((b)-21))
#endif