tabrowlin

tabrowlin — Copy a row from an f-table to another, interpolatin between rows

Description

Plugin opcode in beosc.

This opcode assumes the use of a table, which is a simple 1D array, to hold a 2D matrix with a given row length. Assuming such a 2D table containing multiple rows of sampled streams (for instance, the amplitudes of a set of oscilators, sampled at a regular interval), this opcode can extract one row (or a slice of a row) of that data with linear interpolation between adjacent rows (if row is not a whole number) and place the result in another table

Syntax

tabrowlin krow, ifnsrc, ifndest, inumcols [, ioffset, istart, iend, istep ]

Initialization

ifnsrc: The table index to copy data from

ifndest: The table index to copy data to (should be able to hold one row of data)

inumcols: the number of columns a row has, in the source table

ioffset: an offset to where the 2D data starts (used to skip a header, if present) (default = 0)

istart: start index to read from (refers to the row) (default = 0)

iend: end index to read from the row (not inclusive, should not exceed inumcols)

istep: step used to read along the row (default = 1)

Performance

krow -- the row to read. It can be a fractional number, in which case the row will be linearly interpolated with the next row

Examples

Here is an example of the tabrowlin opcode. It uses the file tabrowlin.csd.

Example 1012. Example of the tabrowlin opcode.

<CsoundSynthesizer>
<CsOptions>
-odac     ;;;realtime audio out
</CsOptions>
<CsInstruments>

/*

This is the example file for tabrowlin

tabrowlin
=========

  This opcode assumes the use of a table, which is a simple 1D array,
  to hold a 2D matrix with a given row length.
  Assuming such a 2D table containing multiple rows of sampled streams
  (for instance, the amplitudes of a set of oscilators, sampled at a
  regular interval), this opcode can extract one row of that data with
  linear interpolation between adjacent rows (if row is not a whole number)
  and place the result in another table

Syntax
======

tabrowlin krow, ifnsrc, ifndest, inumcols, ioffset=0, istart=0, iend=0, istep=1


krow     : the row to read (can be a fractional number, in which case interpolation
           with the next row is performed)
ifnsrc   : index of the source table
ifndest  : index of the dest table
inumcols : the number of columns a row has, in the source table
ioffset  : an offset to where the data starts (used to skip a header, if present)
istart   : start index to read from the row (not the start index of the table)
iend     : end index to read from the row (not inclusive)
istep    : step used to read the along the row

If reading out of bounds a PerformanceError will be raised. Because we
interpolate between rows, the last row that can be read is

  maxrow = (ftlen(ifnsrc)-ioffset)/inumcols - 2

*/

sr = 44100
ksmps = 128
nchnls = 1
0dbfs  = 1

instr 1
  ; just a simple test of the bare functionality
  ; generate a 4x3 table
  isource ftgentmp 0, 0, -12, -2, \
       0,  1,  2,  3,   \
      10, 11, 12, 13,   \
      20, 21, 22, 23
  ; create an empty table able to hold one row (4 elements)
  idest ftgentmp 0, 0, -4, -2, 0
  print ftlen(isource)
  ; we exceed the max. row to show what happens (the row is clipped
  ; to the max row possible and a message is printed to show the error)
  krow linseg 0, p3, 2.05  
  printk2 krow, 20
  tabrowlin krow, isource, idest, 4
  ftprint idest, -1
endin

</CsInstruments>
<CsScore>
i 1 0 2
</CsScore>
</CsoundSynthesizer> 


See Also

getrowlin, ftslice, slicearray, copyf2array, tab2array, tablecopy, tableicopy,

Credits

By: Eduardo Moguillansky 2018

New in version 6.12