You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1428 lines
63 KiB
1428 lines
63 KiB
<!DOCTYPE html>
|
|
<!-- vim: set ts=4: -->
|
|
<html>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
|
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
<meta name="mobile-web-app-capable" content="yes">
|
|
|
|
<!--
|
|
Modified from original Node-Red source, for audio system visualization
|
|
|
|
Copyright 2013 IBM Corp.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
-->
|
|
<head>
|
|
<title>Audio System Design Tool for Tympan Audio Library</title>
|
|
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen">
|
|
<link href="jquery/css/smoothness/jquery-ui-1.10.3.custom.min.css" rel="stylesheet" media="screen">
|
|
<link rel="stylesheet" type="text/css" href="orion/built-editor.css"/>
|
|
<link rel="stylesheet" type="text/css" href="font-awesome/css/font-awesome.min.css"/>
|
|
<link rel="stylesheet" href="style.css">
|
|
<style>
|
|
table.doc {border-spacing:3px; border-collapse:separate; font-size: 80%}
|
|
tr.top {background-color:#C0C0C0}
|
|
tr.odd {background-color:#F0F0F0}
|
|
tr.even {background-color:#E0E0E0}
|
|
p.func {padding-bottom:0; margin:0px}
|
|
p.desc {padding-left:2em; margin:0px; padding-top:0.2em; padding-bottom:0.8em; font-size:0.75em}
|
|
p.exam {padding-left:2em; text-indent:-1.2em; margin:0px; padding-top:0; padding-bottom:0.5em; font-size:0.75em; font-weight:bold}
|
|
pre.desc {padding-left:3em; margin:0px; padding-top:0em; padding-bottom:0.8em; font-size:0.75em;
|
|
background-color:#FFFFFF; border:0px; line-height:100%;
|
|
}
|
|
span.indent {padding-left:2em}
|
|
span.literal {color: #006699}
|
|
span.comment {color: #777755}
|
|
span.keyword {color: #cc6600}
|
|
span.function {color: #996600}
|
|
span.mainfunction {color: #993300; font-weight: bolder}
|
|
</style>
|
|
</head>
|
|
<body spellcheck="false">
|
|
<div class="navbar navbar-inverse navbar-fixed-top">
|
|
<div class="navbar-inner">
|
|
<div class="container-fluid">
|
|
<span class="brand">Audio Design Tool for <a href="http://tympan.org" target="_blank">Tympan Audio System</a></span>
|
|
<div class="btn-group pull-right">
|
|
<a class="btn dropdown-toggle" data-toggle="dropdown" href="#"><i class="icon-align-justify"></i> <span class="caret"></span></a>
|
|
<ul class="dropdown-menu">
|
|
<li><a id="btn-sidebar" tabindex="-1" href="#"><i class="icon-ok pull-right"></i><i class="icon-list-alt"></i> Sidebar</a></li>
|
|
<li class="divider"></li>
|
|
<!-- <li><a id="btn-node-status" tabindex="-1" href="#"><i class="icon-ok pull-right"></i><i class="icon-info-sign"></i> Node Status</a></li>
|
|
<li class="divider"></li>
|
|
-->
|
|
<!--
|
|
<li class="dropdown-submenu pull-left"><a tabindex="-1" href="#"><i class="icon-edit"></i> Import from...</a>
|
|
<ul class="dropdown-menu">
|
|
<li><a id="btn-import" tabindex="-1" href="#"><i class="icon-edit"></i> Clipboard...</a></li>
|
|
<li id="flow-menu-parent" class="dropdown-submenu pull-left">
|
|
<a tabindex="-1" href="#"><i class="icon-book"></i> Library</a>
|
|
<ul class="dropdown-menu"></ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li id="li-menu-export" class="dropdown-submenu disabled pull-left"><a tabindex="-1" href="#"><i class="icon-share"></i> Export to...</a>
|
|
<ul class="dropdown-menu">
|
|
<li id="li-menu-export-clipboard" class="disabled"><a id="btn-export-clipboard" tabindex="-1" href="#"><i class="icon-share"></i> Clipboard...</a></li>
|
|
<li id="li-menu-export-library" class="disabled"><a id="btn-export-library" tabindex="-1" href="#"><i class="icon-book"></i> Library...</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="divider"></li>
|
|
-->
|
|
<!--
|
|
<li><a id="btn-config-nodes" tabindex="-1" href="#"><i class="icon-th-list"></i> Configuration nodes...</a></li>
|
|
<li class="divider"></li>
|
|
-->
|
|
<!--
|
|
<li class="dropdown-submenu pull-left"><a tabindex="-1" href="#"><i class="icon-th-large"></i> Workspaces</a>
|
|
<ul id="workspace-menu-list" class="dropdown-menu">
|
|
<li><a id="btn-workspace-add" tabindex="-1" href="#"><i class="icon-plus"></i> Add</a></li>
|
|
<li><a id="btn-workspace-edit" tabindex="-1" href="#"><i class="icon-edit"></i> Rename</a></li>
|
|
<li><a id="btn-workspace-delete" tabindex="-1" href="#"><i class="icon-minus"></i> Delete</a></li>
|
|
<li class="divider"></li>
|
|
</ul>
|
|
</li>
|
|
<li class="divider"></li>-->
|
|
<li><a id="btn-keyboard-shortcuts" tabindex="-1" href="#"><i class="icon-question-sign"></i> Keyboard Shortcuts</a></li>
|
|
<li><a id="btn-help" tabindex="-1" href="http://node-red.github.io/docs" target="_blank"><i class="icon-question-sign"></i> Help...</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="btn-group pull-left">
|
|
<a id="btn-deploy" class="btn action-deploy disabled" href="#"><i id="btn-icn-deploy" class="icon-upload"></i>Export</a>
|
|
<a id="btn-import" class="btn action-import disabled" href="#"><i id="btn-icn-download" class="icon-download"></i>Import</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="main-container" class="sidebar-closed">
|
|
<div id="palette">
|
|
<img src="img/spin.svg" class="palette-spinner"/>
|
|
<div id="palette-container" class="palette-scroll">
|
|
</div>
|
|
<div id="palette-search">
|
|
<i class="icon-search"></i><input id="palette-search-input" type="text" placeholder="filter"><a href="#" id="palette-search-clear"><i class="icon-remove"></i></a></input>
|
|
</div>
|
|
</div><!-- /palette -->
|
|
|
|
<div id="workspace">
|
|
<ul id="workspace-tabs"></ul>
|
|
<!--<div id="workspace-add-tab"><a id="btn-workspace-add-tab" href="#"><i class="icon-plus"></i></a></div>-->
|
|
<div id="chart"></div>
|
|
<div id="workspace-toolbar">
|
|
<div class="btn-group">
|
|
<a class="btn btn-small" href="#"><i class="icon-zoom-out"></i></a>
|
|
<a class="btn btn-small" href="#"><i class="icon-th"></i></a>
|
|
<a class="btn btn-small" href="#"><i class="icon-zoom-in"></i></a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="chart-zoom-controls">
|
|
<div class="btn-group">
|
|
<a class="btn btn-mini" id="btn-zoom-out" href="#"><i class="icon-zoom-out"></i></a>
|
|
<a class="btn btn-mini" id="btn-zoom-zero" href="#"><i class="icon-th"></i></a>
|
|
<a class="btn btn-mini" id="btn-zoom-in" href="#"><i class="icon-zoom-in"></i></a>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="sidebar">
|
|
<ul id="sidebar-tabs"></ul>
|
|
<div id="sidebar-content"></div>
|
|
</div>
|
|
|
|
<div id="sidebar-separator"></div>
|
|
|
|
</div>
|
|
|
|
<div id="notifications"></div>
|
|
<div id="dropTarget"><div>Drop the flow here</div></div>
|
|
|
|
<div id="dialog" class="hide"><form id="dialog-form" class="form-horizontal"></form></div>
|
|
<div id="node-config-dialog" class="hide"><form id="dialog-config-form" class="form-horizontal"></form><div class="form-tips" id="node-config-dialog-user-count"></div></div>
|
|
|
|
<div id="node-dialog-confirm-deploy" class="hide">
|
|
<form class="form-horizontal">
|
|
<div id="node-dialog-confirm-deploy-config" style="text-align: center; padding-top: 30px;">
|
|
Some of the nodes are not properly configured. Are you sure you want to deploy?
|
|
</div>
|
|
<div id="node-dialog-confirm-deploy-unknown" style="text-align: center; padding-top: 10px;">
|
|
The workspace contains some unknown node types:
|
|
<ul style="width: 300px; margin: auto; text-align: left;" id="node-dialog-confirm-deploy-unknown-list"></ul>
|
|
Are you sure you want to deploy?
|
|
</div>
|
|
</form>
|
|
</div>
|
|
|
|
<div id="node-dialog-error-deploy" class="hide">
|
|
<form class="form-horizontal">
|
|
<div id="node-dialog-error-deploy-noio" style="text-align: center; padding-top: 10px;">
|
|
<p>The workspace contains no input/output nodes!</p>
|
|
<p>You need an input or an output to export the data!</p>
|
|
<p>Without such a input/output function the exported
|
|
code will not run properly!</p>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
|
|
<div id="node-help" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="node-help-label" aria-hidden="true">
|
|
<div class="modal-header">
|
|
<h5 id="node-help-label">Keyboard Shortcuts <span style="float: right;"><a href="http://node-red.github.io/docs" target="_blank">Open help in new window »</a></span></h5>
|
|
</div>
|
|
<div class="modal-body">
|
|
<table>
|
|
<tr>
|
|
<td><span class="help-key">?</span></td><td>Help</td>
|
|
<td><span class="help-key">Ctrl</span> <span class="help-key">a</span></td><td>Select all nodes</td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="help-key">Ctrl</span> <span class="help-key">Space</span></td><td>Toggle sidebar</td>
|
|
<td><span class="help-key">Shift</span> <span class="help-key">Click</span></td><td>Select all connected nodes</td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="help-key">Ctrl</span> <span class="help-key">z</span></td><td>Undo</td>
|
|
<td><span class="help-key">Ctrl</span> <span class="help-key">Click</span></td><td>Add/remove node from selection</td>
|
|
</tr>
|
|
<tr>
|
|
<td></td><td></td>
|
|
<td><span class="help-key">Delete</span></td><td>Delete selected nodes or link</td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="help-key">Ctrl</span> <span class="help-key">x</span></td><td>Cut selected nodes</td>
|
|
<td></td><td></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="help-key">Ctrl</span> <span class="help-key">c</span></td><td>Copy selected nodes</td>
|
|
<td><span class="help-key">Ctrl</span> <span class="help-key">v</span></td><td>Paste nodes</td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="help-key">Ctrl</span> <span class="help-key">i</span></td><td>Import nodes</td>
|
|
<td><span class="help-key">Ctrl</span> <span class="help-key">e</span></td><td>Export selected nodes</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2"></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="help-key">Ctrl</span> <span class="help-key">+</span></td><td>Zoom in</td>
|
|
<td><span class="help-key">Ctrl</span> <span class="help-key">-</span></td><td>Zoom out</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="node-dialog-library-save-confirm" class="hide">
|
|
<form class="form-horizontal">
|
|
<div style="text-align: center; padding-top: 30px;">
|
|
A <span id="node-dialog-library-save-type"></span> called <span id="node-dialog-library-save-name"></span> already exists. Overwrite?
|
|
</div>
|
|
</form>
|
|
</div>
|
|
|
|
<div id="node-dialog-library-save" class="hide">
|
|
<form class="form-horizontal">
|
|
<div class="form-row">
|
|
<label for="node-dialog-library-save-folder"><i class="icon-folder-open"></i> Folder</label>
|
|
<input type="text" id="node-dialog-library-save-folder" placeholder="Folder">
|
|
</div>
|
|
<div class="form-row">
|
|
<label for="node-dialog-library-save-filename"><i class="icon-file"></i> Filename</label>
|
|
<input type="text" id="node-dialog-library-save-filename" placeholder="Filename">
|
|
</div>
|
|
</form>
|
|
</div>
|
|
|
|
<div id="node-dialog-library-lookup" class="hide">
|
|
<form class="form-horizontal">
|
|
<div class="form-row">
|
|
<ul id="node-dialog-library-breadcrumbs" class="breadcrumb">
|
|
<li class="active"><a href="#">Library</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="form-row">
|
|
<div style="vertical-align: top; display: inline-block; height: 100%; width: 30%; padding-right: 20px;">
|
|
<div id="node-select-library" style="border: 1px solid #999; width: 100%; height: 100%; overflow:scroll;"><ul></ul></div>
|
|
</div>
|
|
<div style="vertical-align: top; display: inline-block;width: 65%; height: 100%;">
|
|
<div style="height: 100%; width: 95%;" class="node-text-editor" id="node-select-library-text" ></div>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<div id="node-dialog-rename-workspace" class="hide">
|
|
<form class="form-horizontal">
|
|
<div class="form-row">
|
|
<label for="node-input-workspace-name" ><i class="icon-tag"></i> Name:</label>
|
|
<input type="text" id="node-input-workspace-name">
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<div id="node-dialog-delete-workspace" class="hide">
|
|
<form class="form-horizontal">
|
|
<div style="text-align: center; padding-top: 30px;">
|
|
Are you sure you want to delete '<span id="node-dialog-delete-workspace-name"></span>'?
|
|
</div>
|
|
</form>
|
|
</div>
|
|
|
|
<script type="text/x-red" data-template-name="export-clipboard-dialog">
|
|
<div class="form-row">
|
|
<label for="node-input-export" style="display: block; width:100%;"><i class="icon-share"></i> Source Code:</label>
|
|
<textarea readonly style="font-family: monospace; font-size: 12px; background:rgb(226, 229, 255); padding-left: 0.5em;" class="input-block-level" id="node-input-export" rows="12"></textarea>
|
|
</div>
|
|
<div class="form-tips">
|
|
Select the text above and copy to the clipboard with Ctrl-A Ctrl-C.
|
|
</div>
|
|
</script>
|
|
<script type="text/x-red" data-template-name="export-library-dialog">
|
|
<div class="form-row">
|
|
<label for="node-input-filename" ><i class="icon-tag"></i> Filename:</label>
|
|
<input type="text" id="node-input-filename" placeholder="Filename">
|
|
</div>
|
|
</script>
|
|
<script type="text/x-red" data-template-name="import-dialog">
|
|
<div class="form-row">
|
|
<label for="node-input-import"><i class="icon-share"></i>Nodes:</label>
|
|
<textarea style="font-family: monospace; font-size: 12px; background:rgb(226, 229, 255); padding-left: 0.5em;" class="input-block-level" id="node-input-import" rows="5" placeholder="Paste nodes here, or lookup in the library. When importing Arduino code, the whole flow will be replaced."></textarea>
|
|
</div>
|
|
<div class="form-tips">
|
|
<label for="node-input-arduino" style="font-size: 13px; padding: 2px 0px 0px 4px;">
|
|
<input style="margin-bottom: 4px; margin-right: 4px;" type="checkbox" id="node-input-arduino" checked="checked" class="input-block-level" />
|
|
Import copied code from the Arduino IDE
|
|
</label>
|
|
</div>
|
|
</script>
|
|
|
|
<script src="jquery/js/jquery-1.9.1.js"></script>
|
|
<script src="bootstrap/js/bootstrap.min.js"></script>
|
|
<script src="jquery/js/jquery-ui-1.10.3.custom.min.js"></script>
|
|
<script src="jquery/js/jquery.ui.touch-punch.min.js"></script>
|
|
<script src="orion/built-editor.min.js"></script>
|
|
<script src="red/d3/d3.v3.min.js"></script>
|
|
<script src="red/main.js"></script>
|
|
<script src="red/ui/state.js"></script>
|
|
<script src="red/nodes.js"></script>
|
|
<script src="red/storage.js"></script>
|
|
<script src="red/history.js"></script>
|
|
<script src="red/ui/keyboard.js"></script>
|
|
<script src="red/ui/tabs.js"></script>
|
|
<script src="red/ui/view.js"></script>
|
|
<script src="red/ui/sidebar.js"></script>
|
|
<script src="red/ui/palette.js"></script>
|
|
<script src="red/ui/tab-info.js"></script>
|
|
<script src="red/ui/tab-config.js"></script>
|
|
<script src="red/ui/editor.js"></script>
|
|
<script src="red/ui/library.js"></script>
|
|
<script src="red/ui/notifications.js"></script>
|
|
<script src="red/ui/touch/radialMenu.js"></script>
|
|
|
|
<!--
|
|
TODO: generate some or all of this automatically from the C++ source
|
|
-->
|
|
|
|
<!--
|
|
TODO: add a field for maximum instance count
|
|
-->
|
|
<!--
|
|
TODO: add a field for exclusive to other objects (not allowed if they're used)
|
|
-->
|
|
<!--
|
|
TODO: add "parameters" fields, to replace the form html stuff
|
|
-->
|
|
|
|
<script type="text/x-red" data-container-name="NodeDefinitions">
|
|
{"nodes":[
|
|
{"type":"AudioControlTLV320AIC3206","data":{"defaults":{"name":{"value":"new"}},"shortName":"tlv320aic3206","inputs":"0","outputs":"0","category":"control-function","color":"#E6E0F8","icon":"debug.png"}},
|
|
{"type":"AudioInputI2S_F32","data":{"defaults":{"name":{"value":"new"}},"shortName":"i2sAudioIn","inputs":"0","outputs":"2","category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}},
|
|
{"type":"AudioOutputI2S_F32","data":{"defaults":{"name":{"value":"new"}},"shortName":"i2sAudioOut","inputs":"2","outputs":"0","category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}},
|
|
{"type":"AudioConvert_I16toF32","data":{"defaults":{"name":{"value":"new"}},"shortName":"I16toF32","inputs":"1","outputs":"1","category":"convert-function","color":"#E6E0F8","icon":"arrow-in.png"}},
|
|
{"type":"AudioConvert_F32toI16","data":{"defaults":{"name":{"value":"new"}},"shortName":"F32toI16","inputs":"1","outputs":"1","category":"convert-function","color":"#E6E0F8","icon":"arrow-in.png"}},
|
|
{"type":"AudioEffectCompressor_F32","data":{"defaults":{"name":{"value":"new"}},"shortName":"compressor","inputs":"1","outputs":"1","category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}},
|
|
{"type":"AudioEffectGain_F32","data":{"defaults":{"name":{"value":"new"}},"shortName":"gain","inputs":"1","outputs":"1","category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}},
|
|
{"type":"AudioFilterFIR_F32","data":{"defaults":{"name":{"value":"new"}},"shortName":"fir","inputs":"1","outputs":"1","category":"filter-function","color":"#E6E0F8","icon":"arrow-in.png"}},
|
|
{"type":"AudioFilterIIR_F32","data":{"defaults":{"name":{"value":"new"}},"shortName":"iir","inputs":"1","outputs":"1","category":"filter-function","color":"#E6E0F8","icon":"arrow-in.png"}},
|
|
{"type":"AudioMixer4_F32","data":{"defaults":{"name":{"value":"new"}},"shortName":"mixer4","inputs":"4","outputs":"1","category":"mixer-function","color":"#E6E0F8","icon":"arrow-in.png"}},
|
|
{"type":"AudioMultiply_F32","data":{"defaults":{"name":{"value":"new"}},"shortName":"multiply","inputs":"2","outputs":"1","category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}},
|
|
{"type":"AudioControlSGTL5000","data":{"defaults":{"name":{"value":"new"}},"shortName":"sgtl5000","inputs":"0","outputs":"0","category":"control-function","color":"#E6E0F8","icon":"debug.png"}},
|
|
{"type":"AudioInputUSB","data":{"defaults":{"name":{"value":"new"}},"shortName":"usbAudioIn","inputs":"0","outputs":"2","category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}},
|
|
{"type":"AudioOutputUSB","data":{"defaults":{"name":{"value":"new"}},"shortName":"usbAudioOut","inputs":"2","outputs":"0","category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}},
|
|
{"type":"AudioPlayQueue_F32","data":{"defaults":{"name":{"value":"new"}},"shortName":"playQueue","inputs":"0","outputs":"1","category":"play-function","color":"#E6E0F8","icon":"arrow-in.png"}},
|
|
{"type":"AudioRecordQueue_F32","data":{"defaults":{"name":{"value":"new"}},"shortName":"recordQueue","inputs":"1","outputs":"0","category":"record-function","color":"#E6E0F8","icon":"arrow-in.png"}},
|
|
{"type":"AudioSynthNoisePink_F32","data":{"defaults":{"name":{"value":"new"}},"shortName":"noisePink","inputs":"0","outputs":"1","category":"synth-function","color":"#E6E0F8","icon":"arrow-in.png"}},
|
|
{"type":"AudioSynthWaveformSine_F32","data":{"defaults":{"name":{"value":"new"}},"shortName":"sine","inputs":"0","outputs":"1","category":"synth-function","color":"#E6E0F8","icon":"arrow-in.png"}},
|
|
{"type":"AudioSynthWaveform_F32","data":{"defaults":{"name":{"value":"new"}},"shortName":"waveform","inputs":"0","outputs":"1","category":"synth-function","color":"#E6E0F8","icon":"arrow-in.png"}},
|
|
{"type":"AudioSynthNoiseWhite_F32","data":{"defaults":{"name":{"value":"new"}},"shortName":"noiseWhite","inputs":"0","outputs":"1","category":"synth-function","color":"#E6E0F8","icon":"arrow-in.png"}}
|
|
]}
|
|
</script>
|
|
|
|
<script type="text/x-red" data-template-name="AudioControlTLV320AIC3206">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-red" data-help-name="AudioControlTLV320AIC3206">
|
|
<h3>Summary</h3>
|
|
<div class=tooltipinfo>
|
|
<p>Control the TLV320AIC3206 chip that is at the heart of the Tympan audio interface.
|
|
The TLV320AIC3206 is used in slave mode, where Teensy controls
|
|
all clocks and I2S timing in order to get the audio data to and from the chip.
|
|
</p>
|
|
<p align=center><img src="img/TympanAudioInterface-Features.jpg"></p>
|
|
</div>
|
|
<h3>Audio Connections</h3>
|
|
<p>This object has no audio inputs or outputs. Separate i2s objects
|
|
are used to send and receive audio data. I2S master mode objects
|
|
must be used, because this object configures the TLV320AIC3206 in slave
|
|
mode, where it depends on Teensy to provide all I2S clocks.
|
|
This object controls
|
|
how the TLV320AIC3206 will use those I2S audio streams.</p>
|
|
|
|
<h3>Functions</h3>
|
|
<p>These are the most commonly used TLV320AIC3206 functions.</p>
|
|
<p class=func><span class=keyword>enable</span>();</p>
|
|
<p class=desc>Start the TLV320AIC3206 with default configuration settings.
|
|
This function should be called first.
|
|
</p>
|
|
<p class=func><span class=keyword>volume_dB</span>(float value_dB);</p>
|
|
<p class=desc>Set DAC output volume level. Range is -63.6dB to +24dB, in
|
|
0.5dB steps. Decimal values that are not increments of 0.5 will be rounded
|
|
to the nearest step.
|
|
</p>
|
|
<p class=func><span class=keyword>inputSelect</span>(int value);</p>
|
|
<p class=desc>Select which input to use:</p>
|
|
<p class=desc>TYMPAN_INPUT_JACK_AS_MIC - Use Mic Jack, turn MIC BIAS on @2.5V</p>
|
|
<p class=desc>TYMPAN_INPUT_JACK_AS_LINEIN - Use Mic Jack as Line In - MIC BIAS off</p>
|
|
<p class=desc>TYMPAN_INPUT_ON_BOARD_MIC - use on-board microphones, BIAS off</p>
|
|
<p class=desc>TYMPAN_INPUT_LINE_IN - use the IN1 solder pads on the TYMPAN</p>
|
|
<p class=func><span class=keyword>setInputGain_dB</span>(float value_dB);</p>
|
|
<p class=desc>When using the microphone input, set the amplifier gain.
|
|
Range is 0dB to 47.5dB in 0.5dB steps. Decimal values that are not
|
|
increments of 0.5 will be rounded to the nearest step.
|
|
</p>
|
|
|
|
|
|
<h3>Examples</h3>
|
|
<p>This example demonstrates the basic features of this module:
|
|
</p>
|
|
<p class=exam>File > Examples > OpenAudio_ArduinoLibrary > Tympan_TLV320AIC3206
|
|
</p>
|
|
<h3>Notes</h3>
|
|
<p>TODO: Add more examples, following example above.
|
|
</p>
|
|
</script>
|
|
<script type="text/x-red" data-help-name="AudioInputI2S_F32">
|
|
<h3>Summary</h3>
|
|
<div class=tooltipinfo>
|
|
<p>Receive 16 bit stereo audio from the
|
|
<a href="http://www.pjrc.com/store/teensy3_audio.html" target="_blank">audio shield</a>
|
|
or another I2S device, using I2S master mode.</p>
|
|
<p align=center><img src="img/audioshield_inputs.jpg"></p>
|
|
</div>
|
|
<h3>Audio Connections</h3>
|
|
<table class=doc align=center cellpadding=3>
|
|
<tr class=top><th>Port</th><th>Purpose</th></tr>
|
|
<tr class=odd><td align=center>Out 0</td><td>Left Channel</td></tr>
|
|
<tr class=odd><td align=center>Out 1</td><td>Right Channel</td></tr>
|
|
</table>
|
|
<h3>Functions</h3>
|
|
<p>This object has no functions to call from the Arduino sketch. It
|
|
simply streams data from the I2S hardware to its 2 output ports.</p>
|
|
<h3>Hardware</h3>
|
|
<p align=center><img src="img/audioshield_backside.jpg"></p>
|
|
<p>The I2S signals are used in "master" mode, where Teensy creates
|
|
all 3 clock signals and controls all data timing.</p>
|
|
<table class=doc align=center cellpadding=3>
|
|
<tr class=top><th>Pin</th><th>Signal</th><th>Direction</th></tr>
|
|
<tr class=odd><td align=center>9</td><td>BCLK</td><td>Output</td></tr>
|
|
<tr class=odd><td align=center>11</td><td>MCLK</td><td>Output</td></tr>
|
|
<tr class=odd><td align=center>13</td><td>RX</td><td>Input</td></tr>
|
|
<tr class=odd><td align=center>23</td><td>LRCLK</td><td>Output</td></tr>
|
|
</table>
|
|
<p>Audio from
|
|
master mode I2S may be used in the same project as ADC, DAC and
|
|
PWM signals, because all remain in sync to Teensy's timing</p>
|
|
<h3>Examples</h3>
|
|
<p class=exam>File > Examples > Audio > HardwareTesting > PassThroughStereo
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > Recorder
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > Analysis > PeakMeterStereo
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > Analysis > FFT
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > Analysis > SpectrumAnalyzerBasic
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > Effects > Chorus
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > Effects > Flange
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > Effects > Filter
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > Effects > Filter_FIR
|
|
</p>
|
|
<h3>Notes</h3>
|
|
<p>Normally, this object is used with the Audio Shield, which
|
|
is controlled separately by the "sgtl5000" object.</p>
|
|
<p>Only one I2S input and one I2S output object may be used. Master
|
|
and slave modes may not be mixed (both must be of the same type).
|
|
</p>
|
|
<p>I2S master objects can be used together with non-I2S input and output
|
|
objects, for simultaneous audio streaming on different hardware.</p>
|
|
</script>
|
|
<script type="text/x-red" data-template-name="AudioInputI2S_F32">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-red" data-help-name="AudioOutputI2S_F32">
|
|
<h3>Summary</h3>
|
|
<div class=tooltipinfo>
|
|
<p>Transmit 16 bit stereo audio to the
|
|
<a href="http://www.pjrc.com/store/teensy3_audio.html" target="_blank">audio shield</a>
|
|
or another I2S device, using I2S master mode.</p>
|
|
<p align=center><img src="img/audioshield_outputs.jpg"></p>
|
|
</div>
|
|
<h3>Audio Connections</h3>
|
|
<table class=doc align=center cellpadding=3>
|
|
<tr class=top><th>Port</th><th>Purpose</th></tr>
|
|
<tr class=odd><td align=center>In 0</td><td>Left Channel</td></tr>
|
|
<tr class=odd><td align=center>In 1</td><td>Right Channel</td></tr>
|
|
</table>
|
|
<h3>Functions</h3>
|
|
<p>This object has no functions to call from the Arduino sketch. It
|
|
simply streams data from its 2 input ports to the I2S hardware.</p>
|
|
<h3>Hardware</h3>
|
|
<p align=center><img src="img/audioshield_backside.jpg"></p>
|
|
<p>The I2S signals are used in "master" mode, where Teensy creates
|
|
all 3 clock signals and controls all data timing.</p>
|
|
<table class=doc align=center cellpadding=3>
|
|
<tr class=top><th>Pin</th><th>Signal</th><th>Direction</th></tr>
|
|
<tr class=odd><td align=center>9</td><td>BCLK</td><td>Output</td></tr>
|
|
<tr class=odd><td align=center>11</td><td>MCLK</td><td>Output</td></tr>
|
|
<tr class=odd><td align=center>22</td><td>TX</td><td>Output</td></tr>
|
|
<tr class=odd><td align=center>23</td><td>LRCLK</td><td>Output</td></tr>
|
|
</table>
|
|
<p>Audio from
|
|
master mode I2S may be used in the same project as ADC, DAC and
|
|
PWM signals, because all remain in sync to Teensy's timing</p>
|
|
<h3>Examples</h3>
|
|
<p>Nearly all the examples use this object. Here are some of the highlights:</p>
|
|
<p class=exam>File > Examples > Audio > HardwareTesting > PassThroughStereo
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > SamplePlayer
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > Recorder
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > WavFilePlayer
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > Effects > Chorus
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > Synthesis > PlaySynthMusic
|
|
</p>
|
|
<h3>Notes</h3>
|
|
<p>Normally, this object is used with the Audio Shield, which
|
|
is controlled separately by the "sgtl5000" object.</p>
|
|
<p>Only one I2S input and one I2S output object may be used. Master
|
|
and slave modes may not be mixed (both must be of the same type).
|
|
</p>
|
|
</script>
|
|
<script type="text/x-red" data-template-name="AudioOutputI2S_F32">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-red" data-template-name="AudioConvert_I16toF32 ">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
<script type="text/x-red" data-template-name="AudioConvert_F32toI16 ">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
<script type="text/x-red" data-template-name="AudioEffectCompressor_F32 ">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
<script type="text/x-red" data-template-name="AudioEffectGain_F32 ">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
<script type="text/x-red" data-help-name="AudioFilterFIR_F32">
|
|
<h3>Summary</h3>
|
|
<div class=tooltipinfo>
|
|
<p>Finite impulse response filter, useful for all sorts of filtering.
|
|
</p>
|
|
<p align=center><img src="img/fir_filter.png"></p>
|
|
</div>
|
|
<h3>Audio Connections</h3>
|
|
<table class=doc align=center cellpadding=3>
|
|
<tr class=top><th>Port</th><th>Purpose</th></tr>
|
|
<tr class=odd><td align=center>In 0</td><td>Signal to be filtered</td></tr>
|
|
<tr class=odd><td align=center>Out 0</td><td>Filtered Signal Output</td></tr>
|
|
</table>
|
|
<h3>Functions</h3>
|
|
<p class=func><span class=keyword>begin</span>(array, length);</p>
|
|
<p class=desc>Initialize the filter. The array must be 16 bit integers (the
|
|
filter's impulse response), and
|
|
length indicates the number of points in the array. Array may also be
|
|
FIR_PASSTHRU (length = 0), to directly pass the input to output without
|
|
filtering.
|
|
</p>
|
|
<p class=func><span class=keyword>end</span>();</p>
|
|
<p class=desc>Turn the filter off.
|
|
</p>
|
|
<h3>Examples</h3>
|
|
<p class=exam>File > Examples > Audio > Effects > Filter_FIR
|
|
</p>
|
|
<h3>Known Issues</h3>
|
|
<p>Your filter's impulse response array must have an even length. If you have
|
|
add odd number of taps, you must add an extra zero to increase the length
|
|
to an even number.
|
|
</p>
|
|
<p>The minimum number of taps is 4. If you use less, add extra zeros to increase
|
|
the length to 4.
|
|
</p>
|
|
<p>The impulse response must be given in reverse order. Many filters have
|
|
symetrical impluse response, making this a non-issue. If your filter has
|
|
a non-symetrical response, make sure the data is in reverse time order.
|
|
</p>
|
|
<h3>Notes</h3>
|
|
<p>FIR filters requires more CPU time than Biquad (IIR), but they can
|
|
implement filters with better phase response.
|
|
</p>
|
|
<p>A 100 point filter requires 9% CPU time on Teensy 3.1. The maximum
|
|
supported filter length is 200 points.
|
|
</p>
|
|
<p>The free
|
|
<a href="http://t-filter.engineerjs.com/" target="_blank"> TFilter Design Tool</a>
|
|
can be used to create the impulse response array. Be sure to set the sampling
|
|
frequency to 44117 HZ (it defaults to only 2000 Hz) and the output type to "int" (16 bit).
|
|
</p>
|
|
<p>
|
|
If you use TFilter Design's "C/C++ array" option, it's output has "int" definition, which
|
|
is 32 bits on Teensy 3.1. Edit "int" to "short" for an array of 16 bit numbers,
|
|
and add "const" to avoid consuming extra RAM.
|
|
</p>
|
|
</script>
|
|
<script type="text/x-red" data-template-name="AudioFilterFIR_F32">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-red" data-template-name="AudioFilterIIR_F32 ">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
<script type="text/x-red" data-help-name="AudioMixer4_F32">
|
|
<h3>Summary</h3>
|
|
<div class=tooltipinfo>
|
|
<p>Combine up to 4 audio signals together, each with adjustable gain.
|
|
All channels support signal attenuation or amplification.</p>
|
|
</div>
|
|
<h3>Audio Connections</h3>
|
|
<table class=doc align=center cellpadding=3>
|
|
<tr class=top><th>Port</th><th>Purpose</th></tr>
|
|
<tr class=odd><td align=center>In 0</td><td>Input signal #1</td></tr>
|
|
<tr class=odd><td align=center>In 1</td><td>Input signal #2</td></tr>
|
|
<tr class=odd><td align=center>In 2</td><td>Input signal #3</td></tr>
|
|
<tr class=odd><td align=center>In 3</td><td>Input signal #4</td></tr>
|
|
<tr class=odd><td align=center>Out 0</td><td>Sum of all inputs</td></tr>
|
|
</table>
|
|
<h3>Functions</h3>
|
|
<p class=func><span class=keyword>gain</span>(channel, level);</p>
|
|
<p class=desc>Adjust the amplification or attenuation. "channel" must
|
|
be 0 to 3. "level" may be any floating point number from 0 to 32767.
|
|
1.0 passes the signal through directly. Level of 0 shuts the channel
|
|
off completely. Between 0 to 1.0 attenuates the signal, and above
|
|
1.0 amplifies it. All 4 channels have separate settings.
|
|
</p>
|
|
<h3>Examples</h3>
|
|
<p class=exam>File > Examples > Audio > SamplePlayer
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > Synthesis > PlaySynthMusic
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > Analysis > SpectrumAnalyzerBasic
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > Analysis > DialTone_Serial
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > MemoryAndCpuUsage
|
|
</p>
|
|
<h3>Notes</h3>
|
|
<p>Signal clipping can occur when any channel has gain greater than 1.0,
|
|
or when multiple signals add together to greater than 1.0.</p>
|
|
<p>More than 4 channels may be combined by connecting multiple mixers
|
|
in tandem. For example, a 16 channel mixer may be built using 5
|
|
mixers, where the fifth mixer combines the outputs of the first 4.
|
|
</p>
|
|
</script>
|
|
<script type="text/x-red" data-template-name="AudioMixer4_F32">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-red" data-template-name="AudioMultiply_F32 ">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
<script type="text/x-red" data-help-name="AudioControlSGTL5000">
|
|
<h3>Summary</h3>
|
|
<div class=tooltipinfo>
|
|
<p>Control the SGTL5000 chip on the
|
|
<a href="http://www.pjrc.com/store/teensy3_audio.html" target="_blank">audio shield</a>.
|
|
SGTL5000 is always used in slave mode, where Teensy controls
|
|
all I2S timing.
|
|
</p>
|
|
<p align=center><img src="img/sgtl5000closeup.jpg"></p>
|
|
</div>
|
|
<h3>Audio Connections</h3>
|
|
<p>This object has no audio inputs or outputs. Separate i2s objects
|
|
are used to send and receive audio data. I2S master mode objects
|
|
must be used, because this object configures the SGTL5000 in slave
|
|
mode, where it depends on Teensy to provide all I2S clocks.
|
|
This object controls
|
|
how the SGTL5000 will use those I2S audio streams.</p>
|
|
|
|
<h3>Functions</h3>
|
|
<p>These are the most commonly used SGTL5000 functions.</p>
|
|
<p class=func><span class=keyword>enable</span>();</p>
|
|
<p class=desc>Start the SGTL5000. This function should be called first.
|
|
</p>
|
|
<p class=func><span class=keyword>volume</span>(level);</p>
|
|
<p class=desc>Set the headphone volume level. Range is 0 to 1.0, but
|
|
0.8 corresponds to the maximum undistorted output for a full scale
|
|
signal. Usually 0.5 is a comfortable listening level. The line
|
|
level outputs are <em>not</em> changed by this function.
|
|
</p>
|
|
<p class=func><span class=keyword>inputSelect</span>(input);</p>
|
|
<p class=desc>Select which input to use: AUDIO_INPUT_LINEIN or AUDIO_INPUT_MIC.
|
|
</p>
|
|
<p class=func><span class=keyword>micGain</span>(dB);</p>
|
|
<p class=desc>When using the microphone input, set the amplifier gain.
|
|
The input number is in decibels, from 0 to 63.
|
|
</p>
|
|
|
|
<h3>Signal Levels</h3>
|
|
|
|
<p>The default signal levels should be used for most applications,
|
|
but these functions allow you to customize the analog signals.</p>
|
|
|
|
<p class=func><span class=keyword>muteHeadphone</span>();</p>
|
|
<p class=desc>Silence the headphone output.
|
|
</p>
|
|
<p class=func><span class=keyword>unmuteHeadphone</span>();</p>
|
|
<p class=desc>Turn the headphone output on.
|
|
</p>
|
|
<p class=func><span class=keyword>muteLineout</span>();</p>
|
|
<p class=desc>Silence the line level outputs.
|
|
</p>
|
|
<p class=func><span class=keyword>unmuteLineout</span>();</p>
|
|
<p class=desc>Turn the line level outputs on.
|
|
</p>
|
|
<p class=func><span class=keyword>lineInLevel</span>(both);</p>
|
|
<p class=desc style="padding-bottom:0.2em;">Adjust the sensitivity of the line-level inputs.
|
|
Fifteen settings are possible:
|
|
</p>
|
|
<pre class="desc">
|
|
0: 3.12 Volts p-p
|
|
1: 2.63 Volts p-p
|
|
2: 2.22 Volts p-p
|
|
3: 1.87 Volts p-p
|
|
4: 1.58 Volts p-p
|
|
5: 1.33 Volts p-p (default)
|
|
6: 1.11 Volts p-p
|
|
7: 0.94 Volts p-p
|
|
8: 0.79 Volts p-p
|
|
9: 0.67 Volts p-p
|
|
10: 0.56 Volts p-p
|
|
11: 0.48 Volts p-p
|
|
12: 0.40 Volts p-p
|
|
13: 0.34 Volts p-p
|
|
14: 0.29 Volts p-p
|
|
15: 0.24 Volts p-p
|
|
</pre>
|
|
<p class=func><span class=keyword>lineInLevel</span>(left, right);</p>
|
|
<p class=desc>Adjust the sensitivity of the line-level inputs, with different
|
|
settings for left and right. The same 15 settings are available.
|
|
</p>
|
|
<p class=func><span class=keyword>lineOutLevel</span>(both);</p>
|
|
<p class=desc style="padding-bottom:0.2em;">Adjust the line level output
|
|
voltage range. The following settings are possible:
|
|
</p>
|
|
<pre class="desc">
|
|
13: 3.16 Volts p-p
|
|
14: 2.98 Volts p-p
|
|
15: 2.83 Volts p-p
|
|
16: 2.67 Volts p-p
|
|
17: 2.53 Volts p-p
|
|
18: 2.39 Volts p-p
|
|
19: 2.26 Volts p-p
|
|
20: 2.14 Volts p-p
|
|
21: 2.02 Volts p-p
|
|
22: 1.91 Volts p-p
|
|
23: 1.80 Volts p-p
|
|
24: 1.71 Volts p-p
|
|
25: 1.62 Volts p-p
|
|
26: 1.53 Volts p-p
|
|
27: 1.44 Volts p-p
|
|
28: 1.37 Volts p-p
|
|
29: 1.29 Volts p-p (default)
|
|
30: 1.22 Volts p-p
|
|
31: 1.16 Volts p-p
|
|
</pre>
|
|
<p class=func><span class=keyword>lineOutLevel</span>(left, right);</p>
|
|
<p class=desc>Adjust the line level outout voltage range, with separate
|
|
settings for left and right. The same settings (13 to 31) are available.
|
|
</p>
|
|
|
|
|
|
<h3>Signal Conditioning</h3>
|
|
|
|
<p>Usually these digital signal conditioning features should be left at their
|
|
default settings.
|
|
</p>
|
|
|
|
<p class=func><span class=keyword>adcHighPassFilterFreeze</span>();</p>
|
|
<p class=desc>By default, the analog input (either line-level inputs or mic)
|
|
is high-pass filtered, to remove any DC component. This function
|
|
freezes the filter, so the current DC component is still substracted, but
|
|
the filter stops tracking any DC or low frequency changes.
|
|
</p>
|
|
<p class=func><span class=keyword>adcHighPassFilterDisable</span>();</p>
|
|
<p class=desc>Completely disable the analog input filter. DC and sub-audible
|
|
low frequencies are allowed to enter the digital signal.
|
|
</p>
|
|
<p class=func><span class=keyword>adcHighPassFilterEnable</span>();</p>
|
|
<p class=desc>Turn the DC-blocking filter back on, if disabled, or
|
|
allows it to resume tracking DC and low frequency changes, if
|
|
previously frozen. This is the default setting.
|
|
</p>
|
|
<p class=func><span class=keyword>dacVolume</span>(both);</p>
|
|
<p class=desc>Normally output volume should be used with volume(), which
|
|
changes the analog gain in the headphone amplifier. This function
|
|
on the other hand controls digital attenuation before conversion to analog, which
|
|
reduces resolution, but allows another fine control of output
|
|
signal level. The ranges is 0 to 1.0, with the default (no digital attenuation)
|
|
at 1.0.
|
|
</p>
|
|
<p class=desc>dacVolume uses zero-crossing detect to avoid clicks, and graceful
|
|
ramping is handled by the chip so that a new volume may be set directly in
|
|
a single call.
|
|
</p>
|
|
<p class=func><span class=keyword>dacVolume</span>(left, right);</p>
|
|
<p class=desc>Adjust the digital output volume separately on left and
|
|
right channels.
|
|
</p>
|
|
<p class=func><span class=keyword>dacVolumeRamp</span>();</p>
|
|
<p class=desc>Enable graceful volume ramping. The dacVolume adjusts gradually using
|
|
an exponential curve. Pops or loud clicks are avoided when making large
|
|
changes in volume level.
|
|
</p>
|
|
<p class=func><span class=keyword>dacVolumeRampLinear</span>();</p>
|
|
<p class=desc>Enable faster volume ramping. A slight click may be heard during a
|
|
large volume change.
|
|
</p>
|
|
<p class=func><span class=keyword>dacVolumeRampDisable</span>();</p>
|
|
<p class=desc>Do not use any gradual ramping. The zero cross feature still helps
|
|
for small changes, but large volume changes may produce a pop or click.
|
|
</p>
|
|
|
|
<h3>Audio Processor</h3>
|
|
|
|
<p>The optional digital audio processor is capable of implementing
|
|
one or more of: automatic volume control, surround sound control,
|
|
bass enhancement, and tonal adjustments (either a
|
|
simple tone control, or a parametric equalizer, or a graphic equalizer),
|
|
in that order.
|
|
</p>
|
|
<p>These signal processing features are implemented in the SGTL5000 chip,
|
|
so they do not consume CPU time on Teensy. However, the order of
|
|
these processes is fixed in the hardware.
|
|
</p>
|
|
<p>It is good practice to mute the outputs before enabling or disabling
|
|
the Audio Processor, to avoid clicks or thumps.
|
|
</p>
|
|
|
|
<p class=func><span class=keyword>audioPreProcessorEnable</span>();</p>
|
|
<p class=desc>Enable the audio processor to pre-process the input
|
|
(from either line-level inputs or microphone) before it's sent
|
|
to Teensy by I2S.
|
|
</p>
|
|
<p class=func><span class=keyword>audioPostProcessorEnable</span>();</p>
|
|
<p class=desc>Enable the audio processor to post-process Teensy's
|
|
I2S output before it's turned into analog signals for the
|
|
headphones and/or line level outputs.
|
|
</p>
|
|
<p class=func><span class=keyword>audioProcessorDisable</span>();</p>
|
|
<p class=desc>Disable the audio processor.
|
|
</p>
|
|
<p class=func><span class=keyword>autoVolumeControl</span>(maxGain, response, hardLimit, threshold, attack, decay);</p>
|
|
<p class=desc>Configures the auto volume control, which is implemented as a compressor/expander
|
|
or hard limiter. <em>maxGain</em> is the maximum gain that can be applied for expanding, and
|
|
can take one of three values: 0 (0dB), 1 (6.0dB) and 2 (12dB). Values greater than 2 are treated
|
|
as 2. <em>response</em> controls the integration time for the compressor and can take
|
|
four values: 0 (0ms), 1 (25ms), 2 (50ms) or 3 (100ms). Larger values average the volume
|
|
over a longer time, allowing short-term peaks through.
|
|
</p>
|
|
<p class=desc>If <em>hardLimit</em> is 0, a 'soft
|
|
knee' compressor is used to progressively compress louder values which are near to or above the
|
|
threashold (the louder they are, the greater the compression). If it is 1, a hard compressor
|
|
is used (all values above the threashold are the same loudness). The <em>threashold</em> is specified
|
|
as a float in the range 0dBFS to -96dBFS, where -18dBFS is a typical value.
|
|
<em>attack</em> is a float controlling the rate of decrease in gain when the signal is over
|
|
threashold, in dB/s. <em>decay</em> controls how fast gain is restored once the level
|
|
drops below threashold, again in dB/s. It is typically set to a longer value than attack.
|
|
</p>
|
|
<p class=func><span class=keyword>autoVolumeEnable</span>();</p>
|
|
<p class=desc>Enables auto volume control, using the previously specified settings.
|
|
</p>
|
|
<p class=func><span class=keyword>autoVolumeDisable</span>();</p>
|
|
<p class=desc>Disables auto volume control.
|
|
</p>
|
|
|
|
<p class=func><span class=keyword>surroundSoundEnable</span>();</p>
|
|
<p class=desc>Enable virtual surround processing, to give a broader and
|
|
deeper stereo image (even with mono input).
|
|
</p>
|
|
<p class=func><span class=keyword>surroundSoundDisable</span>();</p>
|
|
<p class=desc>Disable virtual surround processing. Before disabling, ramp up
|
|
the width to maximum to avoid pops.
|
|
</p>
|
|
<p class=func><span class=keyword>surroundSound</span>(width);</p>
|
|
<p class=desc>Configures virtual surround width from 0 (mono) to 7 (widest).
|
|
</p>
|
|
<p class=func><span class=keyword>surroundSound</span>(width, select);</p>
|
|
<p class=desc>Configures virtual surround width from 0 (mono) to 7 (widest).
|
|
<em>select</em> may be set to 1 (disable), 2 (mono input) or 3 (stereo input).
|
|
</p>
|
|
|
|
<p class=func><span class=keyword>enhanceBassEnable</span>();</p>
|
|
<p class=desc>Enable bass enhancement. A mono, low-pass filtered copy of
|
|
the original stereo signal has bass levels boosted and is then mixed back into
|
|
the stereo signal, which is then optionally high pass filtered (to remove
|
|
inaudible subsonic frequencies).
|
|
</p>
|
|
<p class=func><span class=keyword>enhanceBassDisable</span>();</p>
|
|
<p class=desc>Disable bass enhancement. Before disabling, ramp down the bass
|
|
enhancement level to zero.
|
|
</p>
|
|
<p class=func><span class=keyword>enhanceBass</span>(lr_lev, bass_lev);</p>
|
|
<p class=desc>Configures the bass enhancement by setting the levels of the
|
|
original stereo signal and the bass-enhanced mono level which will be mixed together.
|
|
There is no high-pass filter.
|
|
</p>
|
|
<p class=desc>When changing bass level, call this function repeatedly to ramp up or down the bass in
|
|
steps of 0.5dB, to avoid pops.
|
|
</p>
|
|
<p class=func><span class=keyword>enhanceBass</span>(lr_lev, bass_lev, hpf_bypass, cutoff);</p>
|
|
<p class=desc>Configures the bass enhancement by setting the levels of the
|
|
original stereo signal and the bass-enhanced mono level which will be mixed together.
|
|
The high-pass filter may be enabled (0) or bypassed (1). The cutoff frequency is specified
|
|
as follows:
|
|
</p>
|
|
<pre class="desc">
|
|
value frequency
|
|
0 80Hz
|
|
1 100Hz
|
|
2 125Hz
|
|
3 150Hz
|
|
4 175Hz
|
|
5 200Hz
|
|
6 225Hz
|
|
</pre>
|
|
<p class=desc>When changing bass level, call this function repeatedly to ramp up or down the bass in
|
|
steps of 0.5dB, to avoid pops.
|
|
</p>
|
|
|
|
<p class=func><span class=keyword>eqSelect</span>(n);</p>
|
|
<p class=desc>Selects the type of frequency control, where <em>n</em> is
|
|
one of</p>
|
|
<p class=desc><b>FLAT_FREQUENCY (0)</b><br>
|
|
Equalizers and tone controls disabled, flat frequency response.</p>
|
|
<p class=desc><b>PARAMETRIC_EQUALIZER (1)</b><br>
|
|
Enables the 7-band parametric equalizer, thus disabling the
|
|
tone controls and graphic equalizer.</p>
|
|
<p class=desc><b>TONE_CONTROLS (2)</b><br>
|
|
Enables bass and treble tone controls, disabling the parametric
|
|
equalization and graphic equalizer.</p>
|
|
<p class=desc><b>GRAPHIC_EQUALIZER (3)</b><br>
|
|
Enables the five-band graphic equalizer, disabling the parametric
|
|
equalization and tone controls.</p>
|
|
|
|
|
|
<p class=func><span class=keyword>eqBands</span>(bass, treble);</p>
|
|
<p class=desc>Configures bass and treble tone controls, which are
|
|
implemented as one second order low pass filter (bass) in parallel with
|
|
one second order high pass filter (treble).
|
|
</p>
|
|
<p class=desc>When changing bass or treble level, call this function repeatedly to ramp
|
|
up or down the level in steps of 0.04 (=0.5dB) or so, to avoid pops.
|
|
</p>
|
|
<p class=func><span class=keyword>eqBands</span>(bass, mid_bass, midrange, mid_treble, treble);</p>
|
|
<p class=desc>Configures the graphic equalizer. It is implemented by five parallel,
|
|
second order biquad filters with fixed frequencies of 115Hz, 330Hz, 990Hz, 3kHz,
|
|
and 9.9kHz. Each band has a range of adjustment from 1.00 (+12dB) to -1.00 (-11.75dB).
|
|
</p>
|
|
<p class=func><span class=keyword>eqBand</span>(bandNum, n);</p>
|
|
<p class=desc>Configures the gain or cut on one band in the graphic equalizer.
|
|
<em>bandnum</em> can range from 1 to 5; <em>n</em> is a float in the range 1.00 to -1.00.
|
|
</p>
|
|
<p class=desc>When changing a band, call this function repeatedly to ramp up the gain in steps of 0.5dB,
|
|
to avoid pops.
|
|
</p>
|
|
|
|
<p class=func><span class=keyword>eqFilter</span>(filterNum, filterParameters);</p>
|
|
<p class=desc>Configurs the parametric equalizer. The number of filters (1 to 7)
|
|
is specified along with a pointer to an array of filter coefficients.
|
|
The parametric equalizer is implemented using 7 cascaded, second order bi-quad
|
|
filters whose frequencies, gain, and Q may be freely configured, but each filter
|
|
can only be specified as a set of filter coefficients.
|
|
</p>
|
|
<p class=func><span class=keyword>eqFilterCount</span>(n);</p>
|
|
<p class=desc>Enables zero or more of the already enabled parametric filters.
|
|
</p>
|
|
|
|
<h3>Examples</h3>
|
|
<p>Nearly all of the library's examples use this object. These
|
|
examples demonstrate its special features.
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > HardwareTesting > PassThroughStereo
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > HardwareTesting > SGTL5000 > dap_bass_enhance
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > HardwareTesting > SGTL5000 > dap_avc_agc
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > HardwareTesting > SGTL5000 > balanceDAC
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > HardwareTesting > SGTL5000 > balanceHP
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > HardwareTesting > SGTL5000 > CalcBiquadToneControlDAP
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > HardwareTesting > SGTL5000 > VolumeRamp
|
|
</p>
|
|
<h3>Notes</h3>
|
|
<p>TODO: add example with rock/classical/speech presets, where rock uses bass boost
|
|
and surround enhancement while speech uses bandpass filtering and auto volume control
|
|
compression.
|
|
</p>
|
|
<p>TODO: add example with two analogRead pots for bass and treble to demonstrate ramping.
|
|
</p>
|
|
</script>
|
|
<script type="text/x-red" data-template-name="AudioControlSGTL5000">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-red" data-help-name="AudioInputUSB">
|
|
<h3>Summary</h3>
|
|
<div class=tooltipinfo>
|
|
<p>Receive stereo audio from a PC or Mac. Teensy appears as a USB
|
|
sound device.</p>
|
|
<p align=center><img src="img/usbtype_audio_in.png"></p>
|
|
</div>
|
|
<h3>Audio Connections</h3>
|
|
<table class=doc align=center cellpadding=3>
|
|
<tr class=top><th>Port</th><th>Purpose</th></tr>
|
|
<tr class=odd><td align=center>Out 0</td><td>Left Channel</td></tr>
|
|
<tr class=odd><td align=center>Out 1</td><td>Right Channel</td></tr>
|
|
</table>
|
|
<h3>Functions</h3>
|
|
<p>This object has no functions to call from the Arduino sketch. It
|
|
simply streams data from the USB to its 2 output ports.</p>
|
|
<!--
|
|
<h3>Hardware</h3>
|
|
-->
|
|
<h3>Examples</h3>
|
|
<p class=exam>File > Examples > Audio > HardwareTesting > PassThroughUSB</p>
|
|
</p>
|
|
<h3>Notes</h3>
|
|
<p>Arduino's <b>Tools > USB Type</b> menu must be set to <b>Audio</b>.
|
|
</p>
|
|
<p align=center><img src="img/usbtype_audio.png"></p>
|
|
<p>USB input & output does not cause the Teensy Audio Library to
|
|
update. At least one non-USB input or output object must be
|
|
present for the entire library to update properly.</p>
|
|
<p>A known problem exists with USB audio from Macintosh computers.
|
|
An imperfect <a href="https://forum.pjrc.com/threads/34855-Distorted-audio-when-using-USB-input-on-Teensy-3-1?p=110392&viewfull=1#post110392">workaround
|
|
can be enabled by editing usb_audio.cpp</a>.
|
|
Find and uncomment "#define MACOSX_ADAPTIVE_LIMIT".</p>
|
|
</script>
|
|
<script type="text/x-red" data-template-name="AudioInputUSB">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-red" data-help-name="AudioOutputUSB">
|
|
<h3>Summary</h3>
|
|
<div class=tooltipinfo>
|
|
<p>Send stereo audio to a PC or Mac. Teensy appears as a USB
|
|
sound device.</p>
|
|
<p align=center><img src="img/usbtype_audio_out.png"></p>
|
|
</div>
|
|
<h3>Audio Connections</h3>
|
|
<table class=doc align=center cellpadding=3>
|
|
<tr class=top><th>Port</th><th>Purpose</th></tr>
|
|
<tr class=odd><td align=center>In 0</td><td>Left Channel</td></tr>
|
|
<tr class=odd><td align=center>In 1</td><td>Right Channel</td></tr>
|
|
</table>
|
|
<h3>Functions</h3>
|
|
<p>This object has no functions to call from the Arduino sketch. It
|
|
simply streams from it's 2 input ports to the USB.</p>
|
|
<!--
|
|
<h3>Hardware</h3>
|
|
-->
|
|
<h3>Examples</h3>
|
|
<p class=exam>File > Examples > Audio > HardwareTesting > WavFilePlayerUSB</p>
|
|
</p>
|
|
<h3>Notes</h3>
|
|
<p>Arduino's <b>Tools > USB Type</b> menu must be set to <b>Audio</b>.
|
|
</p>
|
|
<p align=center><img src="img/usbtype_audio.png"></p>
|
|
<p>USB input & output does not cause the Teensy Audio Library to
|
|
update. At least one non-USB input or output object must be
|
|
present for the entire library to update properly.</p>
|
|
<p>A known problem exists with USB audio from Macintosh computers.
|
|
An imperfect <a href="https://forum.pjrc.com/threads/34855-Distorted-audio-when-using-USB-input-on-Teensy-3-1?p=110392&viewfull=1#post110392">workaround
|
|
can be enabled by editing usb_audio.cpp</a>.
|
|
Find and uncomment "#define MACOSX_ADAPTIVE_LIMIT".</p>
|
|
</script>
|
|
<script type="text/x-red" data-template-name="AudioOutputUSB">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-red" data-help-name="AudioPlayQueue_F32">
|
|
<h3>Summary</h3>
|
|
<div class=tooltipinfo>
|
|
<p>Play audio data provided by the Arduino sketch. This object provides
|
|
functions to allow the sketch code to push data into the audio system.</p>
|
|
</div>
|
|
<h3>Audio Connections</h3>
|
|
<table class=doc align=center cellpadding=3>
|
|
<tr class=top><th>Port</th><th>Purpose</th></tr>
|
|
<tr class=odd><td align=center>Out 0</td><td>Sound Output</td></tr>
|
|
</table>
|
|
<h3>Functions</h3>
|
|
<p class=func><span class=keyword>play</span>(int16);</p>
|
|
<p class=desc>not yet implemented
|
|
</p>
|
|
<p class=func><span class=keyword>play</span>(int16[], length);</p>
|
|
<p class=desc>not yet implemented
|
|
</p>
|
|
<p class=func><span class=keyword>getBuffer</span>();</p>
|
|
<p class=desc>Returns a pointer to an array of 128 int16. This buffer
|
|
is within the audio library memory pool, providing the most efficient
|
|
way to input data to the audio system. The buffer is likely to be
|
|
populated by previously used data, so the entire 128 words should be
|
|
written before calling playBuffer(). Only a single buffer should be
|
|
requested at a time. This function may return NULL if no memory is
|
|
available.
|
|
</p>
|
|
<p class=func><span class=keyword>playBuffer</span>();</p>
|
|
<p class=desc>Transmit the buffer previously obtained from getBuffer().
|
|
</p>
|
|
<h3>Examples</h3>
|
|
<p><a href="http://community.arm.com/groups/embedded/blog/2014/05/23/led-video-panel-at-maker-faire-2014" target="_blank">4320 LED Video+Sound Project</a>
|
|
</p>
|
|
<!--
|
|
<p class=exam>File > Examples > Audio >
|
|
</p>
|
|
-->
|
|
<h3>Notes</h3>
|
|
<p>TODO: many caveats....</p>
|
|
<p>
|
|
</p>
|
|
</script>
|
|
<script type="text/x-red" data-template-name="AudioPlayQueue_F32">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-red" data-help-name="AudioRecordQueue_F32">
|
|
<h3>Summary</h3>
|
|
<div class=tooltipinfo>
|
|
<p>Record audio data by sending to the Arduino sketch. This object allows
|
|
sketch code to receive audio packets.</p>
|
|
</div>
|
|
<h3>Audio Connections</h3>
|
|
<table class=doc align=center cellpadding=3>
|
|
<tr class=top><th>Port</th><th>Purpose</th></tr>
|
|
<tr class=odd><td align=center>In 0</td><td>Sound To Access</td></tr>
|
|
</table>
|
|
<h3>Functions</h3>
|
|
<p class=func><span class=keyword>begin</span>();</p>
|
|
<p class=desc>Begin capturing incoming audio to the queue. After calling
|
|
begin, readBuffer() and freeBuffer(), or clear() must be used frequently
|
|
to prevent the queue from filling up.
|
|
</p>
|
|
<p class=func><span class=keyword>available</span>();</p>
|
|
<p class=desc>Returns the number of audio packets available to read.
|
|
</p>
|
|
<p class=func><span class=keyword>readBuffer</span>();</p>
|
|
<p class=desc>Read a single audio packet. A pointer to a 128 sample
|
|
array of 16 bit integers is returned. NULL is returned if no packets
|
|
are available.
|
|
</p>
|
|
<p class=func><span class=keyword>freeBuffer</span>();</p>
|
|
<p class=desc>Release the memory from the previously read packet returned
|
|
from readBuffer(). Only a single packet at a time may be read, and
|
|
each packet must be freed with this function, to return the memory to
|
|
the audio library.
|
|
</p>
|
|
<p class=func><span class=keyword>clear</span>();</p>
|
|
<p class=desc>Discard all audio held in the queue.
|
|
</p>
|
|
<p class=func><span class=keyword>end</span>();</p>
|
|
<p class=desc>Stop capturing incoming audio into the queue. Data already
|
|
captured remains in the queue and may be read with readBuffer().
|
|
</p>
|
|
<h3>Examples</h3>
|
|
<p class=exam>File > Examples > Audio > Recorder
|
|
</p>
|
|
<h3>Notes</h3>
|
|
<p>
|
|
Up to 52 packets may be queued by this object, which allows approximately
|
|
150 ms of audio to be held in the queue, to allow time for the Arduino
|
|
sketch to write data to media or do other high-latency tasks.
|
|
|
|
The actual packets are taken
|
|
from the pool created by AudioMemory().
|
|
</p>
|
|
</script>
|
|
<script type="text/x-red" data-template-name="AudioRecordQueue_F32">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-red" data-help-name="AudioSynthNoisePink_F32">
|
|
<h3>Summary</h3>
|
|
<div class=tooltipinfo>
|
|
<p>Create pink noise, using Stefan Stenzel's "New Shade Of Pink" algorithm.
|
|
</p>
|
|
<!--
|
|
<p align=center><img src="img/whitenoise.png"></p>
|
|
-->
|
|
</div>
|
|
<h3>Audio Connections</h3>
|
|
<table class=doc align=center cellpadding=3>
|
|
<tr class=top><th>Port</th><th>Purpose</th></tr>
|
|
<tr class=odd><td align=center>Out 0</td><td>Pink Noise</td></tr>
|
|
</table>
|
|
<h3>Functions</h3>
|
|
<p class=func><span class=keyword>amplitude</span>(level);</p>
|
|
<p class=desc>Set the output peak level, from 0 (off) to 1.0.
|
|
The default is off. Noise is generated only after setting
|
|
to a non-zero level.
|
|
</p>
|
|
<h3>Examples</h3>
|
|
<p class=exam>File > Examples > Audio > MemoryAndCpuUsage
|
|
</p>
|
|
<h3>Notes</h3>
|
|
<p>Setting the amplitude to zero causes this object to stop using
|
|
CPU time. CPU usage is approx 3% on Teensy 3.1.
|
|
</p>
|
|
<p>Stefan Stenzel's
|
|
<a href="http://stenzel.waldorfmusic.de/post/pink/" target="_blank">New Shade Of Pink</a>
|
|
algorithm. Stefan's terms of use are "Use for any purpose. If used
|
|
in a commercial product, you should give me one."
|
|
</p>
|
|
</script>
|
|
<script type="text/x-red" data-template-name="AudioSynthNoisePink_F32">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-red" data-help-name="AudioSynthWaveformSine_F32">
|
|
<h3>Summary</h3>
|
|
<div class=tooltipinfo>
|
|
<p>Create a sine wave signal</p>
|
|
</div>
|
|
<h3>Audio Connections</h3>
|
|
<table class=doc align=center cellpadding=3>
|
|
<tr class=top><th>Port</th><th>Purpose</th></tr>
|
|
<tr class=odd><td align=center>Out 0</td><td>Sine Wave Output</td></tr>
|
|
</table>
|
|
<h3>Functions</h3>
|
|
<p class=func><span class=keyword>amplitude</span>(level);</p>
|
|
<p class=desc>Set the amplitude, from 0 to 1.0.
|
|
</p>
|
|
<p class=func><span class=keyword>frequency</span>(freq);</p>
|
|
<p class=desc>Set the frequency, from 0 to 22000. Very low values may
|
|
be used to create a LFO (Low Frequency Oscillator) for objects
|
|
with modulation signal inputs.
|
|
</p>
|
|
<p class=func><span class=keyword>phase</span>(angle);</p>
|
|
<p class=desc>
|
|
Cause the generated waveform to jump to a specific point within
|
|
its cycle. Angle is from 0 to 360 degrees. When multiple objects
|
|
are configured,
|
|
<a href="http://www.pjrc.com/teensy/td_libs_AudioProcessorUsage.html" target="_blank">AudioNoInterrupts()</a>
|
|
should be used to guarantee all new settings take effect together.
|
|
</p>
|
|
<h3>Examples</h3>
|
|
<p class=exam>File > Examples > Audio > MemoryAndCpuUsage
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > Analysis > DialTone_Serial
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > Analysis > FFT
|
|
</p>
|
|
<h3>Notes</h3>
|
|
<p></p>
|
|
</script>
|
|
<script type="text/x-red" data-template-name="AudioSynthWaveformSine_F32">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-red" data-help-name="AudioSynthWaveform_F32">
|
|
<h3>Summary</h3>
|
|
<div class=tooltipinfo>
|
|
<p>Create a waveform: sine, sawtooth, square, triangle, pulse or arbitrary.</p>
|
|
</div>
|
|
<h3>Audio Connections</h3>
|
|
<table class=doc align=center cellpadding=3>
|
|
<tr class=top><th>Port</th><th>Purpose</th></tr>
|
|
<tr class=odd><td align=center>Out 0</td><td>Waveform Output</td></tr>
|
|
</table>
|
|
<h3>Functions</h3>
|
|
<p class=func><span class=keyword>begin</span>(waveform);</p>
|
|
<p class=desc>Configure the waveform type to create.
|
|
</p>
|
|
<p class=func><span class=keyword>begin</span>(level, frequency, waveform);</p>
|
|
<p class=desc>Output a waveform, and set the amplitude and frequency.
|
|
</p>
|
|
<p class=func><span class=keyword>frequency</span>(freq);</p>
|
|
<p class=desc>Change the frequency.
|
|
</p>
|
|
<p class=func><span class=keyword>amplitude</span>(level);</p>
|
|
<p class=desc>Change the amplitude. Set to 0 to turn the signal off.
|
|
</p>
|
|
<p class=func><span class=keyword>phase</span>(angle);</p>
|
|
<p class=desc>
|
|
Cause the generated waveform to jump to a specific point within
|
|
its cycle. Angle is from 0 to 360 degrees. When multiple objects
|
|
are configured,
|
|
<a href="http://www.pjrc.com/teensy/td_libs_AudioProcessorUsage.html" target="_blank">AudioNoInterrupts()</a>
|
|
should be used to guarantee all new settings take effect together.
|
|
</p>
|
|
<p class=func><span class=keyword>pulseWidth</span>(amount);</p>
|
|
<p class=desc>Change the width (duty cycle) of the pulse.</p>
|
|
<p class=func><span class=keyword>arbitraryWaveform</span>(array, maxFreq);</p>
|
|
<p class=desc>
|
|
Configure the waveform to be used with WAVEFORM_ARBITRARY. Array
|
|
must be an array of 256 samples. Currently, the data is used
|
|
without any filtering, which can cause aliasing with frequencies
|
|
above 172 Hz. For higher frequency output, you must bandwidth
|
|
limit your waveform data. Someday, "maxFreq" will be used to
|
|
do this automatically.
|
|
</p>
|
|
<h3>Examples</h3>
|
|
<p class=exam>File > Examples > Audio > Synthesis > PlaySynthMusic
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > Synthesis > pulseWidth
|
|
</p>
|
|
<p class=exam>File > Examples > Audio > HardwareTesting > WM8731MikroSine
|
|
</p>
|
|
<h3>Notes</h3>
|
|
<p>Supported Waveforms:<br>
|
|
<ul>
|
|
<li><span class=literal>WAVEFORM_SINE</span></li>
|
|
<li><span class=literal>WAVEFORM_SAWTOOTH</span></li>
|
|
<li><span class=literal>WAVEFORM_SAWTOOTH_REVERSE</span></li>
|
|
<li><span class=literal>WAVEFORM_SQUARE</span></li>
|
|
<li><span class=literal>WAVEFORM_TRIANGLE</span></li>
|
|
<li><span class=literal>WAVEFORM_ARBITRARY</span></li>
|
|
<li><span class=literal>WAVEFORM_PULSE</span></li>
|
|
<li><span class=literal>WAVEFORM_SAMPLE_HOLD</span></li>
|
|
</ul>
|
|
</p>
|
|
</script>
|
|
<script type="text/x-red" data-template-name="AudioSynthWaveform_F32">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/x-red" data-help-name="AudioSynthNoiseWhite_F32">
|
|
<h3>Summary</h3>
|
|
<div class=tooltipinfo>
|
|
<p>Create white noise.
|
|
</p>
|
|
<p align=center><img src="img/whitenoise.png"></p>
|
|
</div>
|
|
<h3>Audio Connections</h3>
|
|
<table class=doc align=center cellpadding=3>
|
|
<tr class=top><th>Port</th><th>Purpose</th></tr>
|
|
<tr class=odd><td align=center>Out 0</td><td>White Noise</td></tr>
|
|
</table>
|
|
<h3>Functions</h3>
|
|
<p class=func><span class=keyword>amplitude</span>(level);</p>
|
|
<p class=desc>Set the output peak level, from 0 (off) to 1.0.
|
|
The default is off. Noise is generated only after setting
|
|
to a non-zero level.
|
|
</p>
|
|
<h3>Examples</h3>
|
|
<p class=exam>File > Examples > Audio >
|
|
</p>
|
|
<h3>Notes</h3>
|
|
<p>Setting the amplitude to zero causes this object to stop using
|
|
CPU time to generate random numbers.
|
|
</p>
|
|
</script>
|
|
<script type="text/x-red" data-template-name="AudioSynthNoiseWhite_F32">
|
|
<div class="form-row">
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
</div>
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|
|
|