Programmer Guide/Macro Library/BDataSet: Difference between revisions

From STX Wiki
Jump to navigationJump to search
No edit summary
No edit summary
Line 119: Line 119:




===Management of Temporary Audio Sets==
==Management of Temporary Audio Sets==


===OpenAutoAFile===
===OpenAutoAFile===
Line 133: Line 133:
==Audio Segment Functions==
==Audio Segment Functions==


===FindSegment===
;Usage:
:<code>$bdataset findsegment first; <var>aset ; asegid ; range ; attrexpr1 ; ... </var></code>
:<code>$bdataset findsegment next; <var>asegpos ; asegid ; range ; attrexpr1 ; ... </var></code>
;Result: position <var>asegpos</var> of first / next matching segment or empty string
;Description: The find <code>first/next</code> function can be used to process audio segments in an interation loop. If a call to <code>next</code> fails (no more matching segments found), the position <var>asegpos</var> passed to function is cleared automatically. If an iteration loop is leaved before the last segment was processed, the <code>reset</code> variant must be called to clear the last saved position.


;Usage: <code>$bdataset findsegment all|directory; <var>aset ; asegid ; range ; attrexpr1 ; ... </var></code>
;Result:
* '''all''': a simple table containing the xml positions of all found segments or an empty string
* '''directory''': an extended table containing the id, begin, length and channel assignment (fields: ID, P, L and CH) of all found segments or an empty string


;Usage: <code>$bdataset findsegment reset; <var>table|asegpos ; delete=0</var></code>
;Result: none (void)
;Description: This function variant clears the position <var>asegpos</var> or the segments positions stored in <var>table</var>. If <var>delete</var> is set to '''1''' also the segments themselve are deleted. It must be called to reset the segment position if an iteration loop is leaved early and to reset positions of segments found by the <code>all</code> variant.


;Arguments:
:;<var>aset</var>: audio set reference (iref or position)
:;<var>asegid</var>: segment name (wildcard)
:;<var>asegpos</var>: segment element position
:;<var>range</var>: segment expression defining the search range (* = whole audio set)
:;<var>attrexpr</var>: an attribute compare expression (see [[Programmer_Guide/Shell_Items/File/SET_FILE#XML:_FIND|SET xmlfileitem FIND]])
:;<var>table</var>: a simple table with segment element positions (returned by <code>ALL</code>)
:;<var>delete</var>: '''1''' if element(s) should be deleted on RESET, '''0''' otherwise
===DialogSelectSegment===
;Usage: <code>$bdataset dialogselectsegment <var>title ; aset ; mode ; output</var></code>
:;<var>title</var>: dialog capture, empty string to use default title
:;<var>aset</var>: audio set reference (iref)
:;<var>mode</var>: selection mode; '''single''' for one segment, '''multiple''' for multiple segments
:;<var>output</var>: return value(s); '''positioon''' = xml position of segment(s), '''iref''' xml reference (iref) of segment(s), '''id''' segment id
;Result:
::* empty string if failed/canceled
::* if <var>mode</var> = '''single''' &rarr the specified return value as string
::* if <var>mode</var> = '''multiple''' &rarr a simple table with one entry for each selected segment holding the specified output value as string
;Description: This function displayes a dialog with a segment list of the specified audio set, where the user can select segment(s).
===DialogEditSegment===
;Usage: <code>$bdataset dialogeditsegment <var>aset ; aseg ; segment ; channel ; title</var></code>
:;<var>aset</var>: audio set reference (iref)
:;<var>aseg</var>: segment reference, segment id or * (for new segments)
:;<var>segment</var>: segment expression specifying both boundaries of segment or *
:;<var>channel</var>: channel of segment or 0 for all channels
:;<var>title</var>: dialog capture, empty string to use default title
;Result: empty string if failed/canceled or id of changed/created segment
;Description: This function implements a complex dialog to create new segments and to edit properties/attributes of segments.
===CreateWave===
;Usage: <code>$bdataset createwave <var>aset ; aseg ; channels=* ; mode=single</var></code>
:;<var>aset</var>: audio set reference (iref or position)
:;<var>aseg</var>: specifies the segment (begin and end) to be addressed by the created wave item
::* a segment reference (iref or position), a segment id or a segment expression
::* the character '''*''' can be used to address the signal of the whole sound file
::* the expression '''*'''<var>length</var> can be used to create a wave item that appends a signal of duration <var>length</var> to a sound file
:;<var>channels</var>: defines which channels of the audio set should be addressed by the created wave item
::* '''*''' or '''0''' for all channels
::* use keyword '''channels''' (or '''ch''') to retrieve channel value from the attribute '''CH''' of the segment element
::* specify a channel number (1, 2, ..) or a list of blank separated channel numbers (e.g. '''1 3 4''')
:;<var>mode</var>: this argument is only used, if the specified audio set is a sequence (ASequence)
::* set <var>mode</var> to '''single''' if the signal is processed sequential
::* is the signal is accessed in a random way, set <var>mode</var> to '''multiple'''
;Return: the created wave item (item id) or an empty string if the function fails
;Description: This function creates a wave item which can be used to read, write or append a signal from/to an audio set of the current project. A wave item created by this function must be deleted by calling the member function <code>DeleteWave</code>. All wave items created by this member, are automatically deleted by the {{STx}} application management functions, when the shell exits.
===CreateWaveEx===
This function takes the same arguments and performs the same function as <code>CreateWave</code>. Only the result is different.
;Result: the created wave item or a numeric error code
===DeleteWave===
;Usage: <code>$bdataset deletewave <var>waveitem</var></code>
:;<var>waveitem</var>: id of waveitem to be deleted
;Result: no result (void)
;Description: This function deletes the wave item and performs all necessary cleanup operations (e.g. delete assoziated items, close used soundfiles, etc.). Use this function only to delete wave items created with <code>CreateWave/CreateWaveEx</code>.




Line 177: Line 247:




* <code>FormatTimeValue(read: value;unit)</code> Returns the time value in the selected unit (samples, milliseconds, ms, seconds, hms)
* <code>GetWaveInfo(read: waveitem)</code>: retrieve all information associated to a wave item (created with member CreateWave)




* <code>MakeChannelList(read: nch|aset; withall)</code>: initialize a channel-list variable for dialogs (combobox)
* <code>GetReservedAttributes</code>: returns a blank seperated list of all reserved attribute names
* <code>IsReservedAttribute(read: attrname)</code>: returns 1 if the argument attrname is the name a reserved attribute and 0 otherwise
* <code>GetAttributes(read: type table autoexclude excludelist)</code>: returns a list of all attributes assigned to elements of the specified; the whole project is scanned
* <code>GetAttributes(read: type table autoexclude excludelist)</code>: returns a list of all attributes assigned to elements of the specified; the whole project is scanned
* <code>DialogGetAttributes(read: type vlist)</code>: implements a dialog to select visible attributes of the selected element type (e.g. sets, segments, ...); returns a blank separated list of visible attributes; used by class <code>BDataSetBrowser</code> and application <code>DataSet</code>
* <code>DialogGetAttributes(read: type vlist)</code>: implements a dialog to select visible attributes of the selected element type (e.g. sets, segments, ...); returns a blank separated list of visible attributes
* <code>AttrListView</code>: a special handler for attribute editors (controls a dialog via msg. handling and callback); used by class <code>BDataSet</code> and <code>BDataSetBrowser</code> (part of application <code>DataSet</code>)
 
 
* <code>GetTemplateForCurrentTag</code>: get the template assigned to the current element (or its parent if possible)
 
 
* <code>AttrListView</code>: a special handler for attribute editors (controls a dialog via msg. handling and callback); used by some standard dialogs of the GUI

Revision as of 12:05, 1 March 2018

File: BDataSet.STX, linked to library STX.LIB
Class hierarchy: BDataSet &larr BXMLDoc &larr CObj
See also: BXMLDoc, BSTXIni, DataSetCmd

This class implements the project document. The project document is the global database available to all STx applications and scripts and contains all data and links of the current project. The content of the project document is stored in a XML file item The programmer must not create or destroy the project object because these functions are performed by the application startup and cleanup macros.

Never ever call the member functions CONSTRUCT, DESTRUCT or CLOSE!

At application startup a BDataSet instance is created and linked to the global project document which is created and managed by the STx master shell. The name of this instance is stored in the shell variable BDATASET. This object must be used to access the project document.

The class BDataSet is derived from the class BXMLDoc. Beware of using the base class functions, since they do not update the BDataSet member variables! No static commands are implemented by this class; a call to the macro BDataSet (e.g. bdataset save) will do nothing, returning an empty string.

Before a shell or a script uses or changes the content of the project document, it should be attached (locked) using the function call $bdataset attach (see: Attach & Detach).


Attach & Detach

Usage
$bdataset attach [ iref ]
$bdataset detach
iref
reference or position of an element of the project document, if specified the element is selected after attaching
Result
the name of the xml-file item containing the project document data
Description
The function attach locks the project document and returns the internal xml-file item containing the project data. Only the calling shell can now access the project content, all other shells are blocked. The project document remains locked until the next call to detach. Multiple calls of attach (by the same shell) are possible, but for each call also the function detachmust be called.
Example
// first attach call - lock project document and save current xml-position (pos1)
$bdataset attach
... 
//	second attach call - save xml-position (pos2)
$bdataset attach
...
// first detach call - restore xml-position pos2, project document remains locked!
$bdataset detach
...
//	second detach call - restore xml-position pos1 and unlock project document, 
//	if the project document was changed by the code between first attach and second detach,
// the message "DATASETCHANGED" is sent to all running shells
$bdataset detach

Project Properties

IsNewFile

Usage
$bdataset isnewfile
Result
1 if the project file is new (not named and not saved) and 0 otherwise.

GetPath

Usage
$bdataset getpath
Result
the full path of the project file or an empty string

SetLink

Usage
$bdataset setlink mode
mode
0 (or no) to set project to not linked and 1 (or yes) to set it to linked
Result
0 if the selected mode was enabled and 1 if the function fails.
Description
This function change the project attribute AFile (attribute of the root-element STXDataSet).
  • AFile=Link: The project is in mode linked. The segment metadata are stored in STx metadata files, which are xml-files with the same pathname as the sound file and the filetype stxsm. The segment metadata files of sound file linked to the project are loaded/saved automatically, when the project is loaded/saved. The project file contains only links to the sound files of the project.
  • AFile is not assigned: The project is in mode not linked. All data of the project, including segment metadata, are stored in the project file. A project in this mode may contain multiple links to one sound file (e.g. to manage different segmentations of the same signal).

IsLinked

Usage
$bdataset islinked
Result
1 if the project is set to linked and 0 otherwise

SetRelativity

Usage
$bdataset setrelativity mode
mode
0 (or no) to disable the relative path feature and 1 (or yes) to enable it
Result
0 if the selected mode was enabled and 1 if the function has failed.
Description
This function can be used to enable/disable the relative path option. If the relative path option is enabled, for sound file which are in the same directory as the project file or in subdirectories the relative path is saved in the project. This feature is useful if the project should be copied to other places. The relativity state is saved in the attribute ARelative of the root element of the project. If this attribute has the value yes, relative sound file pathes are used, otherwise (ARelative) equals no or is not set) absolute pathes are used.

IsRelative

Usage
$bdataset isrelative
Result
1 if the project is set to relative sound file pathes and 0 otherwise



Audio Set Functions

AddASet

Usage
$bdataset addaset tag ; targetset ; id ; srate ; channels ; update
tag
the type off the new audio set; this can be ...
  • the name of an existing sound file to be added to the project
  • the keyword AFile or * to create (via dialog) a new soundfile and add it to the project
  • the keyword ASequence or Sequence to add a new sequence to the project
targetset
the set (folder) where the new audio set should be located; if set to *, the target is selected via a dialog
id
the unique id of the new audio set; if set to * an unique id is choosen automatically
srate
the sampling rate in Hz for a new soundfile or a sequence
channels
the number of channels for a new soundfile or a sequence
update
if set to 1 (or yes) the function DataSetCmd RefreshAll is called to refresh the project GUI
Result
if successfulthe the reference (iref) of the added audio set if returned, otherwise an empty string
Description: This function add an audio set (sound file or sequence) to the project.

AFileIsLinked

Usage
$bdataset afileislinked path
path
the path of the sound file to be tested
Result
1 if the sound file path is already linked to the project and 0 otherwise.
Description
This function tests if a sound file is already linked to the project or not. The check is performed only if the project is set to linked. For not linked projects the functions returns always 0.

SelectASet

Usage
$bdataset selectaset aset ; type
aset
the reference (iref or position) of an audio set or of an element inside an audio set (e.g. a segment)
type
assumed type of the audio set: AFile, Soundfile, ASequence, Sequence or * (default) if type is unknown
Result
0 if the audio set is selected and a non-zero error code otherwise
Description
This function selects the specified audio set. If the function was sussessful, the following member variables of the object $bdataset are assigned:
  • &asetPos: xml position of the audio set element
  • &asetTag: xml tag of the audio set element (AFile or ASequence)
  • &asetID: xml element id (value of attribute ID)
  • &asetSR: sampling rate in Hz (value of attribute SR)
  • &asetCH: number of channels (value of attribute CH)
  • &asetFile: sound file path (only if tag equals AFile)

GetASetInfo

Usage
$bdataset getasetinfo [ aset ; type ]
aset
the reference (iref or position) of an audio set or of an element inside an audio set (e.g. a segment)
type
assumed type of the audio set: AFile, Soundfile, ASequence, Sequence or * (default) if type is unknown
Result
an empty string for error or the available attributes of the selected audio set:
  • for sound files: Soundfile;id;id;sr;ch;filepath
  • for sequences: Sequence;id;id;sr;ch
Description
This function retrieves information about the selected audio set. If arguments are specified, they are passed to the function SelectASet to select the audio set, before the audio set information is returned.


Management of Temporary Audio Sets

OpenAutoAFile

RemoveTmpSet

RestoreTmpSet

Audio Segment Functions

FindSegment

Usage
$bdataset findsegment first; aset ; asegid ; range ; attrexpr1 ; ...
$bdataset findsegment next; asegpos ; asegid ; range ; attrexpr1 ; ...
Result
position asegpos of first / next matching segment or empty string
Description
The find first/next function can be used to process audio segments in an interation loop. If a call to next fails (no more matching segments found), the position asegpos passed to function is cleared automatically. If an iteration loop is leaved before the last segment was processed, the reset variant must be called to clear the last saved position.
Usage
$bdataset findsegment all|directory; aset ; asegid ; range ; attrexpr1 ; ...
Result
  • all: a simple table containing the xml positions of all found segments or an empty string
  • directory: an extended table containing the id, begin, length and channel assignment (fields: ID, P, L and CH) of all found segments or an empty string
Usage
$bdataset findsegment reset; table|asegpos ; delete=0
Result
none (void)
Description
This function variant clears the position asegpos or the segments positions stored in table. If delete is set to 1 also the segments themselve are deleted. It must be called to reset the segment position if an iteration loop is leaved early and to reset positions of segments found by the all variant.
Arguments
aset
audio set reference (iref or position)
asegid
segment name (wildcard)
asegpos
segment element position
range
segment expression defining the search range (* = whole audio set)
attrexpr
an attribute compare expression (see SET xmlfileitem FIND)
table
a simple table with segment element positions (returned by ALL)
delete
1 if element(s) should be deleted on RESET, 0 otherwise

DialogSelectSegment

Usage
$bdataset dialogselectsegment title ; aset ; mode ; output
title
dialog capture, empty string to use default title
aset
audio set reference (iref)
mode
selection mode; single for one segment, multiple for multiple segments
output
return value(s); positioon = xml position of segment(s), iref xml reference (iref) of segment(s), id segment id
Result
  • empty string if failed/canceled
  • if mode = single &rarr the specified return value as string
  • if mode = multiple &rarr a simple table with one entry for each selected segment holding the specified output value as string
Description
This function displayes a dialog with a segment list of the specified audio set, where the user can select segment(s).

DialogEditSegment

Usage
$bdataset dialogeditsegment aset ; aseg ; segment ; channel ; title
aset
audio set reference (iref)
aseg
segment reference, segment id or * (for new segments)
segment
segment expression specifying both boundaries of segment or *
channel
channel of segment or 0 for all channels
title
dialog capture, empty string to use default title
Result
empty string if failed/canceled or id of changed/created segment
Description
This function implements a complex dialog to create new segments and to edit properties/attributes of segments.

CreateWave

Usage
$bdataset createwave aset ; aseg ; channels=* ; mode=single
aset
audio set reference (iref or position)
aseg
specifies the segment (begin and end) to be addressed by the created wave item
  • a segment reference (iref or position), a segment id or a segment expression
  • the character * can be used to address the signal of the whole sound file
  • the expression *length can be used to create a wave item that appends a signal of duration length to a sound file
channels
defines which channels of the audio set should be addressed by the created wave item
  • * or 0 for all channels
  • use keyword channels (or ch) to retrieve channel value from the attribute CH of the segment element
  • specify a channel number (1, 2, ..) or a list of blank separated channel numbers (e.g. 1 3 4)
mode
this argument is only used, if the specified audio set is a sequence (ASequence)
  • set mode to single if the signal is processed sequential
  • is the signal is accessed in a random way, set mode to multiple
Return
the created wave item (item id) or an empty string if the function fails
Description
This function creates a wave item which can be used to read, write or append a signal from/to an audio set of the current project. A wave item created by this function must be deleted by calling the member function DeleteWave. All wave items created by this member, are automatically deleted by the STx application management functions, when the shell exits.

CreateWaveEx

This function takes the same arguments and performs the same function as CreateWave. Only the result is different.

Result
the created wave item or a numeric error code

DeleteWave

Usage
$bdataset deletewave waveitem
waveitem
id of waveitem to be deleted
Result
no result (void)
Description
This function deletes the wave item and performs all necessary cleanup operations (e.g. delete assoziated items, close used soundfiles, etc.). Use this function only to delete wave items created with CreateWave/CreateWaveEx.




Project File Management

Validate

Usage
$bdataset validate showmsg
showmsg
if set to 1 a message is displayed also if no invalid elements were detected; default: no message if no invalid elements were found
Result
number of invalid elements (0 for none)
Description
This function checks all elements (sound files, segments, ...) of the project for validity. If invalid elements are detected, they can be displayed and the user is asked if they should be deleted or not.


Save

Load

Uncommon Functions and Functions for internal use only

The following functions are not often used and not so important for user script programming. If you want to know more about these functions look at the comments in the source file BDataSet.stx


  • GetBaseDirecory(read: #filepath): used by member Save to verify the project file path
  • ImportXML(read: #filepath; #set=*; #id=*): import the content of a xml file into the project (e.g. merge projects)


  • BackupSave: create a backup copy of the current project if backups are enabled; this function is called by the members Save/Load
  • BackupEmpty: empty backup directory - delete all backups
  • BackupLoad: display a list of available backups including options to restore selected backups


  • ImportSD0(read: afileref=*): import segment metadata of the specified (selected) audio set; try all versions (stxsm/sd0/st5); this function is used to load segment metadata of linked projects
  • ExportSD0(read: afileref=* [xmlfile]): export segment metadata of the specified (selected) audio set; this function is used to save segment metadata of linked projects


  • SetSetting(read: #id; version; value): set the value of project setting '#id' in the STXDataSet/Settings element
  • GetSetting(read: #id; version): get the valud of project setting '#id' from STXDataSet/Settings element


  • GetWaveInfo(read: waveitem): retrieve all information associated to a wave item (created with member CreateWave)


  • MakeChannelList(read: nch|aset; withall): initialize a channel-list variable for dialogs (combobox)


  • GetReservedAttributes: returns a blank seperated list of all reserved attribute names
  • IsReservedAttribute(read: attrname): returns 1 if the argument attrname is the name a reserved attribute and 0 otherwise
  • GetAttributes(read: type table autoexclude excludelist): returns a list of all attributes assigned to elements of the specified; the whole project is scanned
  • DialogGetAttributes(read: type vlist): implements a dialog to select visible attributes of the selected element type (e.g. sets, segments, ...); returns a blank separated list of visible attributes


  • GetTemplateForCurrentTag: get the template assigned to the current element (or its parent if possible)


  • AttrListView: a special handler for attribute editors (controls a dialog via msg. handling and callback); used by some standard dialogs of the GUI

Navigation menu

Personal tools