This file is indexed.

/usr/share/doc/gramofile/TODO is in gramofile 1.6-9.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
Things that could/should be done (random order) - but not by me: I've got
other things to do at the moment :(

 - Find and correct all bugs
 - Better error handling (malloc, file ops)
 - Support (user interface) for cdrecord, cdda2wav/cdparanoia
 - More / better filters  - pops/ticks/scratches
                          - hiss, broadband noise
                          - fade in/out at track start/end (see below)
                          - volume normalizing to put tracks from
                             various sources on one CD
                          - dynamic-range decompression (Keith Refson's idea)
 - Possibility for application of frequency domain filters (probably
    difficult to do in streaming processing)
 - Remember filter/track location settings within a single invocation
    (Also see patch from James Tappin on the webpage)
 - Make .wav reading/writing 64-bit clean (i.e. don't depend on sizeof's)
    (temporary workaround: change every `long' into `int', see README)
 - Compute average/maximal signal volume/power for info-screen after
    recording (sum of 1G shorts in a float) (see bplaysrc/shmbuf.c,
    shmrec())
 - Show number of nearly-clipped samples also _during_ recording, for
    easier adjustments of sound source (idea of Juergen Lock)
 - Copying, moving, deleting files; creating, deleting dirs from
    within user interface (?)
 - Automatic detection which of xmixer, xmix, aumix, ???mix to use
    (e.g. $DISPLAY ? or $MIXER ?)
 - Auto screensize (not always 80x24)
 - X user interface
 - Manpage
 - Support for non-CD-quality and non-.wav sound files;
    (for mono files, also see patch from James Tappin on the webpage)
 - Command line options (or via a options file)
 - Porting to other *UXes, Windows? First only Signproc/Tracksplit
    (IRIX and possibly others should work already. If you try, please mail
    me your experiences)
 - For webpage: example .wavs, example graph files (track location),
    screenshots of (un)processed .wavs


Fade in/out:

Paul Martin <pm@nowster.zetnet.co.uk> sent me the following:

-----quote-----
[...]
Here's a fragment of code that does a mono fade out. It's very
sub-optimal, but it does work. It implements a (1-x^2) fade (x = 0 -> 1). 
By changing the exponent you can change the type of fade from linear (x^1)
to highly logarithmic.
[...]

#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

const char inname[]="input.sw";
const char outname[]="output.sw";

signed short buff[441000];

main () {
 double frac,scaler;
 long i,size,max;
 int inp,oup;
 signed short tmp;
 
 if ((inp=open(inname,O_RDONLY))==-1) {
  perror("open('input.sw')");
  exit(1);
 }
 size = read(inp, buff, sizeof(buff));
 close(inp);
 max = (size/2);

 for (i=0; i<max; i++) {
  frac=(double) i / (double) max;
  scaler = 1.0 - (frac)*(frac); /* this is the important bit */
/* scaler = 1.0 - (1.0-frac)*(1.0-frac); /* fade in */

  tmp = (signed short) ( ( (double) buff[i]) * scaler);
/*  printf("%d %f %d %d\n", i, scaler, buff[i], tmp ); */
  buff[i]=tmp;
 }

 oup=creat(outname,0644);
 write(oup,buff,size);
 close(oup);
}
-----end of quote-----

Idea seems to be useable. Exponent may be settable in a Parameters screen
(then scaler=pow(frac,log_factor)), as well as the length of fade in and
fade out (in samples, or e.g. 1/100 sec?). But for correct implementation,
a current_sample_position has to be added to param_t, that is updated
every sample (in advance_current_pos() ?). Otherwise, the pre-reading of
the buffers will make it go all wrong (note that the fade in/out must be
placeable anywhere in the processing chain). Also, track_start/end
(samples or bytes) or tracktimes[] must be global vars.