//
// Programmer: Craig Stuart Sapp <craig@ccrma.stanford.edu>
// Creation Date: Wed Feb 13 13:55:33 PST 2002
// Last Modified: Sun Aug 29 03:33:21 PDT 2004 (updated for compiling in GCC3)
// Filename: ...soundfile/examples/printbits.cpp
// Syntax: C++
// For: Sachiko Deguchi <deguchi@ccrma.stanford.edu>
//
// Description: Display sound amplitude samples in binary form.
//
#include "soundfile.h"
#include <stdlib.h>
#ifndef OLDCPP
#include <iostream>
using namespace std;
#else
#include <iostream.h>
#endif
// function declarations:
void printBinary(int sample, int digits);
// interface variables:
int spaceQ = 1; // for use with the -S option
///////////////////////////////////////////////////////////////////////////
int main(int argc, char** argv) {
Options options;
options.define("b|bits=i:0", "number of bits to display for each sample");
options.define("n|samples=i:-1", "number of samples to display");
options.define("s|start=i:0", "starting samples to display");
options.define("S|no-space=b", "don't put spaces into data");
options.process(argc, argv);
if (options.getArgCount() == 0) {
cout << "Usage: " << options.getCommand()
<< " filename"
<< endl;
exit(1);
}
spaceQ = !options.getBoolean("no-space");
int bitdisplay = options.getInteger("bits");
int start = options.getInteger("start");
int sampledisplay = options.getInteger("samples");
SoundFileRead soundfile(options.getArg(1));
if (bitdisplay <= 0) {
bitdisplay = soundfile.getBitsPerSample();
}
if (bitdisplay > 24) {
cout << "Error: cannot handle bit sizes greater than 24 bits." << endl;
exit(1);
}
int i, channel;
cout << "; Sample count = " << soundfile.getSamples() << "\n";
cout << "; Channels = " << soundfile.getChannels() << "\n";
cout << "; Native Bits = " << soundfile.getBitsPerSample() << "\n";
if (start < 0) {
start = 0;
} else if (start >= soundfile.getSamples()) {
start = 0;
}
soundfile.gotoSample(start);
if (sampledisplay <= 0) {
sampledisplay = soundfile.getSamples();
}
sampledisplay = sampledisplay - start;
for (i=start; i<start+sampledisplay; i++) {
cout << i << ":\t";
for (channel=0; channel < soundfile.getChannels(); channel++) {
printBinary(soundfile.getCurrentSample24Bit(channel), bitdisplay);
cout << "\t";
}
cout << "\n";
soundfile.incrementSample();
}
return 0;
}
///////////////////////////////////////////////////////////////////////////
//////////////////////////////
//
// printBinary -- print sound sample in binary form.
//
void printBinary(int sample, int digits) {
int i;
int value;
for (i=0; i<digits; i++) {
value = sample >> (24 - 1 - i);
value = value & 0x01;
if (value) {
cout << '1';
} else {
cout << '0';
}
if (spaceQ) {
if (((digits - 1) - i) % 4 == 0) {
cout << ' ';
}
}
}
}
// md5sum: f89d04d5146cc848bd7bd99a82c478ae printbits.cpp [20050403]