This file is indexed.

/usr/share/SuperCollider/HelpSource/Classes/SoundFileView.schelp is in supercollider-common 1:3.8.0~repack-2.

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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
class:: SoundFileView
summary:: Sound file display
categories:: GUI>Views
related:: Classes/SoundFile


DESCRIPTION::

A sound file viewer with numerous options.

Zoom in and out using Shift + right-click + mouse-up/down;

Scroll using right-click + mouse-left/right.

CLASSMETHODS::

PRIVATE:: key


INSTANCEMETHODS::

SUBSECTION:: Data

METHOD:: soundfile

    argument::
        An Instance of SoundFile to display.


METHOD:: read

    Reads a section of the link::#-soundfile:: and displays it in the view. For large files, you may want to use readWithTask instead.

    The 'block' argument has no effect; the display resolution is infinite.

    argument:: startFrame
        The beginning of the section, in frames.

    argument:: frames
        The size of the section, in frames.

    argument:: block
        The block size - visual resolution of the display. An Integer of the form 2**n.

    argument:: closeFile
        If true, closes the SoundFile after reading.

    argument:: doneAction
        A Function called when the file reading has completed.


METHOD:: readFile

    Reads a section of an open instance of SoundFile, and displays it in the view. For large files, you may want to use the method readWithTask instead.

   The 'block' argument has no effect; the display resolution is infinite.

    argument:: aSoundFile
        An open instance of SoundFile.

    argument:: startFrame
        The beginning of the section, in frames.

    argument:: frames
        The size of the section, in frames.

    argument:: block
        The block size - visual resolution of the display. An Integer of the form 2**n.

    argument:: closeFile
        If true, closes the SoundFile after reading.
    argument:: doneAction
        A Function called when the file reading has completed.

METHOD:: readWithTask

    Reads a section of the link::#-soundfile:: asynchronously (in the background), updating the link::#-readProgress:: along the way. If the code::showProgress:: argument is code::true::, a SoundFileViewProgressWindow opens to show the progress.

   The 'block' argument has no effect; the display resolution is infinite. The 'showProgress' argument has no effect; the view always displays reading progress within itself.

    argument:: startFrame
        The beginning of the section, in frames.

    argument:: frames
        The size of the section, in frames.

    argument:: block
        The block size - visual resolution of the display. An Integer of the form 2**n.

    argument:: doneAction
        An optional function to be evaluated on completion.

    argument:: showProgress
        Whether to open a progress window. Defaults to code::true::.


METHOD:: readFileWithTask

    Reads a section of an open instance of SoundFile asynchronously (in the background), updating the link::#-readProgress:: along the way. If the code::showProgress:: argument is code::true::, a SoundFileViewProgressWindow opens to show the progress.

        The 'block' argument has no effect; the display resolution is infinite.
        The 'showProgress' argument has no effect; the view always displays reading progress within itself.

    argument:: soundFile
        An open instance of SoundFile.

    argument:: startFrame
        The beginning of the section, in frames.

    argument:: frames
        The size of the section, in frames.

    argument:: block
        The block size - visual resolution of the display. An Integer of the form 2**n.

    argument:: doneAction
        An optional function to be evaluated on completion.

    argument:: showProgress
        Whether to open a progress window. Defaults to code::true::.

METHOD:: data

    Gets the display data, or sets custom data instead of a sound file.

    It is not possible to get the data.

   Setting this property assumes 1 channel and sample rate of 44100 Hz. Use link::#-setData:: instead if you want more control.

    argument::
        An Array of Floats; multiple channel data should be interleaved.

METHOD:: setData

    Sets custom display data instead of a sound file, interpreting it using specified number of channels and sample rate.


    argument:: data
        An Array of Floats; multiple channel data should be interleaved.

    argument:: block
The block size - visual resolution of the display. An Integer of the form 2**n. (since the port to QT, the 'block' argument has no effect; the display resolution is infinite).

    argument:: startFrame
        An integer.

    argument:: channels
        An integer.

    argument:: samplerate
        An integer.

METHOD:: alloc

Allocates a desired amount of display channels and frames; all frames have initial value of 0.

    argument:: frames
        An Integer.
    argument:: channels
        An Integer.
    argument:: samplerate
        An Integer.

METHOD:: set

Overwrites a range of display data with another data. This method can be used after link::#-alloc:: or link::#-setData:: has been called, but not while the view is displaying a sound file.

    argument:: offset
        The frame at which to start overwriting; an Integer.
    argument:: data
        The new data; an Array of Floats; multiple channel data should be interleaved.

METHOD:: startFrame

    The beginning of the read section of the soundfile, or 0 if link::#-alloc:: or link::#-setData:: has been used.

METHOD:: numFrames

    The total amount of frames in the view; this is unrelated to link::#-zoom#zooming:: and link::#-scroll#scrolling::.

METHOD:: readProgress

     The reading progress, updated periodically when reading a soundfile using link::#-readWithTask:: or link::#-readFileWithTask::.

SUBSECTION:: Navigation

METHOD:: viewFrames

    The amount of currently visible frames in the view.

METHOD:: zoom

    Zooms by a factor relative to current zoom.

    argument::
        A Float.

METHOD:: zoomToFrac

    Zooms to a specific scale.

    argument::
        A Float.

METHOD:: zoomAllOut

    Zooms to the link::#-currentSelection#current selection::.

METHOD:: zoomSelection

    Zooms to a specific selection.

    argument::
        The index of the selection; an Integer between 0 an 63.

METHOD:: scrollPos

    The scrolling position of the view, as a fraction of the total scrolling range.

    returns::
        A Float in the range of 0.0 to 1.0.

METHOD:: scrollTo

    Scrolls to a fraction of the total scrolling range.

    argument::
        A Float in the range of 0.0 to 1.0.

METHOD:: scroll

    Scrolls by a fraction of the visible range.

    argument::
        A Float.

METHOD:: scrollToStart

    Scrolls to the beginning.

METHOD:: scrollToEnd

    Scrolls to the end.


SUBSECTION:: Selection

METHOD:: selections

    All the selections.

    returns:: An array of 64 arrays of start frames and sizes: [ [ start0, size0 ] , [ start1, size1 ], ... ].

METHOD:: selection

    The selection at index.

    returns::
        An Array of the form code::[start, size]::, where start and size denote frames.

METHOD:: setSelection

    Sets the selection at index.

    argument:: index
        An Integer between 0 an 63.

    argument:: selection
        An Array of the form code::[start, size]::, where start and size are Integers and denote frames.

METHOD:: currentSelection

    The index of the current selection

    argument::
        An integer between 0 an 63.

METHOD:: selectionStart

    The start frame of a selection.

    argument:: index
        The index of the selection; an Integer between 0 an 63.

    returns::
        An Integer.

METHOD:: setSelectionStart

    Sets the start frame of a selection.

    argument:: index
        The index of the selection; an Integer between 0 an 63.

    argument:: frame
        The starting frame of the selection, an Integer.

METHOD:: selectionSize

    The size of a selection.

    argument:: index
        The index of the selection; an Integer between 0 an 63.

    returns::
        An Integer.

METHOD:: setSelectionSize

    Sets the size of a selection.

    argument:: index
        The index of the selection; an Integer between 0 an 63.

    argument:: frames
        The size in frames of the selection, an Integer.

METHOD:: selectionStartTime

    The start of a selection in seconds.

    argument:: index
        The index of the selection; an Integer between 0 an 63.

    returns::
        A Float.

METHOD:: selectionDuration

    The size of a selection in seconds.

    argument:: index
        The index of the selection; an Integer between 0 an 63.

    returns::
        A Float.

METHOD:: selectAll

    Sets a selection to span the whole data range.

    argument:: index
        The index of the selection; an Integer between 0 an 63.


METHOD:: selectNone

    Sets the size of a selection to 0.

    argument:: index
        The index of the selection; an Integer between 0 an 63.

METHOD:: setSelectionColor

    Sets the color of a selection.

    argument:: index
        The index of the selection; an Integer between 0 an 63.

    argument:: color
        A Color.

METHOD:: setEditableSelectionStart

    Sets whether the start point of a selection can be edited.

    argument:: index
        The index of the selection; an Integer between 0 an 63.

    argument:: editable
        A Boolean.

METHOD:: setEditableSelectionSize

    Whether the end point of a selection can be edited.

    argument:: index
        The index of the selection; an Integer between 0 an 63.

    argument:: editable
        A Boolean.

METHOD:: readSelection

    note:: Not implemented ::

    Read the data within a selection.

    argument:: block
        The block size - visual resolution of the display. An Integer of the form 2**n.

    argument:: closeFile
        If true, closes the SoundFile after reading.

METHOD:: readSelectionWithTask

    note:: Not implemented ::

    Read the data within the current selection asynchronously (in the background), showing the progress in a separate window.


SUBSECTION:: Display

METHOD:: gridOn

    Whether the grid is displayed. Defaults to code::true::.

    argument::
        A Boolean.

METHOD:: gridResolution

    The resolution of the grid.

    argument::
        An instance of Float.

METHOD:: gridOffset

    Sets the grid offset.

    argument::
        An integer.

METHOD:: gridColor

    The color of the grid.

    argument::
        A Color.

METHOD:: drawsWaveForm

    Whether the data is displayed. Defaults to code::true::.

    argument::
        A Boolean.

METHOD:: timeCursorOn

    Whether the time cursor is displayed. Defaults to code::false::.

    argument::
        A Boolean.

METHOD:: timeCursorPosition

    The position of the time cursor in frames.

    argument::
        An Integer.

METHOD:: timeCursorColor

    The color of the time cursor.

    argument::
        A Color.

METHOD:: elasticMode

    ???

SUBSECTION:: Actions

METHOD:: action

    The object to be evaluated whenever the user interacts with the view.

METHOD:: metaAction

    The object to be evaluated on Ctrl + click.


EXAMPLES::

SUBSECTION:: Basic example

code::

// To zoom in/out: Shift + right-click + mouse-up/down
// To scroll: right-click + mouse-left/right
(
w = Window.new("soundfile test", Rect(200, 300, 740, 100));
a = SoundFileView.new(w, Rect(20,20, 700, 60));

f = SoundFile.new;
f.openRead(Platform.resourceDir +/+ "sounds/a11wlk01.wav");
f.inspect;

a.soundfile = f;
a.read(0, f.numFrames);
a.elasticMode = true;

a.timeCursorOn = true;
a.timeCursorColor = Color.red;
a.timeCursorPosition = 2050;
a.drawsWaveForm = true;
a.gridOn = true;
a.gridResolution = 0.2;

w.front;
)
::

SUBSECTION:: Step by step examples

code::
( // make a simple SoundFileView
y = Window.screenBounds.height - 120;
w = Window.new("soundfile test", Rect(200, y, 740, 100)).alwaysOnTop_(true);
w.front;
a = SoundFileView.new(w, Rect(20,20, 700, 60));

f = SoundFile.new;
f.openRead(Platform.resourceDir +/+ "sounds/a11wlk01.wav");
// f.inspect;

a.soundfile = f;            // set soundfile
a.read(0, f.numFrames);     // read in the entire file.
a.refresh;                  // refresh to display the file.
)

// To zoom in/out: Shift + right-click + mouse-up/down
// To scroll: right-click + mouse-left/right

// reading file
a.read(0, f.numFrames / 2).refresh; // read first half
a.read.refresh;                     // read entire file by default
a.read(f.numFrames / 2).refresh;    // read second half
a.read(0, -1).refresh;              // -1 also reads entire file, like buffer.

// the resolution of the view is always infinite;
// you can always zoom in until you see a single sample.

a.read(0, -1).refresh;

// for longer files, you can use:
a.readWithTask;

// zoom is relative
a.zoom(0.2).refresh;
a.zoom(2).refresh;
a.zoom(2).refresh;
a.zoomToFrac(0.5); // zoom to half file size
a.zoomAllOut;

a.gridOn = true;            // time grid, 1 second by default,
a.gridResolution = 0.2;     // or set resolution in seconds
a.gridColor = Color.cyan;   // color is changeable.
a.gridOffset_(0.1);         // not sure if this is working?

a.timeCursorOn = true;          // a settable cursor
a.timeCursorPosition = 2050;    // position is in frames.
a.timeCursorColor = Color.white;

// toggle drawing on/off
a.drawsWaveForm = false;
a.drawsWaveForm = true;

// these methods should return view properties:
a.gridOn
a.gridResolution
a.gridColor
a.timeCursorOn
a.timeCursorPosition
a.timeCursorColor

// Selections: multiple selections are supported.
// e.g. use selection 0:
a.setSelectionColor(0, Color.red);  // set...( index, value )
a.selectionStart(0);                // at index
a.setSelectionStart(0, 12345);
a.setSelectionSize(0, 12345);

a.setSelectionStart(0, 1234);
a.selectionStart(0);

// now selection 1
a.setSelectionColor(1, Color.white);
a.setSelectionStart(1, 1234).setSelectionSize(1, 1234 * 2);
a.selectionStart(1);
a.setSelectionStart(0, 12345);

// the current selection gets changed when click/dragging in view.
a.currentSelection;     // index of current selection;
a.currentSelection_(1); // switch current selection - try click/drag white now.
a.currentSelection;

a.selections.size;      // 64 selections
a.selections[0];
a.selections[1];
a.selections;

// setSelection (index, selection);
a.setSelection(0, [234, 2345]);
a.selection(1); // returns [start, size].


a.elasticMode = true;   // not sure if this is working yet?

(       // mouseUpAction
a.mouseUpAction = {
    ("mouseUp, current selection is now:"
        + a.selections[a.currentSelection]).postln;
};
)
// lock selection 0:
a.currentSelection_(0);
a.setEditableSelectionStart(0, false);
a.setEditableSelectionSize(0, false);


// unlock selection 0:
a.setEditableSelectionStart(0, true);
a.setEditableSelectionSize(0, true);

a.selectionStartTime(0);
a.selectionDuration(0);


a.setSelectionStart(0, 12345);
a.setSelectionSize(0, 12345);
a.readSelection.refresh;
a.readSelection(16).refresh;    // in higher resolution
a.read.refresh;                 // go back to entire file.


a.dataNumSamples;   // visual data have this many points
a.data.plot;
a.setData(a.data.reverse);


a.zoom(0.25);       // scrolling is normalized
a.scrollTo(0.5);    //
a.scrollTo(0.6);    //
a.scroll(12);       // scroll is in viewFrames.

a.zoom(4);

w.close;

::