{"id":13467890,"url":"https://github.com/dy/wavefont","last_synced_at":"2025-05-16T16:05:09.075Z","repository":{"id":40341519,"uuid":"66328411","full_name":"dy/wavefont","owner":"dy","description":"Typeface for rendering waveform/data","archived":false,"fork":false,"pushed_at":"2025-01-18T20:52:33.000Z","size":10602,"stargazers_count":437,"open_issues_count":3,"forks_count":7,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-05-10T07:48:32.886Z","etag":null,"topics":["afdko","barchart","chart","datavis","font","opentype","spectrum","typeface","unicode-table","variable-fonts","waveform"],"latest_commit_sha":null,"homepage":"https://dy.github.io/wavefont/scripts/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"ofl-1.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dy.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.txt","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-08-23T03:06:00.000Z","updated_at":"2025-04-30T20:42:02.000Z","dependencies_parsed_at":"2024-01-06T01:02:47.912Z","dependency_job_id":"d1a087d1-328f-4454-a627-a11a93534b22","html_url":"https://github.com/dy/wavefont","commit_stats":{"total_commits":339,"total_committers":4,"mean_commits":84.75,"dds":0.1032448377581121,"last_synced_commit":"dc516e2c0156aba1916393ef1e3ba34cf810ff4c"},"previous_names":["audio-lab/wavefont"],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dy%2Fwavefont","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dy%2Fwavefont/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dy%2Fwavefont/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dy%2Fwavefont/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dy","download_url":"https://codeload.github.com/dy/wavefont/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254564121,"owners_count":22092121,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["afdko","barchart","chart","datavis","font","opentype","spectrum","typeface","unicode-table","variable-fonts","waveform"],"created_at":"2024-07-31T15:01:02.062Z","updated_at":"2025-05-16T16:05:09.055Z","avatar_url":"https://github.com/dy.png","language":"HTML","readme":"# wavefont [![build](https://github.com/dy/wavefont/actions/workflows/build.yaml/badge.svg)](https://github.com/dy/wavefont/actions/workflows/build.yaml)\n\nA typeface for rendering vertical bars data: waveforms, spectrums, diagrams, histograms, columns etc.\n\n\u003cimg src=\"./preview.png\" width=\"240px\"/\u003e\n\n[**Playground**](https://dy.github.io/wavefont/scripts)\u0026nbsp;\u0026nbsp;•\u0026nbsp;\u0026nbsp;[**Google fonts**](https://fonts.google.com/specimen/Wavefont/tester)\u0026nbsp;\u0026nbsp;•\u0026nbsp;\u0026nbsp;[**V-fonts**](https://v-fonts.com/fonts/wavefont)\u0026nbsp;\u0026nbsp;•\u0026nbsp;\u0026nbsp;\n[**Wavearea**](https://dy.github.io/wavearea?src=https://cdn.freesound.org/previews/147/147582_1728127-lq.mp3)\n\n## Usage\n\nPlace [_Wavefont[ROND,YELA,wght].woff2_](./fonts/variable/Wavefont[ROND,YELA,wght].woff2) into your project directory and use this code:\n\n```html\n\u003cstyle\u003e\n@font-face {\n\tfont-family: wavefont;\n\tfont-display: block;\n\tsrc: url(./Wavefont[ROND,YELA,wght].woff2) format('woff2');\n}\n.wavefont {\n\t--wght: 400;\n\tfont-family: wavefont;\n\tfont-variation-settings: 'wght' var(--wght), 'ROND' 30, 'YELA' 0;\n}\n\u003c/style\u003e\n\n\u003c!-- Set values manually --\u003e\n\u003ctextarea id=\"waveform\" class=\"wavefont\" cols=\"100\"\u003e\nabcdefghijklmnopqrstuvwwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\n\u003c/textarea\u003e\n\n\u003cscript\u003e\n// Set values programmatically (more precise)\nwaveform.textContent = Array.from({length: 100}, (_,i) =\u003e String.fromCharCode(0x100 + i)).join('')\n\u003c/script\u003e\n```\n\n## Ranges\n\nWavefont bars correspond to values from 0 to 100, assigned to different characters:\n\n* \u003ckbd\u003e0-9\u003c/kbd\u003e chars are for simplified manual input with step 10 (bar height = number).\n* \u003ckbd\u003ea-zA-Z\u003c/kbd\u003e for manual input with step 2, softened at edges \u003ckbd\u003ea\u003c/kbd\u003e and \u003ckbd\u003eZ\u003c/kbd\u003e (bar height = number of letter).\n* \u003ckbd\u003eU+0100-017F\u003c/kbd\u003e for 0..127 values with step 1 (`char = String.fromCharCode(0x100 + value)`).\n\n## Variable axes\n\nTag | Range | Default | Meaning\n---|---|---|---\n`wght` | _1_-_1000_ | 400 | Bar width, or boldness.\n`ROND` | _0_-_100_ | 100 | Border radius, or roundness (percent).\n`YELA` | _-100_-_100_ | -100 | Alignment: bottom, center or top.\n\nTo adjust axes via CSS:\n```css\n.wavefont {\n  font-variation-settings: 'wght' var(--wght, 40), 'ROND' var(--rond, 0), 'YELA' var(--align, 0);\n  letter-spacing: 1ch; /* 1ch unit === 1 bar width */\n}\n```\n\n## Features\n\n* Ranges, values and width is compatible with [linefont](https://github.com/dy/linefont), so fonts can be switched preserving visual coherency.\n* Visible charcodes fall under _marking characters_ unicode category, ie. recognized as word by regexp and can be selected with \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003e→\u003c/kbd\u003e or double click. Eg. waveform segments separated by ` ` or `-` are selectable by double click.\n* Characters outside of visible ranges are clipped to _0_, eg. ` `, `\\t` etc.\n* `-–._*` map to _1_ value, `|` maps to max value, `▁▂▃▄▅▆▇█` map to corresponding bars.\n* Accent acute \u003ckbd\u003e\u0026nbsp;\u0026#x0301;\u003c/kbd\u003e (U+0301) shifts bar 1-step up, circumflex accent \u003ckbd\u003e\u0026nbsp;\u0026#x0302;\u003c/kbd\u003e (U+0302) 10-steps up. Eg. `\\u0101\\u0302\\u0302\\u0301\\u0301\\u0301` shifts 23 steps up.\n* Accent grave \u003ckbd\u003e\u0026nbsp;\u0026#x0300;\u003c/kbd\u003e (U+0300) shifts bar 1-step down, caron \u003ckbd\u003e\u0026nbsp;\u0026#x030c;\u003c/kbd\u003e (U+030C) shifts 10 steps down, eg. `\\u0101\\u030c\\u0300\\u0300\\u0300` shifts 13 steps down.\n* Caret span is -20..120, so line-height = 1.4 is minimal non-overlapping selection.\n\u003c!-- * Anti-[FOUT](https://css-tricks.com/fout-foit-foft/): any character out of visible range is mapped to blank (similar to [Adobe Blank](https://github.com/adobe-fonts/adobe-blank-vf)). --\u003e\n\n## JS package\n\nOptional wavefont package exposes a function that calculates string from values for your convenience.\n\n```js\nimport wf from 'wavefont'\n\n// get characters for values from 0..127 range\nwf(0, 1, 50, 99, 127, ...) // ĀāĲţŤ...\n```\n\n\n## Building\n\n`make build`\n\n* [Tests](https://dy.github.io/wavefont/out/fontbakery/fontbakery-report)\n* [Glyphs](https://dy.github.io/wavefont/out/proof/glyphs)\n* [Text](https://dy.github.io/wavefont/out/proof/text)\n* [Waterfall](https://dy.github.io/wavefont/out/proof/waterfall)\n\n## See also\n\n* [linefont](https://github.com/dy/linefont) − font-face for rendering linear data.\n\n## References\n\n* [Google Fonts guide](https://googlefonts.github.io/gf-guide/variable.html#most-common-axes).\n* [Unified font object spec](https://unifiedfontobject.org/versions/ufo3) − unified human-readable format for storing font data.\n* [Feature file spec](https://adobe-type-tools.github.io/afdko/OpenTypeFeatureFileSpecification.html#6.h) − defining opentype font features.\n* [Adobe-variable-font-prototype](https://github.com/adobe-fonts/adobe-variable-font-prototype) − example variable font.\n* [Designspace XML spec](https://github.com/fonttools/fonttools/tree/main/Doc/source/designspaceLib#document-xml-structure) − human-readable format for describing variable fonts.\n* [Adobe Blank](https://github.com/adobe-fonts/adobe-blank-vf) − blank characters variable font.\n* [Sparks](https://github.com/aftertheflood/sparks) – alternative font with similar purpose.\n\u003c!-- * [Unicode-table](https://symbl.cc/) − convenient unicode table.--\u003e\n\n\u003cp align=\"center\"\u003e\u003ca href=\"https://github.com/krishnized/license/\"\u003e🕉\u003c/a\u003e\u003cp\u003e\n","funding_links":[],"categories":["HTML"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdy%2Fwavefont","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdy%2Fwavefont","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdy%2Fwavefont/lists"}