290 lines
14 KiB
HTML
290 lines
14 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
|
<meta name="generator" content="Doxygen 1.9.1"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<title>PicoVGA: PWM Audio</title>
|
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="jquery.js"></script>
|
|
<script type="text/javascript" src="dynsections.js"></script>
|
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="resize.js"></script>
|
|
<script type="text/javascript" src="navtreedata.js"></script>
|
|
<script type="text/javascript" src="navtree.js"></script>
|
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
|
<script type="text/javascript" src="search/search.js"></script>
|
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
|
|
<link href="custom.css" rel="stylesheet" type="text/css"/>
|
|
</head>
|
|
<body>
|
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
<div id="titlearea">
|
|
<table cellspacing="0" cellpadding="0">
|
|
<tbody>
|
|
<tr style="height: 56px;">
|
|
<td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
|
|
<td id="projectalign" style="padding-left: 0.5em;">
|
|
<div id="projectname">PicoVGA
|
|
 <span id="projectnumber">1.2-cmake</span>
|
|
</div>
|
|
<div id="projectbrief">VGA/TV display on Raspberry Pico</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.9.1 -->
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
|
/* @license-end */
|
|
</script>
|
|
<script type="text/javascript" src="menudata.js"></script>
|
|
<script type="text/javascript" src="menu.js"></script>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
$(function() {
|
|
initMenu('',true,false,'search.php','Search');
|
|
$(document).ready(function() { init_search(); });
|
|
});
|
|
/* @license-end */</script>
|
|
<div id="main-nav"></div>
|
|
</div><!-- top -->
|
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
|
<div id="nav-tree">
|
|
<div id="nav-tree-contents">
|
|
<div id="nav-sync" class="sync"></div>
|
|
</div>
|
|
</div>
|
|
<div id="splitbar" style="-moz-user-select:none;"
|
|
class="ui-resizable-handle">
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
$(document).ready(function(){initNavTree('group__PWMGroup.html',''); initResizable(); });
|
|
/* @license-end */
|
|
</script>
|
|
<div id="doc-content">
|
|
<!-- window showing the filter options -->
|
|
<div id="MSearchSelectWindow"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
</div>
|
|
|
|
<!-- iframe showing the search results (closed by default) -->
|
|
<div id="MSearchResultsWindow">
|
|
<iframe src="javascript:void(0)" frameborder="0"
|
|
name="MSearchResults" id="MSearchResults">
|
|
</iframe>
|
|
</div>
|
|
|
|
<div class="header">
|
|
<div class="summary">
|
|
<a href="#func-members">Functions</a> </div>
|
|
<div class="headertitle">
|
|
<div class="title">PWM Audio</div> </div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
<a name="details" id="details"></a><h2 class="groupheader">Description</h2>
|
|
<p>The PicoVGA library includes support for audio output using PWM modulation. By default, the audio output is done on the GPIO19 port - defined in the <a class="el" href="pwmsnd_8h.html" title="PWM sound output.">pwmsnd.h</a> file. The port can be connected to directly (e.g. headphones) or better via a simple RC filter with low pass. Audio output using PWM modulation has the advantage that 1 output pin is sufficient and the output circuitry is very simple. The disadvantages are the noise of the sound modulation frequency and the low bit depth of the sound (8 bit depth is used). Higher depth is not possible because of the limited processor frequency. This output is sufficient for most common, undemanding applications (such as retro games). For higher sound quality, another method must be used.</p><ul>
|
|
<li>Sounds are at format 8-bit unsigned (middle at 128), 22050 samples per second, mono</li>
|
|
<li>PWM cycle is 256: TOP = 255</li>
|
|
<li>Required PWM clock: 22050*256 = 5644800 Hz</li>
|
|
<li>GP19 ... MOSI + sound output (PWM1 B) </li>
|
|
</ul>
|
|
<table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
|
Functions</h2></td></tr>
|
|
<tr class="memitem:ga125653aeeb2dc605e83d0927a635983c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__PWMGroup.html#ga125653aeeb2dc605e83d0927a635983c">PWMSndInit</a> ()</td></tr>
|
|
<tr class="memdesc:ga125653aeeb2dc605e83d0927a635983c"><td class="mdescLeft"> </td><td class="mdescRight">Initialize PWM sound output. <a href="group__PWMGroup.html#ga125653aeeb2dc605e83d0927a635983c">More...</a><br /></td></tr>
|
|
<tr class="separator:ga125653aeeb2dc605e83d0927a635983c"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ga7d7587ed33cbb0e94588c96735b5e6d5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__PWMGroup.html#ga7d7587ed33cbb0e94588c96735b5e6d5">PlaySound</a> (const u8 *snd, int len, Bool rep=False, float speed=1.0f)</td></tr>
|
|
<tr class="memdesc:ga7d7587ed33cbb0e94588c96735b5e6d5"><td class="mdescLeft"> </td><td class="mdescRight">Output PWM sound. <a href="group__PWMGroup.html#ga7d7587ed33cbb0e94588c96735b5e6d5">More...</a><br /></td></tr>
|
|
<tr class="separator:ga7d7587ed33cbb0e94588c96735b5e6d5"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:gace7ff7d9e5fec2fa9c349305e72f1503"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__PWMGroup.html#gace7ff7d9e5fec2fa9c349305e72f1503">StopSound</a> ()</td></tr>
|
|
<tr class="memdesc:gace7ff7d9e5fec2fa9c349305e72f1503"><td class="mdescLeft"> </td><td class="mdescRight">stop playing sound <a href="group__PWMGroup.html#gace7ff7d9e5fec2fa9c349305e72f1503">More...</a><br /></td></tr>
|
|
<tr class="separator:gace7ff7d9e5fec2fa9c349305e72f1503"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:gaa69a3c0ca6e5f20455ef1e60c2ea7b31"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__PWMGroup.html#gaa69a3c0ca6e5f20455ef1e60c2ea7b31">SpeedSound</a> (float speed)</td></tr>
|
|
<tr class="memdesc:gaa69a3c0ca6e5f20455ef1e60c2ea7b31"><td class="mdescLeft"> </td><td class="mdescRight">Update sound speed. <a href="group__PWMGroup.html#gaa69a3c0ca6e5f20455ef1e60c2ea7b31">More...</a><br /></td></tr>
|
|
<tr class="separator:gaa69a3c0ca6e5f20455ef1e60c2ea7b31"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:gac5cdc29178dd50bc69a6925a6af5c84a"><td class="memItemLeft" align="right" valign="top"><a id="gac5cdc29178dd50bc69a6925a6af5c84a"></a>
|
|
Bool </td><td class="memItemRight" valign="bottom"><a class="el" href="group__PWMGroup.html#gac5cdc29178dd50bc69a6925a6af5c84a">PlayingSound</a> ()</td></tr>
|
|
<tr class="memdesc:gac5cdc29178dd50bc69a6925a6af5c84a"><td class="mdescLeft"> </td><td class="mdescRight">Check if playing sound. <br /></td></tr>
|
|
<tr class="separator:gac5cdc29178dd50bc69a6925a6af5c84a"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:gaf9f5fbc637ae75e22d2f628cbfd9b665"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__PWMGroup.html#gaf9f5fbc637ae75e22d2f628cbfd9b665">SetNextSound</a> (const u8 *snd, int len)</td></tr>
|
|
<tr class="memdesc:gaf9f5fbc637ae75e22d2f628cbfd9b665"><td class="mdescLeft"> </td><td class="mdescRight">Set the next sound to play. <a href="group__PWMGroup.html#gaf9f5fbc637ae75e22d2f628cbfd9b665">More...</a><br /></td></tr>
|
|
<tr class="separator:gaf9f5fbc637ae75e22d2f628cbfd9b665"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table>
|
|
<h2 class="groupheader">Function Documentation</h2>
|
|
<a id="ga125653aeeb2dc605e83d0927a635983c"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga125653aeeb2dc605e83d0927a635983c">◆ </a></span>PWMSndInit()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void PWMSndInit </td>
|
|
<td>(</td>
|
|
<td class="paramname"></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Initialize PWM sound output. </p>
|
|
<dl class="section note"><dt>Note</dt><dd>If the system clock changes, you must reinitialize the audio output settings by calling this function again. </dd></dl>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ga7d7587ed33cbb0e94588c96735b5e6d5"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga7d7587ed33cbb0e94588c96735b5e6d5">◆ </a></span>PlaySound()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void PlaySound </td>
|
|
<td>(</td>
|
|
<td class="paramtype">const u8 * </td>
|
|
<td class="paramname"><em>snd</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"><em>len</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">Bool </td>
|
|
<td class="paramname"><em>rep</em> = <code>False</code>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">float </td>
|
|
<td class="paramname"><em>speed</em> = <code>1.0f</code> </td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td>)</td>
|
|
<td></td><td></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Output PWM sound. </p>
|
|
<p>The audio must be in uncompressed PCM format, mono, 8 bits, frequency 22050 Hz. The parameters can be used to specify whether the sound will be repeated and the relative speed at which it will be played (the 'speed' parameter can be used to speed up or slow down the sound). </p><dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">snd</td><td>Pointer to sound </td></tr>
|
|
<tr><td class="paramname">len</td><td>Length of sound in number of samples </td></tr>
|
|
<tr><td class="paramname">rep</td><td>True to repeat sample </td></tr>
|
|
<tr><td class="paramname">speed</td><td>Relative speed (1=normal) </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="gace7ff7d9e5fec2fa9c349305e72f1503"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#gace7ff7d9e5fec2fa9c349305e72f1503">◆ </a></span>StopSound()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void StopSound </td>
|
|
<td>(</td>
|
|
<td class="paramname"></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>stop playing sound </p>
|
|
<p>The output to the output pin will continue to be output (it will appear as a low noise), but the value of zero 128 will be used. </p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="gaa69a3c0ca6e5f20455ef1e60c2ea7b31"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#gaa69a3c0ca6e5f20455ef1e60c2ea7b31">◆ </a></span>SpeedSound()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void SpeedSound </td>
|
|
<td>(</td>
|
|
<td class="paramtype">float </td>
|
|
<td class="paramname"><em>speed</em></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Update sound speed. </p>
|
|
<p>Used when repeatedly playing a sound to change the pitch (e.g. the sound of a car engine). </p><dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">speed</td><td>Relative speed (1.0 represents the standard playback speed) </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="gaf9f5fbc637ae75e22d2f628cbfd9b665"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#gaf9f5fbc637ae75e22d2f628cbfd9b665">◆ </a></span>SetNextSound()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void SetNextSound </td>
|
|
<td>(</td>
|
|
<td class="paramtype">const u8 * </td>
|
|
<td class="paramname"><em>snd</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int </td>
|
|
<td class="paramname"><em>len</em> </td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td>)</td>
|
|
<td></td><td></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Set the next sound to play. </p>
|
|
<p>Used for repeated sounds to finish playing the current sound and continue with the next sound. </p><dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">snd</td><td>Pointer to sound </td></tr>
|
|
<tr><td class="paramname">len</td><td>Length of sound in number of samples </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
|
|
</div>
|
|
</div>
|
|
</div><!-- contents -->
|
|
</div><!-- doc-content -->
|
|
<!-- start footer part -->
|
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
|
<ul>
|
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|