diff --git a/_static/basic.css b/_static/basic.css index 2e3cf32..bf18350 100644 --- a/_static/basic.css +++ b/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -130,7 +130,7 @@ ul.search li a { font-weight: bold; } -ul.search li div.context { +ul.search li p.context { color: #888; margin: 2px 0 0 30px; text-align: left; @@ -277,25 +277,25 @@ p.rubric { font-weight: bold; } -img.align-left, .figure.align-left, object.align-left { +img.align-left, figure.align-left, .figure.align-left, object.align-left { clear: left; float: left; margin-right: 1em; } -img.align-right, .figure.align-right, object.align-right { +img.align-right, figure.align-right, .figure.align-right, object.align-right { clear: right; float: right; margin-left: 1em; } -img.align-center, .figure.align-center, object.align-center { +img.align-center, figure.align-center, .figure.align-center, object.align-center { display: block; margin-left: auto; margin-right: auto; } -img.align-default, .figure.align-default { +img.align-default, figure.align-default, .figure.align-default { display: block; margin-left: auto; margin-right: auto; @@ -319,7 +319,8 @@ img.align-default, .figure.align-default { /* -- sidebars -------------------------------------------------------------- */ -div.sidebar { +div.sidebar, +aside.sidebar { margin: 0 0 0.5em 1em; border: 1px solid #ddb; padding: 7px; @@ -377,12 +378,14 @@ div.body p.centered { /* -- content of sidebars/topics/admonitions -------------------------------- */ div.sidebar > :last-child, +aside.sidebar > :last-child, div.topic > :last-child, div.admonition > :last-child { margin-bottom: 0; } div.sidebar::after, +aside.sidebar::after, div.topic::after, div.admonition::after, blockquote::after { @@ -455,20 +458,22 @@ td > :last-child { /* -- figures --------------------------------------------------------------- */ -div.figure { +div.figure, figure { margin: 0.5em; padding: 0.5em; } -div.figure p.caption { +div.figure p.caption, figcaption { padding: 0.3em; } -div.figure p.caption span.caption-number { +div.figure p.caption span.caption-number, +figcaption span.caption-number { font-style: italic; } -div.figure p.caption span.caption-text { +div.figure p.caption span.caption-text, +figcaption span.caption-text { } /* -- field list styles ----------------------------------------------------- */ @@ -503,6 +508,63 @@ table.hlist td { vertical-align: top; } +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + /* -- other body styles ----------------------------------------------------- */ @@ -629,14 +691,6 @@ dl.glossary dt { font-size: 1.1em; } -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - .versionmodified { font-style: italic; } @@ -677,8 +731,9 @@ dl.glossary dt { .classifier:before { font-style: normal; - margin: 0.5em; + margin: 0 0.5em; content: ":"; + display: inline-block; } abbr, acronym { @@ -693,7 +748,7 @@ pre { overflow-y: hidden; /* fixes display issues on Chrome browsers */ } -pre, div[class|="highlight"] { +pre, div[class*="highlight-"] { clear: both; } @@ -702,9 +757,10 @@ span.pre { -ms-hyphens: none; -webkit-hyphens: none; hyphens: none; + white-space: nowrap; } -div[class^="highlight-"] { +div[class*="highlight-"] { margin: 1em 0; } @@ -764,8 +820,13 @@ div.code-block-caption code { } table.highlighttable td.linenos, -div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */ - user-select: none; +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ } div.code-block-caption span.caption-number { @@ -780,16 +841,6 @@ div.literal-block-wrapper { margin: 1em 0; } -code.descname { - background-color: transparent; - font-weight: bold; - font-size: 1.2em; -} - -code.descclassname { - background-color: transparent; -} - code.xref, a code { background-color: transparent; font-weight: bold; diff --git a/_static/doctools.js b/_static/doctools.js index daccd20..e1bfd70 100644 --- a/_static/doctools.js +++ b/_static/doctools.js @@ -4,7 +4,7 @@ * * Sphinx JavaScript utilities for all documentation. * - * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -29,9 +29,14 @@ if (!window.console || !console.firebug) { /** * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL */ jQuery.urldecode = function(x) { - return decodeURIComponent(x).replace(/\+/g, ' '); + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); }; /** @@ -149,9 +154,7 @@ var Documentation = { this.fixFirefoxAnchorBug(); this.highlightSearchWords(); this.initIndexTable(); - if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { - this.initOnKeyListeners(); - } + this.initOnKeyListeners(); }, /** @@ -259,6 +262,16 @@ var Documentation = { hideSearchWords : function() { $('#searchbox .highlight-link').fadeOut(300); $('span.highlighted').removeClass('highlighted'); + var url = new URL(window.location); + url.searchParams.delete('highlight'); + window.history.replaceState({}, '', url); + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar : function() { + $('input[name=q]').first().focus(); }, /** @@ -283,24 +296,54 @@ var Documentation = { }, initOnKeyListeners: function() { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) + return; + $(document).keydown(function(event) { var activeElementType = document.activeElement.tagName; - // don't navigate when in search box or textarea + // don't navigate when in search box, textarea, dropdown or button if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' - && !event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) { - switch (event.keyCode) { - case 37: // left - var prevHref = $('link[rel="prev"]').prop('href'); - if (prevHref) { - window.location.href = prevHref; - return false; - } - case 39: // right - var nextHref = $('link[rel="next"]').prop('href'); - if (nextHref) { - window.location.href = nextHref; - return false; - } + && activeElementType !== 'BUTTON') { + if (event.altKey || event.ctrlKey || event.metaKey) + return; + + if (!event.shiftKey) { + switch (event.key) { + case 'ArrowLeft': + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) + break; + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + break; + case 'ArrowRight': + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) + break; + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + break; + case 'Escape': + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) + break; + Documentation.hideSearchWords(); + return false; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case '/': + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) + break; + Documentation.focusSearchBar(); + return false; } } }); diff --git a/_static/pygments.css b/_static/pygments.css index 20c4814..d14395e 100644 --- a/_static/pygments.css +++ b/_static/pygments.css @@ -1,5 +1,10 @@ +pre { line-height: 125%; margin: 0; } +td.linenos pre { color: #000000; background-color: #f0f0f0; padding: 0 5px 0 5px; } +span.linenos { color: #000000; background-color: #f0f0f0; padding: 0 5px 0 5px; } +td.linenos pre.special { color: #000000; background-color: #ffffc0; padding: 0 5px 0 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding: 0 5px 0 5px; } .highlight .hll { background-color: #ffffcc } -.highlight { background: #eeffcc; } +.highlight { background: #eeffcc; } .highlight .c { color: #408090; font-style: italic } /* Comment */ .highlight .err { border: 1px solid #FF0000 } /* Error */ .highlight .k { color: #007020; font-weight: bold } /* Keyword */ diff --git a/_static/searchtools.js b/_static/searchtools.js index ab56499..0a44e85 100644 --- a/_static/searchtools.js +++ b/_static/searchtools.js @@ -4,7 +4,7 @@ * * Sphinx JavaScript utilities for the full-text search. * - * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -59,10 +59,10 @@ var Search = { _pulse_status : -1, htmlToText : function(htmlString) { - var htmlElement = document.createElement('span'); - htmlElement.innerHTML = htmlString; - $(htmlElement).find('.headerlink').remove(); - docContent = $(htmlElement).find('[role=main]')[0]; + var virtualDocument = document.implementation.createHTMLDocument('virtual'); + var htmlElement = $(htmlString, virtualDocument); + htmlElement.find('.headerlink').remove(); + docContent = htmlElement.find('[role=main]')[0]; if(docContent === undefined) { console.warn("Content block not found. Sphinx search tries to obtain it " + "via '[role=main]'. Could you check your theme or template."); @@ -166,17 +166,12 @@ var Search = { objectterms.push(tmp[i].toLowerCase()); } - if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i].match(/^\d+$/) || - tmp[i] === "") { + if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") { // skip this "word" continue; } // stem the word var word = stemmer.stemWord(tmp[i].toLowerCase()); - // prevent stemmer from cutting word smaller than two chars - if(word.length < 3 && tmp[i].length >= 3) { - word = tmp[i]; - } var toAppend; // select the correct list if (word[0] == '-') { @@ -249,7 +244,7 @@ var Search = { // results left, load the summary and display it if (results.length) { var item = results.pop(); - var listItem = $('
  • '); + var listItem = $('
  • '); var requestUrl = ""; var linkUrl = ""; if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') { @@ -274,28 +269,31 @@ var Search = { if (item[3]) { listItem.append($(' (' + item[3] + ')')); Search.output.append(listItem); - listItem.slideDown(5, function() { + setTimeout(function() { displayNextItem(); - }); - } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) { + }, 5); + } else if (DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY) { $.ajax({url: requestUrl, dataType: "text", complete: function(jqxhr, textstatus) { var data = jqxhr.responseText; if (data !== '' && data !== undefined) { - listItem.append(Search.makeSearchSummary(data, searchterms, hlterms)); + var summary = Search.makeSearchSummary(data, searchterms, hlterms); + if (summary) { + listItem.append(summary); + } } Search.output.append(listItem); - listItem.slideDown(5, function() { + setTimeout(function() { displayNextItem(); - }); + }, 5); }}); } else { - // no source available, just display title + // just display title Search.output.append(listItem); - listItem.slideDown(5, function() { + setTimeout(function() { displayNextItem(); - }); + }, 5); } } // search finished, update title and status message @@ -326,7 +324,9 @@ var Search = { var results = []; for (var prefix in objects) { - for (var name in objects[prefix]) { + for (var iMatch = 0; iMatch != objects[prefix].length; ++iMatch) { + var match = objects[prefix][iMatch]; + var name = match[4]; var fullname = (prefix ? prefix + '.' : '') + name; var fullnameLower = fullname.toLowerCase() if (fullnameLower.indexOf(object) > -1) { @@ -340,7 +340,6 @@ var Search = { } else if (parts[parts.length - 1].indexOf(object) > -1) { score += Scorer.objPartialMatch; } - var match = objects[prefix][name]; var objname = objnames[match[1]][2]; var title = titles[match[0]]; // If more than one term searched for, we require other words to be @@ -380,6 +379,13 @@ var Search = { return results; }, + /** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions + */ + escapeRegExp : function(string) { + return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string + }, + /** * search for full-text terms in the index */ @@ -403,13 +409,14 @@ var Search = { ]; // add support for partial matches if (word.length > 2) { + var word_regex = this.escapeRegExp(word); for (var w in terms) { - if (w.match(word) && !terms[word]) { + if (w.match(word_regex) && !terms[word]) { _o.push({files: terms[w], score: Scorer.partialTerm}) } } for (var w in titleterms) { - if (w.match(word) && !titleterms[word]) { + if (w.match(word_regex) && !titleterms[word]) { _o.push({files: titleterms[w], score: Scorer.partialTitle}) } } @@ -491,6 +498,9 @@ var Search = { */ makeSearchSummary : function(htmlText, keywords, hlwords) { var text = Search.htmlToText(htmlText); + if (text == "") { + return null; + } var textLower = text.toLowerCase(); var start = 0; $.each(keywords, function() { @@ -502,7 +512,7 @@ var Search = { var excerpt = ((start > 0) ? '...' : '') + $.trim(text.substr(start, 240)) + ((start + 240 - text.length) ? '...' : ''); - var rv = $('
    ').text(excerpt); + var rv = $('

    ').text(excerpt); $.each(hlwords, function() { rv = rv.highlightText(this, 'highlighted'); }); diff --git a/_static/underscore.js b/_static/underscore.js index 5b55f32..cf177d4 100644 --- a/_static/underscore.js +++ b/_static/underscore.js @@ -1,31 +1,6 @@ -// Underscore.js 1.3.1 -// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc. -// Underscore is freely distributable under the MIT license. -// Portions of Underscore are inspired or borrowed from Prototype, -// Oliver Steele's Functional, and John Resig's Micro-Templating. -// For all details and documentation: -// http://documentcloud.github.com/underscore -(function(){function q(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source== -c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&q(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&q(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c, -h)&&!f--)break;g=!f}}d.pop();return g}var r=this,G=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,H=k.unshift,l=o.toString,I=o.hasOwnProperty,w=k.forEach,x=k.map,y=k.reduce,z=k.reduceRight,A=k.filter,B=k.every,C=k.some,p=k.indexOf,D=k.lastIndexOf,o=Array.isArray,J=Object.keys,s=Function.prototype.bind,b=function(a){return new m(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else r._=b;b.VERSION="1.3.1";var j=b.each= -b.forEach=function(a,c,d){if(a!=null)if(w&&a.forEach===w)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e2;a== -null&&(a=[]);if(y&&a.reduce===y)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect= -function(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(A&&a.filter===A)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g,h){if(!(e= -e&&c.call(b,a,g,h)))return n});return e};var E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(C&&a.some===C)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck= -function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;bd?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a, -c,d){d||(d=b.identity);for(var e=0,f=a.length;e>1;d(a[g])=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e=0;d--)b=[a[d].apply(this,b)];return b[0]}}; -b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.defaults=function(a){j(i.call(arguments, -1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)}; -b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"}; -b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};b.mixin=function(a){j(b.functions(a), -function(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var t=/.^/,u=function(a){return a.replace(/\\\\/g,"\\").replace(/\\'/g,"'")};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape||t,function(a,b){return"',_.escape("+ -u(b)+"),'"}).replace(d.interpolate||t,function(a,b){return"',"+u(b)+",'"}).replace(d.evaluate||t,function(a,b){return"');"+u(b).replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var v=function(a,c){return c?b(a).chain():a},K=function(a,c){m.prototype[a]= -function(){var a=i.call(arguments);H.call(a,this._wrapped);return v(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return v(d,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain= -true;return this};m.prototype.value=function(){return this._wrapped}}).call(this); +!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define("underscore",r):(n="undefined"!=typeof globalThis?globalThis:n||self,function(){var t=n._,e=n._=r();e.noConflict=function(){return n._=t,e}}())}(this,(function(){ +// Underscore.js 1.13.1 +// https://underscorejs.org +// (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. +var n="1.13.1",r="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},t=Array.prototype,e=Object.prototype,u="undefined"!=typeof Symbol?Symbol.prototype:null,o=t.push,i=t.slice,a=e.toString,f=e.hasOwnProperty,c="undefined"!=typeof ArrayBuffer,l="undefined"!=typeof DataView,s=Array.isArray,p=Object.keys,v=Object.create,h=c&&ArrayBuffer.isView,y=isNaN,d=isFinite,g=!{toString:null}.propertyIsEnumerable("toString"),b=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],m=Math.pow(2,53)-1;function j(n,r){return r=null==r?n.length-1:+r,function(){for(var t=Math.max(arguments.length-r,0),e=Array(t),u=0;u=0&&t<=m}}function J(n){return function(r){return null==r?void 0:r[n]}}var G=J("byteLength"),H=K(G),Q=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;var X=c?function(n){return h?h(n)&&!q(n):H(n)&&Q.test(a.call(n))}:C(!1),Y=J("length");function Z(n,r){r=function(n){for(var r={},t=n.length,e=0;e":">",'"':""","'":"'","`":"`"},Cn=Ln($n),Kn=Ln(_n($n)),Jn=tn.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},Gn=/(.)^/,Hn={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Qn=/\\|'|\r|\n|\u2028|\u2029/g;function Xn(n){return"\\"+Hn[n]}var Yn=/^\s*(\w|\$)+\s*$/;var Zn=0;function nr(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var o=Mn(n.prototype),i=n.apply(o,u);return _(i)?i:o}var rr=j((function(n,r){var t=rr.placeholder,e=function(){for(var u=0,o=r.length,i=Array(o),a=0;a1)ur(a,r-1,t,e),u=e.length;else for(var f=0,c=a.length;f0&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}}var lr=rr(cr,2);function sr(n,r,t){r=qn(r,t);for(var e,u=nn(n),o=0,i=u.length;o0?0:u-1;o>=0&&o0?a=o>=0?o:Math.max(o+f,a):f=o>=0?Math.min(o+1,f):o+f+1;else if(t&&o&&f)return e[o=t(e,u)]===u?o:-1;if(u!=u)return(o=r(i.call(e,a,f),$))>=0?o+a:-1;for(o=n>0?a:f-1;o>=0&&o0?0:i-1;for(u||(e=r[o?o[a]:a],a+=n);a>=0&&a=3;return r(n,Fn(t,u,4),e,o)}}var Ar=wr(1),xr=wr(-1);function Sr(n,r,t){var e=[];return r=qn(r,t),jr(n,(function(n,t,u){r(n,t,u)&&e.push(n)})),e}function Or(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=0;o=0}var Br=j((function(n,r,t){var e,u;return D(r)?u=r:(r=Nn(r),e=r.slice(0,-1),r=r[r.length-1]),_r(n,(function(n){var o=u;if(!o){if(e&&e.length&&(n=In(n,e)),null==n)return;o=n[r]}return null==o?o:o.apply(n,t)}))}));function Nr(n,r){return _r(n,Rn(r))}function Ir(n,r,t){var e,u,o=-1/0,i=-1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;ao&&(o=e);else r=qn(r,t),jr(n,(function(n,t,e){((u=r(n,t,e))>i||u===-1/0&&o===-1/0)&&(o=n,i=u)}));return o}function Tr(n,r,t){if(null==r||t)return er(n)||(n=jn(n)),n[Wn(n.length-1)];var e=er(n)?En(n):jn(n),u=Y(e);r=Math.max(Math.min(r,u),0);for(var o=u-1,i=0;i1&&(e=Fn(e,r[1])),r=an(n)):(e=qr,r=ur(r,!1,!1),n=Object(n));for(var u=0,o=r.length;u1&&(t=r[1])):(r=_r(ur(r,!1,!1),String),e=function(n,t){return!Er(r,t)}),Ur(n,e,t)}));function zr(n,r,t){return i.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))}function Lr(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[0]:zr(n,n.length-r)}function $r(n,r,t){return i.call(n,null==r||t?1:r)}var Cr=j((function(n,r){return r=ur(r,!0,!0),Sr(n,(function(n){return!Er(r,n)}))})),Kr=j((function(n,r){return Cr(n,r)}));function Jr(n,r,t,e){A(r)||(e=t,t=r,r=!1),null!=t&&(t=qn(t,e));for(var u=[],o=[],i=0,a=Y(n);ir?(e&&(clearTimeout(e),e=null),a=c,i=n.apply(u,o),e||(u=o=null)):e||!1===t.trailing||(e=setTimeout(f,l)),i};return c.cancel=function(){clearTimeout(e),a=0,e=u=o=null},c},debounce:function(n,r,t){var e,u,o,i,a,f=function(){var c=zn()-u;r>c?e=setTimeout(f,r-c):(e=null,t||(i=n.apply(a,o)),e||(o=a=null))},c=j((function(c){return a=this,o=c,u=zn(),e||(e=setTimeout(f,r),t&&(i=n.apply(a,o))),i}));return c.cancel=function(){clearTimeout(e),e=o=a=null},c},wrap:function(n,r){return rr(r,n)},negate:fr,compose:function(){var n=arguments,r=n.length-1;return function(){for(var t=r,e=n[r].apply(this,arguments);t--;)e=n[t].call(this,e);return e}},after:function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},before:cr,once:lr,findKey:sr,findIndex:vr,findLastIndex:hr,sortedIndex:yr,indexOf:gr,lastIndexOf:br,find:mr,detect:mr,findWhere:function(n,r){return mr(n,Dn(r))},each:jr,forEach:jr,map:_r,collect:_r,reduce:Ar,foldl:Ar,inject:Ar,reduceRight:xr,foldr:xr,filter:Sr,select:Sr,reject:function(n,r,t){return Sr(n,fr(qn(r)),t)},every:Or,all:Or,some:Mr,any:Mr,contains:Er,includes:Er,include:Er,invoke:Br,pluck:Nr,where:function(n,r){return Sr(n,Dn(r))},max:Ir,min:function(n,r,t){var e,u,o=1/0,i=1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;ae||void 0===t)return 1;if(t - - Index — alsaaudio documentation 0.9.0 documentation - - - + + Index — alsaaudio documentation 0.9.1 documentation + + + - @@ -58,6 +57,10 @@ +

    C

    @@ -79,12 +82,16 @@

    G

      +
    • getmute() (alsaaudio.Mixer method) +
    • getrange() (alsaaudio.Mixer method)
    • getrec() (alsaaudio.Mixer method) @@ -98,6 +105,10 @@ +
      @@ -160,16 +171,20 @@

      S

        +
      • setperiodsize() (alsaaudio.PCM method) +
      • setrate() (alsaaudio.PCM method)
      • setrec() (alsaaudio.Mixer method) @@ -215,7 +230,7 @@

        Navigation

        -

        Contents:

        +

        Contents:

        • Introduction
        • What is ALSA
        • @@ -236,7 +251,7 @@

          Quick search

          @@ -258,7 +273,7 @@ ©2017, Lars Immisch & Casper Wilstrup. | - Powered by Sphinx 3.1.2 + Powered by Sphinx 4.5.0 & Alabaster 0.7.12 diff --git a/index.html b/index.html index 1bc5bd1..5f69b38 100644 --- a/index.html +++ b/index.html @@ -4,15 +4,15 @@ - - alsaaudio documentation — alsaaudio documentation 0.9.0 documentation - - - + + + alsaaudio documentation — alsaaudio documentation 0.9.1 documentation + + + - @@ -32,10 +32,10 @@
          -
          +

          alsaaudio documentation

          -

          Contents:

          +

          Contents:

          -
          -
          + +

          Download

          -
          - -
          + +

          Indices and tables

          -
          +
          @@ -93,7 +93,7 @@

          Navigation

          -

          Contents:

          +

          Contents:

          • Introduction
          • What is ALSA
          • @@ -115,7 +115,7 @@

            Quick search

            @@ -137,7 +137,7 @@ ©2017, Lars Immisch & Casper Wilstrup. | - Powered by Sphinx 3.1.2 + Powered by Sphinx 4.5.0 & Alabaster 0.7.12 | diff --git a/libalsaaudio.html b/libalsaaudio.html index 052e43c..05d4599 100644 --- a/libalsaaudio.html +++ b/libalsaaudio.html @@ -4,15 +4,15 @@ - - alsaaudio — alsaaudio documentation 0.9.0 documentation - - - + + + alsaaudio — alsaaudio documentation 0.9.1 documentation + + + - @@ -32,16 +32,16 @@
            -
            +

            alsaaudio

            The alsaaudio module defines functions and classes for using ALSA.

            -
            -alsaaudio.pcms([type=PCM_PLAYBACK])
            +
            +alsaaudio.pcms(pcmtype=PCM_PLAYBACK)

            List available PCM devices by name.

            Arguments are:

              -
            • type - can be either PCM_CAPTURE or PCM_PLAYBACK +

            • pcmtype - can be either PCM_CAPTURE or PCM_PLAYBACK (default).

            Note:

            @@ -60,16 +60,16 @@ commandline:

            -
            -alsaaudio.cards()
            +
            +alsaaudio.cards()

            List the available ALSA cards by name. This function is only moderately useful. If you want to see a list of available PCM devices, use pcms() instead.

            -
            -alsaaudio.mixers(cardindex=- 1, device='default')
            +
            +alsaaudio.mixers(cardindex=- 1, device='default')

            List the available mixers. The arguments are:

            • cardindex - the card index. If this argument is given, the device name @@ -103,14 +103,20 @@ device, not the mixers for the first card.

            -
            +
            +
            +alsaaudio.asoundlib_version()
            +

            Return a Python string containing the ALSA version found.

            +
            + +

            PCM Objects

            PCM objects in alsaaudio can play or capture (record) PCM sound through speakers or a microphone. The PCM constructor takes the following arguments:

            -
            -class alsaaudio.PCM(type=PCM_PLAYBACK, mode=PCM_NORMAL, rate=44100, channels=2, format=PCM_FORMAT_S16_LE, periodsize=32, device='default', cardindex=- 1)
            +
            +class alsaaudio.PCM(type=PCM_PLAYBACK, mode=PCM_NORMAL, rate=44100, channels=2, format=PCM_FORMAT_S16_LE, periodsize=32, device='default', cardindex=- 1)

            This class is used to represent a PCM device (either for playback and recording). The arguments are:

              @@ -244,60 +250,60 @@ name of the card. This was always fragile and broke some legitimate usecases.

              PCM objects have the following methods:

              -
              -PCM.pcmtype()
              +
              +PCM.pcmtype()

              Returns the type of PCM object. Either PCM_CAPTURE or PCM_PLAYBACK.

              -
              -PCM.pcmmode()
              +
              +PCM.pcmmode()

              Return the mode of the PCM object. One of PCM_NONBLOCK, PCM_ASYNC, or PCM_NORMAL

              -
              -PCM.cardname()
              +
              +PCM.cardname()

              Return the name of the sound card used by this PCM object.

              -
              -PCM.setchannels(nchannels)
              +
              +PCM.setchannels(nchannels)

              Deprecated since version 0.9: Use the channels named argument to PCM().

              -
              -PCM.setrate(rate)
              +
              +PCM.setrate(rate)

              Deprecated since version 0.9: Use the rate named argument to PCM().

              -
              -PCM.setformat(format)
              +
              +PCM.setformat(format)

              Deprecated since version 0.9: Use the format named argument to PCM().

              -
              -PCM.setperiodsize(period)
              +
              +PCM.setperiodsize(period)

              Deprecated since version 0.9: Use the periodsize named argument to PCM().

              -
              -PCM.read()
              +
              +PCM.read()

              In PCM_NORMAL mode, this function blocks until a full period is available, and then returns a tuple (length,data) where length is the number of frames of captured data, and data is the captured @@ -312,8 +318,8 @@ Try using a larger periodsize.

              -
              -PCM.write(data)
              +
              +PCM.write(data)

              Writes (plays) the sound in data. The length of data must be a multiple of the frame size, and should be exactly the size of a period. If less than ‘period size’ frames are provided, the actual @@ -328,21 +334,104 @@ should be written at a later time.

              -
              -PCM.pause([enable=True])
              +
              +PCM.pause([enable=True])

              If enable is True, playback or capture is paused. Otherwise, playback/capture is resumed.

              -
              -PCM.polldescriptors()
              +
              +PCM.polldescriptors()

              Returns a tuple of (file descriptor, eventmask) that can be used to -wait for changes on the mixer with select.poll.

              +wait for changes on the PCM with select.poll.

              The eventmask value is compatible with poll.register in the Python select module.

              +
              +
              +PCM.set_tstamp_mode([mode=PCM_TSTAMP_ENABLE])
              +

              Set the ALSA timestamp mode on the device. The mode argument can be set to +either PCM_TSTAMP_NONE or PCM_TSTAMP_ENABLE.

              +
              + +
              +
              +PCM.get_tstamp_mode()
              +

              Return the integer value corresponding to the ALSA timestamp mode. The +return value can be either PCM_TSTAMP_NONE or PCM_TSTAMP_ENABLE.

              +
              + +
              +
              +PCM.set_tstamp_type([type=PCM_TSTAMP_TYPE_GETTIMEOFDAY])
              +

              Set the ALSA timestamp mode on the device. The type argument +can be set to either PCM_TSTAMP_TYPE_GETTIMEOFDAY, +PCM_TSTAMP_TYPE_MONOTONIC or PCM_TSTAMP_TYPE_MONOTONIC_RAW.

              +
              + +
              +
              +PCM.get_tstamp_type()
              +

              Return the integer value corresponding to the ALSA timestamp type. The +return value can be either PCM_TSTAMP_TYPE_GETTIMEOFDAY, +PCM_TSTAMP_TYPE_MONOTONIC or PCM_TSTAMP_TYPE_MONOTONIC_RAW.

              +
              + +
              +
              +PCM.htimestamp()
              +

              Return a Python tuple (seconds, nanoseconds, frames_available_in_buffer).

              +

              The type of output is controlled by the tstamp_type, as described in the table below.

              + ++++ + + + + + + + + + + + + + + + + +

              Timestamp Type

              Description

              PCM_TSTAMP_TYPE_GETTIMEOFDAY

              System-wide realtime clock with seconds +since epoch.

              PCM_TSTAMP_TYPE_MONOTONIC

              Monotonic time from an unspecified starting +time. Progress is NTP synchronized.

              PCM_TSTAMP_TYPE_MONOTONIC_RAW

              Monotonic time from an unspecified starting +time using only the system clock.

              +

              The timestamp mode is controlled by the tstamp_mode, as described in the table below.

              + ++++ + + + + + + + + + + + + + +

              Timestamp Mode

              Description

              PCM_TSTAMP_NONE

              No timestamp.

              PCM_TSTAMP_ENABLE

              Update timestamp at every hardware position +update.

              +
              +

              A few hints on using PCM devices for playback

              The most common reason for problems with playback of PCM audio is that writes to PCM devices must exactly match the data rate of the device.

              @@ -364,13 +453,13 @@ accummulate time delays: If you set the timer to expire after 1/10’th of a second, the actual timeout will happen slightly later, which will accumulate to quite a lot after a few seconds. Hint: use time.time() to check how much time has really passed, and add extra writes as nessecary.

              -
            -
            +
            +

            Mixer Objects

            Mixer objects provides access to the ALSA mixer API.

            -
            -class alsaaudio.Mixer(control='Master', id=0, cardindex=- 1, device='default')
            +
            +class alsaaudio.Mixer(control='Master', id=0, cardindex=- 1, device='default')

            Arguments are:

            • control - specifies which control to manipulate using this mixer @@ -395,27 +484,27 @@ devices.

            • Mixer objects have the following methods:

              -
              -Mixer.cardname()
              +
              +Mixer.cardname()

              Return the name of the sound card used by this Mixer object

              -
              -Mixer.mixer()
              +
              +Mixer.mixer()

              Return the name of the specific mixer controlled by this object, For example 'Master' or 'PCM'

              -
              -Mixer.mixerid()
              +
              +Mixer.mixerid()

              Return the ID of the ALSA mixer controlled by this object.

              -
              -Mixer.switchcap()
              +
              +Mixer.switchcap()

              Returns a list of the switches which are defined by this specific mixer. Possible values in this list are:

              @@ -457,8 +546,8 @@ Possible values in this list are:

              -
              -Mixer.volumecap()
              +
              +Mixer.volumecap()

              Returns a list of the volume control capabilities of this mixer. Possible values in the list are:

              @@ -495,8 +584,8 @@ mixer. Possible values in the list are:

              -
              -Mixer.getenum()
              +
              +Mixer.getenum()

              For enumerated controls, return the currently selected item and the list of items available.

              Returns a tuple (string, list of strings).

              @@ -521,59 +610,59 @@ control.

              -
              -Mixer.getmute()
              +
              +Mixer.getmute()

              Return a list indicating the current mute setting for each channel. 0 means not muted, 1 means muted.

              This method will fail if the mixer has no playback switch capabilities.

              -
              -Mixer.getrange([direction])
              +
              +Mixer.getrange(pcmtype=PCM_PLAYBACK)

              Return the volume range of the ALSA mixer controlled by this object.

              -

              The optional direction argument can be either PCM_PLAYBACK or +

              The optional pcmtype argument can be either PCM_PLAYBACK or PCM_CAPTURE, which is relevant if the mixer can control both playback and capture volume. The default value is PCM_PLAYBACK if the mixer has playback channels, otherwise it is PCM_CAPTURE.

              -
              -Mixer.getrec()
              +
              +Mixer.getrec()

              Return a list indicating the current record mute setting for each channel. 0 means not recording, 1 means recording.

              This method will fail if the mixer has no capture switch capabilities.

              -
              -Mixer.getvolume([direction])
              +
              +Mixer.getvolume(pcmtype=PCM_PLAYBACK)

              Returns a list with the current volume settings for each channel. The list elements are integer percentages.

              -

              The optional direction argument can be either PCM_PLAYBACK or +

              The optional pcmtype argument can be either PCM_PLAYBACK or PCM_CAPTURE, which is relevant if the mixer can control both playback and capture volume. The default value is PCM_PLAYBACK if the mixer has playback channels, otherwise it is PCM_CAPTURE.

              -
              -Mixer.setvolume(volume[, channel][, direction])
              +
              +Mixer.setvolume(volume, channel=None, pcmtype=PCM_PLAYBACK)

              Change the current volume settings for this mixer. The volume argument controls the new volume setting as an integer percentage.

              If the optional argument channel is present, the volume is set only for this channel. This assumes that the mixer can control the volume for the channels independently.

              -

              The optional direction argument can be either PCM_PLAYBACK or +

              The optional pcmtype argument can be either PCM_PLAYBACK or PCM_CAPTURE, which is relevant if the mixer can control both playback and capture volume. The default value is PCM_PLAYBACK if the mixer has playback channels, otherwise it is PCM_CAPTURE.

              -
              -Mixer.setmute(mute[, channel])
              +
              +Mixer.setmute(mute[, channel])

              Sets the mute flag to a new value. The mute argument is either 0 for not muted, or 1 for muted.

              The optional channel argument controls which channel is @@ -582,8 +671,8 @@ muted. The default is to set the mute flag for all channels.

              -
              -Mixer.setrec(capture[, channel])
              +
              +Mixer.setrec(capture[, channel])

              Sets the capture mute flag to a new value. The capture argument is either 0 for no capture, or 1 for capture.

              The optional channel argument controls which channel is @@ -592,8 +681,8 @@ changed. The default is to set the capture flag for all channels.

              -
              -Mixer.polldescriptors()
              +
              +Mixer.polldescriptors()

              Returns a tuple of (file descriptor, eventmask) that can be used to wait for changes on the mixer with select.poll.

              The eventmask value is compatible with poll.register in the Python @@ -601,8 +690,8 @@ wait for changes on the mixer with select.poll.

              -
              -Mixer.handleevents()
              +
              +Mixer.handleevents()

              Acknowledge events on the polldescriptors file descriptors to prevent subsequent polls from returning the same events again. Returns the number of events that were acknowledged.

              @@ -625,8 +714,8 @@ the availability of ALSA mixer capable devices will stay quite limited.

              Unfortunately, I’m not able to create such a HOWTO myself, since I only understand half of the API, and that which I do understand has come from a painful trial and error process.

              - -
              + +

              Examples

              The following example are provided:

                @@ -650,15 +739,15 @@ painful trial and error process.

              mixertest.py accepts the commandline options -d <device> and -c <cardindex>.

              -
              +

              playwav.py

              playwav.py plays a wav file.

              To test PCM playback (on your default soundcard), run:

              $ python playwav.py <wav file>
               
              -
              -
              + +

              recordtest.py and playbacktest.py

              recordtest.py and playbacktest.py will record and play a raw sound file in CD quality.

              @@ -672,8 +761,8 @@ with Ctl-C
              $ python playbacktest.py <filename>
               
              - -
              + +

              mixertest.py

              Without arguments, mixertest.py will list all available controls on the default soundcard.

              @@ -731,9 +820,9 @@ Channel 1 volume: 61%

              ALSA also allows PCM_ASYNC, but this is not supported yet.

              - - - + + + @@ -752,7 +841,7 @@ Channel 1 volume: 61%

              Navigation

              -

              Contents:

              +

              Contents:

              • Introduction
              • What is ALSA
              • @@ -779,7 +868,7 @@ Channel 1 volume: 61%

                Quick search

                - +
                @@ -801,7 +890,7 @@ Channel 1 volume: 61% ©2017, Lars Immisch & Casper Wilstrup. | - Powered by Sphinx 3.1.2 + Powered by Sphinx 4.5.0 & Alabaster 0.7.12 | diff --git a/objects.inv b/objects.inv index 8e2f68b..ef0dfe9 100644 Binary files a/objects.inv and b/objects.inv differ diff --git a/py-modindex.html b/py-modindex.html index f2a459e..9ac14bd 100644 --- a/py-modindex.html +++ b/py-modindex.html @@ -4,15 +4,14 @@ - - Python Module Index — alsaaudio documentation 0.9.0 documentation - - - + + Python Module Index — alsaaudio documentation 0.9.1 documentation + + + - @@ -73,7 +72,7 @@

                Navigation

                -

                Contents:

                +

                Contents:

                • Introduction
                • What is ALSA
                • @@ -94,7 +93,7 @@

                  Quick search

                  - +
                  @@ -116,7 +115,7 @@ ©2017, Lars Immisch & Casper Wilstrup. | - Powered by Sphinx 3.1.2 + Powered by Sphinx 4.5.0 & Alabaster 0.7.12 diff --git a/pyalsaaudio.html b/pyalsaaudio.html index 0c92eab..f7a25f6 100644 --- a/pyalsaaudio.html +++ b/pyalsaaudio.html @@ -4,15 +4,15 @@ - - Introduction — alsaaudio documentation 0.9.0 documentation - - - + + + Introduction — alsaaudio documentation 0.9.1 documentation + + + - @@ -33,7 +33,7 @@
                  -
                  +

                  Introduction

                  Author
                  @@ -47,7 +47,7 @@ majority of the python distribution. Basically you can use it for anything you wish (even commercial purposes). There is no warranty whatsoever.

                  -

                  Abstract

                  +

                  Abstract

                  This package contains wrappers for accessing the ALSA API from Python. It is currently fairly complete for PCM devices and Mixer access. MIDI sequencer support is low on our priority list, but volunteers are welcome.

                  @@ -55,8 +55,8 @@ support is low on our priority list, but volunteers are welcome.

                  Please don’t send bug reports regarding ALSA specifically. There are several bugs in this API, and those should be reported to the ALSA team - not me.

                  -
                  -
                  + +

                  What is ALSA

                  The Advanced Linux Sound Architecture (ALSA) provides audio and MIDI functionality to the Linux operating system.

                  @@ -72,7 +72,7 @@ all ALSA capable applications.

                More information about ALSA may be found on the project homepage http://www.alsa-project.org

                -
                +

                ALSA and Python

                The older Linux sound API (OSS) which is now deprecated is well supported from the standard Python library, through the ossaudiodev module. No native ALSA @@ -87,9 +87,9 @@ the ALSA Mixer API.

                MIDI support is not available, and since I don’t own any MIDI hardware, it’s difficult for me to implement it. Volunteers to work on this would be greatly appreciated.

                -
                - -
                + + +

                Installation

                Note: the wrappers link with the alsasound library (from the alsa-lib package) and need the ALSA headers for compilation. Verify that you have @@ -107,8 +107,8 @@ ship with ALSA kernels.

                # python setup.py install
                 
                -
                -
                + +

                Testing

                Make sure that aplay plays a file through the soundcard you want, then try:

                @@ -135,7 +135,7 @@ with Ctl-C

                If you find bugs/problems, please file a bug report.

                -
                + @@ -154,7 +154,7 @@ a real problem.

                Navigation

                -

                Contents:

                +

                Contents:

                • Introduction
                • What is ALSA
                    @@ -180,7 +180,7 @@ a real problem.

                    Quick search

                    - +
                    @@ -202,7 +202,7 @@ a real problem.

                    ©2017, Lars Immisch & Casper Wilstrup. | - Powered by Sphinx 3.1.2 + Powered by Sphinx 4.5.0 & Alabaster 0.7.12 | diff --git a/search.html b/search.html index d6d6616..615b846 100644 --- a/search.html +++ b/search.html @@ -4,17 +4,17 @@ - - Search — alsaaudio documentation 0.9.0 documentation - - + + Search — alsaaudio documentation 0.9.1 documentation + + - + - + @@ -37,26 +37,35 @@

                    Search

                    -
                    - + + + +

                    Searching for multiple words only shows matches that contain all words.

                    + +
                    - + + +
                    +
                    @@ -74,7 +83,7 @@

                    Navigation

                    -

                    Contents:

                    +

                    Contents:

                    diff --git a/searchindex.js b/searchindex.js index 8316e79..e47de22 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["index","libalsaaudio","pyalsaaudio","terminology"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,sphinx:56},filenames:["index.rst","libalsaaudio.rst","pyalsaaudio.rst","terminology.rst"],objects:{"":{alsaaudio:[1,0,0,"-"]},"alsaaudio.Mixer":{cardname:[1,2,1,""],getenum:[1,2,1,""],getmute:[1,2,1,""],getrange:[1,2,1,""],getrec:[1,2,1,""],getvolume:[1,2,1,""],handleevents:[1,2,1,""],mixer:[1,2,1,""],mixerid:[1,2,1,""],polldescriptors:[1,2,1,""],setmute:[1,2,1,""],setrec:[1,2,1,""],setvolume:[1,2,1,""],switchcap:[1,2,1,""],volumecap:[1,2,1,""]},"alsaaudio.PCM":{cardname:[1,2,1,""],pause:[1,2,1,""],pcmmode:[1,2,1,""],pcmtype:[1,2,1,""],polldescriptors:[1,2,1,""],read:[1,2,1,""],setchannels:[1,2,1,""],setformat:[1,2,1,""],setperiodsize:[1,2,1,""],setrate:[1,2,1,""],write:[1,2,1,""]},alsaaudio:{Mixer:[1,1,1,""],PCM:[1,1,1,""],cards:[1,3,1,""],mixers:[1,3,1,""],pcms:[1,3,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function"},terms:{"64kbit":3,"byte":[1,3],"case":1,"class":1,"default":[1,2],"enum":1,"float":[1,3],"function":[1,2],"import":[1,3],"long":2,"new":[1,3],"return":[1,3],"switch":1,"true":1,"try":[1,2],"while":3,Added:1,And:[1,2],For:[1,3],Not:[1,3],One:1,The:[1,2,3],There:2,These:2,Use:1,Using:1,With:[1,3],abl:1,about:2,accept:1,access:[1,2],accummul:1,accumul:1,achiev:1,acknowledg:1,activ:2,actual:[1,3],add:1,added:1,advanc:2,affair:1,after:1,again:1,all:[1,2,3],allow:1,almost:3,alsa:[0,1,3],alsaaudio:3,alsasound:2,also:[1,2,3],although:2,alwai:1,amix:1,amplitud:3,ani:[1,2],annoi:1,anoth:1,anyth:2,api:[1,2,3],aplai:[1,2],applic:2,appreci:2,architectur:2,arecord:1,argument:[1,2],associ:1,assum:1,audio:[1,2,3],author:2,aux:1,avail:[1,2],aves:2,avoid:1,back:[1,2],basic:2,becaus:1,becom:1,been:[1,2],befor:2,behaviour:1,best:1,better:1,between:3,big:[1,3],bit:[1,2,3],block:1,both:1,broke:1,buffer:[1,3],bug:[0,2],build:2,call:[1,2],can:[1,2,3],cannot:1,capabl:[1,2],captur:[1,2,3],card:[1,2],cardindex:1,cardnam:1,casper:2,certain:3,chang:1,channel:[1,3],check:1,choic:1,chois:1,chosen:1,chunk:3,click:1,come:1,commandlin:1,commerci:2,common:1,compat:1,compil:2,complet:2,complex:1,complic:1,compon:2,compress:1,concept:0,configur:[2,3],consist:[1,2,3],constant:1,construct:1,constructor:1,contain:[2,3],content:0,control:[1,3],convers:[1,3],copi:3,could:1,coupl:1,cpu:3,creat:1,ctl:[1,2],current:[1,2,3],cwi:2,data:[1,3],debian:2,defin:1,delai:1,demand:3,depend:2,deprec:[1,2],descript:1,descriptor:1,design:1,determin:[1,3],dev:2,develop:2,devic:[1,2,3],differ:[1,2,3],difficult:2,direct:[1,3],directli:3,displai:1,distribut:2,document:1,doe:1,doesn:1,doing:1,don:2,done:3,driver:2,dynam:3,each:[1,3],easi:1,either:[1,3],elabor:1,element:1,empti:1,enabl:1,encod:1,end:3,endian:[1,3],enough:1,enumer:1,epip:1,equival:1,error:1,etc:[1,3],even:[1,2],event:1,eventmask:1,everi:[1,3],exactli:[1,3],exampl:[0,3],except:1,exclus:1,execut:2,exist:2,expir:1,extra:1,extrem:1,fail:[1,2],fairli:2,familiar:3,featur:2,few:[1,2],file:[1,2],filenam:[1,2],fill:2,find:[1,2],first:1,flag:1,flow:3,follow:[1,2],foo:1,footnot:1,format:[1,3],found:[1,2],fragil:1,frame:[1,3],frames:1,from:[0,1,2,3],full:[1,2],futur:1,gap:2,gener:3,get:1,getenum:1,getmut:1,getrang:1,getrec:1,getvolum:1,give:1,given:1,goal:2,greatli:2,guess:1,gui:1,had:1,half:1,handl:[2,3],handleev:1,happen:1,hardli:1,hardwar:[1,2,3],has:[1,2,3],have:[1,2],header:2,headphon:1,hint:1,homepag:2,horribl:1,how:[1,3],howev:1,howto:1,http:2,ibp:2,ignor:1,immedi:1,immisch:2,impact:3,implement:[1,2],implic:3,includ:2,incorpor:1,independ:1,index:[0,1],indic:[1,2],individu:3,inform:2,input:3,instal:0,instead:1,integ:[1,3],interact:1,intern:3,interpret:1,interrupt:[1,2,3],interv:3,introduct:0,issu:2,item0:1,item:1,itself:1,join:1,just:1,kernel:[1,2,3],keyword:1,know:1,known:3,lar:2,larger:[1,3],last:1,latenc:3,later:[1,2],layer:3,least:[1,2],legitim:1,length:1,less:1,let:1,level:2,lib:2,libasound2:2,libasound:2,librari:2,licens:2,like:[1,2],limit:1,line:1,link:2,linux:2,list:[1,2],littl:[1,3],logarithm:1,logic:2,look:[1,2],lost:1,lot:[1,3],loudest:3,low:[2,3],mai:[1,2],mainli:1,major:2,make:[1,2],mani:3,manipul:[1,2],master:1,match:1,mean:[1,3],memori:3,method:1,mic:1,microphon:[1,2],midi:2,might:1,minim:2,mix:1,mixer:[0,2],mixerid:1,mode:1,moder:1,modul:[0,1,2],mono:[1,3],more:[1,2],most:[1,2],mpeg:1,much:[1,3],multimedia:1,multipl:[1,3],music:3,must:[1,3],mute:1,myself:1,name:1,nativ:2,natur:2,nchannel:1,necessari:3,need:[1,2],neg:1,neither:2,nessecari:1,net:1,note:[1,2],noth:[1,3],now:2,number:[1,3],object:0,occur:1,often:3,older:2,onc:3,one:[1,2,3],onli:[1,3],oper:[1,2],option:1,order:[1,3],org:2,oss:2,ossaudiodev:2,other:[1,2,3],otherwis:1,our:2,out:1,output:[1,3],overrun:1,own:2,packag:2,page:0,pain:1,paramet:1,pass:1,patch:2,path:2,paus:1,pcm:[0,2],pcm_async:1,pcm_captur:1,pcm_format_a_law:1,pcm_format_float64_b:1,pcm_format_float64_l:1,pcm_format_float_b:1,pcm_format_float_l:1,pcm_format_gsm:1,pcm_format_ima_adpcm:1,pcm_format_mpeg:1,pcm_format_mu_law:1,pcm_format_s16_b:1,pcm_format_s16_l:1,pcm_format_s24_3b:1,pcm_format_s24_3l:1,pcm_format_s24_b:1,pcm_format_s24_l:1,pcm_format_s32_b:1,pcm_format_s32_l:1,pcm_format_s8:1,pcm_format_u16_b:1,pcm_format_u16_l:1,pcm_format_u24_3b:1,pcm_format_u24_3l:1,pcm_format_u24_b:1,pcm_format_u24_l:1,pcm_format_u32_b:1,pcm_format_u32_l:1,pcm_format_u8:1,pcm_nonblock:1,pcm_normal:1,pcm_playback:1,pcmmode:1,pcmtype:1,per:3,percentag:1,period:[1,3],periods:1,physic:2,plai:[1,2,3],playback:[1,2],playbacktest:2,player:1,playout:1,playwav:2,pleas:[1,2],point:3,poll:1,polldescriptor:1,possibl:1,precis:3,preload:1,present:1,prevent:1,prioriti:2,probabl:2,problem:[1,2],process:[1,3],program:1,project:2,proper:2,provid:[1,2,3],psf:2,purpos:[1,2],put:1,pyalsa:2,pyalsaaudio:2,pypi:0,python:[0,1],qualiti:1,quietest:3,quit:1,rang:[1,3],rant:1,rate:[1,3],ratio:1,raw:1,read:[1,3],readi:3,real:[1,2],realli:1,rear:1,reason:1,record:[1,2,3],recordtest:2,reexpos:1,regard:2,regist:1,relev:1,replac:3,report:2,repositori:0,repres:[1,3],requir:2,resid:1,resourc:3,respons:2,resproduc:3,result:1,resum:1,root:2,run:1,same:[1,2,3],sampl:[1,3],scale:3,search:0,second:[1,3],see:1,seem:2,select:1,send:2,separ:1,sequenc:2,set:[1,2,3],setchannel:1,setformat:1,setmut:1,setperiods:1,setrat:1,setrec:1,setup:[1,2],setvolum:1,sever:2,ship:2,should:[1,2,3],sign:1,signal:3,signific:3,similar:2,similarli:3,simpl:1,simpli:3,simplifi:[1,2],sinc:[1,2,3],singl:[1,3],size:[1,3],slightli:1,slower:3,small:3,sndrpihifiberri:2,softwar:2,sole:1,some:[1,3],somebodi:1,someth:1,sound:[1,2,3],soundcard:[1,2],space:2,speak:[1,2],speaker:1,specif:[1,2,3],specifi:1,speech:1,stai:1,standard:2,state:1,stereo:[1,3],still:1,strategi:1,string:1,subsequ:1,subtli:1,succeed:1,suit:2,sun:1,support:[1,2],sure:[1,2],switchcap:1,system:2,take:1,taken:3,task:1,team:2,telephoni:[1,3],term:2,terminolog:0,test:[0,1],than:1,thegithub:2,thei:3,therefor:3,thi:[1,2,3],those:2,thread:1,through:[1,2],time:[1,2,3],timeout:1,timer:1,too:1,tracker:[0,2],trial:1,tupl:1,two:[1,2,3],type:1,typic:[1,3],ubuntu:2,ugli:1,under:2,underli:1,underrun:1,understand:[1,3],unfortun:1,unlik:2,unsign:1,until:1,usag:3,use:[1,2,3],usecas:1,used:[1,2,3],useful:[1,3],user:2,userspac:[2,3],using:[1,2],usr:2,usual:3,util:3,valid:1,valu:1,vari:3,veri:[2,3],verifi:2,version:[1,2],virtual:1,volum:1,volumecap:1,volumn:1,volunt:2,wai:1,wait:1,want:[1,2],warranti:2,wav:[1,2],welcom:2,well:2,were:1,what:[0,1],whatsoev:2,when:3,where:1,whether:3,which:[1,2,3],wilstrup:2,wish:2,within:2,without:[1,2],work:2,would:[1,2,3],wrapper:2,write:[1,3],written:1,wrote:2,www:2,yet:1,you:[1,2,3],your:[1,2],yourself:2,zero:1},titles:["alsaaudio documentation","alsaaudio","Introduction","PCM Terminology and Concepts"],titleterms:{"abstract":2,alsa:2,alsaaudio:[0,1],concept:3,document:0,download:0,exampl:1,github:0,indic:0,instal:2,introduct:2,mixer:1,mixertest:1,object:1,pcm:[1,3],playbacktest:1,playwav:1,python:2,recordtest:1,tabl:0,terminolog:3,test:2,what:2}}) \ No newline at end of file +Search.setIndex({docnames:["index","libalsaaudio","pyalsaaudio","terminology"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["index.rst","libalsaaudio.rst","pyalsaaudio.rst","terminology.rst"],objects:{"":[[1,0,0,"-","alsaaudio"]],"alsaaudio.Mixer":[[1,2,1,"","cardname"],[1,2,1,"","getenum"],[1,2,1,"","getmute"],[1,2,1,"","getrange"],[1,2,1,"","getrec"],[1,2,1,"","getvolume"],[1,2,1,"","handleevents"],[1,2,1,"","mixer"],[1,2,1,"","mixerid"],[1,2,1,"","polldescriptors"],[1,2,1,"","setmute"],[1,2,1,"","setrec"],[1,2,1,"","setvolume"],[1,2,1,"","switchcap"],[1,2,1,"","volumecap"]],"alsaaudio.PCM":[[1,2,1,"","cardname"],[1,2,1,"","get_tstamp_mode"],[1,2,1,"","get_tstamp_type"],[1,2,1,"","htimestamp"],[1,2,1,"","pause"],[1,2,1,"","pcmmode"],[1,2,1,"","pcmtype"],[1,2,1,"","polldescriptors"],[1,2,1,"","read"],[1,2,1,"","set_tstamp_mode"],[1,2,1,"","set_tstamp_type"],[1,2,1,"","setchannels"],[1,2,1,"","setformat"],[1,2,1,"","setperiodsize"],[1,2,1,"","setrate"],[1,2,1,"","write"]],alsaaudio:[[1,1,1,"","Mixer"],[1,1,1,"","PCM"],[1,3,1,"","asoundlib_version"],[1,3,1,"","cards"],[1,3,1,"","mixers"],[1,3,1,"","pcms"]]},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function"},terms:{"0":[1,2],"1":[1,3],"10":1,"16":1,"16000":1,"2":[1,2],"24":1,"3":1,"32":[1,3],"4":[1,2],"40":1,"44100":[1,3],"4608":3,"48":3,"48000":1,"5":[2,3],"6":[2,3],"61":1,"64":[1,3],"64kbit":3,"8":[1,3],"8000":[1,3],"9":1,"9600":1,"96000":[1,3],"byte":[1,3],"case":1,"class":1,"default":[1,2],"do":[1,2],"enum":1,"float":[1,3],"function":[1,2],"import":[1,3],"long":2,"new":[1,3],"return":[1,3],"switch":1,"true":1,"try":[1,2],"while":3,A:[1,2,3],And:[1,2],As:1,At:[1,3],For:[1,3],If:[1,2,3],In:[1,3],It:2,No:[1,2],Not:[1,3],On:2,One:1,Or:1,The:[1,2,3],There:2,These:2,To:[1,2],With:[1,3],abl:1,about:2,accept:1,access:[1,2],accummul:1,accumul:1,achiev:1,acknowledg:1,activ:2,actual:[1,3],ad:1,add:1,advanc:2,affair:1,after:1,again:1,all:[1,2,3],allow:1,almost:3,alsa:[0,1,3],alsaaudio:3,alsasound:2,also:[1,2,3],although:2,alwai:1,amix:1,amplitud:3,an:[1,3],ani:[1,2],annoi:1,anoth:1,anyth:2,api:[1,2,3],aplai:[1,2],applic:2,appreci:2,ar:[1,2,3],architectur:2,arecord:1,argument:[1,2],asoundlib_vers:1,associ:1,assum:1,au:1,audio:[1,2,3],author:2,aux:1,av:2,avail:[1,2],avoid:1,back:[1,2],basic:2,becaus:1,becom:1,been:[1,2],befor:2,behaviour:1,below:1,best:1,better:1,between:3,big:[1,3],bit:[1,2,3],block:1,both:1,broke:1,buffer:[1,3],bug:[0,2],build:2,c:[1,2],call:[1,2],can:[1,2,3],cannot:1,capabl:[1,2],captur:[1,2,3],card:[1,2],cardindex:1,cardnam:1,casper:2,cd:[1,3],certain:3,chang:1,channel:[1,3],check:1,choic:1,chois:1,chosen:1,chunk:3,click:1,clock:1,come:1,commandlin:1,commerci:2,common:1,compat:1,compil:2,complet:2,complex:1,complic:1,compon:2,compress:1,concept:0,configur:[2,3],consist:[1,2,3],constant:1,construct:1,constructor:1,contain:[1,2,3],control:[1,3],convers:[1,3],copi:3,correspond:1,could:1,coupl:1,cpu:3,creat:1,ctl:[1,2],current:[1,2,3],cwi:2,d:[1,2,3],data:[1,3],de:2,debian:2,defin:1,delai:1,demand:3,depend:2,deprec:[1,2],describ:1,descript:1,descriptor:1,design:1,determin:[1,3],dev:2,develop:2,devic:[1,2,3],differ:[1,2,3],difficult:2,direct:3,directli:3,displai:1,distribut:2,dk:2,document:1,doe:1,doesn:1,don:2,done:3,driver:2,dynam:3,each:[1,3],easi:1,either:[1,3],elabor:1,element:1,empti:1,enabl:1,encod:1,end:3,endian:[1,3],enough:1,enumer:1,epip:1,epoch:1,equival:1,error:1,etc:[1,3],even:[1,2],event:1,eventmask:1,everi:[1,3],exactli:[1,3],exampl:[0,3],except:1,exclus:1,execut:2,exist:2,expir:1,extra:1,extrem:1,fail:[1,2],fairli:2,familiar:3,featur:2,few:[1,2],file:[1,2],filenam:[1,2],fill:2,find:[1,2],first:1,flag:1,flow:3,follow:[1,2],foo:1,footnot:1,format:[1,3],found:[1,2],fragil:1,frame:[1,3],frames:1,frames_available_in_buff:1,from:[0,1,2,3],full:[1,2],futur:1,gap:2,gener:3,get:1,get_tstamp_mod:1,get_tstamp_typ:1,getenum:1,getmut:1,getrang:1,getrec:1,getvolum:1,give:1,given:1,goal:2,greatli:2,guess:1,gui:1,ha:[1,2,3],had:1,half:1,handl:[2,3],handleev:1,happen:1,hardli:1,hardwar:[1,2,3],have:[1,2],header:2,headphon:1,hint:1,homepag:2,horribl:1,how:[1,3],howev:1,howto:1,htimestamp:1,http:2,hw:[1,2],hz:[1,3],i:[1,2],ibp:2,id:1,ignor:1,immedi:1,immisch:2,impact:3,implement:[1,2],implic:3,includ:2,incorpor:1,independ:1,index:[0,1],indic:[1,2],individu:3,inform:2,input:3,instal:0,instead:1,integ:[1,3],interact:1,intern:3,interpret:1,interrupt:[1,2,3],interv:3,introduct:0,issu:2,item0:1,item:1,itself:1,join:1,just:1,kb:3,kernel:[1,2,3],keyword:1,know:1,known:3,l:1,lar:2,larger:[1,3],last:1,latenc:3,later:[1,2],layer:3,least:[1,2],legitim:1,length:1,less:1,let:1,level:2,lib:2,libasound2:2,libasound:2,librari:2,licens:2,like:[1,2],limit:1,line:1,link:2,linux:2,list:[1,2],littl:[1,3],logarithm:1,logic:2,look:[1,2],lost:1,lot:[1,3],loudest:3,low:[2,3],m:1,mai:[1,2],mainli:1,major:2,make:[1,2],mani:3,manipul:[1,2],master:1,match:1,mb:3,me:[1,2],mean:[1,3],memori:3,method:1,mic:1,microphon:[1,2],midi:2,might:1,minim:2,mix:1,mixer:[0,2],mixerid:1,mode:1,moder:1,modul:[0,1,2],mono:[1,3],monoton:1,more:[1,2],most:[1,2],mpeg:1,much:[1,3],multimedia:1,multipl:[1,3],music:3,must:[1,3],mute:1,my:[1,2],myself:1,name:1,nanosecond:1,nativ:2,natur:2,nchannel:1,necessari:3,need:[1,2],neg:1,neither:2,nessecari:1,net:1,none:1,note:[1,2],noth:[1,3],now:2,ntp:1,number:[1,3],object:0,occur:1,often:3,older:2,onc:3,one:[1,2,3],onli:[1,3],oper:[1,2],option:1,order:[1,3],org:2,oss:2,ossaudiodev:2,other:[1,2,3],otherwis:1,our:2,out:1,output:[1,3],overrun:1,own:2,packag:2,page:0,pain:1,paramet:1,pass:1,patch:2,path:2,paus:1,pc:1,pcm:[0,2],pcm_async:1,pcm_captur:1,pcm_format_a_law:1,pcm_format_float64_b:1,pcm_format_float64_l:1,pcm_format_float_b:1,pcm_format_float_l:1,pcm_format_gsm:1,pcm_format_ima_adpcm:1,pcm_format_mpeg:1,pcm_format_mu_law:1,pcm_format_s16_b:1,pcm_format_s16_l:1,pcm_format_s24_3b:1,pcm_format_s24_3l:1,pcm_format_s24_b:1,pcm_format_s24_l:1,pcm_format_s32_b:1,pcm_format_s32_l:1,pcm_format_s8:1,pcm_format_u16_b:1,pcm_format_u16_l:1,pcm_format_u24_3b:1,pcm_format_u24_3l:1,pcm_format_u24_b:1,pcm_format_u24_l:1,pcm_format_u32_b:1,pcm_format_u32_l:1,pcm_format_u8:1,pcm_nonblock:1,pcm_normal:1,pcm_playback:1,pcm_tstamp_en:1,pcm_tstamp_non:1,pcm_tstamp_type_gettimeofdai:1,pcm_tstamp_type_monoton:1,pcm_tstamp_type_monotonic_raw:1,pcmmode:1,pcmtype:1,per:3,percentag:1,period:[1,3],periods:1,physic:2,plai:[1,2,3],playback:[1,2],playbacktest:2,player:1,playout:1,playwav:2,pleas:[1,2],point:3,poll:1,polldescriptor:1,posit:1,possibl:1,precis:3,preload:1,present:1,prevent:1,prioriti:2,probabl:2,problem:[1,2],process:[1,3],program:1,progress:1,project:2,proper:2,provid:[1,2,3],psf:2,purpos:[1,2],put:1,py:2,pyalsa:2,pyalsaaudio:2,pypi:0,python:[0,1],qualiti:1,quietest:3,quit:1,rang:[1,3],rant:1,rate:[1,3],ratio:1,raw:1,re:3,read:[1,3],readi:3,real:[1,2],realli:1,realtim:1,rear:1,reason:1,record:[1,2,3],recordtest:2,reexpos:1,regard:2,regist:1,relev:1,replac:3,report:2,repositori:0,repres:[1,3],requir:2,resid:1,resourc:3,respons:2,resproduc:3,result:1,resum:1,root:2,run:1,s:[1,2,3],same:[1,2,3],sampl:[1,3],scale:3,search:0,second:[1,3],see:1,seem:2,select:1,send:2,separ:1,sequenc:2,set:[1,2,3],set_tstamp_mod:1,set_tstamp_typ:1,setchannel:1,setformat:1,setmut:1,setperiods:1,setrat:1,setrec:1,setup:[1,2],setvolum:1,sever:2,ship:2,should:[1,2,3],sign:1,signal:3,signific:3,similar:2,similarli:3,simpl:1,simpli:3,simplifi:[1,2],sinc:[1,2,3],singl:[1,3],size:[1,3],slightli:1,slower:3,small:3,sndrpihifiberri:2,so:[1,2,3],softwar:2,sole:1,some:[1,3],somebodi:1,someth:1,sound:[1,2,3],soundcard:[1,2],space:2,speak:[1,2],speaker:1,specif:[1,2,3],specifi:1,speech:1,stai:1,standard:2,start:1,state:1,stereo:[1,3],still:1,strategi:1,string:1,subsequ:1,subtli:1,succeed:1,suit:2,sun:1,support:[1,2],sure:[1,2],switchcap:1,synchron:1,system:[1,2],t:[1,2],tabl:1,take:1,taken:3,task:1,team:2,telephoni:[1,3],term:2,terminolog:0,test:[0,1],th:1,than:1,thegithub:2,thei:3,therefor:3,thi:[1,2,3],those:2,thread:1,through:[1,2],time:[1,2,3],timeout:1,timer:1,timestamp:1,too:1,tracker:[0,2],trial:1,tstamp_mod:1,tstamp_typ:1,tupl:1,two:[1,2,3],type:1,typic:[1,3],ubuntu:2,ugli:1,under:2,underli:1,underrun:1,understand:[1,3],unfortun:1,unlik:2,unsign:1,unspecifi:1,until:1,updat:1,us:[1,2,3],usag:3,usecas:1,user:2,userspac:[2,3],usr:2,usual:3,util:3,valid:1,valu:1,vari:3,ve:1,veri:[2,3],verifi:2,version:[1,2],virtual:1,volum:1,volumecap:1,volumn:1,volunt:2,wa:1,wai:1,wait:1,want:[1,2],warranti:2,wav:[1,2],we:3,welcom:2,well:2,were:1,what:[0,1],whatsoev:2,when:3,where:1,whether:3,which:[1,2,3],wide:1,wilstrup:2,wish:2,within:2,without:[1,2],work:2,would:[1,2,3],wrapper:2,write:[1,3],written:1,wrote:2,www:2,yet:1,you:[1,2,3],your:[1,2],yourself:2,zero:1},titles:["alsaaudio documentation","alsaaudio","Introduction","PCM Terminology and Concepts"],titleterms:{"abstract":2,alsa:2,alsaaudio:[0,1],concept:3,content:0,document:0,download:0,exampl:1,github:0,indic:0,instal:2,introduct:2,mixer:1,mixertest:1,object:1,pcm:[1,3],playbacktest:1,playwav:1,py:1,python:2,recordtest:1,tabl:0,terminolog:3,test:2,what:2}}) \ No newline at end of file diff --git a/terminology.html b/terminology.html index d511034..711c805 100644 --- a/terminology.html +++ b/terminology.html @@ -4,15 +4,15 @@ - - PCM Terminology and Concepts — alsaaudio documentation 0.9.0 documentation - - - + + + PCM Terminology and Concepts — alsaaudio documentation 0.9.1 documentation + + + - @@ -33,7 +33,7 @@
                    -
                    +

                    PCM Terminology and Concepts

                    In order to use PCM devices it is useful to be familiar with some concepts and terminology.

                    @@ -98,7 +98,7 @@ read will return either 32 frames of data or nothing at all.

                    Once you understand these concepts, you will be ready to use the PCM API. Read on.

                    -
                    +
                    @@ -117,7 +117,7 @@ on.

                    Navigation

                    -

                    Contents:

                    +

                    Contents: