/*
-Copyright (c) 2005, John Hurst
+Copyright (c) 2005-2012, John Hurst
All rights reserved.
Redistribution and use in source and binary forms, with or without
//
// command line option parser class
-static const char* PACKAGE = "wavsplit"; // program name for messages
+static const char* PROGRAM_NAME = "blackwave"; // program name for messages
// Macros used to test command option data state.
{
fprintf(stream, "\n\
%s (asdcplib %s)\n\n\
-Copyright (c) 2005-2006 John Hurst\n\n\
-wavesplit is part of asdcplib.\n\
+Copyright (c) 2005-2012 John Hurst\n\n\
+%s is part of asdcplib.\n\
asdcplib may be copied only under the terms of the license found at\n\
the top of every file in the asdcplib distribution kit.\n\n\
Specify the -h (help) option for further information about %s\n\n",
- PACKAGE, ASDCP::Version(), PACKAGE);
+ PROGRAM_NAME, ASDCP::Version(), PROGRAM_NAME, PROGRAM_NAME);
}
//
\n\
-V - Show version\n\
-h - Show help\n\
- -d <duration> - Number of 2k-sample frames to process, default 1440\n\
+ -d <duration> - Number of edit units to process, default 1440\n\
+ -9 - Make a 96 kHz file (default 48 kHz)\n\
\n\
Other Options:\n\
-v - Verbose, show extra detail during run\n\
\n\
NOTES: o There is no option grouping, all options must be distinct arguments.\n\
o All option arguments must be separated from the option by whitespace.\n\
-\n", PACKAGE);
+\n", PROGRAM_NAME);
}
//
bool verbose_flag; // true if the verbose option was selected
bool version_flag; // true if the version display option was selected
bool help_flag; // true if the help display option was selected
+ bool s96_flag; // true if the samples should be at 96 kHz
ui32_t duration; // number of frames to be processed
const char* filename; // filename prefix for files written by the extract mode
CommandOptions(int argc, const char** argv) :
- error_flag(true), verbose_flag(false), version_flag(false), help_flag(false),
+ error_flag(true), verbose_flag(false), version_flag(false), help_flag(false), s96_flag(false),
duration(1440), filename(0)
{
for ( int i = 1; i < argc; i++ )
{
- if ( argv[i][0] == '-' && isalpha(argv[i][1]) && argv[i][2] == 0 )
+ if ( argv[i][0] == '-' && ( isalpha(argv[i][1]) || isdigit(argv[i][1]) ) && argv[i][2] == 0 )
{
switch ( argv[i][1] )
{
case 'd':
TEST_EXTRA_ARG(i, 'd');
- duration = atoi(argv[i]); // TODO: test for negative value, should use strtol()
+ duration = Kumu::xabs(strtol(argv[i], 0, 10));
+ break;
+
+ case '9':
+ s96_flag = true;
break;
default:
PCM::FrameBuffer FrameBuffer;
PCM::AudioDescriptor ADesc;
- ADesc.SampleRate = Rational(24,1);
- ADesc.AudioSamplingRate = ASDCP::SampleRate_48k;
+ ADesc.EditRate = Rational(24,1);
+ ADesc.AudioSamplingRate = Options.s96_flag ? ASDCP::SampleRate_96k : ASDCP::SampleRate_48k;
ADesc.Locked = 0;
ADesc.ChannelCount = 1;
ADesc.QuantizationBits = 24;
ADesc.BlockAlign = 3;
- ADesc.AvgBps = 14400;
+ ADesc.AvgBps = ADesc.BlockAlign * ADesc.AudioSamplingRate.Quotient();
ADesc.LinkedTrackID = 1;
ADesc.ContainerDuration = Options.duration;
memset(FrameBuffer.Data(), 0, FrameBuffer.Capacity());
FrameBuffer.Size(FrameBuffer.Capacity());
- if ( 1 ) // Options.verbose_flag )
+ if ( Options.verbose_flag )
{
- fprintf(stderr, "48Khz PCM Audio, %s fps (%u spf)\n", "24",
- PCM::CalcSamplesPerFrame(ADesc));
+ fprintf(stderr, "%s kHz PCM Audio, 24 fps (%u spf)\n",
+ (Options.s96_flag?"96":"48"), PCM::CalcSamplesPerFrame(ADesc));
fputs("AudioDescriptor:\n", stderr);
PCM::AudioDescriptorDump(ADesc);
}
if ( ASDCP_SUCCESS(result) )
{
- Wav::SimpleWaveHeader WavHeader(ADesc);
- result = WavHeader.WriteToFile(OutFile);
+ RF64::SimpleRF64Header WavHeader(ADesc);
+ result = WavHeader.WriteToFile(OutFile);
}
if ( ASDCP_SUCCESS(result) )