mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-02-13 11:43:49 +00:00
Initial commit
added libraries: opus flac libsndfile updated: libvorbis libogg openal - Everything works as expected for now. Bare in mind libsndfile needed the check for whether or not it could find the xiph libraries removed in order for this to work.
This commit is contained in:
parent
05a083ca6f
commit
a745fc3757
1954 changed files with 431332 additions and 21037 deletions
19
Engine/lib/flac/examples/cpp/encode/Makefile.am
Normal file
19
Engine/lib/flac/examples/cpp/encode/Makefile.am
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# FLAC - Free Lossless Audio Codec
|
||||
# Copyright (C) 2001-2009 Josh Coalson
|
||||
# Copyright (C) 2011-2023 Xiph.Org Foundation
|
||||
#
|
||||
# This file is part the FLAC project. FLAC is comprised of several
|
||||
# components distributed under different licenses. The codec libraries
|
||||
# are distributed under Xiph.Org's BSD-like license (see the file
|
||||
# COPYING.Xiph in this distribution). All other programs, libraries, and
|
||||
# plugins are distributed under the GPL (see COPYING.GPL). The documentation
|
||||
# is distributed under the Gnu FDL (see COPYING.FDL). Each file in the
|
||||
# FLAC distribution contains at the top the terms under which it may be
|
||||
# distributed.
|
||||
#
|
||||
# Since this particular file is relevant to all components of FLAC,
|
||||
# it may be distributed under the Xiph.Org license, which is the least
|
||||
# restrictive of those mentioned above. See the file COPYING.Xiph in this
|
||||
# distribution.
|
||||
|
||||
SUBDIRS = file
|
||||
2
Engine/lib/flac/examples/cpp/encode/file/CMakeLists.txt
Normal file
2
Engine/lib/flac/examples/cpp/encode/file/CMakeLists.txt
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
add_executable(encode_file_cxx main.cpp)
|
||||
target_link_libraries(encode_file_cxx FLAC++)
|
||||
32
Engine/lib/flac/examples/cpp/encode/file/Makefile.am
Normal file
32
Engine/lib/flac/examples/cpp/encode/file/Makefile.am
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
# example_cpp_encode_file - Simple FLAC file encoder using libFLAC
|
||||
# Copyright (C) 2007-2009 Josh Coalson
|
||||
# Copyright (C) 2011-2023 Xiph.Org Foundation
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
EXTRA_DIST = \
|
||||
CMakeLists.txt
|
||||
|
||||
AM_CPPFLAGS = -I$(top_builddir) -I$(srcdir)/include -I$(top_srcdir)/include
|
||||
noinst_PROGRAMS = example_cpp_encode_file
|
||||
example_cpp_encode_file_LDADD = \
|
||||
$(top_builddir)/src/libFLAC++/libFLAC++.la \
|
||||
$(top_builddir)/src/libFLAC/libFLAC.la \
|
||||
@OGG_LIBS@ \
|
||||
-lm
|
||||
|
||||
example_cpp_encode_file_SOURCES = main.cpp
|
||||
|
||||
CLEANFILES = example_cpp_encode_file.exe
|
||||
178
Engine/lib/flac/examples/cpp/encode/file/main.cpp
Normal file
178
Engine/lib/flac/examples/cpp/encode/file/main.cpp
Normal file
|
|
@ -0,0 +1,178 @@
|
|||
/* example_cpp_encode_file - Simple FLAC file encoder using libFLAC
|
||||
* Copyright (C) 2007-2009 Josh Coalson
|
||||
* Copyright (C) 2011-2023 Xiph.Org Foundation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This example shows how to use libFLAC++ to encode a WAVE file to a FLAC
|
||||
* file. It only supports 16-bit stereo files in canonical WAVE format.
|
||||
*
|
||||
* Complete API documentation can be found at:
|
||||
* http://xiph.org/flac/api/
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "FLAC++/metadata.h"
|
||||
#include "FLAC++/encoder.h"
|
||||
#include "share/compat.h"
|
||||
|
||||
#include <cstring>
|
||||
|
||||
class OurEncoder: public FLAC::Encoder::File {
|
||||
public:
|
||||
OurEncoder(): FLAC::Encoder::File() { }
|
||||
protected:
|
||||
virtual void progress_callback(FLAC__uint64 bytes_written, FLAC__uint64 samples_written, uint32_t frames_written, uint32_t total_frames_estimate);
|
||||
};
|
||||
|
||||
#define READSIZE 1024
|
||||
|
||||
static uint32_t total_samples = 0; /* can use a 32-bit number due to WAVE size limitations */
|
||||
static FLAC__byte buffer[READSIZE/*samples*/ * 2/*bytes_per_sample*/ * 2/*channels*/]; /* we read the WAVE data into here */
|
||||
static FLAC__int32 pcm[READSIZE/*samples*/ * 2/*channels*/];
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
bool ok = true;
|
||||
OurEncoder encoder;
|
||||
FLAC__StreamEncoderInitStatus init_status;
|
||||
FLAC__StreamMetadata *metadata[2];
|
||||
FLAC__StreamMetadata_VorbisComment_Entry entry;
|
||||
FILE *fin;
|
||||
uint32_t sample_rate = 0;
|
||||
uint32_t channels = 0;
|
||||
uint32_t bps = 0;
|
||||
|
||||
if(argc != 3) {
|
||||
fprintf(stderr, "usage: %s infile.wav outfile.flac\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if((fin = fopen(argv[1], "rb")) == NULL) {
|
||||
fprintf(stderr, "ERROR: opening %s for output\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* read wav header and validate it */
|
||||
if(
|
||||
fread(buffer, 1, 44, fin) != 44 ||
|
||||
memcmp(buffer, "RIFF", 4) ||
|
||||
memcmp(buffer+8, "WAVEfmt \020\000\000\000\001\000\002\000", 16) ||
|
||||
memcmp(buffer+32, "\004\000\020\000data", 8)
|
||||
) {
|
||||
fprintf(stderr, "ERROR: invalid/unsupported WAVE file, only 16bps stereo WAVE in canonical form allowed\n");
|
||||
fclose(fin);
|
||||
return 1;
|
||||
}
|
||||
sample_rate = ((((((uint32_t)buffer[27] << 8) | buffer[26]) << 8) | buffer[25]) << 8) | buffer[24];
|
||||
channels = 2;
|
||||
bps = 16;
|
||||
total_samples = (((((((uint32_t)buffer[43] << 8) | buffer[42]) << 8) | buffer[41]) << 8) | buffer[40]) / 4;
|
||||
|
||||
/* check the encoder */
|
||||
if(!encoder) {
|
||||
fprintf(stderr, "ERROR: allocating encoder\n");
|
||||
fclose(fin);
|
||||
return 1;
|
||||
}
|
||||
|
||||
ok &= encoder.set_verify(true);
|
||||
ok &= encoder.set_compression_level(5);
|
||||
ok &= encoder.set_channels(channels);
|
||||
ok &= encoder.set_bits_per_sample(bps);
|
||||
ok &= encoder.set_sample_rate(sample_rate);
|
||||
ok &= encoder.set_total_samples_estimate(total_samples);
|
||||
|
||||
/* now add some metadata; we'll add some tags and a padding block */
|
||||
if(ok) {
|
||||
if(
|
||||
(metadata[0] = FLAC__metadata_object_new(FLAC__METADATA_TYPE_VORBIS_COMMENT)) == NULL ||
|
||||
(metadata[1] = FLAC__metadata_object_new(FLAC__METADATA_TYPE_PADDING)) == NULL ||
|
||||
/* there are many tag (vorbiscomment) functions but these are convenient for this particular use: */
|
||||
!FLAC__metadata_object_vorbiscomment_entry_from_name_value_pair(&entry, "ARTIST", "Some Artist") ||
|
||||
!FLAC__metadata_object_vorbiscomment_append_comment(metadata[0], entry, /*copy=*/false) || /* copy=false: let metadata object take control of entry's allocated string */
|
||||
!FLAC__metadata_object_vorbiscomment_entry_from_name_value_pair(&entry, "YEAR", "1984") ||
|
||||
!FLAC__metadata_object_vorbiscomment_append_comment(metadata[0], entry, /*copy=*/false)
|
||||
) {
|
||||
fprintf(stderr, "ERROR: out of memory or tag error\n");
|
||||
ok = false;
|
||||
} else {
|
||||
|
||||
metadata[1]->length = 1234; /* set the padding length */
|
||||
|
||||
ok = encoder.set_metadata(metadata, 2);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* initialize encoder */
|
||||
if(ok) {
|
||||
init_status = encoder.init(argv[2]);
|
||||
if(init_status != FLAC__STREAM_ENCODER_INIT_STATUS_OK) {
|
||||
fprintf(stderr, "ERROR: initializing encoder: %s\n", FLAC__StreamEncoderInitStatusString[init_status]);
|
||||
ok = false;
|
||||
}
|
||||
}
|
||||
|
||||
/* read blocks of samples from WAVE file and feed to encoder */
|
||||
if(ok) {
|
||||
size_t left = (size_t)total_samples;
|
||||
while(ok && left) {
|
||||
size_t need = (left>READSIZE? (size_t)READSIZE : (size_t)left);
|
||||
if(fread(buffer, channels*(bps/8), need, fin) != need) {
|
||||
fprintf(stderr, "ERROR: reading from WAVE file\n");
|
||||
ok = false;
|
||||
}
|
||||
else {
|
||||
/* convert the packed little-endian 16-bit PCM samples from WAVE into an interleaved FLAC__int32 buffer for libFLAC */
|
||||
size_t i;
|
||||
for(i = 0; i < need*channels; i++) {
|
||||
/* inefficient but simple and works on big- or little-endian machines */
|
||||
pcm[i] = (FLAC__int32)(((FLAC__int16)(FLAC__int8)buffer[2*i+1] << 8) | (FLAC__int16)buffer[2*i]);
|
||||
}
|
||||
/* feed samples to encoder */
|
||||
ok = encoder.process_interleaved(pcm, need);
|
||||
}
|
||||
left -= need;
|
||||
}
|
||||
}
|
||||
|
||||
ok &= encoder.finish();
|
||||
|
||||
fprintf(stderr, "encoding: %s\n", ok? "succeeded" : "FAILED");
|
||||
fprintf(stderr, " state: %s\n", encoder.get_state().resolved_as_cstring(encoder));
|
||||
|
||||
/* now that encoding is finished, the metadata can be freed */
|
||||
FLAC__metadata_object_delete(metadata[0]);
|
||||
FLAC__metadata_object_delete(metadata[1]);
|
||||
|
||||
fclose(fin);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void OurEncoder::progress_callback(FLAC__uint64 bytes_written, FLAC__uint64 samples_written, uint32_t frames_written, uint32_t total_frames_estimate)
|
||||
{
|
||||
fprintf(stderr, "wrote %" PRIu64 " bytes, %" PRIu64 "/%u samples, %u/%u frames\n", bytes_written, samples_written, total_samples, frames_written, total_frames_estimate);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue