X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fblackwave.cpp;h=1a89a0e2f6ba5ec350a0670c88da4124e5ec2076;hb=79912d9558b67fb75dfad8bca29d2db1fa58a769;hp=b704b47d515dbebf4ceba0771664438cb9ce4c7e;hpb=c589ee9d47d9f00aa4be32c5832a44ce466f014d;p=asdcplib.git diff --git a/src/blackwave.cpp b/src/blackwave.cpp index b704b47..1a89a0e 100644 --- a/src/blackwave.cpp +++ b/src/blackwave.cpp @@ -1,5 +1,5 @@ /* -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 @@ -38,7 +38,7 @@ using namespace ASDCP; // // 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. @@ -56,12 +56,12 @@ banner(FILE* stream = stderr) { 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); } // @@ -73,14 +73,15 @@ USAGE: %s [-v|-h[-d]] \n\ \n\ -V - Show version\n\ -h - Show help\n\ - -d - Number of 2k-sample frames to process, default 1440\n\ + -d - 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); } // @@ -94,16 +95,17 @@ public: 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] ) { @@ -113,7 +115,11 @@ public: 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: @@ -152,13 +158,13 @@ make_black_wav_file(CommandOptions& Options) 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 = 18; - ADesc.AvgBps = 86400; + ADesc.BlockAlign = 3; + ADesc.AvgBps = ADesc.BlockAlign * ADesc.AudioSamplingRate.Quotient(); ADesc.LinkedTrackID = 1; ADesc.ContainerDuration = Options.duration; @@ -167,10 +173,10 @@ make_black_wav_file(CommandOptions& Options) 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); } @@ -181,8 +187,8 @@ make_black_wav_file(CommandOptions& Options) if ( ASDCP_SUCCESS(result) ) { - Wav::SimpleWaveHeader WavHeader(ADesc); - result = WavHeader.WriteToFile(OutFile); + RF64::SimpleRF64Header WavHeader(ADesc); + result = WavHeader.WriteToFile(OutFile); } if ( ASDCP_SUCCESS(result) )