Compare commits

...
316 Commits
Author SHA1 Message Date
James R. Barlow ab632f57cd v7.4.0 release notes 2018-12-15 15:27:23 -08:00
James R. Barlow 13d20bd993 pdfinfo: tolerate PDFs that overflow and underflow the graphics stack 2018-12-15 15:10:29 -08:00
James R. Barlow b973208137 Require pikepdf 0.9.1 2018-12-15 14:23:10 -08:00
James R. Barlow 942abf8074 Fix reqs/main.txt for pikepdf 0.9.0 2018-12-14 23:29:26 -08:00
James R. Barlow ed9bb985e2 Fix pikepdf 0.9.0 2018-12-14 23:21:13 -08:00
James R. Barlow 5a7a8e573b Require pikepdf 0.9.0 2018-12-14 23:06:57 -08:00
James R. Barlow ce878db913 Rename to polyglot.dockerfile 2018-12-14 23:06:29 -08:00
James R. Barlow a3d58683b2 Update webservice.py with separate license 2018-12-14 23:05:54 -08:00
James R. Barlow 039e8ca7e7 Merge branches 'feature/newer-pike' and 'feature/webapp' 2018-12-14 18:08:31 -08:00
James R. Barlow 0ebbd4e21b Don't open encrypted files, even if password is empty 2018-12-13 22:48:00 -08:00
James R. Barlow 2cb75f6076 Refactor pipeline to make PDF/A conversion a separate step 2018-12-13 20:48:48 -08:00
James R. Barlow 857d871364 Fix regression on Ghostscript path 2018-12-13 20:36:41 -08:00
James R. Barlow 632dab2cc0 Replace Ghostscript DOCINFO and fix 9.25 metadata date regression
We no longer use Ghostscript to manage PDF metadata, instead
omitting the DOCINFO segment from the pdfmark file we generate.

Instead all of the relevant metadata code has been migrated to pikepdf,
and we use that API. This should be more consistent and fixes the
Ghostscript version-depedent quirks.

Also removes our python-xmp-toolkit dependency, except for
testing.
2018-12-13 18:13:30 -08:00
James R. Barlow 7647918f2d setup: suppress XMLParser() warning - defusedxml related 2018-12-12 22:13:32 -08:00
James R. Barlow 75c5d8055c pdfinfo: fix FutureWarning 2018-12-12 22:12:14 -08:00
James R. Barlow a938bbea55 Remove more libxmp dependencies 2018-12-12 22:02:35 -08:00
James R. Barlow 414407fbd6 Deprecate encode/decode_pdf_date and remap to pikepdf version 2018-12-12 22:01:21 -08:00
James R. Barlow 076fc717df pdfa: replace PDF/A checking with pikepdf implementation 2018-12-12 21:41:16 -08:00
James R. Barlow 2a04b2d82b Rename webapp to webservice 2018-12-12 21:29:05 -08:00
James R. Barlow 065db414c0 webapp docker: Build from polyglot 2018-12-12 21:24:04 -08:00
James R. Barlow 19a054a78b Add webapp stuff 2018-12-10 20:03:52 -08:00
James R. Barlow 9df24a81b7 Fix comment in layout.py 2018-11-28 15:16:34 -08:00
James R. Barlow 40c0acd3f2 Support using --force-ocr and --threshold or --mask-barcodes together 2018-11-28 15:16:24 -08:00
James R. Barlow 20db7f0a8f leptonica: delete file junkpixt.png if created 2018-11-28 13:47:55 -08:00
James R. Barlow e54f6ee37f v7.3.1 release notes 2018-11-16 02:13:41 -08:00
James R. Barlow 2da556bf79 Fix unsupported operand Decimal, float 2018-11-16 02:13:25 -08:00
James R. Barlow b183ad8167 Fix barcodes error handling 2018-11-16 02:08:16 -08:00
James R. Barlow 9e6b54c7ed Add test case for Type3 fonts with no Unicode mapping 2018-11-15 21:54:26 -08:00
James R. Barlow d3b334c10f Test case: true type font without Unicode mapping 2018-11-15 16:22:53 -08:00
James R. Barlow 622f2c4bab More argument checking 2018-11-15 15:59:38 -08:00
James R. Barlow 07b638a394 pdfminer: detect TrueType fonts with no valid encoding information 2018-11-15 13:44:11 -08:00
James R. Barlow 9bee2405d8 Leptonica: make threshold functions more flexible 2018-11-15 13:43:34 -08:00
James R. Barlow 8f040491bf Fix erasure of undetectable barcodes 2018-11-15 12:03:51 -08:00
James R. Barlow 8a18988706 Fix 'del draw' exception 2018-11-15 12:02:53 -08:00
James R. Barlow 47a954514b Fix name2unicode ignoring certain markers 2018-11-15 12:02:30 -08:00
James R. Barlow e3b65d4288 Fix detailed page analysis enabled at wrong time 2018-11-15 12:02:08 -08:00
James R. Barlow 4704f7ed1d Add ReadTheDocs yml so we can build with Py3.6 2018-11-12 13:43:17 -08:00
James R. Barlow 3a2745445a Fix docs build 2018-11-12 13:26:04 -08:00
James R. Barlow 12e15bab15 v7.3.0 release notes 2018-11-11 02:05:52 -08:00
James R. Barlow 9593aa4fb9 Merge v7.3.0 development 2018-11-11 01:38:42 -08:00
James R. Barlow 817d520e63 Merge branch 'master' of github.com:jbarlow83/OCRmyPDF 2018-11-11 01:34:00 -08:00
James R. Barlow 700abbb8a5 Documentation for OCR quality features 2018-11-10 15:48:41 -08:00
James R. Barlow 701ef1df3f Add threshold function to work around Tesseract's poor thresholding of bright backgrounds 2018-11-10 15:34:37 -08:00
James R. Barlow 0f5c484b62 Travis: only need to specify chardet because we use pip install --no-deps 2018-11-10 13:57:04 -08:00
James R. Barlow cc7f2a3f02 Fix Python 3.5 pathlib regressions 2018-11-10 02:11:23 -08:00
James R. Barlow 755b5d87e3 Add missing chardet, implied by pdfminer.six? 2018-11-10 01:50:51 -08:00
James R. Barlow e55a4115e1 Travis: pytest 3.10.0 internal error? 2018-11-10 01:44:05 -08:00
James R. Barlow 16a6fd2ea9 Update docs for --redo-ocr and --mask-barcodes 2018-11-10 01:34:33 -08:00
James R. Barlow e3fce112ed main.txt: wrong pdfminer 2018-11-10 01:32:27 -08:00
James R. Barlow eacd26a68b Mention v6.2.5 release 2018-11-10 01:10:45 -08:00
James R. Barlow 0e88b3c38a Update v7.3.0 release notes 2018-11-10 01:09:19 -08:00
James R. Barlow a2170ef8d6 test: test version check code 2018-11-10 00:56:22 -08:00
James R. Barlow eed0424390 Update requirements 2018-11-10 00:56:04 -08:00
James R. Barlow 5ed05e08b1 Fix "no languages" test and misuse of os.environ 2018-11-09 01:57:11 -08:00
James R. Barlow 58b26f6715 Leptonica: learn to despeckle 1bpp images 2018-11-07 01:49:13 -08:00
James R. Barlow 806daf4284 leptonica: reduce boilerplate for PIX (2/2) 2018-11-06 20:33:40 -08:00
James R. Barlow c64bc9329e leptonica: reduce boilerplate for wrapper classes (except PIX) 2018-11-06 20:12:09 -08:00
James R. Barlow dd01745519 Leptonica: add masked threshold fn 2018-11-06 19:31:06 -08:00
James R. Barlow 501ce726e7 Fix two failing tests 2018-11-06 11:16:08 -08:00
James R. Barlow 03076e89ce Leptonica: reduce verbosity, more error trapping, more garbage collection 2018-11-06 11:10:59 -08:00
James R. Barlow 02f37293ee Integrate barcode masking 2018-11-05 13:01:13 -08:00
James R. Barlow 590942ad14 Leptonica: Add barcode API 2018-11-05 01:48:38 -08:00
James R. Barlow 2ac028c759 test: Add a basic redo OCR test 2018-11-04 15:54:41 -08:00
James R. Barlow 2125b5bfab Remove text detection from our parser interpret_contents
It's redundant now
2018-11-04 15:47:55 -08:00
James R. Barlow b96532caa4 Only do detailed page analysis when needed by --redo-ocr 2018-11-04 15:40:49 -08:00
James R. Barlow 995fc58466 Move Ghostscript text analysis into its own module 2018-11-04 14:55:48 -08:00
James R. Barlow c023cae299 Make pdfminer Type3 patch conditional on PScript5.dll
It appears that PDFs created by this software have a bug in their BBox
which will cause us to misjudge the space occupied by the font.

Other programs probably work around this by ignoring BBox and reading
each character procedure.
2018-11-04 01:53:53 -07:00
James R. Barlow 237eaf9130 Exception message not printed in some cases
Closes #310
2018-11-03 17:10:24 -07:00
James R. Barlow 8b9ab25125 coverage: test compile leptonica 2018-11-02 01:55:25 -07:00
James R. Barlow 77e87abe8f coverage: ensure get_orientation is checked 2018-11-02 01:32:20 -07:00
James R. Barlow 3be02e1e8d coverage: improve leptonic; don't create objects with null pointers 2018-11-02 01:10:10 -07:00
James R. Barlow 64c9ede979 leptonica: barcodes, BOXA 2018-11-02 00:42:01 -07:00
James R. Barlow 5b8d197812 coverage: make it more likely timeout is tested 2018-11-02 00:41:15 -07:00
James R. Barlow 2cba62dc4f coverage: ensure rotation is actually tested 2018-11-02 00:40:56 -07:00
James R. Barlow 288e28328f coverage: add qpdf 2018-11-02 00:37:33 -07:00
James R. Barlow b8214b3c49 coverage: exclude unicodefun.py 2018-11-02 00:33:08 -07:00
James R. Barlow 8681693994 Set up code coverage (it works with multiprocessing now!) 2018-11-02 00:31:50 -07:00
James R. Barlow 1364c63b7c Fix failure to pickle file with AcroForm 2018-11-01 20:07:53 -07:00
James R. Barlow 4ba9e8fe25 Add AcroForm detection 2018-10-30 22:28:44 -07:00
James R. Barlow a195713bb4 Throw exception on corrupt text 2018-10-30 16:35:09 -07:00
James R. Barlow 600d31a907 Require pikepdf 0.3.7 2018-10-30 16:22:05 -07:00
James R. Barlow be31cec332 Add corrupt text warning (when using --redo-ocr) 2018-10-30 16:19:58 -07:00
James R. Barlow 22a7cd3421 Add argument checks for --redo-ocr 2018-10-30 16:19:13 -07:00
James R. Barlow 8b61d2d521 pdfminer: If font descent claims to be positive, treat it as negative 2018-10-30 14:40:53 -07:00
James R. Barlow 559e5269d2 Ensure inline image is parsed correctly
Requires pikepdf > 0.3.6
2018-10-29 23:30:53 -07:00
James R. Barlow ebf6acb318 pdfminer patch: Type3 font height calculation is incorrect
Not sure where it goes wrong or why it needs special treatment, but
this does address it.
2018-10-29 22:27:25 -07:00
James R. Barlow 7acd75f013 pipeline: fix bbox coordinates 2018-10-29 22:26:37 -07:00
James R. Barlow 93623b2226 Refactor TextboxInfo 2018-10-29 14:46:40 -07:00
James R. Barlow d71fd089cb layout: allow names beginning with /i0123 for now
Showed up in GGastro2.pdf. Need to check if this pattern has valid
Unicode mappings but allow for now.
2018-10-29 14:45:59 -07:00
James R. Barlow 05aa43c856 Require pdfminer 2018-10-29 12:45:15 -07:00
James R. Barlow de80fb6bc8 Fix some failing tests after --redo-ocr changes 2018-10-29 11:49:38 -07:00
James R. Barlow 8e396f4be2 Document --redo-ocr more accurately 2018-10-29 02:03:58 -07:00
James R. Barlow efec6da377 Fix error on serializing bad character markers
(Since they held a reference to their font, which in turn, had an
open file handle.)
2018-10-29 02:02:00 -07:00
James R. Barlow 00ef53195e Fix corrupt Unicode mapping detection's false positives 2018-10-29 01:30:19 -07:00
James R. Barlow f564aaf485 Remove only_ocr_text 2018-10-28 22:41:18 -07:00
James R. Barlow 5ac2d31d0d Redo OCR can now handle visible and invisible text, so adjust accordingly
Still can't filter out corrupt text
2018-10-28 14:06:25 -07:00
James R. Barlow fda890ab47 pdfinfo: further layout improvements
Rather than grouping visible/invisible in a custom analysis step,
use pdfminer's analysis and iterate.
Make iteration predicate and return more generic.
2018-10-28 14:05:50 -07:00
Stefan Weilandjbarlow83 a873278c2a Fix some recommendations from LGTM (#309)
* Fix unreachable code

This fixes an issue reported by LGTM.

Signed-off-by: Stefan Weil <sw@weilnetz.de>

* Remove unused imports

This fixes several recommendations from LGTM.

Signed-off-by: Stefan Weil <sw@weilnetz.de>
2018-10-28 13:59:58 -07:00
James R. Barlow e6d64be890 pdfinfo: formatting 2018-10-27 23:22:44 -07:00
James R. Barlow 0e4d978d20 pdfinfo: all -> not any 2018-10-27 23:22:28 -07:00
James R. Barlow b12c2cfedf Fix handling of Type3 fonts with no ToUnicode mapping 2018-10-27 01:24:48 -07:00
James R. Barlow 58cc70725e Reorganize around getting bboxes for visible/invisible text 2018-10-26 01:07:02 -07:00
James R. Barlow 339afb02aa --redo-ocr now works in the presence of printable text 2018-10-25 16:53:47 -07:00
James R. Barlow 7ba0ff5c36 Fix strip invisible text bug: missing BT operator 2018-10-25 16:52:23 -07:00
James R. Barlow ff41fbf673 Add pdfminer based layout analysis 2018-10-25 12:42:35 -07:00
James R. Barlow 2435cd23ce Move pdfinfo into a package 2018-10-25 00:37:38 -07:00
James R. Barlow a063cff720 Rename/expose strip_invisible_text 2018-10-24 21:53:24 -07:00
James R. Barlow 0d396e1ac0 option check: Remove always-True condition
Both renderers are now lossless reconstruction-capable. (Have
been since 7.0)
2018-10-22 22:13:59 -07:00
James R. Barlow f5807a2053 Require pikepdf 0.3.5 2018-10-21 21:37:15 -07:00
James R. Barlow eb4938a36f Fix KeyError 'has_vector' 2018-10-20 01:20:22 -07:00
James R. Barlow c5ad530bbf pdfinfo: reminder about 'INLINE IMAGE' sentinel 2018-10-20 01:17:08 -07:00
James R. Barlow d11c428407 Redo OCR: disallow in cases that will damage the output PDF 2018-10-20 01:14:33 -07:00
James R. Barlow 6182b1f53e Merge branch 'feature/remove-vectors' into feature/redo-ocr 2018-10-20 01:13:24 -07:00
James R. Barlow 00fc1a12e2 optimize: should remove unreference resources too 2018-10-19 00:03:56 -07:00
James R. Barlow 16af753206 Add functional "redo OCR" feature
Needs argument validation and some other changes. Needs testing
with mixed-content PDFs.

Only really works for pure invisible text at the moment.
2018-10-19 00:02:19 -07:00
James R. Barlow fa48205bb8 Add feature to remove vector graphics objects 2018-10-18 21:46:08 -07:00
James R. Barlow f7dbf94071 pipeline: if vector graphic objects exist, ensure the DPI is reasonable 2018-10-18 01:23:31 -07:00
James R. Barlow b18e66e2ca pdfinfo: learn to detect vector graphic objects 2018-10-18 01:21:51 -07:00
James R. Barlow 7a5504dfa5 pdfinfo: fix terminology (operands, command) -> (operands, operator) 2018-10-18 01:18:30 -07:00
James R. Barlow d1cad7bc68 Merge branch 'master' of github.com:jbarlow83/OCRmyPDF 2018-10-16 01:28:17 -07:00
Elliott Sales de Andradeandjbarlow83 c58d5c097c Add Fedora install instructions. (#304)
* Add Fedora install instructions.

* Fix path to fedora_rawhide badget
2018-10-14 13:28:50 -07:00
James R. Barlow 46157ca94e docs: some redundancies 2018-10-12 21:29:27 -07:00
jbarlow83andGitHub dd99511bcc Fix broken badges in README 2018-10-12 21:16:08 -07:00
M.Yasoob Ullah Khalid ☺andjbarlow83 5bc2efd3c7 Removed extra word from docs (#303) 2018-10-12 21:02:16 -07:00
James R. Barlow 1b18dbecf5 Fix filename test.txt 2018-10-11 16:03:25 -07:00
James R. Barlow 9f82c0eb6e v7.2.1 release notes 2018-10-11 15:55:01 -07:00
James R. Barlow 68bac1b177 Fix compatibility with pikepdf 0.3.5 API change 2018-10-11 15:51:34 -07:00
James R. Barlow 1495b78330 Remove cruft to support leptonica < 1.72 in test suite 2018-10-11 01:37:32 -07:00
James R. Barlow 6f777d2848 Include Debian copyright file 2018-10-10 23:55:48 -07:00
James R. Barlow 5650eba848 Cleanup MANIFEST.in, reorg requirements/*.txt, fix non-Unicode readme 2018-10-10 23:53:08 -07:00
James R. Barlow 5bc5dc93f3 v7.2.0 release notes update 2018-10-05 01:27:00 -07:00
James R. Barlow c1e18bb825 optimize: Exclude soft masks (SMasks) from optimization
Soft masks are only allowed to be of colorspace DeviceGray so we
shouldn't use pngquant on them. For now, avoid this exceptional
case by excluded soft masks from optimization.
2018-10-05 01:23:26 -07:00
James R. Barlow 58282ea0fb optimize: more refactoring
Now properly generalized/specialized where it should be
2018-10-04 13:44:51 -07:00
James R. Barlow 891da7834c optimize: refactor image extraction 2018-10-04 12:34:22 -07:00
James R. Barlow 5c229d48d5 optimize: Reorganize so JBIG2 can be performed on images reduced to 1bpp
Closes #297
2018-10-04 11:53:11 -07:00
James R. Barlow 53f660cf35 Travis: use newer macos image 2018-10-04 08:59:40 -07:00
James R. Barlow 7b66ca68f2 ...and document lossy JBIG2 2018-10-04 01:31:53 -07:00
James R. Barlow ba71c3ffbd requirements: request pikepdf 0.3.4 2018-10-04 01:22:03 -07:00
James R. Barlow 6707ad427a v7.2.0 release notes 2018-10-04 01:21:17 -07:00
James R. Barlow 5b84549716 Change JBIG2 lossy mode to require --jbig2-lossy 2018-10-04 01:20:49 -07:00
James R. Barlow c74f2ee6e8 Refactor the detailed error messages 2018-10-04 00:10:59 -07:00
James R. Barlow b32dd9f9d3 Fix lossless JBIG2 when there are multiple JBIG2 images on a single page 2018-10-03 17:40:26 -07:00
James R. Barlow fb8b161f6c Fix suppression of tesseract config error messages 2018-10-03 17:39:50 -07:00
James R. Barlow baddd6d233 Remove libtiff from Brewfile
For some reason, brew complains about it now.
2018-10-03 16:17:59 -07:00
James R. Barlow 6f554c6ae8 tesseract: account for behavior changes when params are missing
Tesseract 4.0-rc1 now accepts invalid parameters in config and
won't return an error anymore. We prefer to raise an error if this
occurs.

See: https://github.com/tesseract-ocr/tesseract/commit/741ea00d7059d8ff7c55797ffc525a461d7f3ced
2018-10-03 15:11:34 -07:00
James R. Barlow a71e4488b3 test: fix pytest warning about direct use of a fixture 2018-10-03 15:04:46 -07:00
James R. Barlow 72156b5653 Degrade more gracefully when --optimize is set but JBIG2 is not present 2018-10-03 14:24:20 -07:00
James R. Barlow 9fa471e053 Test: send stderr to stderr, why don't we? 2018-10-03 14:23:34 -07:00
James R. Barlow 31ef2fe907 test: this error message changed case in newer Tesseract 2018-10-03 13:58:20 -07:00
James R. Barlow 9a8ec4b210 optimize: only enable lossy JBIG2 for -O3 2018-10-03 00:38:58 -07:00
James R. Barlow 75aad4cc79 optimize: Refactor convert_to_jbig2 2018-10-02 23:42:12 -07:00
James R. Barlow 4b27feca98 optimize: Disable JBIG2 lossy mode, use lossless instead 2018-10-01 12:28:54 -07:00
James R. Barlow 45522cd15f weave: clarify comment about garbage data in ToC 2018-09-27 13:48:35 -07:00
James R. Barlow 677d9a4e76 Remove some unhelpful lambdas 2018-09-27 13:48:12 -07:00
James R. Barlow efa7ea4fde Fix log.error where log is None 2018-09-19 23:01:27 -07:00
James R. Barlow 137a6e45f5 ghostscript: fix missing fspath for py3.5 2018-09-19 22:57:20 -07:00
James R. Barlow 29116e1dec Change to README.md 2018-09-19 21:01:24 -07:00
James R. Barlow 87193335b9 v7.1.0 notes 2018-09-19 20:57:18 -07:00
James R. Barlow cfd4f8a850 Improve error handling for improvements to Ghostscript text extraction 2018-09-19 20:29:18 -07:00
James R. Barlow eaa324939f Upgrade to pikepdf 0.3.3
Closes #231
2018-09-19 15:30:54 -07:00
James R. Barlow ef70e538f7 Improve error message on handling KeyboardInterrupt
Closes #301
2018-09-19 01:40:26 -07:00
James R. Barlow b7b912e56a Fix test suite and blank pages 2018-09-17 01:12:58 -07:00
James R. Barlow 4615cf2f1e First cut at improving text extraction speed 2018-09-16 23:34:18 -07:00
James R. Barlow eaf772f80a Merge v6.2.4 release notes 2018-09-16 15:45:38 -07:00
James R. Barlow 96ba75eabd Ghostscript: fix issues in strict ASCII implementation 2018-09-16 15:41:54 -07:00
James R. Barlow fdfe52c1ad main: add debug option to force threads 2018-09-15 00:01:45 -07:00
James R. Barlow 932b2e2a29 main: print Ghostscript version too 2018-09-14 23:58:06 -07:00
James R. Barlow 57e489c957 main: Cleanup; support overriding sys.args in run_pipeline 2018-09-14 23:57:35 -07:00
James R. Barlow 17a3fa671c ghostscript: API docs update 2018-09-14 23:51:52 -07:00
James R. Barlow 2659afb4f6 Cleanup gitignore 2018-09-14 21:02:22 -07:00
James R. Barlow 7392115507 Blacklist Ghostscript 9.24 due to regressions
As per issue #291. Forced push to remove a copyrighted test file that was
accidentally included.
2018-09-14 20:41:13 -07:00
James R. Barlow c54d0c7eaa v7.0.5 release notes 2018-09-13 23:29:54 -07:00
James R. Barlow b95eefc65f Fix pikepdf version for Travis 2018-09-13 22:08:19 -07:00
James R. Barlow 686207ab7f Check for and reject Adobe LiveCycle Designer PDFs
These are the ones that display a "Please wait..." message.

Closes #296
2018-09-13 21:50:51 -07:00
James R. Barlow 517b385fe5 Work around loss of Unicode DOCINFO in Ghostscript 9.24+
Ghostscript no longer supports UTF-16-BE-hex strings as a way of
supplying Unicode data in pdfmark so we have lost this functionality too:
http://git.ghostscript.com/?p=ghostpdl.git;a=commit;h=e997c6836d243ab37fe3a5f0d57974af95eb5eac

For users this means setting --title, --author, etc. will not work if gs
9.24 is installed, but if the file has existing metadata it might work.

For now we enforce police-state-strict ASCII, until there's time to
implement proper metadata editing. Relevant tests set to xfail.
2018-09-13 21:33:39 -07:00
James R. Barlow 795019b0c1 Work around invalid TOC entries
Kodak Capture Desktop and probably other software creates a
/Outlines entry with /First being set to an invalid indirect reference to
an object that hasn't been created. This is legal in the PDF spec but
problematic for qpdf. The objgen will be (max valid object ID + 1, 0).
Because we create new objects in _weave, some TOC entries will end
up assigned to new objects we create. Typically /ProcSet.

We solve the issue by refactoring page traversal and then doing it
twice, once to resolve all references (eliminating the null
reference problem) and a second pass to make our changes.
2018-09-11 14:44:16 -07:00
James R. Barlow 3127a73822 Ghostscript: no need to specify ProcessColorModel when ColorConversionStrategy 2018-09-11 11:56:05 -07:00
James R. Barlow 069ee6c91f ghostscript: fix for 9.24 having jpeg passthrough available 2018-09-10 23:09:51 -07:00
James R. Barlow 3aac3a98ca tests: Migrate metadata tests to pikepdf
For some reason PyPDF2 has begun to trigger internal errors in
pytest on macOS alone. Not sure why, but nothing is wrong that I can
see. Seemed like an opportune time to switch to pikepdf; found some
new issues in the process anyway.
2018-09-10 16:06:01 -07:00
James R. Barlow 268859a304 Merge branch 'master' of github.com:jbarlow83/OCRmyPDF: docs 2018-09-10 11:52:04 -07:00
James R. Barlow a96710aa7b leptonica: update comments 2018-09-10 11:47:38 -07:00
James R. Barlow edcc58826a pdfinfo: remove some dead code 2018-09-10 11:47:00 -07:00
James R. Barlow 7077c8220a Fix rst formatting in release notes 2018-09-10 11:46:17 -07:00
Mateus Seenem Tavaresandjbarlow83 f7cbf68edd Updating Arch Linux instalation (#288)
* Updating Arch Linux instalation

And adding a workaround to a wrong dependencies definition on https://aur.archlinux.org/packages/python-pikepdf/

* Remove comment about temporary workaround
2018-08-31 12:30:18 -07:00
James R. Barlow 68a58ee8a5 docs: fix hyperlinking of jbig2 page (again) and cleanup release notes 2018-08-27 01:25:30 -07:00
James R. Barlow 3109ec5091 v7.0.4 notes 2018-08-24 12:41:53 -07:00
James R. Barlow e0599fe8d7 Require pikepdf 0.3.2 2018-08-24 12:41:43 -07:00
James R. Barlow a749240589 docs: mention pikepdf install more clearly 2018-08-22 03:19:46 -07:00
James R. Barlow 6decdaa062 Try setuptools_scm_git_archive again 2018-08-20 15:45:51 -07:00
James R. Barlow 4d5c9b8cdf Fix error in optimize.py on PNGs at -O2
Error was
TypeError: unsupported operand type(s) for -: 'tuple' and 'int'
2018-08-20 15:45:34 -07:00
James R. Barlow 1e23ea5364 Remove pikepdf < 0.3 compatibility shims since > 0.3.1 is now required 2018-08-10 17:01:03 -07:00
James R. Barlow cf9a8a91b5 Require pikepdf 0.3.1 2018-08-10 16:59:08 -07:00
James R. Barlow 05d3a65e94 docs: Fix links to JBIG2 encoder page
[ci skip]
2018-08-09 21:14:50 -07:00
James R. Barlow c043552f8b Fix travis.yml syntax 2018-08-03 14:02:20 -07:00
James R. Barlow 487ee2b6c9 Notes for v7.0.2 2018-08-03 13:37:18 -07:00
James R. Barlow 8013fd50da Draw preview image at full resolution
As reported in #281 and confirmed by the test file in #279, downsampling
the preview adversely affects quality of image rotation especially for
small font sizes and marginal scans.

Full size gets rotation accuracy. This makes rotation a little inefficient
since it rasterizes twice - to be addressed later.
2018-08-03 13:32:10 -07:00
James R. Barlow 4ec9ec12e3 docs: Describe PDF optimization 2018-08-03 13:10:18 -07:00
James R. Barlow ed96594727 Regroup installation page content around platforms
Also separate out JBIG2 encoder instructions so that distributions that
delete installation.rst won't omit this information.
2018-08-03 12:47:25 -07:00
James R. Barlow 91b7193249 Travis: use xenial for Python 3.7 2018-08-03 11:52:23 -07:00
James R. Barlow 008f65c6a9 Update pinned requirements 2018-08-03 01:15:21 -07:00
James R. Barlow 7aa4e60af2 Explain pytest --runslow 2018-08-03 00:57:59 -07:00
James R. Barlow 6ef26516d1 pipeline: revise logic of rotations to fix pages with nonzero /Rotate 2018-08-03 00:53:29 -07:00
James R. Barlow bb50501369 ghostscript: never use autorotatepages
It looks like from the gs manual that this parameter is only respected for
vector devices so it never had any effect, but to stay on the safe side,
which it off.
2018-08-03 00:44:34 -07:00
James R. Barlow 55eb481f30 Add intensive (optional) rotation test 2018-08-03 00:42:59 -07:00
James R. Barlow 4509ca6e75 pipeline: remove unused function 2018-08-03 00:41:08 -07:00
James R. Barlow c61fe9af61 Fix release notes typos 2018-08-03 00:40:44 -07:00
James R. Barlow 4181a712d1 Update setup.py for version changes 2018-08-01 15:17:49 -07:00
James R. Barlow c171cb7286 Merge img2pdf 0.3.0 fix from v6.2.3 2018-08-01 15:17:33 -07:00
James R. Barlow 1d09061130 Revert previous commit amd reject input images with alpha channel
Decided on this for simplicity of old release branch.

Modifies baiona.png by stripping
alpha, adds baiona_alpha which
includes the alpha.
2018-07-31 23:45:28 -07:00
James R. Barlow a2203b2447 Discard alpha channel when triaging images 2018-07-25 22:23:41 -04:00
James R. Barlow 755f6e0979 optimize: Use new pikepdf Object.write API 2018-07-13 23:52:36 -07:00
James R. Barlow 95b2830d17 Support removal of Null from pikepdf 2018-07-13 23:50:35 -07:00
James R. Barlow 2669d8332e Add more guidance about using Docker 2018-07-13 12:39:47 -07:00
James R. Barlow 11fbd32e6e Merge v6.2.2 (mainly to get release notes) 2018-07-13 12:38:15 -07:00
James R. Barlow 6a302fdb88 Travis: nevermind xenial, then
Gave a weird build error
2018-07-12 03:27:40 -07:00
James R. Barlow 1d9cc239ee Travis: Fix v6 build failures 2018-07-12 03:22:03 -07:00
James R. Barlow d240fc1ea6 Update release notes for v6.2.2 2018-07-12 03:07:47 -07:00
James R. Barlow e7d21dd826 Skip locale check on Python 3.7 2018-07-12 03:03:34 -07:00
James R. Barlow e774b4650b ocrmypdf.exec: trap FileNotFoundError too 2018-07-12 03:01:01 -07:00
James R. Barlow 8f8e6dcdd4 Fix problem iterating ruffus exceptions and rotate-pages-threshold parameter validation 2018-07-12 02:59:38 -07:00
James R. Barlow 5252b88f0f Travis: modernize with v7.0.0 updates
Travis: add 3.7 testing
Travis: remove deploy to testpypi since it's broken
Travis: cherry-pick change to declarative APT
From efb9572
Removed pngquant
Travis: Remove linux_before_install.sh
Eliminate Homebrew autobrewing
2018-07-12 02:47:29 -07:00
James R. Barlow ea69883386 Tests: Speed up a slow test (cherry-picked from v7) 2018-07-12 02:47:15 -07:00
James R. Barlow eb343b1e37 Tests: Add ability to disable use of cache (cherrypicked from v7) 2018-07-12 02:46:53 -07:00
James R. Barlow 9f02de55be main: do better parameter validation 2018-07-12 02:46:52 -07:00
James R. Barlow 7394a4cf49 Cherrypick warning about --user-words not having any effect
Might be available in full release of Tess4
2018-07-12 02:46:34 -07:00
James R. Barlow ed9fb110b1 Fix a comment about Tesseract behavior in certain versions 2018-07-12 02:46:34 -07:00
James R. Barlow 4650074428 Cherrypick Python 3.7 documentation updates from v7.0.0
From b0eacd6
2018-07-12 02:45:51 -07:00
James R. Barlow 70aa644c10 Backport Python 3.7 fix for ruffus 2.7.0 from ocrmypdf v7.0.0 2018-07-12 02:45:51 -07:00
James R. Barlow 2ccb3edc58 Ignore masks when deciding what color to rasterize at 2018-07-12 02:45:51 -07:00
James R. Barlow a12a5f11ff More doc updates for 7.0.0 2018-07-12 01:52:49 -07:00
James R. Barlow f46e4067f4 Dockerfile: should work now
[ci skip]
2018-07-11 00:57:20 -07:00
James R. Barlow 47bf5585e8 Dockerfile: needs leptonica 2018-07-11 00:17:04 -07:00
James R. Barlow 72fb4d39be Dockerfile: fix missing mkdir 2018-07-10 21:56:49 -07:00
James R. Barlow 9681c0e05a Eliminate Homebrew autobrewing
The Homebrew-core does such a good job of keeping things up to
date there is little to point to a private infrastructure.
2018-07-10 21:37:38 -07:00
James R. Barlow 2628575dab Adjust Dockerfile again 2018-07-10 21:14:41 -07:00
James R. Barlow f7d59068e5 Adjust Dockerfile for 7.0.0 2018-07-10 18:20:33 -07:00
James R. Barlow 4cf10d62ca More work on installation steps
[ci skip]
2018-07-10 18:20:22 -07:00
James R. Barlow 2f65e3aac8 (Hopefully) fix build on ReadTheDocs
[ci skip]
2018-07-10 13:20:33 -07:00
James R. Barlow e494cd7aa6 Update installation notes
Closes #276
2018-07-10 12:24:01 -07:00
James R. Barlow 809880f46d Brew: jbig2dec and libffi are not required 2018-07-10 11:05:36 -07:00
James R. Barlow 5925ebe31c Merge branch 'develop' (7.0.0) into master
# Conflicts:
#	.gitignore
#	.travis/linux_before_install.sh
#	docs/release_notes.rst
#	test_requirements.txt
2018-07-09 21:15:13 -07:00
James R. Barlow 316709c291 Fix typo introduced in
338593d
2018-07-09 21:07:58 -07:00
James R. Barlow 0d6a2ba554 Declare certain APIs public 2018-07-09 14:28:37 -07:00
James R. Barlow 1fcb06b1aa Update readme 2018-07-09 14:02:12 -07:00
James R. Barlow 36138c7c06 Update release notes 2018-07-09 13:56:30 -07:00
James R. Barlow 338593d9e7 Remove ruffus 2.6.3 exception special casing 2018-07-09 13:56:23 -07:00
James R. Barlow d6eb1f9578 Remove dependency on private fork of ruffus, change to official 2.7 2018-07-09 12:51:56 -07:00
James R. Barlow 1cc9d2d3d1 Fix path error on Py3.5 2018-07-08 01:01:06 -07:00
James R. Barlow 58642aa98b Fix issue #275: doesn't work when installed in non-Unicode path
Closes #275
2018-07-07 01:35:05 -07:00
James R. Barlow 7baaf00a38 Fix wrong return code tested 2018-07-05 13:49:22 -07:00
James R. Barlow 5cc23dbf24 pdfinfo: more robustness 2018-07-04 17:12:30 -07:00
James R. Barlow 216d60ea2c pdfinfo: improve the regex 2018-07-04 00:59:32 -07:00
James R. Barlow 8b0496d35e Fix invalid XML characters choking parser 2018-07-03 22:51:59 -07:00
James R. Barlow e44001641c Return a distinct error code if PDF/A fails 2018-07-03 16:59:03 -07:00
James R. Barlow 47885f4230 Remove initial qpdf.repair
Since pikepdf is doing the work the initial repair takes time and gives
little benefit.

It turns out to not be worthwhile to
save the results of PdfInfo parsing,
since the time to save this seems to exceed the costs of recalculating
it since the "weave" code. At least
for small files.
2018-07-03 16:50:05 -07:00
James R. Barlow 921767e82e ocrmypdf.exec: trap FileNotFoundError too 2018-07-03 00:05:49 -07:00
James R. Barlow 85f96b7fb0 Add test to optimize if jbig2 is present 2018-07-02 23:49:11 -07:00
James R. Barlow 890c7fd0f6 optimize: allow modification of quality settings in command line mode 2018-07-02 23:48:51 -07:00
James R. Barlow 39c44bdd2f Don't use --optimize in test since jbig2enc is not always installed 2018-07-02 23:48:23 -07:00
James R. Barlow 5f99f7f6ca Upgrade to Py3.7 locally and resolve a few issues 2018-07-02 23:47:51 -07:00
James R. Barlow 4f864bce98 Update macOS Brewfile 2018-07-02 22:25:46 -07:00
James R. Barlow 2974929b26 Make jpeg/png quality tunable args 2018-07-02 22:22:59 -07:00
James R. Barlow db837aa55c Improve release notes 2018-07-02 16:48:33 -07:00
James R. Barlow 7200623007 Fix installation for Python 3.7
Need to use private fork of ruffus for Python 3.7. Backward compatible with Python 3.6 for ruffus 2.6.3

Disable locale checking for 3.7 since the various fixes in that release should make it unnecessary.
2018-07-02 16:47:14 -07:00
James R. Barlow 73e02ae4ea Hopefully workaround Py3.5 marshal error
https://github.com/eliben/pycparser/issues/251
2018-06-29 12:54:48 -07:00
James R. Barlow d4cbef9457 Update test cache with naming rule change 2018-06-29 12:04:20 -07:00
James R. Barlow ed8ff79e10 Optimize some of our bigger test files
Only partially optimize multipage.pdf so that it hopefully
improves speed of test suite without being useless as an
optimization test.
2018-06-29 00:35:49 -07:00
James R. Barlow e725f64b6a Add test case to ensure mono is not inverted 2018-06-29 00:25:11 -07:00
James R. Barlow 0029cc4fe7 optimize: fix PNGs that were reduced to 1-bit being inverted
At some point the color gets flipped, we have to flip it again,
for mono.

Incidentally this exposed an unused
optimization. Should change the
first past to scan all images and
record monochrome xrefs, then optimize
JPEG and PNG, possibly adding
mono images to the monochrome
queue. Finally, do JBIG2 optimization.
2018-06-29 00:09:20 -07:00
James R. Barlow 9637696a54 Fix test resources naming inconsistency 2018-06-28 23:37:14 -07:00
James R. Barlow 02b3ca6862 Compress test images more heavily 2018-06-28 21:40:12 -07:00
James R. Barlow bc90f40a8f Replace all Pix.read with Pix.open 2018-06-28 15:13:26 -07:00
James R. Barlow 3d727ff4c0 Fix leptonica remove_colormap was replaced with a no-op at some point 2018-06-28 15:11:51 -07:00
James R. Barlow b0eacd6586 Add Python 3.7 support 2018-06-28 13:57:45 -07:00
James R. Barlow 7795701595 Merge branch 'test/ignore-masks' 2018-06-28 13:05:45 -07:00
James R. Barlow bf214eecb3 Use newer pikepdf API for objgen 2018-06-28 12:59:01 -07:00
James R. Barlow 434b96d734 optimize: skip incremental images if any
These are fairly rare
2018-06-24 00:18:48 -07:00
James R. Barlow b9dc109892 optimize: use new pikepdf api for objgen 2018-06-24 00:16:28 -07:00
James R. Barlow 1f40a70554 Use qpdf 8.0.2 backport, force old pytest-timeout to fix build 2018-06-23 03:14:18 -07:00
James R. Barlow e14ffbf03f v6.2.1 release notes 2018-06-23 03:01:54 -07:00
James R. Barlow 25a1dde57c Fix recent versions of tesseract not registering as textonly_pdf
This change happened sometime after the 4.0.0-beta1 release in
Ubuntu 18.04
2018-06-23 02:59:22 -07:00
James R. Barlow bf96171b65 Ignore whether or not textonly_pdf was used in cache
The difference doesn't matter in 7.0.0 anymore.
2018-06-23 02:58:26 -07:00
James R. Barlow b7ff821fa3 Fix recent versions of tesseract not registering as textonly_pdf
This change happened sometime after the 4.0.0-beta1 release in
Ubuntu 18.04
2018-06-23 02:55:58 -07:00
James R. Barlow b81daf71d1 Regenerate test cache 2018-06-23 02:02:58 -07:00
James R. Barlow faad1fc58a Reactivate two tests that weren't using their fixtures properly 2018-06-23 01:54:09 -07:00
James R. Barlow 6f48181a56 Disable a pylint 2018-06-23 01:53:04 -07:00
James R. Barlow f1305e5a37 pdfa: fix function using closure when it shouldn't 2018-06-23 01:52:36 -07:00
James R. Barlow f0e0f92776 leptonica: fix variables defined on class outside __init__ 2018-06-23 01:51:55 -07:00
James R. Barlow 807c8b0726 Trailing whitespace 2018-06-23 01:51:19 -07:00
James R. Barlow 6333ec928c Cleanup some cases where log was lazy and should be 2018-06-23 01:50:27 -07:00
James R. Barlow cd220d9ed9 pipeline: search_window variable not actually used 2018-06-23 01:48:57 -07:00
James R. Barlow 76532649b8 tesseract.get_orientation: removed unused language parameter 2018-06-23 01:48:24 -07:00
James R. Barlow b0dbaeafc5 Cleanup unused imports 2018-06-23 01:47:53 -07:00
James R. Barlow 2530d1791b Fix several pylint errors and warnings 2018-06-23 00:54:22 -07:00
James R. Barlow 94150f414a Remove qpdf.merge
We no longer need to merge pages this way. Much of the functionality
was there to implement page splitting without hitting ulimit which
will be fixed in qpdf > 8.0.2. The tests were expensive to run.

Also remove pytest-timeout since it breaks the Linux build.
2018-06-23 00:45:03 -07:00
James R. Barlow 54e74f84cc Remove special of TypeError from ruffus
split_pages would still run if repair_pdf failed, for some reason.
Since we are no longer splitting pages this is vestigial.
2018-06-23 00:41:20 -07:00
James R. Barlow 76e7e8dbbb Replace several uses of str(path) with fspath(path)
Helps make it more explicit. Did not do this to tests because use of paths
is more involved there.
2018-06-22 21:00:47 -07:00
James R. Barlow 324598e992 Remove helpers.universal_open()
This helper function only had a single usage, this was always an awkward
way to support Python 3.5 that I'd forget to use.
2018-06-22 17:56:20 -07:00
James R. Barlow 9e765ddf46 Rename _optimize to optimize.py 2018-06-22 17:51:57 -07:00
James R. Barlow 6ac9e92f17 Fix PEP8 docstring convention misuse in a few places 2018-06-22 17:51:25 -07:00
James R. Barlow faaa4a1def Ghostscript, PDF/A: support pathlib 2018-06-22 17:45:10 -07:00
James R. Barlow 0aa51f0f3a Remove fitz from Travis 2018-06-18 15:38:41 -07:00
James R. Barlow 73431d9761 Remove obsolete _naive_find_text 2018-06-13 14:00:50 -07:00
James R. Barlow 45cb4525cf Remove other references to PyMuPDF 2018-06-13 01:02:53 -07:00
James R. Barlow 8c84c515b6 Use Ghostscript for text region detection
Ghostscript txtwrite seems to be quite effective at the task.

Eliminates dependency on fitz
2018-06-13 00:58:09 -07:00
James R. Barlow 1dfbbdebf4 Adjust for pikepdf API change 2018-06-08 22:47:56 -07:00
James R. Barlow 740918daee Create debug envvar to override Creator or Producer
Note that Ghostscript always overrides Producer
2018-06-06 23:17:28 -07:00
jbarlow83andGitHub 1d10eac764 Add wiki link to issue template
[ci skip]
2018-06-06 12:59:59 -07:00
jbarlow83andGitHub 3f868118cd Remove gpg
[ci skip]
2018-06-06 12:58:02 -07:00
James R. Barlow 04d79b15b4 optimize: fix error in Py3.5 2018-06-06 12:25:32 -07:00
James R. Barlow a13c398c06 Suppress some spurious tesseract errors 2018-06-05 23:26:28 -07:00
James R. Barlow e3b3f716ee optimize: use tempdir for cmdline invocation 2018-06-05 21:20:54 -07:00
James R. Barlow cf43c06f46 Use python-xmp-toolkit for xmp check
Eliminates PyPDF2 and defusedxml as dependencies.
2018-05-29 22:00:52 -07:00
James R. Barlow 74a5a18607 Tweak release notes 2018-05-28 14:52:06 -07:00
James R. Barlow 44241c6dd5 Travis: remove deploy to testpypi since it's broken 2018-05-27 01:49:18 -07:00
James R. Barlow 1539e24d61 Ignore masks when deciding what color to rasterize at 2018-05-10 00:49:36 -07:00
267 changed files with 7795 additions and 4544 deletions
+31 -9
View File
@@ -3,38 +3,60 @@
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential autoconf automake libtool \
libleptonica-dev \
zlib1g-dev \
libexempi3 \
ocrmypdf \
unpaper \
pngquant \
python3-pip \
python3-venv \
tesseract-ocr \
tesseract-ocr-chi-sim \
tesseract-ocr-deu \
tesseract-ocr-eng \
tesseract-ocr-fra \
tesseract-ocr-deu \
tesseract-ocr-spa \
tesseract-ocr-por \
tesseract-ocr-chi-sim \
python3-venv \
python3-pip
tesseract-ocr-spa \
unpaper \
wget
ENV LANG=C.UTF-8
# Compile and install jbig2
# Needs libleptonica-dev, zlib1g-dev
RUN \
mkdir jbig2 \
&& wget -q https://github.com/agl/jbig2enc/archive/0.29.tar.gz -O - | \
tar xz -C jbig2 --strip-components=1 \
&& cd jbig2 \
&& ./autogen.sh && ./configure && make && make install \
&& cd .. \
&& rm -rf jbig2
RUN apt-get remove -y autoconf automake libtool
RUN python3 -m venv --system-site-packages /appenv
# This installs the latest binary wheel instead of the code in the current
# folder. Installing from source will fail, apparently because cffi needs
# build-essentials (gcc) to do a source installation
# build-essentials (gcc) to do a source installation
# (i.e. "pip install ."). It's unclear to me why this is the case.
RUN . /appenv/bin/activate; \
pip install --upgrade pip \
&& pip install ocrmypdf[fitz]
&& pip install --upgrade ocrmypdf
# Now copy the application in, mainly to get the test suite.
# Do this now to make the best use of Docker cache.
COPY . /application
RUN . /appenv/bin/activate; \
pip install -r /application/test_requirements.txt
pip install -r /application/requirements/test.txt
# Remove the junk, including the source version of application since it was
# already installed
RUN rm -rf /tmp/* /var/tmp/* /root/* /application/ocrmypdf \
&& apt-get remove -y build-essential \
&& apt-get autoremove -y \
&& apt-get autoclean -y
+19
View File
@@ -0,0 +1,19 @@
# OCRmyPDF webservice
#
FROM jbarlow83/ocrmypdf-polyglot:latest
USER root
# Update system and install our dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
python3-flask
RUN apt-get autoremove -y && apt-get clean -y
EXPOSE 5000
COPY .docker/webservice.py /application
USER docker
ENTRYPOINT ["python3", "/application/webservice.py"]
+94
View File
@@ -0,0 +1,94 @@
# webservice.py wrapper for OCRmyPDF
# Copyright (C) 2018 James R. Barlow: github.com/jbarlow83
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
"""This is a simple web service/HTTP wrapper for OCRmyPDF
This may be more convenient than the command line tool for some Docker users.
Note that OCRmyPDF uses Ghostscript, which is licensed under AGPL3+. While
OCRmyPDF is under GPL3, this file is distributed under the Affero GPL3+ license,
to emphasize that SaaS deployments should make sure they comply with
Ghostscript's license as well as OCRmyPDF's.
"""
from flask import Flask, Response, flash, request, redirect, url_for, abort, send_from_directory
from subprocess import run, PIPE
from tempfile import TemporaryDirectory
from werkzeug.utils import secure_filename
import os
import shlex
app = Flask(__name__)
app.secret_key = "secret"
uploaddir = TemporaryDirectory(prefix="ocrmypdf-upload")
downloaddir = TemporaryDirectory(prefix="ocrmypdf-download")
app.config["UPLOAD_FOLDER"] = uploaddir
ALLOWED_EXTENSIONS = set(["pdf"])
def allowed_file(filename):
return "." in filename and filename.rsplit(".", 1)[1].lower() in ALLOWED_EXTENSIONS
def do_ocrmypdf(file):
filename = secure_filename(file.filename)
up_file = os.path.join(uploaddir.name, filename)
file.save(up_file)
down_file = os.path.join(downloaddir.name, filename)
cmd_args = [arg for arg in shlex.split(request.form["params"])]
if "--sidecar" in cmd_args:
return Response("--sidecar not supported", 501, mimetype='text/plain')
ocrmypdf_args = ["ocrmypdf", *cmd_args, up_file, down_file]
proc = run(ocrmypdf_args, stdout=PIPE, stderr=PIPE, encoding="utf-8")
if proc.returncode != 0:
stderr = proc.stderr
return Response(stderr, 400, mimetype='text/plain')
return send_from_directory(downloaddir.name, filename)
@app.route("/", methods=["GET", "POST"])
def upload_file():
if request.method == "POST":
if "file" not in request.files:
return Response("No file in POST", 400, mimetype='text/plain')
file = request.files["file"]
if file.filename == "":
return Response("Empty filename", 400, mimetype='text/plain')
if not allowed_file(file.filename):
return Response("Invalid filename", 400, mimetype='text/plain')
if file and allowed_file(file.filename):
return do_ocrmypdf(file)
return Response("Some other problem", 400, mimetype='text/plain')
return """
<!doctype html>
<title>OCRmyPDF webapp</title>
<h1>Upload a PDF (debug UI)</h1>
<form method=post enctype=multipart/form-data>
<label for="args">Command line parameters</label>
<input type=textbox name=params>
<label for="file">File to upload</label>
<input type=file name=file>
<input type=submit value=Upload>
</form>
"""
if __name__ == "__main__":
app.run(host='0.0.0.0')
+1 -8
View File
@@ -2,11 +2,4 @@ Please include the command line and a test file with your issue report.
If possible, please use a test file that we can include in future test cases (no personal information, no copyrighted material).
If you wish to encrypt a test file so that only the maintainer of OCRmyPDF can view it, you may use:
```bash
gpg --recv-keys 4434eb74c4a35f7f --keyserver pgp.mit.edu
gpg --output test.pdf.gpg --encrypt --receipient 4434eb74c4a35f7f test.pdf
```
If you wish to encrypt a test file for the OCRmyPDF maintainer only, see the [Wiki](https://github.com/jbarlow83/OCRmyPDF/wiki).
+16 -20
View File
@@ -1,45 +1,41 @@
# Development environment
.bash_history
.pylintrc
.pytest_cache/
.ruffus_history.sqlite
.venv/
*.pyc
*.sublime-*
venv*/
pyvenv.cfg
tasks.py
.bash_history
.ruffus_history.sqlite
.idea/
.pytest_cache/
# Package building
*.egg-info/
.cache/
.eggs/
*.egg-info/
build/
dist/
wheelhouse/
# Automatically generated files
ocrmypdf/lib/_*.py
ocrmypdf/version.py
docs/_build/
docs/_static/
docs/_templates/
docs/Makefile
ocrmypdf/lib/_*.py
# Code coverage
.coverage
.coverage*
htmlcov/
# Testing
log/
.ipynb_checkpoints/
.vscode/
*.ipynb
*.profile
/*.pdf
/*.qdf
*.ipynb
.ipynb_checkpoints/
/*.png
/scratch.py
IDEAS
log/
tests/output/
tests/resources/private/
tmp/
pdfbox-app*.jar
.vscode/
IDEAS
_Dockerfile.local
scratch.py
+10
View File
@@ -0,0 +1,10 @@
build:
image: latest
python:
version: 3.6
formats:
- pdf
requirements_file: requirements/main.txt
+64 -75
View File
@@ -1,60 +1,73 @@
dist: trusty
language: python
cache:
pip: true
directories:
- $HOME/Library/Caches/Homebrew
addons:
apt:
update: true
sources:
- sourceline: 'ppa:alex-p/tesseract-ocr'
- sourceline: 'ppa:heyarje/libav-11'
- sourceline: 'ppa:vshn/ghostscript'
packages:
- ghostscript
- libavcodec56
- libavformat56
- libavutil54
- libffi-dev
- pngquant
- poppler-utils
- qpdf
- tesseract-ocr
- tesseract-ocr-deu
- tesseract-ocr-eng
- tesseract-ocr-fra
env:
global:
- secure: "hsf6MT+n2x3OiDM2fQyJZdV0/PWYmv81LdVqC6cfnHBE/8N3DloJRqQ7WfO14TxhiK9PEC7MpyCj0lSabUHEO7gSH6Vks6I1asoSkt8S9/bSMlhT4hei+pwVpeGEiU5xHVATNjY+D919VC3IFvc3XmjT74h/2SLhaZ+jhEmDggM=" # HOMEBREW_OCRMYPDF_TOKEN
matrix:
include:
- os: linux
dist: trusty
sudo: required
language: python
python: 3.5
env: EXTRAS=
python: "3.5"
env:
- DIST=trusty
addons: &trusty_apt
apt:
update: true
sources:
- sourceline: 'ppa:alex-p/tesseract-ocr'
- sourceline: 'ppa:heyarje/libav-11'
- sourceline: 'ppa:vshn/ghostscript'
packages:
- ghostscript
- libavcodec56
- libavformat56
- libavutil54
- libexempi3
- libffi-dev
- pngquant
- poppler-utils
- qpdf
- tesseract-ocr
- tesseract-ocr-deu
- tesseract-ocr-eng
- tesseract-ocr-fra
- os: linux
dist: trusty
sudo: required
language: python
python: 3.6
env: EXTRAS=
python: "3.6"
env:
- DIST=trusty
addons: *trusty_apt
- os: linux
dist: xenial
sudo: required
language: python
python: 3.6
env: EXTRAS=[fitz]
python: "3.7"
env:
- DIST=xenial
addons:
apt:
update: true
sources:
- sourceline: 'ppa:alex-p/tesseract-ocr'
packages:
- ghostscript
- libexempi3
- libffi-dev
- pngquant
- poppler-utils
- qpdf
- tesseract-ocr
- tesseract-ocr-deu
- tesseract-ocr-eng
- tesseract-ocr-fra
- unpaper
- os: osx
osx_image: xcode8
osx_image: xcode9.2
language: generic
env: EXTRAS=
- os: osx
osx_image: xcode8
language: generic
env: EXTRAS=[fitz]
before_cache:
- rm -f $HOME/.cache/pip/log/debug.log
@@ -64,19 +77,23 @@ before_install: |
if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
pip3 install --upgrade pip
pip3 install --upgrade wheel
mkdir -p packages
wget -q 'https://www.dropbox.com/s/vaq0kbwi6e6au80/unpaper_6.1-1.deb?raw=1' -O packages/unpaper_6.1-1.deb
sudo dpkg -i packages/unpaper_6.1-1.deb
if [[ "$DIST" == "trusty" ]]; then
mkdir -p packages
wget -q 'https://www.dropbox.com/s/vaq0kbwi6e6au80/unpaper_6.1-1.deb?raw=1' -O packages/unpaper_6.1-1.deb
sudo dpkg -i packages/unpaper_6.1-1.deb
fi
elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
brew update && brew bundle --file=.travis/Brewfile
brew update --quiet && brew bundle --file=.travis/Brewfile --quiet
pip3 install --upgrade pip
pip3 install wheel
fi
install:
- export PATH=$PWD/bin:$PATH
- pip3 install ".$EXTRAS"
- pip3 install -r test_requirements.txt
- pip3 install pycparser # py3.7 workaround for https://github.com/eliben/pycparser/issues/251
- pip3 install -r requirements/main.txt
- pip3 install --no-deps .
- pip3 install -r requirements/test.txt
script:
- tesseract --version
@@ -85,7 +102,7 @@ script:
deploy:
# release for main pypi
# 3.6 w/o fitz is considered the build leader and does the deploy, otherwise there is
# 3.6 is considered the build leader and does the deploy, otherwise there is
# a race and all versions will try to deploy
# OTOH if we ever need separate binary wheels then each version needs its
# own deploy
@@ -97,33 +114,5 @@ deploy:
on:
branch: master
tags: true
condition: $TRAVIS_PYTHON_VERSION == "3.6" && $TRAVIS_OS_NAME == "linux" && $EXTRAS == ""
condition: $TRAVIS_PYTHON_VERSION == "3.6" && $TRAVIS_OS_NAME == "linux"
skip_upload_docs: true
# test pypi
- provider: pypi
server: https://testpypi.pypi.org/legacy/
user: ocrmypdf-travis
password:
secure: "DTFOmmNL6olA0+yXvp4u9jXZlZeqrJsJ0526jzqf4a3gZ6jnGTq5UI6WzRsslSyoMMfXKtHQebqHM6ogSgCZinyZ3ufHJo8fn9brxbEc2gsiWkbj5o3bGwdWMT1vNNE7XW0VCpw87rZ1EEwjl4FJHFudMlPR1yfU5+uq0k0PACo="
distributions: "sdist"
on:
branch: develop
tags: false
condition: $TRAVIS_OS_NAME == "osx"
skip_upload_docs: true
# null deploy for osx
# we really just want to run after_deploy *after* pypi upload is done, but
# after_deploy on runs if a given box deployed
- provider: script
script: /usr/bin/true
on:
branch: master
tags: true
condition: $TRAVIS_OS_NAME == "osx"
after_deploy: |
if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
bash .travis/osx_brew.sh
fi
+1 -5
View File
@@ -1,13 +1,9 @@
brew 'python'
brew 'exempi'
brew 'ghostscript'
brew 'jbig2dec'
brew 'jbig2enc'
brew 'leptonica'
brew 'libffi'
brew 'libtiff'
brew 'libxml2'
brew 'mupdf-tools'
brew 'openjpeg'
brew 'pngquant'
brew 'qpdf'
-93
View File
@@ -1,93 +0,0 @@
#!/usr/bin/env python3
# © 2017-18 James R. Barlow: github.com/jbarlow83
from string import Template
from subprocess import run, PIPE
import re
recipe_template = Template("""
class Ocrmypdf < Formula
include Language::Python::Virtualenv
desc "Adds an OCR text layer to scanned PDF files"
homepage "https://github.com/jbarlow83/OCRmyPDF"
${ocrmypdf_url}
${ocrmypdf_sha256}
depends_on "pkg-config" => :build
depends_on "mupdf-tools" => :build # statically links libmupdf.a
depends_on "freetype"
depends_on "ghostscript"
depends_on "jpeg"
depends_on "libpng"
depends_on "python"
depends_on "qpdf"
depends_on "tesseract"
depends_on "unpaper"
${resources}
def install
venv = virtualenv_create(libexec, "python3")
resource("Pillow").stage do
inreplace "setup.py" do |s|
sdkprefix = MacOS::CLT.installed? ? "" : MacOS.sdk_path
s.gsub! "openjpeg.h", "probably_not_a_header_called_this_eh.h"
s.gsub! "ZLIB_ROOT = None", "ZLIB_ROOT = ('#{sdkprefix}/usr/lib', '#{sdkprefix}/usr/include')"
s.gsub! "JPEG_ROOT = None", "JPEG_ROOT = ('#{Formula["jpeg"].opt_prefix}/lib', '#{Formula["jpeg"].opt_prefix}/include')"
s.gsub! "FREETYPE_ROOT = None", "FREETYPE_ROOT = ('#{Formula["freetype"].opt_prefix}/lib', '#{Formula["freetype"].opt_prefix}/include')"
end
# avoid triggering "helpful" distutils code that doesn't recognize Xcode 7 .tbd stubs
ENV.append "CFLAGS", "-I#{MacOS.sdk_path}/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers" unless MacOS::CLT.installed?
venv.pip_install Pathname.pwd
end
res = resources.map(&:name).to_set - ["Pillow"]
res.each do |r|
venv.pip_install resource(r)
end
venv.pip_install_and_link buildpath
end
test do
# Since we use Python 3, we require a UTF-8 locale
ENV["LC_ALL"] = "en_US.UTF-8"
system "#{bin}/ocrmypdf", "-f", "-q", "--deskew",
test_fixtures("test.pdf"), "ocr.pdf"
assert_predicate testpath/"ocr.pdf", :exist?
end
end
""")
def main():
p = run(['poet', '--single', 'ocrmypdf'],
encoding='utf-8', stdout=PIPE, check=True)
ocrmypdf_lines = p.stdout.splitlines()
ocrmypdf_url = ocrmypdf_lines[1].strip()
ocrmypdf_sha256 = ocrmypdf_lines[2].strip()
ocrmypdf_version = re.search(
r'ocrmypdf-(.+)\.tar.*', ocrmypdf_url).group(1)
print(f"Autobrewing {ocrmypdf_version}")
p = run(['poet', '--resources', 'ocrmypdf'],
encoding='utf-8', stdout=PIPE, check=True)
poet_resources = p.stdout
# Remove the duplicate "ocrmypdf" resource block
all_resources = poet_resources.split('resource')
kept_resources = [block for block in all_resources if 'ocrmypdf' not in block]
resources = 'resource'.join(kept_resources)
with open('ocrmypdf.rb', 'w') as out:
out.write(recipe_template.substitute(**locals()))
if __name__ == '__main__':
main()
-23
View File
@@ -1,23 +0,0 @@
#!/bin/bash
# © 2017 James R. Barlow: github.com/jbarlow83
set -uo pipefail
set -x
pip3 install homebrew-pypi-poet
python3 .travis/autobrew.py
cat ocrmypdf.rb
# brew audit crashes Travis
#brew audit ocrmypdf.rb
# Important: disable debug output so token is hidden
set +x
git clone https://$HOMEBREW_OCRMYPDF_TOKEN@github.com/jbarlow83/homebrew-ocrmypdf.git
set -x
pushd homebrew-ocrmypdf
cp ../ocrmypdf.rb Formula/ocrmypdf.rb
git add Formula/ocrmypdf.rb
git commit -m "homebrew-ocrmypdf: automatic release $TRAVIS_BUILD_NUMBER $TRAVIS_TAG"
git push origin master
popd
+6 -12
View File
@@ -1,7 +1,5 @@
# requirements
include requirements.txt
include test_requirements.txt
include dev_requirements.txt
recursive-include requirements *
# git
include .git_archival.txt
@@ -12,21 +10,20 @@ recursive-include .docker *
# tests
include .coveragerc
recursive-include tests *.bin
recursive-include tests *.jpg
recursive-include tests *.jsonl
recursive-include tests *.png
recursive-include tests *.pdf
recursive-include tests *.py
recursive-include tests *.rst
recursive-include tests *.txt
recursive-include tests/cache *
recursive-exclude tests/output *
recursive-exclude tests/output_pageinfo *
recursive-exclude tests/resources/private *
# documentation
include LICENSE
include *.rst
recursive-exclude .github *
recursive-exclude .github *
recursive-include docs *.py
recursive-include docs *.rst
recursive-include docs *.svg
@@ -42,8 +39,5 @@ exclude .travis*
# code
recursive-include src/ocrmypdf *.py
exclude ocrmypdf/lib/_leptonica.py
exclude src/ocrmypdf/lib/_leptonica.py
exclude scratch.py
+142
View File
@@ -0,0 +1,142 @@
OCRmyPDF
========
[![Travis build status][travis]](https://travis-ci.org/jbarlow83/OCRmyPDF) [![PyPI version][pypi]](https://pypi.org/project/ocrmypdf/) ![Homebrew version][homebrew] ![ReadTheDocs][docs]
[travis]: https://travis-ci.org/jbarlow83/OCRmyPDF.svg?branch=master "Travis build status"
[pypi]: https://img.shields.io/pypi/v/ocrmypdf.svg "PyPI version"
[homebrew]: https://img.shields.io/homebrew/v/ocrmypdf.svg "Homebrew version"
[docs]: https://readthedocs.org/projects/ocrmypdf/badge/?version=latest "RTD"
OCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched or copy-pasted.
```bash
ocrmypdf # it's a scriptable command line program
-l eng+fra # it supports multiple languages
--rotate-pages # it can fix pages that are misrotated
--deskew # it can deskew crooked PDFs!
--title "My PDF" # it can change output metadata
--jobs 4 # it uses multiple cores by default
--output-type pdfa # it produces PDF/A by default
input_scanned.pdf # takes PDF input (or images)
output_searchable.pdf # produces validated PDF output
```
Main features
-------------
- Generates a searchable [PDF/A](https://en.wikipedia.org/?title=PDF/A) file from a regular PDF
- Places OCR text accurately below the image to ease copy / paste
- Keeps the exact resolution of the original embedded images
- When possible, inserts OCR information as a "lossless" operation without disrupting any other content
- Optimizes PDF images, often producing files smaller than the input file
- If requested deskews and/or cleans the image before performing OCR
- Validates input and output files
- Distributes work across all available CPU cores
- Uses [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) engine
- Supports more than [100 languages](https://github.com/tesseract-ocr/tessdata) recognized by Tesseract
- Battle-tested on thousands of PDFs, a test suite and continuous integration
For details: please consult the [documentation](https://ocrmypdf.readthedocs.io/en/latest/).
Motivation
----------
I searched the web for a free command line tool to OCR PDF files on Linux/UNIX: I found many, but none of them were really satisfying.
- Either they produced PDF files with misplaced text under the image (making copy/paste impossible)
- Or they did not handle accents and multilingual characters
- Or they changed the resolution of the embedded images
- Or they generated ridiculously large PDF files
- Or they crashed when trying to OCR
- Or they did not produce valid PDF files
- On top of that none of them produced PDF/A files (format dedicated for long time storage)
...so I decided to develop my own tool.
Installation
------------
Linux, UNIX, and macOS are supported. Windows is not directly supported but there is a Docker image available that runs on Windows.
Users of Debian 9 or later or Ubuntu 16.10 or later may simply
```bash
apt-get install ocrmypdf
```
and users of Fedora 29 or later may simply
```bash
dnf install ocrmypdf
```
and macOS users with Homebrew may simply
```bash
brew install ocrmypdf
```
For everyone else, [see our documentation](https://ocrmypdf.readthedocs.io/en/latest/installation.html) for installation steps.
Languages
---------
OCRmyPDF uses Tesseract for OCR, and relies on its language packs. For Linux users, you can often find packages that provide language packs:
```bash
# Display a list of all Tesseract language packs
apt-cache search tesseract-ocr
# Debian/Ubuntu users
apt-get install tesseract-ocr-chi-sim # Example: Install Chinese Simplified language back
```
You can then pass the `-l LANG` argument to OCRmyPDF to give a hint as to what languages it should search for. Multiple languages can be requested.
Documentation and support
-------------------------
Once ocrmypdf is installed, the built-in help which explains the command syntax and options can be accessed via:
```bash
ocrmypdf --help
```
Our [documentation is served on Read the Docs](https://ocrmypdf.readthedocs.io/en/latest/index.html).
If you detect an issue, please:
- Check whether your issue is already known
- If no problem report exists on github, please create one here: <https://github.com/jbarlow83/OCRmyPDF/issues>
- Describe your problem thoroughly
- Append the console output of the script when running the debug mode (`-v 1` option)
- If possible provide your input PDF file as well as the content of the temporary folder (using a file sharing service like Dropbox)
Requirements
------------
Runs on CPython 3.5, 3.6 and 3.7. Requires external program installations of Ghostscript, Tesseract OCR, QPDF, and Leptonica. ocrmypdf is pure Python, but uses CFFI to portably generate library bindings.
Press & Media
-------------
- [c't 1-2014, page 59](http://heise.de/-2279695): Detailed presentation of OCRmyPDF v1.0 in the leading German IT magazine c't
- [heise Open Source, 09/2014: Texterkennung mit OCRmyPDF](http://heise.de/-2356670)
License
-------
The OCRmyPDF software is licensed under the GNU GPLv3. Certain files are covered by other licenses, as noted in their source files.
The license for each test file varies, and is noted in tests/resources/README.rst. The documentation is licensed under Creative Commons Attribution-ShareAlike 4.0 (CC-BY-SA 4.0).
OCRmyPDF versions prior to 6.0 were licensed under the MIT License.
Disclaimer
----------
The software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-154
View File
@@ -1,154 +0,0 @@
OCRmyPDF
========
.. image:: https://travis-ci.org/jbarlow83/OCRmyPDF.svg?branch=master
:target: https://travis-ci.org/jbarlow83/OCRmyPDF
.. image:: https://img.shields.io/pypi/v/ocrmypdf.svg
:target: https://pypi.org/project/ocrmypdf/
.. image:: https://img.shields.io/homebrew/v/ocrmypdf.svg
:alt: homebrew
:target: http://brewformulas.org/Ocrmypdf
OCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to
be searched or copy-pasted.
.. code-block:: bash
ocrmypdf # it's a scriptable command line program
-l eng+fra # it supports multiple languages
--rotate-pages # it can fix pages that are misrotated
--deskew # it can deskew crooked PDFs!
--title "My PDF" # it can change output metadata
--jobs 4 # it uses multiple cores by default
--output-type pdfa # it produces PDF/A by default
input_scanned.pdf # takes PDF input (or images)
output_searchable.pdf # produces validated PDF output
Main features
-------------
- Generates a searchable
`PDF/A <https://en.wikipedia.org/?title=PDF/A>`_ file from a regular PDF
- Places OCR text accurately below the image to ease copy / paste
- Keeps the exact resolution of the original embedded images
- When possible, inserts OCR information as a "lossless" operation without rendering vector information
- Keeps file size about the same
- If requested deskews and/or cleans the image before performing OCR
- Validates input and output files
- Processes pages in parallel when more than one CPU core is
available
- Uses `Tesseract OCR <https://github.com/tesseract-ocr/tesseract>`_ engine
- Supports more than `100 languages <https://github.com/tesseract-ocr/tessdata>`_ recognized by Tesseract
- Battle-tested on thousands of PDFs, a test suite and continuous integration
For details: please consult the `documentation <https://ocrmypdf.readthedocs.io/en/latest/>`_.
Motivation
----------
I searched the web for a free command line tool to OCR PDF files on
Linux/UNIX: I found many, but none of them were really satisfying.
- Either they produced PDF files with misplaced text under the image (making copy/paste impossible)
- Or they did not handle accents and multilingual characters
- Or they changed the resolution of the embedded images
- Or they generated ridiculously large PDF files
- Or they crashed when trying to OCR some of my PDF files
- Or they did not produce valid PDF files (even though they were readable with my current PDF reader)
- On top of that none of them produced PDF/A files (format dedicated for long time storage)
...so I decided to develop my own tool (using various existing scripts
as an inspiration).
Installation
------------
Linux, UNIX, and macOS are supported. Windows is not directly supported but there is a Docker image available that runs on Windows.
Users of Debian 9 or later or Ubuntu 16.10 or later may simply
.. code-block:: bash
apt-get install ocrmypdf
and macOS users with Homebrew may simply
.. code-block:: bash
brew install ocrmypdf
For everyone else, `see our documentation <https://ocrmypdf.readthedocs.io/en/latest/installation.html>`_ for installation steps.
Languages
---------
OCRmyPDF uses Tesseract for OCR, and relies on its language packs. For Linux users,
you can often find packages that provide language packs:
.. code-block:: bash
# Display a list of all Tesseract language packs
apt-cache search tesseract-ocr
# Debian/Ubuntu users
apt-get install tesseract-ocr-chi-sim # Example: Install Chinese Simplified language back
You can then pass the ``-l LANG`` argument to OCRmyPDF to give a hint as to what languages it should search for. Multiple
languages can be requested.
Documentation and support
-------------------------
Once ocrmypdf is installed, the built-in help which explains the command syntax and options can be accessed via:
.. code-block:: bash
ocrmypdf --help
Our `documentation is served on Read the Docs <https://ocrmypdf.readthedocs.io/en/latest/index.html>`_.
If you detect an issue, please:
- Check whether your issue is already known
- If no problem report exists on github, please create one here:
https://github.com/jbarlow83/OCRmyPDF/issues
- Describe your problem thoroughly
- Append the console output of the script when running the debug mode
(``-v 1`` option)
- If possible provide your input PDF file as well as the content of the
temporary folder (using a file sharing service like Dropbox)
Requirements
------------
Runs on CPython 3.6, and requires external program installations of Ghostscript, Tesseract OCR, QPDF, and Leptonica. ocrmypdf is pure Python, but uses CFFI to portably generate library bindings.
Python 3.5 is also supported.
Press & Media
-------------
- `c't 1-2014, page 59 <http://heise.de/-2279695>`_:
Detailed presentation of OCRmyPDF v1.0 in the leading German IT
magazine c't
- `heise Open Source, 09/2014: Texterkennung mit
OCRmyPDF <http://heise.de/-2356670>`_
License
-------
The OCRmyPDF software is licensed under the GNU GPLv3. Certain files are covered by other licenses, as noted in their source files.
The license for each test file varies, and is noted in tests/resources/README.rst. The documentation is licensed under Creative Commons Attribution-ShareAlike 4.0 (CC-BY-SA 4.0).
OCRmyPDF versions prior to 6.0 were licensed under the MIT License.
Disclaimer
----------
The software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied.
+1488
View File
File diff suppressed because it is too large Load Diff
+24 -20
View File
@@ -9,17 +9,19 @@ OCRmyPDF provides many features to control the behavior of the OCR engine, Tesse
When OCR is skipped
"""""""""""""""""""
If a page in a PDF seems to have text, by default OCRmyPDF will exit without modifying the PDF. This is to ensure that PDFs that were previously OCRed or were "born digital" rather than scanned are not processed.
If a page in a PDF seems to have text, by default OCRmyPDF will exit without modifying the PDF. This is to ensure that PDFs that were previously OCRed or were "born digital" rather than scanned are not processed.
If ``--skip-text`` is issued, then no OCR will be performed on pages that already have text. The page will be copied to the output. This may be useful for documents that contain both "born digital" and scanned content, or to use OCRmyPDF to normalize and convert to PDF/A regardless of their contents.
If ``--force-ocr`` is issued, then all pages will be rasterized to images, discarding any hidden OCR text, and rasterizing any printable text. This is useful for redoing OCR, for fixing OCR text with a damaged character map (text is selectable but not searchable), and destroying redacted information.
If ``--redo-ocr`` is issued, then a detailed text analysis is performed. Text is categorized as either visible or invisible. Invisible text (OCR) is stripped out. Then an image of each page is created with visible text masked out. The page image is sent for OCR, and any additional text is inserted as OCR. If a file contains a mix of text and bitmap images that contain text, OCRmyPDF will locate the additional text in images without disrupting the existing text.
If ``--force-ocr`` is issued, then all pages will be rasterized to images, discarding any hidden OCR text, and rasterizing any printable text. This is useful for redoing OCR, for fixing OCR text with a damaged character map (text is selectable but not searchable), and destroying redacted information. Any forms and vector graphics will be rasterized as well.
Time and image size limits
""""""""""""""""""""""""""
By default, OCRmyPDF permits tesseract to run for three minutes (180 seconds) per page. This is usually more than enough time to find all text on a reasonably sized page with modern hardware.
By default, OCRmyPDF permits tesseract to run for three minutes (180 seconds) per page. This is usually more than enough time to find all text on a reasonably sized page with modern hardware.
If a page is skipped, it will be inserted without OCR. If preprocessing was requested, the preprocessed image layer will be inserted.
@@ -33,7 +35,7 @@ If you want to adjust the amount of time spent on OCR, change ``--tesseract-time
Overriding default tesseract
""""""""""""""""""""""""""""
OCRmyPDF checks the system ``PATH`` for the ``tesseract`` binary.
OCRmyPDF checks the system ``PATH`` for the ``tesseract`` binary.
Some relevant environment variables that influence Tesseract's behavior include:
@@ -140,8 +142,8 @@ Return code policy
OCRmyPDF writes all messages to ``stderr``. ``stdout`` is reserved for piping
output files. ``stdin`` is reserved for piping input files.
The return codes generated by the OCRmyPDF are considered part of the stable
user interface.
The return codes generated by the OCRmyPDF are considered part of the stable
user interface. They may be imported from ``ocrmypdf.exceptions``.
.. list-table:: Return codes
:widths: 5 35 60
@@ -151,39 +153,41 @@ user interface.
- Name
- Interpretation
* - 0
- ``ocrmypdf.exceptions.ExitCode.ok``
- ``ExitCode.ok``
- Everything worked as expected.
* - 1
- ``ocrmypdf.exceptions.ExitCode.bad_args``
- ``ExitCode.bad_args``
- Invalid arguments, exited with an error.
* - 2
- ``ocrmypdf.exceptions.ExitCode.input_file``
- ``ExitCode.input_file``
- The input file does not seem to be a valid PDF.
* - 3
- ``ocrmypdf.exceptions.missing_dependency``
- ``ExitCode.missing_dependency``
- An external program required by OCRmyPDF is missing.
* - 4
- ``ocrmypdf.exceptions.invalid_output_pdf``
- An output file was created, but it does not seem to be a valid PDF or
PDF/A. The file will be available.
- ``ExitCode.invalid_output_pdf``
- An output file was created, but it does not seem to be a valid PDF. The file will be available.
* - 5
- ``ocrmypdf.exceptions.file_access_error``
- ``ExitCode.file_access_error``
- The user running OCRmyPDF does not have sufficient permissions to read the input file and write the output file.
* - 6
- ``ocrmypdf.exceptions.already_done_ocr``
- ``ExitCode.already_done_ocr``
- The file already appears to contain text so it may not need OCR. See output message.
* - 7
- ``ocrmypdf.exceptions.child_process_error``
- ``ExitCode.child_process_error``
- An error occurred in an external program (child process) and OCRmyPDF cannot continue.
* - 8
- ``ocrmypdf.exceptions.encrypted_pdf``
- ``ExitCode.encrypted_pdf``
- The input PDF is encrypted. OCRmyPDF does not read encrypted PDFs. Use another program such as ``qpdf`` to remove encryption.
* - 9
- ``ocrmypdf.exceptions.invalid_config``
- ``ExitCode.invalid_config``
- A custom configuration file was forwarded to Tesseract using ``--tesseract-config``, and Tesseract rejected this file.
* - 10
- ``ExitCode.pdfa_conversion_failed``
- A valid PDF was created, PDF/A conversion failed. The file will be available.
* - 15
- ``ocrmypdf.exceptions.other_error``
- ``ExitCode.other_error``
- Some other error occurred.
* - 130
- ``ocrmypdf.exceptions.ctrl_c``
- ``ExitCode.ctrl_c``
- The program was interrupted by pressing Ctrl+C.
+18
View File
@@ -60,6 +60,24 @@ author = 'James R. Barlow'
# built documents.
#
# The short X.Y version.
import os
on_rtd = os.environ.get('READTHEDOCS') == 'True'
if on_rtd:
# Help ReadTheDocs avoid having to install any binary extension modules
import sys
from unittest.mock import MagicMock
class Mock(MagicMock):
@classmethod
def __getattr__(cls, name):
return MagicMock()
MOCK_MODULES = ['pikepdf', 'ocrmypdf.leptonica']
sys.modules.update((mod_name, Mock()) for mod_name in MOCK_MODULES)
from ocrmypdf import __version__ as OCRMYPDF_VERSION
_version_parts = OCRMYPDF_VERSION.split('.')
+31 -22
View File
@@ -57,11 +57,10 @@ You can increase (decrease) the parameter ``--rotate-pages-threshold`` to make p
If the page is "just a little off horizontal", like a crooked picture, then you want ``--deskew``. ``--rotate-pages`` is for when the cardinal angle is wrong.
OCR languages other than English
""""""""""""""""""""""""""""""""
By default OCRmyPDF assumes the document is English.
By default OCRmyPDF assumes the document is English.
.. code-block:: bash
@@ -70,7 +69,6 @@ By default OCRmyPDF assumes the document is English.
Language packs must be installed for all languages specified. See :ref:`Installing additional language packs <lang-packs>`.
Produce PDF and text file containing OCR text
"""""""""""""""""""""""""""""""""""""""""""""
@@ -94,7 +92,7 @@ If you are starting with images, you can just use Tesseract 3.04 or later direct
# When there are multiple images
tesseract text-file-containing-list-of-image-filenames.txt output-prefix pdf
Tesseract's PDF output is quite good  OCRmyPDF uses it by internally by default. However, OCRmyPDF has many features not available in Tesseract like like image processing, metadata control, and PDF/A generation.
Tesseract's PDF output is quite good  OCRmyPDF uses it internally by default. However, OCRmyPDF has many features not available in Tesseract like like image processing, metadata control, and PDF/A generation.
Use a program like `img2pdf <https://gitlab.mister-muffin.de/josch/img2pdf>`_ to convert your images to PDFs, and then pipe the results to run ocrmypdf. The `-` tells ocrmypdf to read standard input.
@@ -116,7 +114,6 @@ If you have multiple images, you must use ``img2pdf`` to convert the images to P
ImageMagick ``convert`` can also convert a group of images to PDF, but in the author's experience it takes a long time, transcodes unnecessarily and gives poor results.
Image processing
----------------
@@ -127,11 +124,13 @@ OCRmyPDF perform some image processing on each page of a PDF, if desired. The s
* ``--remove-background`` attempts to detect and remove a noisy background from grayscale or color images. Monochrome images are ignored. This should not be used on documents that contain color photos as it may remove them.
* ``--deskew`` will correct pages were scanned at a skewed angle by rotating them back into place. Skew determination and correction is performed using `Postl's variance of line sums <http://www.leptonica.com/skew-measurement.html>`_ algorithm as implemented in `Leptonica <http://www.leptonica.com/index.html>`_.
* ``--clean`` uses `unpaper <https://www.flameeyes.eu/projects/unpaper>`_ to clean up pages before OCR, but does not alter the final output. This makes it less likely that OCR will try to find text in background noise.
* ``--clean-final`` uses unpaper to clean up pages before OCR and inserts the page into the final output. You will want to review each page to ensure that unpaper did not remove something important.
* ``--mask-barcodes`` will "cover up" any barcodes detected in the image of a page. Barcodes are known to confuse Tesseract OCR and interfere with the recognition of text on the same baseline as a barcode. The output file will contain the unaltered image of the barcode.
.. note::
In many cases image processing will rasterize PDF pages as images, potentially losing quality.
@@ -140,7 +139,6 @@ OCRmyPDF perform some image processing on each page of a PDF, if desired. The s
``--clean-final`` and ``-remove-background`` may leave undesirable visual artifacts in some images where their algorithms have shortcomings. Files should be visually reviewed after using these options.
OCR and correct document skew (crooked scan)
""""""""""""""""""""""""""""""""""""""""""""
@@ -167,28 +165,22 @@ If you set ``--tesseract-timeout 0`` OCRmyPDF will apply its image processing wi
ocrmypdf --tesseract-timeout=0 --remove-background input.pdf output.pdf
Redo OCR
""""""""
Redo existing OCR
"""""""""""""""""
To redo OCR on a file OCRed with other OCR software or a previous version of OCRmyPDF and/or Tesseract, you may use the ``--force-ocr`` argument. Normally, OCRmyPDF does not modify files that already appear to contain OCR text.
To redo OCR on a file OCRed with other OCR software or a previous version of OCRmyPDF and/or Tesseract, you may use the ``--redo-ocr`` argument. (Normally, OCRmyPDF will exit with an error if asked to modify a file with OCR.)
This may be helpful for users who want to take advantage of accuracy improvements in Tesseract 4.0 for files they previously OCRed with an earlier version of Tesseract and OCRmyPDF.
.. code-block:: bash
ocrmypdf --force-ocr input.pdf output.pdf
ocrmypdf --redo-ocr input.pdf output.pdf
Note that the method above will force rasterization of all pages, potentially reducing quality or losing vector content.
This method will replace OCR without rasterizing, reducing quality or removing vector content. If a file contains a mix of pure digital text and OCR, digital text will be ignored and OCR will be replaced. As such this mode is incompatible with image processing options, since they alter the appearance of the file.
To ensure quality is preserved, one could extract all of the images and rebuild the PDF for a lossless transformation. This recipe does not work when PDFs contain multiple images per page, as many do in practice. It will also lose any page rotation information.
.. code-block:: bash
pdfimages -all old-ocr.pdf prefix # extract all images
img2pdf -o temp.pdf prefix* # construct new PDF from the images
# review the new PDF to ensure it visually matches the old one
ocrmypdf --output-type pdf temp.pdf new-ocr.pdf
``--output-type pdf`` is used here to avoid using Ghostscript which will also rasterize images.
In some cases, existing OCR cannot be detected or replaced. Files produced by OCRmyPDF v2.2 or earlier, for example, are internally represented as having visible text with an opaque image drawn on top. This situation cannot be detected.
If ``--redo-ocr`` does not work, you can use ``--force-ocr``, which will force rasterization of all pages, potentially reducing quality or losing vector content.
Improving OCR quality
---------------------
@@ -198,3 +190,20 @@ The `Image processing`_ features can improve OCR quality.
Rotating pages and deskewing helps to ensure that the page orientation is correct before OCR begins. Removing the background and/or cleaning the page can also improve results. The ``--oversample DPI`` argument can be specified to resample images to higher resolution before attempting OCR; this can improve results as well.
OCR quality will suffer if the resolution of input images is not correct (since the range of pixel sizes that will be checked for possible fonts will also be incorrect).
PDF optimization
----------------
By default OCRmyPDF will attempt to perform lossless optimizations on the images inside PDFs after OCR is complete. Optimization is performed even if no OCR text is found.
The ``--optimize N`` (short form ``-O``) argument controls optimization, where ``N`` ranges from 0 to 3. ``--optimize 0`` disables optimizations. ``1`` enables lossless optimizations that can be performed safely with no quality loss. ``2`` enables lossy optimizations such as image color quantizations. ``3`` enables more aggressive optimizations and targets a lower JPEG quality.
Optimization is improved when a JBIG2 encoder is available and when ``pngquant`` is installed. If either of these components are missing, then some types of images will not be optimized.
Currently optimization attempts to find more efficient encodings for images. The types of optimization available may expand over time. By default, OCRmyPDF compresses data streams inside PDFs, and will change inefficient encodings to more modern versions. A program like ``qpdf`` can be used to change encodings, e.g. to inspect the internals fo a PDF.
.. code-block:: bash
ocrmypdf --optimize 3 in.pdf out.pdf # Make it small
Some users may consider enabling lossy JBIG2. See: :ref:`jbig2-lossy`.
+1 -1
View File
@@ -18,6 +18,7 @@ PDF is the best format for storing and exchanging scanned documents. Unfortunat
release_notes
installation
languages
jbig2
.. toctree::
:caption: Usage
@@ -36,4 +37,3 @@ Indices and tables
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
+354 -227
View File
@@ -1,16 +1,53 @@
Installation
============
The easiest way to install OCRmyPDF to follow the steps for your operating system/platform.
.. |latest| image:: https://img.shields.io/pypi/v/ocrmypdf.svg
:alt: OCRmyPDF latest released version on PyPI
|latest|
The easiest way to install OCRmyPDF to follow the steps for your operating system/platform.
If you want to use the latest version of OCRmyPDF, your best bet is to install the most recent version your platform provides, and then upgrade that version by installing the Python binary wheels.
.. contents:: Platform-specific steps
:depth: 1
:depth: 2
:local:
Installing on Debian and Ubuntu 16.10 or newer
----------------------------------------------
Installing on Linux
-------------------
Debian and Ubuntu 16.10 or newer
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. |deb-stable| image:: https://repology.org/badge/version-for-repo/debian_stable/ocrmypdf.svg
:alt: Debian 9 stable ("stretch")
.. |deb-testing| image:: https://repology.org/badge/version-for-repo/debian_testing/ocrmypdf.svg
:alt: Debian 10 testing ("buster")
.. |deb-unstable| image:: https://repology.org/badge/version-for-repo/debian_unstable/ocrmypdf.svg
:alt: Debian unstable
.. |ubu-1710| image:: https://repology.org/badge/version-for-repo/ubuntu_17_10/ocrmypdf.svg
:alt: Ubuntu 17.10
.. |ubu-1804| image:: https://repology.org/badge/version-for-repo/ubuntu_18_04/ocrmypdf.svg
:alt: Ubuntu 18.04 LTS
.. |ubu-1810| image:: https://repology.org/badge/version-for-repo/ubuntu_18_10/ocrmypdf.svg
:alt: Ubuntu 18.10
+-------------------------------------------+
| **OCRmyPDF versions in Debian & Ubuntu** |
+-------------------------------------------+
| |latest| |
+-------------------------------------------+
| |deb-stable| |deb-testing| |deb-unstable| |
+-------------------------------------------+
| |ubu-1710| |ubu-1804| |ubu-1810| |
+-------------------------------------------+
Users of Debian 9 ("stretch") or later or Ubuntu 16.10 or later may simply
@@ -18,12 +55,219 @@ Users of Debian 9 ("stretch") or later or Ubuntu 16.10 or later may simply
apt-get install ocrmypdf
To see what versions are available, check the `Debian Package Tracker <https://tracker.debian.org/pkg/ocrmypdf>`_ or `Ubuntu launchpad.net <https://launchpad.net/ocrmypdf>`_.
As indicated in the table above, Debian and Ubuntu releases may lag behind the latest version. If the version available for your platform is out of date, you could opt to install the latest version from source. See `Installing HEAD revision from sources`_.
Installing on macOS with Homebrew
---------------------------------
For full details on version availability for your platform, check the `Debian Package Tracker <https://tracker.debian.org/pkg/ocrmypdf>`_ or `Ubuntu launchpad.net <https://launchpad.net/ocrmypdf>`_.
.. image:: https://img.shields.io/homebrew/v/ocrmypdf.svg
.. note::
OCRmyPDF for Debian and Ubuntu currently omit the JBIG2 encoder. OCRmyPDF works fine without it but will produce larger output files. If you build jbig2enc from source, ocrmypdf 7.0.0 and later will automatically detect it (specifically the ``jbig2`` binary) on the ``PATH``. To add JBIG2 encoding, see :ref:`jbig2`.
Fedora 29 or newer
^^^^^^^^^^^^^^^^^^
.. |fedora-29| image:: https://repology.org/badge/version-for-repo/fedora29/ocrmypdf.svg
:alt: Fedora 29
.. |fedora-rawhide| image:: https://repology.org/badge/version-for-repo/fedora_rawhide/ocrmypdf.svg
:alt: Fedore Rawhide
+------------------------------+
| **OCRmyPDF version** |
+------------------------------+
| |latest| |
+------------------------------+
| |fedora-29| |fedora-rawhide| |
+------------------------------+
Users of Fedora 29 later may simply
.. code-block:: bash
dnf install ocrmypdf
For full details on version availability, check the `Fedora Package Tracker
<https://apps.fedoraproject.org/packages/ocrmypdf>`_.
If the version available for your platform is out of date, you could opt to
install the latest version from source. See `Installing HEAD revision from
sources`_.
.. note::
OCRmyPDF for Fedora currently omits the JBIG2 encoder due to patent issues.
OCRmyPDF works fine without it but will produce larger output files. If you
build jbig2enc from source, ocrmypdf 7.0.0 and later will automatically
detect it on the ``PATH``. To add JBIG2 encoding, see `Installing the JBIG2
encoder`_.
Installing the latest version on Ubuntu 18.04 LTS
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Ubuntu 18.04 includes ocrmypdf 6.1.2. To install a more recent version, first
install the system version to get most of the dependencies:
.. code-block:: bash
sudo apt-get update
sudo apt-get install \
ocrmypdf \
python3-pip
There are a few dependency changes between ocrmypdf 6.1.2 and 7.x. Let's get
these, too.
.. code-block:: bash
sudo apt-get install \
libexempi3 \
pngquant
Then install the most recent ocrmypdf for the local user and set the user's ``PATH`` to check for the user's Python packages.
.. code-block:: bash
export PATH=$HOME/.local/bin:$PATH
pip3 install --user ocrmypdf
To add JBIG2 encoding, see :ref:`jbig2`.
Ubuntu 16.04 LTS
^^^^^^^^^^^^^^^^
No package is currently available for Ubuntu 16.04, but you can install the dependencies manually:
.. code-block:: bash
sudo apt-get update
sudo apt-get install \
ghostscript \
libexempi3 \
pngquant \
python3-cffi \
python3-pip \
qpdf \
tesseract-ocr \
unpaper
If you wish install OCRmyPDF for the current user, and ensure that the ``PATH``
environment variable contains ``$HOME/.local/bin``.
.. code-block:: bash
export PATH=$HOME/.local/bin:$PATH
pip3 install --user ocrmypdf
Alternately, you can install ocrmypdf system-wide. (Not recommended.)
.. code-block:: bash
sudo pip3 install ocrmypdf
At your option, you may upgrade Ubuntu 16.04 LTS to Tesseract 4.0 for improved OCR results.
.. code-block:: bash
sudo apt-get install -y software-properties-common python-software-properties
sudo add-apt-repository ppa:alex-p/tesseract-ocr -y
sudo apt-get update
sudo apt-get upgrade tesseract-ocr
To add JBIG2 encoding, see :ref:`jbig2`.
Ubuntu 14.04 LTS
^^^^^^^^^^^^^^^^
Installing on Ubuntu 14.04 LTS (trusty) is more difficult than some other options, because it is older and does not provide ``pip``.
Update apt-get:
.. code-block:: bash
sudo apt-get update
Install system dependencies:
.. code-block:: bash
sudo apt-get install \
software-properties-common python-software-properties \
zlib1g-dev \
libexempi3 \
libjpeg-dev \
libffi-dev \
pngquant \
qpdf
We will need backports of Ghostscript 9.16, libav-11 (for unpaper 6.1), Tesseract 4.00 (alpha), and Python 3.6. This will replace Ghostscript and Tesseract 3.x on your system. Python 3.6 will be installed alongside the system Python 3.4.
If you prefer to not modify your system in this matter, consider using a Docker container.
.. code-block:: bash
sudo add-apt-repository ppa:vshn/ghostscript -y
sudo add-apt-repository ppa:heyarje/libav-11 -y
sudo add-apt-repository ppa:alex-p/tesseract-ocr -y
sudo add-apt-repository ppa:jonathonf/python-3.6 -y
sudo apt-get update
sudo apt-get install \
python3.6-dev \
ghostscript \
tesseract-ocr \
tesseract-ocr-eng \
libavformat56 libavcodec56 libavutil54 \
wget
Now we need to install ``pip`` and let it install ocrmypdf:
.. code-block:: bash
curl https://bootstrap.pypa.io/ez_setup.py -o - | python3.6 && python3.6 -m easy_install pip
pip3.6 install ocrmypdf
The ``wget`` command will download a program and run it.
These installation instructions omit the optional dependency ``unpaper``, which is only available at version 0.4.2 in Ubuntu 14.04. The author could not find a backport of ``unpaper``, and created a .deb package to do the job of installing unpaper 6.1 (for x86 64-bit only):
.. code-block:: bash
wget -q 'https://www.dropbox.com/s/vaq0kbwi6e6au80/unpaper_6.1-1.deb?raw=1' -O unpaper_6.1-1.deb
sudo dpkg -i unpaper_6.1-1.deb
To add JBIG2 encoding, see :ref:`jbig2`.
ArchLinux
^^^^^^^^^
.. image:: https://repology.org/badge/version-for-repo/aur/ocrmypdf.svg
:alt: ArchLinux
:target: https://repology.org/metapackage/ocrmypdf
The author is aware of an `ArchLinux User Repository package for ocrmypdf <https://aur.archlinux.org/packages/ocrmypdf/>`_. You can use the following command.
.. code-block:: bash
yaourt -S ocrmypdf
If you have any difficulties with installation, check the repository package page.
Other Linux packages
^^^^^^^^^^^^^^^^^^^^
See the `Repology <https://repology.org/metapackage/ocrmypdf/versions>`_ page.
In general, first install the OCRmyPDF package for your system, then optionally use the procedure `Installing with Python pip`_ to install a more recent version.
Installing on macOS
-------------------
Homebrew
^^^^^^^^
.. image:: https://img.shields.io/homebrew/v/ocrmypdf.svg
:alt: homebrew
:target: http://brewformulas.org/Ocrmypdf
@@ -41,12 +285,64 @@ OCRmyPDF is now a standard `Homebrew <https://brew.sh>`_ formula. To install on
Users who previously installed OCRmyPDF from the private tap should switch to the mainline version (``brew untap jbarlow83/ocrmypdf``) and install from there.
.. _Docker-install:
Manual installation on macOS
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
These instructions probably work on all macOS supported by Homebrew.
If it's not already present, `install Homebrew <http://brew.sh/>`_.
Update Homebrew:
.. code-block:: bash
brew update
Install or upgrade the required Homebrew packages, if any are missing. To do this, download the ``Brewfile`` that lists all of the dependencies to the current directory, and run ``brew bundle`` to process them (installing or upgrading as needed). ``Brewfile`` is a plain text file.
.. code-block:: bash
wget https://github.com/jbarlow83/OCRmyPDF/raw/master/.travis/Brewfile
brew bundle
This will include the English, French, German and Spanish language packs. If you need other languages you can optionally install them all:
.. _macos-all-languages:
.. code-block:: bash
brew install tesseract --with-all-languages # Option 2: for all language packs
Update the homebrew pip:
.. code-block:: bash
pip3 install --upgrade pip
You can then install OCRmyPDF from PyPI, for the current user:
.. code-block:: bash
pip3 install --user ocrmypdf
or system-wide:
.. code-block:: bash
pip3 install ocrmypdf
The command line program should now be available:
.. code-block:: bash
ocrmypdf --help
.. _docker-install:
Installing the Docker image
---------------------------
For many users, installing the Docker image will be easier than installing all of OCRmyPDF's dependencies. For Windows, it is the only option.
For some users, installing the Docker image will be easier than installing all of OCRmyPDF's dependencies. For Windows, it is the only option.
If you have `Docker <https://docs.docker.com/>`_ installed on your system, you can install a Docker image of the latest release.
@@ -55,7 +351,7 @@ Follow the Docker installation instructions for your platform. If you can run t
.. code-block:: bash
docker run hello-world
OCRmyPDF will use all available CPU cores. By default, the VirtualBox machine instance on Windows and macOS has only a single CPU core enabled. Use the VirtualBox Manager to determine the name of your Docker engine host, and then follow these optional steps to enable multiple CPUs:
.. code-block:: bash
@@ -103,14 +399,14 @@ You can then run ocrmypdf using the command:
.. code-block:: bash
docker run --rm ocrmypdf --help
To execute the OCRmyPDF on a local file, you must `provide a writable volume to the Docker image <https://docs.docker.com/userguide/dockervolumes/>`_, and both the input and output file must be inside the writable volume. This example command uses the current working directory as the writable volume:
.. code-block:: bash
docker run --rm -v "$(pwd):/home/docker" <other docker arguments> ocrmypdf <your arguments to ocrmypdf>
In this worked example, the current working directory contains an input file called ``test.pdf`` and the output will go to ``output.pdf``:
In this worked example, the current working directory contains an input file called ``test.pdf`` and the output will go to ``output.pdf``:
.. code-block:: bash
@@ -142,206 +438,12 @@ Or in the wonderful `fish shell <https://fishshell.com/>`_:
.. note::
The ocrmypdf Docker containers are designed to be used for a single OCR job. The ``docker run --rm`` argument tells Docker to delete temporary storage associated with container when it is done executing.
Manual installation on macOS
----------------------------
These instructions probably work on all macOS supported by Homebrew.
If it's not already present, `install Homebrew <http://brew.sh/>`_.
Update Homebrew:
.. code-block:: bash
brew update
Install or upgrade the required Homebrew packages, if any are missing:
.. code-block:: bash
brew install libpng openjpeg jbig2dec libtiff # image libraries
brew install qpdf
brew install ghostscript
brew install python3
brew install libxml2 libffi leptonica
brew install unpaper # optional
Python 3.5 and 3.6 are supported.
Install the required Tesseract OCR engine with the language packs you plan to use:
.. code-block:: bash
brew install tesseract # Option 1: for English, French, German, Spanish
.. _macos-all-languages:
.. code-block:: bash
brew install tesseract --with-all-languages # Option 2: for all language packs
Update the homebrew pip:
.. code-block:: bash
pip3 install --upgrade pip
You can then install OCRmyPDF from PyPI, for the current user:
.. code-block:: bash
pip3 install --user ocrmypdf[fitz]
or system-wide:
.. code-block:: bash
pip3 install ocrmypdf[fitz]
``[fitz]`` includes the optional dependency on PyMuPDF, which improves OCRmyPDF's output in many cases.
The command line program should now be available:
.. code-block:: bash
ocrmypdf --help
Installing the latest version on Ubuntu 18.04 LTS
-------------------------------------------------
Ubuntu 18.04 includes ocrmypdf 6.1.2. To install a more recent version, first
install the system version to get all the dependencies:
.. code-block:: bash
sudo apt-get update
sudo apt-get install \
ocrmypdf \
python3-pip
Then install ocrmypdf 6.1.5 for the local user and set the user's ``PATH`` to check for the user's Python packages.
.. code-block:: bash
export PATH=$HOME/.local/bin:$PATH
pip3 install --user ocrmypdf[fitz]
Installing on Ubuntu 16.04 LTS
------------------------------
No package is currently available for Ubuntu 16.04, but you can install the dependencies manually:
.. code-block:: bash
sudo apt-get update
sudo apt-get install \
unpaper \
ghostscript \
tesseract-ocr \
qpdf \
python3-pip \
python3-cffi
If you wish install OCRmyPDF for the current user:
.. code-block:: bash
pip3 install --user ocrmypdf[fitz]
Alternately, system-wide. Note that this may modify the system Python environment:
.. code-block:: bash
sudo pip3 install ocrmypdf[fitz]
If you wish to install OCRmyPDF to a virtual environment to isolate the system Python, you can follow these steps.
.. code-block:: bash
python3 -m venv venv-ocrmypdf
source venv-ocrmypdf/bin/activate
pip3 install ocrmypdf[fitz]
``[fitz]`` includes the optional dependency on PyMuPDF, which improves OCRmyPDF's output in many cases.
Installing on Ubuntu 14.04 LTS
------------------------------
Installing on Ubuntu 14.04 LTS (trusty) is more difficult than some other options, because it is older and does not provide ``pip``.
Update apt-get:
.. code-block:: bash
sudo apt-get update
Install system dependencies:
.. code-block:: bash
sudo apt-get install \
software-properties-common python-software-properties \
zlib1g-dev \
libjpeg-dev \
libffi-dev \
qpdf
We will need backports of Ghostscript 9.16, libav-11 (for unpaper 6.1), Tesseract 4.00 (alpha), and Python 3.6. This will replace Ghostscript and Tesseract 3.x on your system. Python 3.6 will be installed alongside the system Python 3.
If you prefer to not modify your system in this matter, consider using a Docker container.
.. code-block:: bash
sudo add-apt-repository ppa:vshn/ghostscript -y
sudo add-apt-repository ppa:heyarje/libav-11 -y
sudo add-apt-repository ppa:alex-p/tesseract-ocr -y
sudo add-apt-repository ppa:jonathonf/python-3.6 -y
sudo apt-get update
sudo apt-get install \
python3.6-dev \
ghostscript \
tesseract-ocr \
tesseract-ocr-eng \
libavformat56 libavcodec56 libavutil54 \
wget
Now we need to install ``pip`` and let it install ocrmypdf:
.. code-block:: bash
curl https://bootstrap.pypa.io/ez_setup.py -o - | python3.6 && python3.6 -m easy_install pip
pip3.6 install ocrmypdf[fitz]
The ``wget`` command will download a program and run it.
These installation instructions omit the optional dependency ``unpaper``, which is only available at version 0.4.2 in Ubuntu 14.04. The author could not find a backport of ``unpaper``, and created a .deb package to do the job of installing unpaper 6.1 (for x86 64-bit only):
.. code-block:: bash
wget -q 'https://www.dropbox.com/s/vaq0kbwi6e6au80/unpaper_6.1-1.deb?raw=1' -O unpaper_6.1-1.deb
sudo dpkg -i unpaper_6.1-1.deb
Installing on ArchLinux
-----------------------
The author is aware of an `ArchLinux package for ocrmypdf <https://aur.archlinux.org/packages/ocrmypdf/>`_. It seems like the following command might work.
.. code-block:: bash
pacman -S ocrmypdf
The ocrmypdf Docker images are designed for application delivery, to enable use of OCRmyPDF without fussing with dependencies. ``docker run --rm`` argument tells Docker to delete the container after it runs, because each container is only good for a single job. The Docker image is not designed for use as a persistent web service or for use on Amazon EC2 Container Service (AWS ECS).
Installing on Windows
---------------------
Direct installation on Windows is not possible. Install the _`Docker` container as described above. Ensure that your command prompt can run the docker "hello world" container.
Direct installation on Windows is not possible. `Install the Docker <docker-install_>`_ container as described above. Ensure that your command prompt can run the docker "hello world" container.
It would probably not be too difficult to run on Windows. The main reason this has been avoided is the difficulty of packaging and installing the various non-Python dependencies: Tesseract, QPDF, Ghostscript, Leptonica. Pull requests to add or improve Windows support would be quite welcome.
@@ -363,7 +465,11 @@ where /c/Users/sampleuser is a Unix representation of the Windows path C:\\Users
Installing with Python pip
--------------------------
First, install `your platform's version <https://repology.org/metapackage/ocrmypdf/versions>`_ of ``ocrmypdf``, if available, as a way of ensuring that external dependencies are (mostly) satisified, even though the platform version may be out of date. Use ``ocrmypdf --version`` to confirm what version was installed.
OCRmyPDF is delivered by PyPI because it is a convenient way to install the latest version. However, PyPI and ``pip`` cannot address the fact that ``ocrmypdf`` depends on certain non-Python system libraries and programs being instsalled.
For best results, first install `your platform's version <https://repology.org/metapackage/ocrmypdf/versions>`_ of ``ocrmypdf``, using the instructions elsewhere in this document. Then you can use ``pip`` to get the latest version if your platform version is out of date. Chances are that this will satisfy most dependencies.
Use ``ocrmypdf --version`` to confirm what version was installed.
Then you can install the latest OCRmyPDF from the Python wheels. First try:
@@ -382,27 +488,36 @@ Since ``pip3 install --user`` does not work correctly on some platforms, notably
Requirements for pip and HEAD install
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
OCRmyPDF currently requires these external programs to be installed:
OCRmyPDF currently requires these external programs and libraries to be installed, and must be satisfied using the operating system package manager. ``pip`` cannot provide them.
- Python 3.5 or newer
- Tesseract 3.04 or newer
- Ghostscript 9.15 or newer
- qpdf 7.0.0 or newer
- libexempi3 2.2.0 or newer
- qpdf 8.1.0 or newer
- Tesseract 3.04 or newer
The following dependencies are recommended:
Using Python 3.5 in production is discouraged. Python 3.6 and 3.7 give much better performance.
- Python 3.6
- Tesseract 4.00 or newer
- Ghostscript 9.22 or newer
- qpdf 8.0.2 or newer
As of ocrmypdf 7.2.1, the following versions are recommended:
- Python 3.7
- Ghostscript 9.23 or newer
- libexempi3 2.4.5 or newer
- qpdf 8.2.1
- Tesseract 4.0.0-rc1
- jbig2enc 0.29 or newer
- pngquant 2.5 or newer
- unpaper 6.1
- PyMuPDF 1.12.5 or newer
These are in addition to the Python packaging dependencies, meaning that unfortunately, the ``pip install`` command cannot satisfy all of them.
jbig2enc, pngquant, and unpaper are optional. If missing certain features are disabled. OCRmyPDF will discover them as soon as they are available.
Python 3.6 and Tesseract 4.0.0-beta.1 are recommended for best OCR results and best performance.
**jbig2enc**, if present, will be used to optimize the encoding of monochrome images. This can significantly reduce the file size of the output file. It is not required. `jbig2enc <https://github.com/agl/jbig2enc>`_ is not generally available for Ubuntu or Debian due to lingering concerns about patent issues, but can easily be built from source. To add JBIG2 encoding, see :ref:`jbig2`.
The library PyMuPDF is not widely available in platform distributions, and it improves OCRmyPDF in certain conditions. Consider installing OCRmyPDF from the Python binary wheels, which include a precompiled version of this library.
**pngquant**, if present, is optionally used to optimize the encoding of PNG-style images in PDFs (actually, any that are that losslessly encoded) by lossily quantizing to a smaller color palette. It is only activated then the ``--optimize`` argument is ``2`` or ``3``.
**unpaper**, if present, enables the ``--clean`` and ``--clean-final`` command line options.
These are in addition to the Python packaging dependencies, meaning that unfortunately, the ``pip install`` command cannot satisfy all of them.
Installing HEAD revision from sources
@@ -410,6 +525,8 @@ Installing HEAD revision from sources
If you have ``git`` and Python 3.5 or newer installed, you can install from source. When the ``pip`` installer runs, it will alert you if dependencies are missing.
If you prefer to build every from source, you will need to `build pikepdf from source <https://pikepdf.readthedocs.io/en/latest/installation.html#building-from-source>`_. First ensure you can build and install pikepdf.
To install the HEAD revision from sources in the current Python 3 environment:
.. code-block:: bash
@@ -432,8 +549,8 @@ You may find it easiest to install in a virtual environment, rather than system-
cd OCRmyPDF
pip3 install .
However, ``ocrmypdf`` will only be accessible on the system PATH after
you activate the virtual environment.
However, ``ocrmypdf`` will only be accessible on the system PATH
when you activate the virtual environment.
To run the program:
@@ -446,8 +563,18 @@ need to be installed. The script requires specific versions of the
dependencies. Older version than the ones mentioned in the release notes
are likely not to be compatible to OCRmyPDF.
For development
~~~~~~~~~~~~~~~
Other Linux packages
--------------------
To install all of the development and test requirements:
See the `Repology <https://repology.org/metapackage/ocrmypdf/versions>`_ page.
.. code-block:: bash
git clone -b master https://github.com/jbarlow83/OCRmyPDF.git
python3 -m venv
source venv/bin/activate
cd OCRmyPDF
pip install -e .
pip install -r requirements/dev.txt -r requirements/test.txt
To add JBIG2 encoding, see :ref:`jbig2`.
+9 -9
View File
@@ -1,9 +1,7 @@
Introduction
============
OCRmyPDF is a Python 3 package that adds OCR layers to PDFs.
About OCR
---------
@@ -66,6 +64,8 @@ In the case of a PDF that is nothing other than a container of images (no rotati
OCRmyPDF uses several strategies depending on input options and the input PDF itself, but generally speaking it rasterizes a page for OCR and then grafts the OCR back onto the original. As such it can handle complex PDFs and still preserve their contents as much as possible.
OCRmyPDF also supports a many, many edge cases that have cropped over several years of development. We support PDF features like images inside of Form XObjects, and pages with UserUnit scaling. We support rare image formats like non-monochrome 1-bit images. We warn about files you may not to OCR. Thanks to pikepdf and QPDF, we auto-repair PDFs that are damaged. (Not that you need to know what any of these are! You should be able to throw any PDF at it.)
Limitations
-----------
@@ -76,24 +76,25 @@ OCRmyPDF is limited by the Tesseract OCR engine. As such it experiences these l
* It is not capable of recognizing handwriting.
* It may find gibberish and report this as OCR output.
* If a document contains languages outside of those given in the ``-l LANG`` arguments, results may be poor.
* It is not always good at analyzing the natural reading order of documents. For example, it may fail to recognize that a document contains two columns and join text across the columns.
* It is not always good at analyzing the natural reading order of documents. For example, it may fail to recognize that a document contains two columns, and may try to join text across columns.
* Poor quality scans may produce poor quality OCR. Garbage in, garbage out.
* PDFs that use transparent layers are not currently checked in the test suite, so they may not work correctly.
* It does not expose information about what font family text belongs to.
OCRmyPDF is also limited by the PDF specification:
* PDF encodes the position of text glyphs but does not encode document structure. There is no markup that divides a document in sections, paragraphs, sentences, or even words (since blank spaces are not represented). As such all elements of document structure including the spaces between words must be derived heuristically. Some PDF viewers do a better job of this than others.
* Because some popular open source PDF viewers have a particularly hard time with spaces betweem words, OCRmyPDF appends a space to each text element as a workaround. While this mixes document structure with graphical information that ideally should be left to the PDF viewer to interpret, it improves compatibility with some viewers and does not cause problems for better ones.
* Because some popular open source PDF viewers have a particularly hard time with spaces betweem words, OCRmyPDF appends a space to each text element as a workaround (when using ``--pdf-renderer hocr``). While this mixes document structure with graphical information that ideally should be left to the PDF viewer to interpret, it improves compatibility with some viewers and does not cause problems for better ones.
Ghostscript also imposes some limitations:
* PDFs containing JBIG2-encoded content will be converted to CCITT Group4 encoding, which has lower compression ratios, if Ghostscript PDF/A is enabled.
* PDFs containing JPEG 2000-encoded content will be converted to JPEG encoding, which may introduce compression artifacts, if Ghostscript PDF/A is enabled.
* Ghostscript may transcode grayscale and color images, either lossy to lossless or lossless to lossy, based on an internal algorithm. This behavior can be suppressed by setting ``--pdfa-image-compression`` to ``jpeg`` or ``lossless`` to set all images to one type or the other. Ghostscript has no option to maintain the input image's format.
OCRmyPDF is currently not designed to be used as a Python API; it is designed to be run as a command line tool. ``import ocrmypf`` currently attempts to process the command line on ``sys.argv`` at import time so it has side effects that will interfere with its use as a package. The API it presents should not be considered stable.
* Ghostscript may transcode grayscale and color images, either lossy to lossless or lossless to lossy, based on an internal algorithm. This behavior can be suppressed by setting ``--pdfa-image-compression`` to ``jpeg`` or ``lossless`` to set all images to one type or the other. Ghostscript has no option to maintain the input image's format. (Ghostscript 9.25+ can copy JPEG images without transcoding them; earlier versions will transcode.)
Regarding OCRmyPDF itself:
* PDFs that use transparency are not currently represented in the test suite
* The Python API exported by ``import ocrmypdf`` is design to help scripts that use OCRmyPDF but is not currently capable of running OCRmyPDF jobs due to limitations in an underlying library.
Similar programs
----------------
@@ -112,4 +113,3 @@ Web front-ends
* `OCRmyPDF-web <https://github.com/sseemayer/OCRmyPDF-web>`_, a micro web-frontend for OCRmyPDF (third-party, not actively maintained)
Bear in mind that OCRmyPDF is not designed to be secure against malware-bearing PDFs (see `Using OCRmyPDF online`_).
+35
View File
@@ -0,0 +1,35 @@
.. _jbig2:
Installing the JBIG2 encoder
============================
Most Linux distributions do not include a JBIG2 encoder since JBIG2 encoding was patented for a long time. All known JBIG2 US patents have expired as of 2017, but it is possible that unknown patents exist.
JBIG2 encoding is recommended for OCRmyPDF and is used to losslessly create smaller PDFs. If JBIG2 encoding not available, lower quality encodings will be used.
JBIG2 decoding is not patented and is performed automatically by most PDF viewers. It is widely supported has been part of the PDF specification since 2001.
On macOS, Homebrew packages jbig2enc and OCRmyPDF includes it by default. The Docker image for OCRmyPDF also builds its own JBIG2 encoder from source.
For all other Linux, you must build a JBIG2 encoder from source:
.. code-block:: bash
git clone https://github.com/agl/jbig2enc
cd jbig2enc
./autogen.sh
./configure && make
[sudo] make install
.. _jbig2-lossy:
Lossy mode JBIG2
----------------
OCRmyPDF provides lossy mode JBIG2 as an advanced feature. Users should `review the technical concerns with JBIG2 in lossy mode <https://abbyy.technology/en:kb:tip:jbig2_compression_and_ocr>`_ and decide if this feature is acceptable for their use case.
JBIG2 lossy mode does achieve higher compression ratios than any other monochrome (bitonal) compression technology; for large text documents the savings are considerable. JBIG2 lossless still gives great compression ratios and is a major improvement over the older CCITT G4 standard. As explained above, there is some risk of substitution errors.
To turn on JBIG2 lossy mode, add the argument ``--jbig2-lossy``. ``--optimize {1,2,3}`` are necessary for the argument to take effect also required. Also, a JBIG2 encoder must be installed as described in the previous section.
*ocrmypdf v7.0 and v7.1 used lossy mode by default.*
+18 -3
View File
@@ -17,12 +17,27 @@ Debian and Ubuntu users
# Display a list of all Tesseract language packs
apt-cache search tesseract-ocr
# Debian/Ubuntu users
apt-get install tesseract-ocr-chi-sim # Example: Install Chinese Simplified language back
# Install Chinese Simplified language pack
apt-get install tesseract-ocr-chi-sim
You can then pass the ``-l LANG`` argument to OCRmyPDF to give a hint as to what languages it should search for. Multiple
languages can be requested using either ``-l eng+fre`` (English and French) or ``-l eng -l fre``.
Fedora users
------------
.. code-block:: bash
# Display a list of all Tesseract language packs
dnf search tesseract
# Install Chinese Simplified language pack
dnf install tesseract-langpack-chi_sim
You can then pass the ``-l LANG`` argument to OCRmyPDF to give a hint as to
what languages it should search for. Multiple languages can be requested using
either ``-l eng+fre`` (English and French) or ``-l eng -l fre``.
macOS users
-----------
+225 -64
View File
@@ -1,44 +1,247 @@
Release notes
=============
OCRmyPDF uses `semantic versioning <http://semver.org/>`_ for its command line interface.
OCRmyPDF uses `semantic versioning <http://semver.org/>`_ for its command line interface and its public API.
The OCRmyPDF package itself does not contain a public API, although it is fairly stable and breaking changes are usually timed with a major release. A future release will clearly define the stable public API.
The ``ocrmypdf`` package may now be imported. The public API may be useful in scripts that launch OCRmyPDF processes or that wish to use some of its features for working with PDFs.
Unfortunately, the public API does **not** expose the ability to actually OCR a PDF. This is due to a limitation in an underlying library (ruffus) that makes OCRmyPDF non-reentrant.
Note that it is licensed under GPLv3, so scripts that ``import ocrmypdf`` and are released publicly should probably also be licensed under GPLv3.
.. Issue regex
find: [^`]\#([0-9]{1,3})[^0-9]
replace: `#$1 <https://github.com/jbarlow83/OCRmyPDF/issues/$1>`_
v7.4.0
------
v7
--
- ``--force-ocr`` may now be used with the new ``--threshold`` and ``--mask-barcodes`` features
- The core algorithm for combining OCR layers with existing PDF pages has been rewritten and improved considerably. It works directly with the input file to minimize changes. The new algorithm uses less temporary disk space and eliminates cost object duplication and deduplication that used to be a requirement.
- pikepdf >= 0.9.1 is now required.
- New feature: PDF optimization with ``-O`` or ``--optimize``. After OCR, OCRmyPDF will automatically performs image optimizations relevant to OCR PDFs.
- Changed metadata handling to pikepdf 0.9.1. As a result, metadata handling of non-ASCII characters in Ghostscript 9.25 or later is fixed.
+ If a JBIG2 encoder is available, then monochrome images will be converted, with the potential for huge savings on large black and white files, since JBIG2 is far more efficient than any other monochrome format. (All known US patents related to JBIG2 have probably expired, but it remains the responsibility of the user to supply a JBIG2 encoder such as `jbig2enc <https://github.com/agl/jbig2enc>`_. OCRmyPDF does not contain any portion of JBIG2.)
- chardet >= 3.0.4 is temporarily listed as required. pdfminer.six depends on it, but the most recent release does not specify this requirement. (`#326 <https://github.com/jbarlow83/OCRmyPDF/issues/326>`_)
+ If ``pngquant`` is installed, OCRmyPDF will use to perform lossy compression of PNG images.
- python-xmp-toolkit and libexempi are no longer required.
- A new Docker image is now being provided for users who wish to access OCRmyPDF over a simple HTTP interface, instead of the command line.
- Increase tolerance of PDFs that overflow or underflow the PDF graphics stack. (`#325 <https://github.com/jbarlow83/OCRmyPDF/issues/325>`_)
v7.3.1
------
- Fixed performance regression from v7.3.0; fast page analysis was not selected when it should be.
- Fixed a few exceptions related to the new ``--mask-barcodes`` feature and improved argument checking
- Added missing detection of TrueType fonts that lack a Unicode mapping
v7.3.0
------
- Added a new feature ``--redo-ocr`` to detect existing OCR in a file, remove it, and redo the OCR. This may be particularly helpful for anyone who wants to take advantage of OCR quality improvements in Tesseract 4.0. Note that OCR added by OCRmyPDF before version 3.0 cannot be detected since it was not properly marked as invisible text in the earliest versions. OCR that constructs a font from visible text, such as Adobe Acrobat's ClearScan.
- OCRmyPDF's content detection is generally more sophisticated. It learns more about the contents of each PDF and makes better recommendations:
- OCRmyPDF can now detect when a PDF contains text that cannot be mapped to Unicode (meaning it is readable to human eyes but copy-pastes as gibberish). In these cases it recommends ``--force-ocr`` to make the text searchable.
- PDFs containing vector objects are now rendered at more appropriate resolution for OCR.
- We now exit with an error for PDFs that contain Adobe LiveCycle Designer's dynamic XFA forms. Currently the open source community does not have tools to work with these files.
- OCRmyPDF now warns when a PDF that contains Adobe AcroForms, since such files probably do not need OCR. It can work with these files.
- Added three new **experimental** features to improve OCR quality in certain conditions. The name, syntax and behavior of these arguments is subject to change. They may also be incompatible with some other features.
- ``--remove-vectors`` which strips out vector graphics. This can improve OCR quality since OCR will not search artwork for readable text; however, it currently removes "text as curves" as well.
- ``--mask-barcodes`` to detect and suppress barcodes in files. We have observed that barcodes can interfere with OCR because they are "text-like" but not actually textual.
- ``--threshold`` which uses a more sophisticated thresholding algorithm than is currently in use in Tesseract OCR. This works around a `known issue in Tesseract 4.0 <https://github.com/tesseract-ocr/tesseract/issues/1990>`_ with dark text on bright backgrounds.
- Fixed an issue where an error message was not reported when the installed Ghostscript was very old.
- The PDF optimizer now saves files with object streams enabled when the optimization level is ``--optimize 1`` or higher (the default). This makes files a little bit smaller, but requires PDF 1.5. PDF 1.5 was first released in 2003 and is broadly supported by PDF viewers, but some rudimentary PDF parsers such as PyPDF2 do not understand object streams. You can use the command line tool ``qpdf --object-streams=disable`` or `pikepdf <https://github.com/pikepdf/pikepdf>`_ library to remove them.
- New dependency: pdfminer.six 20181108. Note this is a fork of the Python 2-only pdfminer.
- Deprecation notice: At the end of 2018, we will be ending support for Python 3.5 and Tesseract 3.x. OCRmyPDF v7 will continue to work with older versions.
v7.2.1
------
- Fix compatibility with an API change in pikepdf 0.3.5.
- A kludge to support Leptonica versions older than 1.72 in the test suite was dropped. Older versions of Leptonica are likely still compatible. The only impact is that a portion of the test suite will be skipped.
v7.2.0
------
**Lossy JBIG2 behavior change**
A user reported that ocrmypdf was in fact using JBIG2 in **lossy** compression mode. This was not the intended behavior. Users should `review the technical concerns with JBIG2 in lossy mode <https://abbyy.technology/en:kb:tip:jbig2_compression_and_ocr>`_ and decide if this is a concern for their use case.
JBIG2 lossy mode does achieve higher compression ratios than any other monochrome compression technology; for large text documents the savings are considerable. JBIG2 lossless still gives great compression ratios and is a major improvement over the older CCITT G4 standard.
Only users who have reviewed the concerns with JBIG2 in lossy mode should opt-in. As such, lossy mode JBIG2 is only turned on when the new argument ``--jbig2-lossy`` is issued. This is independent of the setting for ``--optimize``.
Users who did not install an optional JBIG2 encoder are unaffected.
(Thanks to user 'bsdice' for reporting this issue.)
**Other issues**
- When the image optimizer quantizes an image to 1 bit per pixel, it will now attempt to further optimize that image as CCITT or JBIG2, instead of keeping it in the "flate" encoding which is not efficient for 1 bpp images. (`#297 <https://github.com/jbarlow83/OCRmyPDF/issues/297>`_)
- Images in PDFs that are used as soft masks (i.e. transparency masks or alpha channels) are now excluded from optimization.
- Fixed handling of Tesseract 4.0-rc1 which now accepts invalid Tesseract configuration files, which broke the test suite.
v7.1.0
------
- Improve the performance of initial text extraction, which is done to determine if a file contains existing text of some kind or not. On large files, this initial processing is now about 20x times faster. (`#299 <https://github.com/jbarlow83/OCRmyPDF/issues/299>`_)
- pikepdf 0.3.3 is now required.
- Fixed issue `#231 <https://github.com/jbarlow83/OCRmyPDF/issues/231>`_, a problem with JPEG2000 images where image metadata was only available inside the JPEG2000 file.
- Fixed some additional Ghostscript 9.25 compatibility issues.
- Improved handling of KeyboardInterrupt error messages. (`#301 <https://github.com/jbarlow83/OCRmyPDF/issues/301>`_)
- README.md is now served in GitHub markdown instead of reStructuredText.
v7.0.6
------
- Blacklist Ghostscript 9.24, now that 9.25 is available and fixes many regressions in 9.24.
v7.0.5
------
- Improve capability with Ghostscript 9.24, and enable the JPEG passthrough feature when this version in installed.
- Ghostscript 9.24 lost the ability to set PDF title, author, subject and keyword metadata to Unicode strings. OCRmyPDF will set ASCII strings and warn when Unicode is suppressed. Other software may be used to update metadata. This is a short term work around.
- PDFs generated by Kodak Capture Desktop, or generally PDFs that contain indirect references to null objects in their table of contents, would have an invalid table of contents after processing by OCRmyPDF that might interfere with other viewers. This has been fixed.
- Detect PDFs generated by Adobe LiveCycle, which can only be displayed in Adobe Acrobat and Reader currently. When these are encountered, exit with an error instead of performing OCR on the "Please wait" error message page.
v7.0.4
------
- Fix exception thrown when trying to optimize a certain type of PNG embedded in a PDF with the ``-O2``
- Update to pikepdf 0.3.2, to gain support for optimizing some additional image types that were previously excluded from optimization (CMYK and grayscale). Fixes `#285 <https://github.com/jbarlow83/OCRmyPDF/issues/285>`_.
v7.0.3
------
- Fix issue `#284 <https://github.com/jbarlow83/OCRmyPDF/issues/284>`_, an error when parsing inline images that have are also image masks, by upgrading pikepdf to 0.3.1
v7.0.2
------
- Fix a regression with ``--rotate-pages`` on pages that already had rotations applied. (`#279 <https://github.com/jbarlow83/OCRmyPDF/issues/279>`_)
- Improve quality of page rotation in some cases by rasterizing a higher quality preview image. (`#281 <https://github.com/jbarlow83/OCRmyPDF/issues/281>`_)
v7.0.1
------
- Fix compatibility with img2pdf >= 0.3.0 by rejecting input images that have an alpha channel
- Add forward compatibility for pikepdf 0.3.0 (unrelated to img2pdf)
- Various documentation updates for v7.0.0 changes
v7.0.0
------
- The core algorithm for combining OCR layers with existing PDF pages has been rewritten and improved considerably. PDFs are no longer split into single page PDFs for processing; instead, images are rendered and the OCR results are grafted onto the input PDF. The new algorithm uses less temporary disk space and is much more performant especially for large files.
- New dependency: `pikepdf <https://github.com/pikepdf/pikepdf>`_. pikepdf is a powerful new Python PDF library driving the latest OCRmyPDF features, built on the QPDF C++ library (libqpdf).
- New feature: PDF optimization with ``-O`` or ``--optimize``. After OCR, OCRmyPDF will perform image optimizations relevant to OCR PDFs.
+ If a JBIG2 encoder is available, then monochrome images will be converted, with the potential for huge savings on large black and white images, since JBIG2 is far more efficient than any other monochrome (bi-level) compression. (All known US patents related to JBIG2 have probably expired, but it remains the responsibility of the user to supply a JBIG2 encoder such as `jbig2enc <https://github.com/agl/jbig2enc>`_. OCRmyPDF does not implement JBIG2 encoding.)
+ If ``pngquant`` is installed, OCRmyPDF will optionally use it to perform lossy quantization and compression of PNG images.
+ The quality of JPEGs can also be lowered, on the assumption that a lower quality image may be suitable for storage after OCR.
+ It is likely this component will be offered as a separate command line utility.
+ This image optimization component will eventually be offered as an independent command line utility.
- New dependency: `pikepdf <https://github.com/pikepdf>`_. pikepdf is a powerful new Python PDF library driving the latest OCRmyPDF features, built on the proven and mature libqpdf C++ library.
+ Optimization ranges from ``-O0`` through ``-O3``, where ``0`` disables optimization and ``3`` implements all options. ``1``, the default, performs only safe and lossless optimizations. (This is similar to GCC's optimization parameter.) The exact type of optimizations performed will vary over time.
- Small amounts of text in the margins of a page, such as watermarks, page numbers, or digital stamps, will no longer prevent the rest of a page from being OCRed when ``--skip-text`` is issued. This behavior is based on a heuristic.
- Removed features
+ The deprecated ``tesseract`` PDF renderer was removed, because due to changes in how we construct PDFs.
+ The deprecated ``--pdf-renderer tesseract`` PDF renderer was removed.
+ ``-g``, the option to generate debug text pages, was removed because the extra pages it generates were too much of a maintenance burden and it never worked with the ``sandwich`` renderer (Tesseract) anyway. HOCR pages can still be previewed by running the hocrtransform.py with appropriate settings.
+ ``-g``, the option to generate debug text pages, was removed because it was a maintenance burden and only worked in isolated cases. HOCR pages can still be previewed by running the hocrtransform.py with appropriate settings.
- The ``sandwich`` PDF renderer can be used with all supported versions of Tesseract, including that those priority to v3.05 which don't support ``-c textonly``
- Removed dependencies
- ``--pdf-renderer auto`` and the diagnostics regarding the selection of PDF renderer are now more consistent.
+ ``PyPDF2``
+ ``defusedxml``
+ ``PyMuPDF``
- The ``sandwich`` PDF renderer can be used with all supported versions of Tesseract, including that those prior to v3.05 which don't support ``-c textonly``. (Tesseract v4.0.0 is recommended and more efficient.)
- ``--pdf-renderer auto`` option and the diagnostics used to select a PDF renderer now work better with old versions, but may make different decisions than past versions.
- If everything succeeds but PDF/A conversion fails, a distinct return code is now returned (``ExitCode.pdfa_conversion_failed (10)``) where this situation previously returned ``ExitCode.invalid_output_pdf (4)``. The latter is now returned only if there is some indication that the output file is invalid.
- Notes for downstream packagers
+ There is also a new dependency on ``python-xmp-toolkit`` which in turn depends on ``libexempi3``.
+ It may be necessary to separately ``pip install pycparser`` to avoid `another Python 3.7 issue <https://github.com/eliben/pycparser/pull/135>`_.
v6.2.5
------
- Disable a failing test due to Tesseract 4.0rc1 behavior change. Previously, Tesseract would exit with an error message if its configuration was invalid, and OCRmyPDF would intercept this message. Now Tesseract issues a warning, which OCRmyPDF v6.2.5 may relay or ignore. (In v7.x, OCRmyPDF will respond to the warning.)
- This release branch no longer supports using the optional PyMuPDF installation, since it was removed in v7.x.
- This release branch no longer supports macOS. macOS users should upgrade to v7.x.
v6.2.4
------
- Backport Ghostscript 9.25 compatibility fixes, which removes support for setting Unicode metadata
- Backport blacklisting Ghostscript 9.24
- Older versions of Ghostscript are still supported
v6.2.3
------
- Fix compatibility with img2pdf >= 0.3.0 by rejecting input images that have an alpha channel
- This version will be included in Ubuntu 18.10
v6.2.2
------
- Backport compatibility fixes for Python 3.7 and ruffus 2.7.0 from v7.0.0
- Backport fix to ignore masks when deciding what colors are on a page
- Backport some minor improvements from v7.0.0: better argument validation and warnings about the Tesseract 4.0.0 ``--user-words`` regression
v6.2.1
------
- Fix recent versions of Tesseract (after 4.0.0-beta1) not being detected as supporting the ``sandwich`` renderer (`#271 <https://github.com/ppjbarlow83/OCRmyPDF/issues/271>`_).
v6.2.0
------
@@ -47,7 +250,7 @@ v6.2.0
- Creation of PDF/A-3 is now supported. However, there is no ability to attach files to PDF/A-3.
- List more reasons why the file size might grow.
- Lists more reasons why the file size might grow.
- Fix issue `#262 <https://github.com/ppjbarlow83/OCRmyPDF/issues/262>`_, ``--remove-background`` error on PDFs contained colormapped (paletted) images.
@@ -108,7 +311,7 @@ v6.1.1
v6.1.0
------
- PyMuPDF is now an optional but recommended dependency, to alleviate installation difficulties on platforms that have less access to PyMuPDF than the author anticipated. Install OCRmyPDF with ``pip install ocrmypdf[fitz]`` to use it to its full potential.
- PyMuPDF is now an optional but recommended dependency, to alleviate installation difficulties on platforms that have less access to PyMuPDF than the author anticipated. (For version 6.x only) install OCRmyPDF with ``pip install ocrmypdf[fitz]`` to use it to its full potential.
- Fix ``FileExistsError`` that could occur if OCR timed out while it was generating the output file. (`#218 <https://github.com/jbarlow83/OCRmyPDF/issues/218>`_)
@@ -150,7 +353,7 @@ v6.0.0
v5.7.0
------
- Fixed an issue that caused poor CPU utilization on machines more than 4 cores when running Tesseract 4. (Related to issue `#217 <https://github.com/jbarlow83/OCRmyPDF/issues/217>`_.)
- Fixed an issue that caused poor CPU utilization on machines with more than 4 cores when running Tesseract 4. (Related to issue `#217 <https://github.com/jbarlow83/OCRmyPDF/issues/217>`_.)
- The 'hocr' renderer has been improved. The 'sandwich' and 'tesseract' renderers are still better for most use cases, but 'hocr' may be useful for people who work with the PDF.js renderer in English/ASCII languages. (`#225 <https://github.com/jbarlow83/OCRmyPDF/issues/225>`_)
@@ -289,7 +492,6 @@ v5.0.1
- Fixed issue `#169 <https://github.com/jbarlow83/OCRmyPDF/issues/169>`_, exception due to failure to create sidecar text files on some versions of Tesseract 3.04, including the jbarlow83/ocrmypdf Docker image
v5.0
----
@@ -305,7 +507,6 @@ v5.0
- Fixed issue `#164 <https://github.com/jbarlow83/OCRmyPDF/issues/164>`_, a typo
- Removed the command line parameters ``-n`` and ``--just-print`` since they have not worked for some time (reported as Ubuntu bug `#1687308 <https://bugs.launchpad.net/ubuntu/+source/ocrmypdf/+bug/1687308>`_)
v4.5.6
------
@@ -313,21 +514,18 @@ v4.5.6
- Fixed issue `#158 <https://github.com/jbarlow83/OCRmyPDF/issues/158>`_, ocrmypdf now stops and terminates if Ghostscript fails on an intermediate step, as it is not possible to proceed.
- Fixed issue `#160 <https://github.com/jbarlow83/OCRmyPDF/issues/160>`_, exception thrown on certain invalid arguments instead of error message
v4.5.5
------
- Automated update of macOS homebrew tap
- Fixed issue `#154 <https://github.com/jbarlow83/OCRmyPDF/issues/154>`_, KeyError '/Contents' when searching for text on blank pages that have no /Contents record. Note: incomplete fix for this issue.
v4.5.4
------
- Fix ``--skip-big`` raising an exception if a page contains no images (`#152 <https://github.com/jbarlow83/OCRmyPDF/issues/152>`_) (thanks to @TomRaz)
- Fix an issue where pages with no images might trigger "cannot write mode P as JPEG" (`#151 <https://github.com/jbarlow83/OCRmyPDF/issues/151>`_)
v4.5.3
------
@@ -336,7 +534,6 @@ v4.5.3
- Fixed an issue where the ``tess4`` renderer would duplicate content onto output pages if tesseract failed or timed out
- Fixed ``tess4`` renderer not recognized when lossless reconstruction is possible
v4.5.2
------
@@ -344,21 +541,18 @@ v4.5.2
- Make "using Tesseract 4.0" warning less ominous
- Set up machinery for homebrew OCRmyPDF tap
v4.5.1
------
- Fix issue `#137 <https://github.com/jbarlow83/OCRmyPDF/issues/137>`_, proportions of images with a non-square pixel aspect ratio would be distorted in output for ``--force-ocr`` and some other combinations of flags
v4.5
----
- Exotic PDFs containing "Form XObjects" are now supported (issue `#134 <https://github.com/jbarlow83/OCRmyPDF/issues/134>`_; PDF reference manual 8.10), and images they contain are taken into account when determining the resolution for rasterizing
- PDFs containing "Form XObjects" are now supported (issue `#134 <https://github.com/jbarlow83/OCRmyPDF/issues/134>`_; PDF reference manual 8.10), and images they contain are taken into account when determining the resolution for rasterizing
- The Tesseract 4 Docker image no longer includes all languages, because it took so long to build something would tend to fail
- OCRmyPDF now warns about using ``--pdf-renderer tesseract`` with Tesseract 3.04 or lower due to issues with Ghostscript corrupting the OCR text in these cases
v4.4.2
------
@@ -369,7 +563,6 @@ v4.4.2
- OCRmyPDF now prevents running the Tesseract 4 renderer with Tesseract 3.04, which was permitted in v4.4 and v4.4.1 but will not work
v4.4.1
------
@@ -396,32 +589,27 @@ v4.4
+ However, OCRmyPDF's dependency "ruffus" is not re-entrant, so no Python API is available. Scripts should continue to use the command line interface.
v4.3.5
------
- Update documentation to confirm Python 3.6.0 compatibility. No code changes were needed, so many earlier versions are likely supported.
v4.3.4
------
- Fixed "decimal.InvalidOperation: quantize result has too many digits" for high DPI images
v4.3.3
------
- Fixed PDF/A creation with Ghostscript 9.20 properly
- Fixed an exception on inline stencil masks with a missing optional parameter
v4.3.2
------
- Fixed a PDF/A creation issue with Ghostscript 9.20 (note: this fix did not actually work)
v4.3.1
------
@@ -432,7 +620,6 @@ v4.3.1
- Cleaned up debug output
- Tesseract caching in test cases is now more cautious about false cache hits and reproducing exact output, not that any problems were observed
v4.3
----
@@ -450,7 +637,6 @@ v4.2.5
- Fixed an issue (`#100 <https://github.com/jbarlow83/OCRmyPDF/issues/100>`_) with PDFs that omit the optional /BitsPerComponent parameter on images
- Removed non-free file milk.pdf
v4.2.4
------
@@ -470,20 +656,17 @@ v4.2.3
- Added a test case for indirect objects and linearized PDFs
- Deprecated the OCRmyPDF.sh shell script
v4.2.2
------
- Improvements to documentation
v4.2.1
------
- Fixed an issue where PDF pages that contained stencil masks would report an incorrect DPI and cause Ghostscript to abort
- Implemented stdin streaming
v4.2
----
@@ -522,7 +705,6 @@ v4.1.4
- Bug fix: monochrome images with an ICC profile attached were incorrectly converted to full color images if lossless reconstruction was not possible due to other settings; consequence was increased file size for these images
v4.1.3
------
@@ -531,14 +713,12 @@ v4.1.3
- Fix order of operations for matrix multiplication (no effect on most users)
- Add a few leptonica wrapper functions (no effect on most users)
v4.1.2
------
- Replace IEC sRGB ICC profile with Debian's sRGB (from icc-profiles-free) which is more compatible with the MIT license
- More helpful error message for an error related to certain types of malformed PDFs
v4.1
----
@@ -546,20 +726,17 @@ v4.1
- Fixed problems in error checking if ``unpaper`` is uninstalled or missing at run-time
- Fixed problems with "RethrownJobError" errors during error handling that suppressed the useful error messages
v4.0.7
------
- Minor correction to Ghostscript output settings
v4.0.6
------
- Update install instructions
- Provide a sRGB profile instead of using Ghostscript's
v4.0.5
------
@@ -573,18 +750,14 @@ v4.0.4
Released with verbose debug message turned on. Do not use. Skip to v4.0.5.
v4.0.3
------
New features
^^^^^^^^^^^^
- Page orientations detected are now reported in a summary comment
Fixes
^^^^^
- Show stack trace if unexpected errors occur
- Treat "too few characters" error message from Tesseract as a reason to skip that page rather than
@@ -596,7 +769,7 @@ v4.0.2
------
Fixes
^^^^^
- Fixed compatibility with Tesseract 3.04.01 release, particularly its different way of outputting
orientation information
@@ -608,7 +781,7 @@ v4.0.1
------
Fixes
^^^^^
- Fixed a KeyError if tesseract fails to find page orientation information
@@ -617,7 +790,6 @@ v4.0
----
New features
^^^^^^^^^^^^
- Automatic page rotation (``-r``) is now available. It uses ignores any prior rotation information
on PDFs and sets rotation based on the dominant orientation of detectable text. This feature is
@@ -627,7 +799,6 @@ New features
Fixes
^^^^^
- Fixed an issue where lossless reconstruction could cause some pages to be appear incorrectly
if the page was rotated by the user in Acrobat after being scanned (specifically if it a /Rotate tag)
@@ -636,7 +807,6 @@ Fixes
Changes
^^^^^^^
- Logging output is now much easier to read
- ``--deskew`` is now performed by Leptonica instead of unpaper (`#25 <https://github.com/jbarlow83/OCRmyPDF/issues/25>`_)
@@ -652,7 +822,6 @@ v3.2.1
------
Changes
^^^^^^^
- Fixed issue `#47 <https://github.com/jbarlow83/OCRmyPDF/issues/47>`_ "convert() got and unexpected keyword argument 'dpi'" by upgrading to img2pdf 0.2
- Tweaked the Dockerfiles
@@ -662,7 +831,6 @@ v3.2
----
New features
^^^^^^^^^^^^
- Lossless reconstruction: when possible, OCRmyPDF will inject text layers without
otherwise manipulating the content and layout of a PDF page. For example, a PDF containing a mix
@@ -674,7 +842,6 @@ New features
for the polyglots among us. It is much larger.
Changes
^^^^^^^
- JPEG transcoding quality is now 95 instead of the default 75. Bigger file sizes for less degradation.
@@ -684,7 +851,6 @@ v3.1.1
------
Changes
^^^^^^^
- Fixed bug that caused incorrect page size and DPI calculations on documents with mixed page sizes
@@ -692,7 +858,6 @@ v3.1
----
Changes
^^^^^^^
- Default output format is now PDF/A-2b instead of PDF/A-1b
- Python 3.5 and macOS El Capitan are now supported platforms - no changes were
@@ -710,7 +875,6 @@ v3.0
----
New features
^^^^^^^^^^^^
- Easier installation with a Docker container or Python's ``pip`` package manager
- Eliminated many external dependencies, so it's easier to setup
@@ -733,7 +897,6 @@ New features
- Multiple images on the same PDF page are now supported
Changes
^^^^^^^
- New, robust rewrite in Python 3.4+ with ruffus_ pipelines
- Now uses Ghostscript 9.14's improved color conversion model to preserve PDF colors
@@ -770,8 +933,7 @@ Changes
.. _Unpaper: https://github.com/Flameeyes/unpaper
.. _JHOVE: http://jhove.sourceforge.net/
Release candidates
^^^^^^^^^^^^^^^^^^
Release candidates^
- rc9:
@@ -839,12 +1001,11 @@ where ``settings.txt`` contains *one argument per line*, for example:
Fixes
^^^^^
- Handling of filenames containing spaces: fixed
Notes and known issues
^^^^^^^^^^^^^^^^^^^^^^
- Some dependencies may work with lower versions than tested, so try
overriding dependencies if they are "in the way" to see if they work.
-10
View File
@@ -1,10 +0,0 @@
# requirements.txt can be used to replicate the developer's build environment
# setup.py lists a separate set of requirements that are looser to simplify
# installation
ruffus == 2.6.3
Pillow == 5.1.0
reportlab == 3.4.0
PyPDF2 == 1.26.0
img2pdf == 0.2.4
cffi == 1.11.5
PyMuPDF == 1.12.5
@@ -1,4 +1,4 @@
check-manifest >= 0.35
twine >= 1.8.1
coverage >= 4.4
coverage >= 4.5
GitPython == 2.1.3
+13
View File
@@ -0,0 +1,13 @@
# requirements.txt can be used to replicate the developer's build environment
# setup.py lists a separate set of requirements that are looser to simplify
# installation
chardet == 3.0.4
cffi == 1.11.5
img2pdf == 0.3.1
pdfminer.six == 20181108
pikepdf == 0.9.1
Pillow >= 5.0.0, != 5.1.0 ; sys_platform == "darwin"
pycparser == 2.19
python-xmp-toolkit == 2.0.1
reportlab == 3.5.9
ruffus == 2.8.0
+8
View File
@@ -0,0 +1,8 @@
pytest == 3.9.3
pytest-helpers-namespace
pytest-xdist
pytest-cov
python-xmp-toolkit # requires apt-get install libexempi3
# or brew install exempi
PyPDF2 >= 1.26.0
#PyMuPDF == 1.13.4 # optional
+3 -1
View File
@@ -11,6 +11,8 @@ ignore =
[tool:pytest]
norecursedirs = lib .pc .git output cache resources
testpaths = tests
filterwarnings =
ignore:.*XMLParser.*:DeprecationWarning
[metadata]
license_file = LICENSE
license_file = LICENSE
+18 -10
View File
@@ -28,7 +28,6 @@ from setuptools import setup, find_packages # nopep8
from subprocess import STDOUT, check_output, CalledProcessError # nopep8
from collections.abc import Mapping # nopep8
import re # nopep8
import os # nopep8
missing_program = '''
@@ -201,17 +200,18 @@ if 'upload' in sys.argv[1:]:
print('Use twine to upload the package - setup.py upload is insecure')
sys.exit(1)
tests_require = open('test_requirements.txt').read().splitlines()
tests_require = open('requirements/test.txt', encoding='utf-8').read().splitlines()
def readme():
with open('README.rst') as f:
with open('README.md', encoding='utf-8') as f:
return f.read()
setup(
name='ocrmypdf',
description='OCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched',
long_description=readme(),
long_description_content_type='text/markdown',
url='https://github.com/jbarlow83/OCRmyPDF',
author='James R. Barlow',
author_email='jim@purplerock.ca',
@@ -221,6 +221,7 @@ setup(
classifiers=[
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Development Status :: 5 - Production/Stable",
"Environment :: Console",
"Intended Audience :: End Users/Desktop",
@@ -240,25 +241,26 @@ setup(
'cffi >= 1.9.1', # to build the leptonica module
'pytest-runner', # to enable python setup.py test
'setuptools_scm', # so that version will work
'setuptools_scm_git_archive' # enable version from github tarballs
],
use_scm_version={'version_scheme': 'post-release'},
cffi_modules=[
'src/ocrmypdf/lib/compile_leptonica.py:ffibuilder'
],
install_requires=[
'chardet >= 3.0.4, < 4', # unlisted requirement of pdfminer.six 20181108
'cffi >= 1.9.1', # must be a setup and install requirement
'defusedxml >= 0.5.0', # pure Python, so track HEAD closely
'img2pdf >= 0.2.4', # pure Python, so track HEAD closely
'pikepdf',
'img2pdf >= 0.3.0, < 0.4', # pure Python, so track HEAD closely
'pdfminer.six == 20181108',
'pikepdf >= 0.9.1',
'Pillow >= 4.0.0, != 5.1.0 ; sys_platform == "darwin"',
# Pillow < 4 has BytesIO/TIFF bug w/img2pdf 0.2.3
# block 5.1.0, broken wheels
'PyPDF2 >= 1.26', # pure Python, so track HEAD closely
'reportlab >= 3.3.0', # oldest released version with sane image handling
'ruffus == 2.6.3', # pinned - ocrmypdf implements a 2.6.3 workaround
'ruffus >= 2.7.0',
],
extras_require={
'fitz': ['PyMuPDF >= 1.12.5, != 1.13.3'],
'fitz': [], # Backward compatibility
},
tests_require=tests_require,
entry_points={
@@ -268,4 +270,10 @@ setup(
},
package_data={'ocrmypdf': ['data/sRGB.icc']},
include_package_data=True,
zip_safe=False)
zip_safe=False,
project_urls={
'Documentation': 'https://ocrmypdf.readthedocs.io/',
'Source': 'https://github.com/jbarlow83/ocrmypdf',
'Tracker': 'https://github.com/jbarlow83/ocrmypdf/issues'
}
)
+13
View File
@@ -23,3 +23,16 @@ PROGRAM_NAME = 'ocrmypdf'
__version__ = pkg_resources.get_distribution('ocrmypdf').version
VERSION = __version__
from .exceptions import (
ExitCode, BadArgsError, PdfMergeFailedError, MissingDependencyError,
UnsupportedImageFormatError, DpiError, OutputFileAccessError,
PriorOcrFoundError, InputFileError, SubprocessOutputError,
EncryptedPdfError, TesseractConfigError
)
from . import helpers
from . import hocrtransform
from . import leptonica
from . import pdfa
from . import pdfinfo
+172 -99
View File
@@ -17,12 +17,10 @@
# along with OCRmyPDF. If not, see <http://www.gnu.org/licenses/>.
from tempfile import mkdtemp
from collections.abc import Sequence
from pathlib import Path
import sys
import os
import re
import multiprocessing
import atexit
import textwrap
import logging
@@ -35,12 +33,11 @@ import ruffus.cmdline as cmdline
import ruffus.proxy_logger as proxy_logger
from ._jobcontext import JobContext, JobContextManager, cleanup_working_files
from .pipeline import build_pipeline
from ._pipeline import build_pipeline
from .pdfa import file_claims_pdfa
from .helpers import is_iterable_notstr, re_symlink, is_file_writable, \
from .helpers import re_symlink, is_file_writable, \
available_cpu_count
from .exec import tesseract, qpdf, ghostscript
from .lib import fitz
from . import PROGRAM_NAME, VERSION
from .exceptions import ExitCode, ExitCodeException, MissingDependencyError, \
@@ -82,7 +79,7 @@ if tesseract.version() < MINIMUM_TESS_VERSION:
# Parser
def numeric(basetype, min_=None, max_=None):
"Validator for numeric params"
"""Validator for numeric params"""
min_ = basetype(min_) if min_ is not None else None
max_ = basetype(max_) if max_ is not None else None
def _numeric(string):
@@ -247,19 +244,38 @@ preprocessing.add_argument(
'--oversample', metavar='DPI', type=numeric(int, 0, 5000), default=0,
help="Oversample images to at least the specified DPI, to improve OCR "
"results slightly")
preprocessing.add_argument(
'--remove-vectors', action='store_true',
help="EXPERIMENTAL. Mask out any vector objects in the PDF so that they "
"will not be included in OCR. This can eliminate false characters.")
preprocessing.add_argument(
'--mask-barcodes', action='store_true',
help="EXPERIMENTAL. Mask out any barcodes that appear in the PDF so they are not "
"considered during OCR. Barcodes can introduce false characters into "
"OCR.")
preprocessing.add_argument(
'--threshold', action='store_true',
help="EXPERIMENTAL. Threshold image to 1bpp before sending it to Tesseract for OCR. Can "
"improve OCR quality compared to Tesseract's thresholder.")
ocrsettings = parser.add_argument_group(
"OCR options",
"Control how OCR is applied")
ocrsettings.add_argument(
'-f', '--force-ocr', action='store_true',
help="Rasterize any fonts or vector objects on each page, apply OCR, and "
help="Rasterize any text or vector objects on each page, apply OCR, and "
"save the rastered output (this rewrites the PDF)")
ocrsettings.add_argument(
'-s', '--skip-text', action='store_true',
help="Skip OCR on any pages that already contain text, but include the "
"page in final output; useful for PDFs that contain a mix of "
"images, text pages, and/or previously OCRed pages")
ocrsettings.add_argument(
'--redo-ocr', action='store_true',
help="Attempt to detect and remove the hidden OCR layer from files that "
"were previously OCRed with OCRmyPDF or another program. Apply OCR "
"to text found in raster images. Existing visible text objects will "
"not be changed. If there is no existing OCR, OCR will be added.")
ocrsettings.add_argument(
'--skip-big', type=numeric(float, 0, 5000), metavar='MPixels',
help="Skip OCR on pages larger than the specified amount of megapixels, "
@@ -272,18 +288,50 @@ optimizing = parser.add_argument_group(
optimizing.add_argument(
'-O', '--optimize', type=int, choices=range(0, 4), default=1,
help=("Control how PDF is optimized after processing:"
"0 - do not optimize;"
"1 - do safe, lossless optimizations (default);"
"2 - do lossy optimizations; "
"3 - do aggressive lossy optimizations"
"0 - do not optimize; "
"1 - do safe, lossless optimizations (default); "
"2 - do some lossy optimizations; "
"3 - do aggressive lossy optimizations (including lossy JBIG2)"
)
)
optimizing.add_argument(
'--jpeg-quality', type=numeric(int, 0, 100), default=0, metavar='Q',
help=("Adjust JPEG quality level for JPEG optimization. "
"100 is best quality and largest output size; "
"1 is lowest quality and smallest output; "
"0 uses the default."
)
)
optimizing.add_argument(
'--jpg-quality', type=numeric(int, 0, 100), default=0, metavar='Q',
dest='jpeg_quality',
help=argparse.SUPPRESS # Alias for --jpeg-quality
)
optimizing.add_argument(
'--png-quality', type=numeric(int, 0, 100), default=0, metavar='Q',
help=("Adjust PNG quality level to use when quantizing PNGs. "
"Values have same meaning as with --jpeg-quality"
)
)
optimizing.add_argument(
'--jbig2-lossy', action='store_true',
help=("Enable JBIG2 lossy mode (better compression, not suitable for some "
"use cases - see documentation)."
)
)
optimizing.add_argument(
'--jbig2-page-group-size', type=numeric(int, 1, 10000), default=0,
metavar='N',
# Adjust number of pages to consider at once for JBIG2 compression
help=argparse.SUPPRESS
)
advanced = parser.add_argument_group(
"Advanced",
"Advanced options to control Tesseract's OCR behavior")
advanced.add_argument(
'--max-image-mpixels', action='store', type=numeric(float, 0), metavar='MPixels',
'--max-image-mpixels', action='store', type=numeric(float, 0),
metavar='MPixels',
help="Set maximum number of pixels to unpack before treating an image as a "
"decompression bomb",
default=128.0)
@@ -339,14 +387,6 @@ advanced.add_argument(
advanced.add_argument(
'--user-patterns', metavar='FILE',
help="Specify the location of the Tesseract user patterns file.")
advanced.add_argument(
'--skip-repair', action='store_true',
help="Normally OCRmyPDF automatically repairs PDFs using qpdf before "
"processing. If you have already run qpdf or a similar program "
"that repairs PDF errors, you can tell OCRmyPDF to skip repair with "
"this option. This may be helpful in batch processing where all "
"files are repaired prior to OCR occurs, since repair is single "
"threaded and time consuming for large files.")
debugging = parser.add_argument_group(
"Debugging",
@@ -440,12 +480,18 @@ def check_options_output(options, log):
)
lossless_reconstruction = False
if options.pdf_renderer in ('hocr', 'sandwich'):
if not any((options.deskew, options.clean_final, options.force_ocr,
options.remove_background)):
lossless_reconstruction = True
if not any((options.deskew, options.clean_final, options.force_ocr,
options.remove_background)):
lossless_reconstruction = True
options.lossless_reconstruction = lossless_reconstruction
if not options.lossless_reconstruction and options.redo_ocr:
raise argparse.ArgumentError(
None,
"--redo-ocr is not currently compatible with --deskew, "
"--clean-final, and --remove-background"
)
def check_options_sidecar(options, log):
if options.sidecar == '\0':
@@ -457,42 +503,76 @@ def check_options_sidecar(options, log):
options.sidecar = options.output_file + '.txt'
def _optional_program_check(name, version_fn, min_version, for_argument):
def _optional_program_required(name, version_fn, min_version, for_argument):
try:
if version_fn() < min_version:
raise MissingDependencyError(
"The installed '{}' is not supported. "
"Install version {} or newer.".format(name, min_version))
except FileNotFoundError:
except (FileNotFoundError, MissingDependencyError):
raise MissingDependencyError(
"Install the '{}' program to use {}.".format(name, for_argument))
def _optional_program_recommended(name, version_fn, min_version, for_argument):
try:
if version_fn() < min_version:
raise MissingDependencyError(
"The installed '{}' is not supported. "
"Install version {} or newer.".format(name, min_version))
except (FileNotFoundError, MissingDependencyError):
complain(
"For best results, install the optional program '{}' to use the "
"argument {}.".format(name, for_argument)
)
def check_options_preprocessing(options, log):
if any((options.clean, options.clean_final)):
from .exec import unpaper
_optional_program_check(
_optional_program_required(
'unpaper', unpaper.version, '6.1', '--clean, --clean-final'
)
def check_options_ocr_behavior(options, log):
if options.force_ocr and options.skip_text:
exclusive_options = sum(
[(1 if opt else 0)
for opt in (options.force_ocr, options.skip_text, options.redo_ocr)
]
)
if exclusive_options >= 2:
raise argparse.ArgumentError(
None,
"Error: --force-ocr and --skip-text are mutually exclusive.")
"Error: choose only one of --force-ocr, --skip-text, --redo-ocr.")
def check_options_optimizing(options, log):
if options.optimize >= 2:
from .exec import pngquant, jbig2enc
_optional_program_check(
_optional_program_required(
'pngquant', pngquant.version, '2.0.1', '--optimize {2,3}'
)
_optional_program_check(
if options.jbig2_lossy:
_optional_program_required(
'jbig2', jbig2enc.version, '0.28', '--jbig2-lossy'
)
elif options.optimize >= 2:
# Although we use JBIG2 for optimize=1, don't nag about it unless the
# user is asking for more optimization
_optional_program_recommended(
'jbig2', jbig2enc.version, '0.28', '--optimize {2,3}'
)
if options.optimize == 0 and any([
options.jbig2_lossy, options.png_quality, options.jpeg_quality
]):
log.warning(
"The arguments --jbig2-lossy, --png-quality, and --jpeg-quality "
"will be ignored because --optimize=0."
)
def check_options_advanced(options, log):
if options.tesseract_oem and not tesseract.v4():
@@ -588,58 +668,47 @@ def do_ruffus_exception(ruffus_five_tuple, options, log):
description of the error message that occurred."""
exit_code = None
task_name, job_name, exc_name, exc_value, exc_stack = ruffus_five_tuple
job_name = job_name # unused
if exc_name == 'builtins.SystemExit':
_task_name, _job_name, exc_name, exc_value, exc_stack = ruffus_five_tuple
if isinstance(exc_name, type):
# ruffus is full of mystery... sometimes (probably when the process
# group leader is killed) exc_name is the class object of the exception,
# rather than a str. So reach into the object and get its name.
exc_name = exc_name.__name__
if exc_name.startswith('ocrmypdf.exceptions.'):
base_exc_name = exc_name.replace('ocrmypdf.exceptions.', '')
exc_class = getattr(ocrmypdf_exceptions, base_exc_name)
exit_code = getattr(exc_class, 'exit_code', ExitCode.other_error)
try:
if isinstance(exc_value, exc_class):
exc_msg = str(exc_value)
elif isinstance(exc_value, str):
exc_msg = exc_value
else:
exc_msg = str(exc_class())
except Exception:
exc_msg = "Unknown"
if exc_name in ('builtins.SystemExit', 'SystemExit'):
match = re.search(r"\.(.+?)\)", exc_value)
exit_code_name = match.groups()[0]
exit_code = getattr(ExitCode, exit_code_name, 'other_error')
elif exc_name == 'ruffus.ruffus_exceptions.MissingInputFileError':
log.error(cleanup_ruffus_error_message(exc_value))
exit_code = ExitCode.input_file
elif exc_name == 'builtins.TypeError':
# Even though repair_pdf will fail, ruffus will still try
# to call split_pages with no input files, likely due to a bug
if task_name == 'split_pages':
log.error("Input file '{0}' is not a valid PDF".format(
options.input_file))
exit_code = ExitCode.input_file
elif exc_name == 'builtins.KeyboardInterrupt':
log.error("Interrupted by user")
elif exc_name in ('builtins.KeyboardInterrupt', 'KeyboardInterrupt'):
# We have to print in this case because the log daemon might be toast
print("Interrupted by user", file=sys.stderr)
exit_code = ExitCode.ctrl_c
elif exc_name == 'subprocess.CalledProcessError':
# It's up to the subprocess handler to report something useful
msg = "Error occurred while running this command:"
log.error(msg + '\n' + exc_value)
exit_code = ExitCode.child_process_error
elif exc_name == 'ocrmypdf.exceptions.EncryptedPdfError':
log.error(textwrap.dedent("""\
Input PDF is encrypted. The encryption must be removed to
perform OCR.
For information about this PDF's security use
qpdf --show-encryption infilename
You can remove the encryption using
qpdf --decrypt [--password=[password]] infilename
"""))
exit_code = ExitCode.encrypted_pdf
elif exc_name == 'ocrmypdf.exceptions.PdfMergeFailedError':
log.error(textwrap.dedent("""\
Failed to merge PDF image layer with OCR layer
Usually this happens because the input PDF file is mal-formed and
ocrmypdf cannot automatically correct the problem on its own.
Try using
ocrmypdf --pdf-renderer sandwich [..other args..]
"""))
exit_code = ExitCode.input_file
elif exc_name.startswith('ocrmypdf.exceptions.'):
base_exc_name = exc_name.replace('ocrmypdf.exceptions.', '')
exc_class = getattr(ocrmypdf_exceptions, base_exc_name)
exit_code = exc_class.exit_code
if exc_msg:
log.error(exc_msg)
elif exc_name == 'PIL.Image.DecompressionBombError':
msg = cleanup_ruffus_error_message(exc_value)
msg += ("\nUse the --max-image-mpixels argument to set increase the "
@@ -655,33 +724,30 @@ def do_ruffus_exception(ruffus_five_tuple, options, log):
return ExitCode.other_error
def traverse_ruffus_exception(e_args, options, log):
"""Walk through a RethrownJobError and find the first exception.
def traverse_ruffus_exception(exceptions, options, log):
"""Traverse a RethrownJobError and output the exceptions
Ruffus flattens exception to 5 element tuples. Because of a bug
in <= 2.6.3 it may present either the single:
(task, job, exc, value, stack)
or something like:
[[(task, job, exc, value, stack)]]
Ruffus presents exceptions as 5 element tuples. The RethrownJobException
has a list of exceptions like
e.job_exceptions = [(5-tuple), (5-tuple), ...]
Generally cross-process exception marshalling doesn't work well
and ruffus doesn't support because BaseException has its own
implementation of __reduce__ that attempts to reconstruct the
exception based on e.__init__(e.args).
ruffus < 2.7.0 had a bug with exception marshalling that would give
different output whether the main or child process raised the exception.
We no longer support this.
Attempting to log the exception directly marshalls it to the logger
which is probably in another process, so it's better to log only
data from the exception at this point.
Attempting to log the exception itself will re-marshall it to the logger
which is normally running in another process. It's better to avoid re-
marshalling.
The exit code will be based on this, even if multiple exceptions occurred
at the same time."""
if isinstance(e_args, Sequence) and isinstance(e_args[0], str) and \
len(e_args) == 5:
return do_ruffus_exception(e_args, options, log)
elif is_iterable_notstr(e_args):
for exc in e_args:
return traverse_ruffus_exception(exc, options, log)
exit_codes = []
for exc in exceptions:
exit_code = do_ruffus_exception(exc, options, log)
exit_codes.append(exit_code)
return exit_codes[0] # Multiple codes are rare so take the first one
def check_closed_streams(options):
@@ -750,11 +816,7 @@ def preamble(_log):
_log.debug('ocrmypdf ' + VERSION)
_log.debug('tesseract ' + tesseract.version())
_log.debug('qpdf ' + qpdf.version())
if fitz:
_log.debug('PyMuPDF ' + fitz.version[0])
_log.debug('libmupdf ' + fitz.version[1])
else:
_log.debug('PyMuPDF not installed')
_log.debug('gs ' + ghostscript.version())
def check_environ(options, _log):
@@ -839,9 +901,11 @@ def report_output_file_size(options, _log, input_file, output_file):
""".format(ratio, explanation)))
def run_pipeline():
options = parser.parse_args()
def run_pipeline(args=None):
options = parser.parse_args(args=args)
options.verbose_abbreviated_path = 1
if os.environ.get('_OCRMYPDF_THREADS'):
options.use_threads = True
if not check_closed_streams(options):
return ExitCode.bad_args
@@ -862,6 +926,14 @@ def run_pipeline():
"security vulnerabilities with certain malformed PDFs. Consider "
"upgrading to version 7.0.0 or newer.".format(qpdf.version()))
if ghostscript.version() == '9.24':
complain(
"Ghostscript 9.24 contains serious regressions and is not "
"supported. Please upgrade to Ghostscript 9.25 or use an older "
"version."
)
return ExitCode.missing_dependency
# Any changes to options will not take effect for options that are already
# bound to function parameters in the pipeline. (For example
# options.input_file, options.pdf_renderer are already bound.)
@@ -902,7 +974,8 @@ def run_pipeline():
except ruffus_exceptions.RethrownJobError as e:
if options.verbose:
_log.debug(str(e)) # stringify exception so logger doesn't have to
exitcode = traverse_ruffus_exception(e.args, options, _log)
exceptions = e.job_exceptions
exitcode = traverse_ruffus_exception(exceptions, options, _log)
if exitcode is None:
_log.error("Unexpected ruffus exception: " + str(e))
_log.error(repr(e))
@@ -930,7 +1003,7 @@ def run_pipeline():
else:
msg = 'Output file is okay but is not PDF/A (seems to be {})'
_log.warning(msg.format(pdfa_info['conformance']))
return ExitCode.invalid_output_pdf
return ExitCode.pdfa_conversion_failed
if not qpdf.check(options.output_file, _log):
_log.warning('Output file: The generated PDF is INVALID')
return ExitCode.invalid_output_pdf
@@ -16,13 +16,11 @@
# along with OCRmyPDF. If not, see <http://www.gnu.org/licenses/>.
from contextlib import suppress
from shutil import copyfileobj
from shutil import copyfileobj, copyfile
from pathlib import Path
from datetime import datetime, timezone
import sys
import os
import shutil
import re
import img2pdf
@@ -31,17 +29,18 @@ import pikepdf
from PIL import Image
from ruffus import formatter, regex, Pipeline, suffix
from pikepdf.models.metadata import encode_pdf_date
from .hocrtransform import HocrTransform
from .pdfinfo import PdfInfo, Encoding, Colorspace
from .pdfa import generate_pdfa_ps, encode_pdf_date
from .pdfinfo import PdfInfo, Colorspace
from .pdfa import generate_pdfa_ps
from .helpers import re_symlink, is_iterable_notstr, page_number, flatten_groups
from .exec import ghostscript, tesseract, qpdf
from .lib import fitz
from .exceptions import PdfMergeFailedError, UnsupportedImageFormatError, \
DpiError, PriorOcrFoundError, InputFileError
from .exec import ghostscript, tesseract
from .exceptions import UnsupportedImageFormatError, \
DpiError, PriorOcrFoundError, InputFileError, EncryptedPdfError
from . import leptonica
from . import PROGRAM_NAME, VERSION
from ._optimize import optimize
from .optimize import optimize
from ._weave import weave_layers
@@ -87,6 +86,13 @@ def triage_image_file(input_file, output_file, log, options):
"image was scanned and specify it using --image-dpi.")
raise DpiError()
if im.mode in ('RGBA', 'LA'):
log.error(
"The input image has an alpha channel. Remove the alpha "
"channel first."
)
raise UnsupportedImageFormatError()
if 'iccprofile' not in im.info:
if im.mode == 'RGB':
log.info('Input image has no ICC profile, assuming sRGB')
@@ -122,7 +128,7 @@ def _pdf_guess_version(input_file, search_window=1024):
"""
with open(input_file, 'rb') as f:
signature = f.read(1024)
signature = f.read(search_window)
m = re.search(br'%PDF-(\d\.\d)', signature)
if m:
return m.group(1)
@@ -156,14 +162,26 @@ def repair_and_parse_pdf(
log,
context):
options = context.get_options()
if not options.skip_repair:
log.debug("Beginning qpdf repair...")
qpdf.repair(input_file, output_file, log)
log.debug("Repair OK; beginning parse...")
else:
re_symlink(input_file, output_file, log)
copyfile(input_file, output_file)
pdfinfo = PdfInfo(output_file)
detailed_page_analysis = False
if options.redo_ocr:
detailed_page_analysis = True
try:
pdfinfo = PdfInfo(output_file, detailed_page_analysis=detailed_page_analysis, log=log)
except pikepdf.PasswordError as e:
raise EncryptedPdfError()
except pikepdf.PdfError as e:
log.error(e)
raise InputFileError()
if pdfinfo.needs_rendering:
log.error(
"This PDF contains dynamic XFA forms created by Adobe LiveCycle "
"Designer and can only be read by Adobe Acrobat or Adobe Reader."
)
raise InputFileError()
if pdfinfo.has_userunit and options.output_type.startswith('pdfa'):
log.error(
@@ -181,6 +199,25 @@ def repair_and_parse_pdf(
"high page count files. Python 3.6 or newer is recommended."
)
if pdfinfo.has_acroform:
if options.redo_ocr:
log.error(
"This PDF has a user fillable form. --redo-ocr is not "
"currently possible on such files."
)
raise PriorOcrFoundError()
else:
log.warning(
"This PDF has a fillable form. Chances are it is a pure digital "
"document that does not need OCR."
)
if not options.force_ocr:
log.info(
"Use the option --force-ocr to produce an image of the "
"form and all filled form fields. The output PDF will be "
"'flattened' and will no longer be fillable."
)
context.set_pdfinfo(pdfinfo)
log.debug(pdfinfo)
@@ -194,8 +231,12 @@ def get_pageinfo(input_file, context):
def get_page_dpi(pageinfo, options):
"Get the DPI when nonsquare DPI is tolerable"
xres = max(pageinfo.xres or VECTOR_PAGE_DPI, options.oversample or 0)
yres = max(pageinfo.yres or VECTOR_PAGE_DPI, options.oversample or 0)
xres = max(pageinfo.xres or VECTOR_PAGE_DPI,
options.oversample or 0,
VECTOR_PAGE_DPI if pageinfo.has_vector else 0)
yres = max(pageinfo.yres or VECTOR_PAGE_DPI,
options.oversample or 0,
VECTOR_PAGE_DPI if pageinfo.has_vector else 0)
return (float(xres), float(yres))
@@ -207,6 +248,7 @@ def get_page_square_dpi(pageinfo, options):
return float(max(
(xres * userunit) or VECTOR_PAGE_DPI,
(yres * userunit) or VECTOR_PAGE_DPI,
VECTOR_PAGE_DPI if pageinfo.has_vector else 0,
options.oversample or 0))
@@ -215,6 +257,7 @@ def get_canvas_square_dpi(pageinfo, options):
return float(max(
(pageinfo.xres) or VECTOR_PAGE_DPI,
(pageinfo.yres) or VECTOR_PAGE_DPI,
VECTOR_PAGE_DPI if pageinfo.has_vector else 0,
options.oversample or 0))
@@ -225,7 +268,7 @@ def is_ocr_required(pageinfo, log, options):
if pageinfo.has_text:
msg = "{0:4d}: page already has text! {1}"
if not options.force_ocr and not options.skip_text:
if not options.force_ocr and not (options.skip_text or options.redo_ocr):
log.error(msg.format(page,
"aborting (use --force-ocr to force OCR)"))
raise PriorOcrFoundError()
@@ -233,6 +276,18 @@ def is_ocr_required(pageinfo, log, options):
log.info(msg.format(page,
"rasterizing text and running OCR anyway"))
ocr_required = True
elif options.redo_ocr:
if pageinfo.has_corrupt_text:
log.warning(msg.format(
page,
"some text on this page cannot be mapped to characters: "
"consider using --force-ocr instead")
)
raise PriorOcrFoundError() # Wrong error but will do for now
else:
log.info(msg.format(page,
"redoing OCR"))
ocr_required = True
elif options.skip_text:
log.info(msg.format(page,
"skipping all processing on this page"))
@@ -310,17 +365,7 @@ def marker_pages(
# file a symlink back to the source.
for n in range(npages):
page = Path(work_folder) / '{0:06d}.marker.pdf'.format(n + 1)
page.symlink_to(input_file)
def split_page(
placeholder_file,
output_file,
log,
context):
pageno = page_number(placeholder_file) - 1
input_pdf = context.get_pdfinfo().filename
qpdf.extract_page(input_pdf, output_file, pageno)
page.symlink_to(input_file) # pylint: disable=E1101
def ocr_or_skip(
@@ -354,13 +399,13 @@ def rasterize_preview(
context):
pageinfo = get_pageinfo(input_file, context)
options = context.get_options()
canvas_dpi = get_canvas_square_dpi(pageinfo, options) / 2
page_dpi = get_page_square_dpi(pageinfo, options) / 2
canvas_dpi = get_canvas_square_dpi(pageinfo, options)
page_dpi = get_page_square_dpi(pageinfo, options)
ghostscript.rasterize_pdf(
input_file, output_file, xres=canvas_dpi, yres=canvas_dpi,
raster_device='jpeggray', log=log, page_dpi=(page_dpi, page_dpi),
pageno=page_number(input_file), rotation=pageinfo.rotation)
pageno=page_number(input_file))
def orient_page(
@@ -368,6 +413,22 @@ def orient_page(
output_file,
log,
context):
"""
Work out orientation correct for each page.
We ask Ghostscript to draw a preview page, which will rasterize with the
current /Rotate applied, and then ask Tesseract which way the page is
oriented. If the value of /Rotate is correct (e.g., a user already
manually fixed rotation), then Tesseract will say the page is pointing
up and the correction is zero. Otherwise, the orientation found by
Tesseract represents the clockwise rotation, or the counterclockwise
correction to rotation.
When we draw the real page for OCR, we rotate it by the CCW correction,
which points it (hopefully) upright. _weave.py takes care of the orienting
the image and text layers.
"""
options = context.get_options()
page_pdf = next(ii for ii in infiles if ii.endswith('.page.pdf'))
@@ -379,7 +440,6 @@ def orient_page(
orient_conf = tesseract.get_orientation(
preview,
language=options.language,
engine_mode=options.tesseract_oem,
timeout=options.tesseract_timeout,
log=log)
@@ -391,33 +451,43 @@ def orient_page(
270: ''
}
pageno = page_number(page_pdf) - 1
pdfinfo = context.get_pdfinfo()
existing_rotation = pdfinfo[pageno].rotation
correction = orient_conf.angle % 360
apply_correction = False
description = ''
action = ''
if orient_conf.confidence >= options.rotate_pages_threshold:
if orient_conf.angle != 0:
if correction != 0:
apply_correction = True
description = ' - will rotate'
action = ' - will rotate'
else:
description = ' - rotation appears correct'
action = ' - rotation appears correct'
else:
if orient_conf.angle != 0:
description = ' - confidence too low to rotate'
if correction != 0:
action = ' - confidence too low to rotate'
else:
description = ' - no change'
action = ' - no change'
facing = ''
if existing_rotation != 0:
facing = 'with existing rotation {}, '.format(direction.get(
existing_rotation, '?'))
facing += 'page is facing {}'.format(direction.get(
orient_conf.angle, '?'))
log.info(
'{0:4d}: page is facing {1}, confidence {2:.2f}{3}'.format(
page_number(preview),
direction.get(orient_conf.angle, '?'),
orient_conf.confidence,
description)
'{pagenum:4d}: {facing}, confidence {conf:.2f}{action}'.format(
pagenum=page_number(preview),
facing=facing,
conf=orient_conf.confidence,
action=action)
)
re_symlink(page_pdf, output_file, log)
if apply_correction:
pageno = page_number(page_pdf) - 1
pdfinfo = context.get_pdfinfo()
correction = (orient_conf.angle - pdfinfo[pageno].rotation) % 360
context.set_rotation(pageno, correction)
@@ -460,7 +530,8 @@ def rasterize_with_ghostscript(
ghostscript.rasterize_pdf(
input_file, output_file, xres=canvas_dpi, yres=canvas_dpi,
raster_device=device, log=log, page_dpi=(page_dpi, page_dpi),
pageno=page_number(input_file), rotation=correction)
pageno=page_number(input_file), rotation=correction,
filter_vector=options.remove_vectors)
def preprocess_remove_background(
@@ -526,10 +597,7 @@ def select_ocr_image(
user."""
image = infiles[0]
if not fitz or context.get_options().force_ocr:
re_symlink(image, output_file, log)
return
options = context.get_options()
pageinfo = get_pageinfo(image, context)
with Image.open(image) as im:
@@ -537,26 +605,47 @@ def select_ocr_image(
from PIL import ImageDraw
from decimal import Decimal
white = ImageColor.getcolor('#ffffff', im.mode)
#pink = ImageColor.getcolor('#ff0080', im.mode)
draw = ImageDraw.ImageDraw(im)
xres, yres = im.info['dpi']
for textarea in pageinfo.get_textareas():
# Calculate resolution based on the image size and page dimensions
# without regard whatever resolution is in pageinfo (may differ or
# be None)
bbox = textarea['bbox']
log.debug('resolution %r %r', xres, yres)
log.debug('resolution %r %r', xres, yres)
pixcoords = [Decimal(bbox[0]) / Decimal(72) * xres,
Decimal(bbox[1]) / Decimal(72) * yres,
Decimal(bbox[2]) / Decimal(72) * xres,
Decimal(bbox[3]) / Decimal(72) * yres]
pixcoords = [int(c) for c in pixcoords]
log.debug('blanking %r', pixcoords)
draw.rectangle(pixcoords, fill=white)
if not options.force_ocr:
# Do not mask text areas when forcing OCR, because we need to OCR
# all text areas
mask = None # Exclude both visible and invisible text from OCR
if options.redo_ocr:
mask = True # Mask visible text, but not invisible text
for textarea in pageinfo.get_textareas(visible=mask, corrupt=None):
# Calculate resolution based on the image size and page dimensions
# without regard whatever resolution is in pageinfo (may differ or
# be None)
bbox = [float(v) for v in textarea]
xscale, yscale = float(xres) / 72.0, float(yres) / 72.0
pixcoords = [bbox[0] * xscale,
im.height - bbox[3] * yscale,
bbox[2] * xscale,
im.height - bbox[1] * yscale]
pixcoords = [int(round(c)) for c in pixcoords]
log.debug('blanking %r', pixcoords)
draw.rectangle(pixcoords, fill=white)
#draw.rectangle(pixcoords, outline=pink)
if options.mask_barcodes or options.threshold:
pix = leptonica.Pix.frompil(im)
if options.threshold:
pix = pix.masked_threshold_on_background_norm()
if options.mask_barcodes:
barcodes = pix.locate_barcodes()
for barcode in barcodes:
decoded, rect = barcode
log.info('masking barcode %s %r', decoded, rect)
draw.rectangle(rect, fill=white)
im = pix.topil()
del draw
# Pillow requires integer DPI
dpi = round(xres), round(yres)
im.save(output_file, dpi=dpi)
@@ -706,10 +795,10 @@ def ocr_tesseract_textonly_pdf(
log=log)
def get_pdfmark(base_pdf, options):
def get_docinfo(base_pdf, options):
def from_document_info(key):
try:
s = base_pdf.metadata[key]
s = base_pdf.docinfo[key]
return str(s)
except (KeyError, TypeError):
return ''
@@ -734,6 +823,12 @@ def get_pdfmark(base_pdf, options):
PROGRAM_NAME, VERSION,
renderer_tag,
tesseract.version())
pdfmark['/Producer'] = 'pikepdf ' + pikepdf.__version__
if 'OCRMYPDF_CREATOR' in os.environ:
pdfmark['/Creator'] = os.environ['OCRMYPDF_CREATOR']
if 'OCRMYPDF_PRODUCER' in os.environ:
pdfmark['/Producer'] = os.environ['OCRMYPDF_PRODUCER']
pdfmark['/ModDate'] = encode_pdf_date(datetime.now(timezone.utc))
return pdfmark
@@ -745,8 +840,34 @@ def generate_postscript_stub(
context):
options = context.get_options()
pdf = pikepdf.open(input_file)
pdfmark = get_pdfmark(pdf, options)
generate_pdfa_ps(output_file, pdfmark)
generate_pdfa_ps(output_file)
def convert_to_pdfa(
input_files_groups,
output_file,
log,
context
):
options = context.get_options()
input_pdfinfo = context.get_pdfinfo()
input_files = list(f for f in flatten_groups(input_files_groups))
layers_file = next(
(ii for ii in input_files if ii.endswith('layers.rendered.pdf')), None
)
ps = next(
(ii for ii in input_files if ii.endswith('.ps')), None
)
ghostscript.generate_pdfa(
pdf_version=input_pdfinfo.min_version,
pdf_pages=[layers_file, ps],
output_file=output_file,
compression=options.pdfa_image_compression,
log=log,
threads=options.jobs or 1,
pdfa_part=options.output_type[-1] # is pdfa-1, pdfa-2, or pdfa-3
)
def metadata_fixup(
@@ -763,27 +884,23 @@ def metadata_fixup(
layers_file = next(
(ii for ii in input_files if ii.endswith('layers.rendered.pdf')), None
)
ps = next(
(ii for ii in input_files if ii.endswith('.ps')), None
pdfa = next(
(ii for ii in input_files if ii.endswith('pdfa.pdf')), None
)
metadata = pikepdf.open(metadata_file)
docinfo = get_docinfo(metadata, options)
if options.output_type.startswith('pdfa'):
input_pdfinfo = context.get_pdfinfo()
ghostscript.generate_pdfa(
pdf_version=input_pdfinfo.min_version,
pdf_pages=[layers_file, ps],
output_file=output_file,
compression=options.pdfa_image_compression,
log=log,
threads=options.jobs or 1,
pdfa_part=options.output_type[-1] # is pdfa-1, pdfa-2, or pdfa-3
)
else:
metadata = pikepdf.open(metadata_file)
pdfmark = get_pdfmark(metadata, options)
pdf = pikepdf.open(layers_file)
pdf.metadata = pdf.make_indirect(pikepdf.Dictionary(pdfmark))
pdf.save(output_file, stream_data_mode=pikepdf.StreamDataMode.compress)
working_file = pdfa if pdfa else layers_file
pdf = pikepdf.open(working_file)
with pdf.open_metadata() as meta:
meta.load_from_docinfo(docinfo, delete_missing=False)
# If xmp:CreateDate is missing, set it to the modify date to
# match Ghostscript, for consistency
if 'xmp:CreateDate' not in meta:
meta['xmp:CreateDate'] = meta.get('xmp:ModifyDate', '')
pdf.save(output_file, compress_streams=True,
object_stream_mode=pikepdf.ObjectStreamMode.generate)
def optimize_pdf(
@@ -881,14 +998,6 @@ def build_pipeline(options, work_folder, log, context):
os.path.join(work_folder, '*.marker.pdf'),
extras=[log, context])
# task_split_pages = main_pipeline.transform(
# task_func=split_page,
# input=task_pre_split_pages,
# filter=suffix('.presplit.pdf'),
# output='.page.pdf',
# output_dir=work_folder,
# extras=[log, context])
task_ocr_or_skip = main_pipeline.split(
ocr_or_skip,
task_marker_pages,
@@ -1014,7 +1123,7 @@ def build_pipeline(options, work_folder, log, context):
extras=[log, context])
task_weave_layers.graphviz(fillcolor='"#00cc66"')
# PDF/A
# PDF/A pdfmark
task_generate_postscript_stub = main_pipeline.transform(
task_func=generate_postscript_stub,
input=task_repair_and_parse_pdf,
@@ -1023,11 +1132,21 @@ def build_pipeline(options, work_folder, log, context):
extras=[log, context])
task_generate_postscript_stub.active_if(options.output_type.startswith('pdfa'))
# PDF/A conversion
task_convert_to_pdfa = main_pipeline.merge(
task_func=convert_to_pdfa,
input=[task_generate_postscript_stub,
task_weave_layers],
output=os.path.join(work_folder, 'pdfa.pdf'),
extras=[log, context]
)
task_convert_to_pdfa.active_if(options.output_type.startswith('pdfa'))
task_metadata_fixup = main_pipeline.merge(
task_func=metadata_fixup,
input=[task_repair_and_parse_pdf,
task_weave_layers,
task_generate_postscript_stub],
task_convert_to_pdfa],
output=os.path.join(work_folder, 'metafix.pdf'),
extras=[log, context]
)
+6 -1
View File
@@ -38,8 +38,13 @@ import sys
import codecs
def verify_python3_env():
def verify_python3_env(): # pragma: no cover
"""Ensures that the environment is good for unicode on Python 3."""
# PEP 538 changes in Python 3.7 should make this wrangling unnecessary
if sys.version_info[0:3] >= (3, 7, 0):
return
try:
import locale
fs_enc = codecs.lookup(locale.getpreferredencoding()).name
+121 -46
View File
@@ -43,8 +43,54 @@ def _update_page_resources(*, page, font, font_key, procset):
resources['/ProcSet'] = procset
def strip_invisible_text(pdf, page, log):
stream = []
in_text_obj = False
render_mode = 0
text_objects = []
page.page_contents_coalesce()
for operands, operator in pikepdf.parse_content_stream(page, ''):
if not in_text_obj:
if operator == pikepdf.Operator('BT'):
in_text_obj = True
render_mode = 0
text_objects.append((operands, operator))
else:
stream.append((operands, operator))
else:
if operator == pikepdf.Operator('Tr'):
render_mode = operands[0]
text_objects.append((operands, operator))
if operator == pikepdf.Operator('ET'):
in_text_obj = False
if render_mode != 3:
stream.extend(text_objects)
text_objects.clear()
def convert(op):
try:
return op.unparse()
except AttributeError:
return str(op).encode('ascii')
lines = []
for operands, operator in stream:
if operator == pikepdf.Operator('INLINE IMAGE'):
iim = operands[0]
line = iim.unparse()
else:
line = b' '.join(convert(op) for op in operands) + b' ' + operator.unparse()
lines.append(line)
content_stream = b'\n'.join(lines)
page.Contents = pikepdf.Stream(pdf, content_stream)
def _weave_layers_graft(
*, pdf_base, page_num, text, font, font_key, procset, rotation, log):
*, pdf_base, page_num, text, font, font_key, procset, rotation,
strip_old_text, log):
"""Insert the text layer from text page 0 on to pdf_base at page_num"""
log.debug("Grafting")
@@ -71,31 +117,20 @@ def _weave_layers_graft(
# content may have a rotation applied. Wrap the text stream with a rotation
# so it will be oriented the same way as the rest of the page content.
# (Previous versions OCRmyPDF rotated the content layer to match the text.)
mediabox = [float(pdf_text.pages[0].MediaBox[v].decode())
mediabox = [float(pdf_text.pages[0].MediaBox[v])
for v in range(4)]
wt, ht = mediabox[2] - mediabox[0], mediabox[3] - mediabox[1]
mediabox = [float(base_page.MediaBox[v].decode())
mediabox = [float(base_page.MediaBox[v])
for v in range(4)]
wp, hp = mediabox[2] - mediabox[0], mediabox[3] - mediabox[1]
translate = pikepdf.PdfMatrix((1, 0, 0, 1, -wt / 2, -ht / 2))
untranslate = pikepdf.PdfMatrix((1, 0, 0, 1, wp / 2, hp / 2))
translate = pikepdf.PdfMatrix().translated(-wt / 2, -ht / 2)
untranslate = pikepdf.PdfMatrix().translated(wp / 2, hp / 2)
# -rotation because the input is a clockwise angle and this formula
# uses CCW
rotation = -rotation % 360
if rotation == 0:
c, s = 1, 0
elif rotation == 90:
c, s = 0, 1
elif rotation == 180:
c, s = -1, 0
elif rotation == 270:
c, s = 0, -1
else:
raise NotImplementedError("rotation to arbitrary angle")
rotate = pikepdf.PdfMatrix((c, s, -s, c, 0, 0))
rotate = pikepdf.PdfMatrix().rotated(rotation)
# Because of rounding of DPI, we might get a text layer that is not
# identically sized to the target page. Scale to adjust. Normally this
@@ -106,7 +141,7 @@ def _weave_layers_graft(
scale_y = hp / ht
log.debug('%r', (scale_x, scale_y))
scale = pikepdf.PdfMatrix((scale_x, 0, 0, scale_y, 0, 0))
scale = pikepdf.PdfMatrix().scaled(scale_x, scale_y)
# Translate the text so it is centered at (0, 0), rotate it there, adjust
# for a size different between initial and text PDF, then untranslate
@@ -120,6 +155,9 @@ def _weave_layers_graft(
new_text_layer = pikepdf.Stream(pdf_base, pdf_text_contents)
if strip_old_text:
strip_invisible_text(pdf_base, base_page, log)
base_page.page_contents_add(new_text_layer, prepend=True)
_update_page_resources(
@@ -148,14 +186,9 @@ def _find_font(text, pdf_base):
return font, font_key
def _fix_toc(pdf_base, pageref_remap, log):
"""Repair the table of contents
Whenever we replace a page wholesale, it gets assigned a new objgen number
and other references to it within the PDF become invalid, most notably in
the table of contents (/Outlines in PDF-speak). In weave_layers we collect
pageref_remap, a mapping that describes the new objgen number given an old
one. (objgen is a tuple, and the gen is almost always zero.)
def _traverse_toc(pdf_base, visitor_fn, log):
"""
Walk the table of contents, calling visitor_fn() at each node
The /Outlines data structure is a messy data structure, but rather than
navigating hierarchically we just track unique nodes. Enqueue nodes when
@@ -163,8 +196,6 @@ def _fix_toc(pdf_base, pageref_remap, log):
the two types of object in the table of contents that can be page bookmarks
and update the page entry.
It may ultimately be better to find a way to rebuild a page in place.
"""
visited = set()
@@ -173,24 +204,13 @@ def _fix_toc(pdf_base, pageref_remap, log):
if not '/Outlines' in pdf_base.root:
return
if not pageref_remap:
return
def remap_dest(dest_node):
if not isinstance(dest_node, pikepdf.Array):
return
pageref = dest_node[0]
if pageref['/Type'] == '/Page' and \
pageref._objgen in pageref_remap:
new_objgen = pageref_remap[pageref._objgen]
dest_node[0] = pdf_base._get_object_id(*new_objgen)
queue.add(pdf_base.root.Outlines._objgen)
queue.add(pdf_base.root.Outlines.objgen)
while queue:
objgen = queue.pop()
visited.add(objgen)
node = pdf_base._get_object_id(*objgen)
log.debug('fix toc: visiting %r', objgen)
node = pdf_base.get_object(objgen)
log.debug('fix toc: exploring outline entries at %r', objgen)
# Enumerate other nodes we could visit from here
for key in link_keys:
@@ -198,17 +218,65 @@ def _fix_toc(pdf_base, pageref_remap, log):
continue
item = node[key]
if not item.is_indirect:
# Direct references are not allowed here, but it's not clear
# what we should do if we find any. Removing them is an option:
# node[key] = pdf_base.make_indirect(None)
continue
objgen = item._objgen
objgen = item.objgen
if objgen not in visited:
queue.add(objgen)
if visitor_fn:
visitor_fn(pdf_base, node, log)
def _fix_toc(pdf_base, pageref_remap, log):
"""Repair the table of contents
Whenever we replace a page wholesale, it gets assigned a new objgen number
and other references to it within the PDF become invalid, most notably in
the table of contents (/Outlines in PDF-speak). In weave_layers we collect
pageref_remap, a mapping that describes the new objgen number given an old
one. (objgen is a tuple, and the gen is almost always zero.)
It may ultimately be better to find a way to rebuild a page in place.
"""
if not pageref_remap:
return
def remap_dest(dest_node):
"""
Inner helper function: change the objgen for any page from the old we
invalidated to its new one.
"""
if not isinstance(dest_node, pikepdf.Array):
return
pageref = dest_node[0]
if pageref['/Type'] == '/Page' and \
pageref.objgen in pageref_remap:
new_objgen = pageref_remap[pageref.objgen]
dest_node[0] = pdf_base.get_object(new_objgen)
def visit_remap_dest(pdf_base, node, log):
"""
Visitor function to fix ToC entries
Test for the two types of references to pages that can occur in ToCs.
Both types have the same final format (an indirect reference to the
target page).
"""
if '/Dest' in node:
# /Dest reference to another page (old method)
remap_dest(node['/Dest'])
elif '/A' in node:
# /A (action) command set to "GoTo" (newer method)
if '/S' in node['/A'] and node['/A']['/S'] == '/GoTo':
remap_dest(node['/A']['/D'])
_traverse_toc(pdf_base, visit_remap_dest, log)
def weave_layers(
infiles,
@@ -258,6 +326,12 @@ def weave_layers(
pdfinfo = context.get_pdfinfo()
pagerefs = {}
# Walk the table of contents first, to trigger pikepdf/qpdf to resolve all
# page references in the table of contents. Some PDF generators put invalid
# references in the ToC, so we want to resolve them to null before we
# create any references, or the ToC will be corrupted
_traverse_toc(pdf_base, None, log)
procset = pdf_base.make_indirect(
pikepdf.Object.parse(b'[ /PDF /Text /ImageB /ImageC /ImageI ]'))
@@ -285,7 +359,7 @@ def weave_layers(
# We are replacing the old page with a rasterized PDF of the new
# page
log.debug("Replace")
old_objgen = pdf_base.pages[page_num - 1]._objgen
old_objgen = pdf_base.pages[page_num - 1].objgen
pdf_image = pikepdf.open(image)
keep_open.append(pdf_image)
@@ -296,7 +370,7 @@ def weave_layers(
# so we need to update any references to it. qpdf did not like
# my attempt to update the old object in place, but that is an
# option to consider
pagerefs[old_objgen] = pdf_base.pages[page_num - 1]._objgen
pagerefs[old_objgen] = pdf_base.pages[page_num - 1].objgen
replacing = True
autorotate_correction = context.get_rotation(page_num - 1)
@@ -311,10 +385,11 @@ def weave_layers(
if text and font:
# Graft the text layer onto this page, whether new or old
strip_old = context.get_options().redo_ocr
_weave_layers_graft(
pdf_base=pdf_base, page_num=page_num, text=text, font=font,
font_key=font_key, rotation=text_misaligned, procset=procset,
log=log
strip_old_text=strip_old, log=log
)
# Correct the rotation if applicable
+28
View File
@@ -17,6 +17,7 @@
from enum import IntEnum
from textwrap import dedent
class ExitCode(IntEnum):
ok = 0
@@ -29,12 +30,20 @@ class ExitCode(IntEnum):
child_process_error = 7
encrypted_pdf = 8
invalid_config = 9
pdfa_conversion_failed = 10
other_error = 15
ctrl_c = 130
class ExitCodeException(Exception):
exit_code = ExitCode.other_error
message = ""
def __str__(self):
super_msg = super().__str__() # Don't do str(super())
if self.message:
return self.message.format(super_msg)
return super_msg
class BadArgsError(ExitCodeException):
@@ -43,7 +52,15 @@ class BadArgsError(ExitCodeException):
class PdfMergeFailedError(ExitCodeException):
exit_code = ExitCode.input_file
message = dedent('''\
Failed to merge PDF image layer with OCR layer
Usually this happens because the input PDF file is malformed and
ocrmypdf cannot automatically correct the problem on its own.
Try using
ocrmypdf --pdf-renderer sandwich [..other args..]
''')
class MissingDependencyError(ExitCodeException):
exit_code = ExitCode.missing_dependency
@@ -75,7 +92,18 @@ class SubprocessOutputError(ExitCodeException):
class EncryptedPdfError(ExitCodeException):
exit_code = ExitCode.encrypted_pdf
message = dedent('''\
Input PDF is encrypted. The encryption must be removed to
perform OCR.
For information about this PDF's security use
qpdf --show-encryption infilename
You can remove the encryption using
qpdf --decrypt [--password=[password]] infilename
''')
class TesseractConfigError(ExitCodeException):
exit_code = ExitCode.invalid_config
message = "Error occurred while parsing a Tesseract configuration file"
+5 -2
View File
@@ -24,8 +24,7 @@ from subprocess import run, STDOUT, PIPE, CalledProcessError
from ..exceptions import MissingDependencyError
def get_version(program, *,
def get_version(program, *,
version_arg='--version', regex=r'(\d+(\.\d+)*)'):
"Get the version of the specified program"
args_prog = [
@@ -37,6 +36,10 @@ def get_version(program, *,
args_prog, close_fds=True, universal_newlines=True,
stdout=PIPE, stderr=STDOUT, check=True)
output = proc.stdout
except FileNotFoundError as e:
raise MissingDependencyError(
"Could not find program '{}' on the PATH".format(
program)) from e
except CalledProcessError as e:
if e.returncode < 0:
raise MissingDependencyError(
+101 -30
View File
@@ -16,14 +16,13 @@
# along with OCRmyPDF. If not, see <http://www.gnu.org/licenses/>.
from tempfile import NamedTemporaryFile
from subprocess import run, PIPE, STDOUT, CalledProcessError
from subprocess import run, PIPE, STDOUT
from shutil import copy
from functools import lru_cache
import re
import sys
from PIL import Image
from . import get_version
from ..exceptions import SubprocessOutputError, MissingDependencyError
from ..exceptions import SubprocessOutputError
from ..helpers import fspath
@@ -33,47 +32,99 @@ def version():
def jpeg_passthrough_available():
"""
Ghostscript 9.23 introduced JPEG passthrough but it seems to corrupt the
last two bytes of certain images, for now we disable it for 9.23 and
do not mention it for < 9.23.
"""Returns True if the installed version of Ghostscript supports JPEG passthru
Prior to 9.23, Ghostscript decode and re-encoded JPEGs internally. In 9.23
it gained the ability to keep JPEGs unmodified. However, the 9.23
implementation was buggy and would deletes the last two bytes of images in
some cases, as reported here.
https://bugs.ghostscript.com/show_bug.cgi?id=699216
The issue was fixed for 9.24, hence that is the first version we consider
the feature available. (However, we don't use 9.24 at all, so the first
version that allows JPEG passthrough is 9.25.
"""
return False
return version() >= '9.24'
def _gs_error_reported(stream):
return re.search(r'error', stream, flags=re.IGNORECASE)
def rasterize_pdf(input_file, output_file, xres, yres, raster_device, log,
pageno=1, page_dpi=None, rotation=None):
def extract_text(input_file, pageno=1):
"""Use the txtwrite device to get text layout information out
For details on options of -dTextFormat see
https://www.ghostscript.com/doc/current/VectorDevices.htm#TXT
Format is like
<page>
<line>
<span bbox="left top right bottom" font="..." size="...">
<char bbox="...." c="X"/>
:param pageno: number of page to extract, or all pages if None
:return: XML-ish text representation in bytes
"""
Rasterize one page of a PDF at resolution (xres, yres) in canvas units.
The image is sized to match the integer pixels dimensions implied by
if pageno is not None:
pages = [
'-dFirstPage=%i' % pageno,
'-dLastPage=%i' % pageno
]
else:
pages = []
args_gs = [
'gs',
'-dQUIET',
'-dSAFER',
'-dBATCH',
'-dNOPAUSE',
'-sDEVICE=txtwrite',
'-dTextFormat=0',
] + pages + [
'-o', '-',
fspath(input_file)
]
p = run(args_gs, stdout=PIPE, stderr=PIPE)
if p.returncode != 0:
raise SubprocessOutputError(
'Ghostscript text extraction failed\n%s\n%s\n%s' % (
input_file, p.stdout.decode(), p.stderr.decode()
)
)
return p.stdout
def rasterize_pdf(input_file, output_file, xres, yres, raster_device, log,
pageno=1, page_dpi=None, rotation=None, filter_vector=False):
"""Rasterize one page of a PDF at resolution (xres, yres) in canvas units.
The image is sized to match the integer pixels dimensions implied by
(xres, yres) even if those numbers are noninteger. The image's DPI will
be overridden with the values in page_dpi.
:param input_file: pathlike
:param output_file: pathlike
:param xres: resolution at which to rasterize page
:param yres:
:param raster_device:
:param log:
:param yres:
:param raster_device:
:param log:
:param pageno: page number to rasterize (beginning at page 1)
:param page_dpi: resolution tuple (x, y) overriding output image DPI
:return:
:param page_dpi: resolution tuple (x, y) overriding output image DPI
:param rotation: 0, 90, 180, 270: clockwise angle to rotate page
:param filter_vector: if True, remove vector graphics objects
:return:
"""
res = xres, yres
int_res = round(xres), round(yres)
if not page_dpi:
page_dpi = res
autorotate = '/PageByPage' if rotation is None else '/None'
with NamedTemporaryFile(delete=True) as tmp:
args_gs = [
'gs',
@@ -85,12 +136,13 @@ def rasterize_pdf(input_file, output_file, xres, yres, raster_device, log,
'-dFirstPage=%i' % pageno,
'-dLastPage=%i' % pageno,
'-r{0}x{1}'.format(str(int_res[0]), str(int_res[1])),
] + (['-dFILTERVECTOR'] if filter_vector else []) + [
'-o', tmp.name,
'-dAutoRotatePages=%s' % autorotate,
'-dAutoRotatePages=/None', # Probably has no effect on raster
'-f',
fspath(input_file)
]
log.debug(args_gs)
p = run(args_gs, stdout=PIPE, stderr=STDOUT,
universal_newlines=True)
@@ -120,7 +172,7 @@ def rasterize_pdf(input_file, output_file, xres, yres, raster_device, log,
if rotation is not None:
log.debug("Rotating output by %i", rotation)
# rotation is a clockwise angle and Image.ROTATE_* is
# rotation is a clockwise angle and Image.ROTATE_* is
# counterclockwise so this cancels out the rotation
if rotation == 90:
im = im.transpose(Image.ROTATE_90)
@@ -135,6 +187,23 @@ def rasterize_pdf(input_file, output_file, xres, yres, raster_device, log,
def generate_pdfa(pdf_pages, output_file, compression, log,
threads=1, pdf_version='1.5', pdfa_part='2'):
"""Generate a PDF/A.
The pdf_pages, a list files, will be merged into output_file. One or more
PDF files may be merged. One of the files in this list must be a pdfmark
file that provides Ghostscript with details on how to perform the PDF/A
conversion. By default with we pick PDF/A-2b, but this works for 1 or 3.
compression can be 'jpeg', 'lossless', or an empty string. In 'jpeg',
Ghostscript is instructed to convert color and grayscale images to DCT
(JPEG encoding). In 'lossless' Ghostscript is told to convert images to
Flate (lossless/PNG). If the parameter is omitted Ghostscript is left to
make its own decisions about how to encode images; it appears to use a
heuristic to decide how to encode images. As of Ghostscript 9.25, we
support passthrough JPEG which allows Ghostscript to avoid transcoding
images entirely. (The feature was added in 9.23 but broken, and the 9.24
release of Ghostscript had regressions, so we don't support it until 9.25.)
"""
compression_args = []
if compression == 'jpeg':
compression_args = [
@@ -156,8 +225,8 @@ def generate_pdfa(pdf_pages, output_file, compression, log,
"-dAutoFilterGrayImages=true",
]
# Older versions of Ghostscript expect a leading slash in
# sColorConversionStrategy, newer ones should not have it. See Ghostscript
# Older versions of Ghostscript expect a leading slash in
# sColorConversionStrategy, newer ones should not have it. See Ghostscript
# git commit fe1c025d.
strategy = 'RGB' if version() >= '9.19' else '/RGB'
@@ -168,6 +237,9 @@ def generate_pdfa(pdf_pages, output_file, compression, log,
compression_args.append('-dPassThroughJPEGImages=false')
with NamedTemporaryFile(delete=True) as gs_pdf:
# nb no need to specify ProcessColorModel when ColorConversionStrategy
# is set; see:
# https://bugs.ghostscript.com/show_bug.cgi?id=699392
args_gs = [
"gs",
"-dQUIET",
@@ -177,15 +249,14 @@ def generate_pdfa(pdf_pages, output_file, compression, log,
"-dNumRenderingThreads=" + str(threads),
"-sDEVICE=pdfwrite",
"-dAutoRotatePages=/None",
"-sColorConversionStrategy=" + strategy,
"-sProcessColorModel=DeviceRGB"
"-sColorConversionStrategy=" + strategy
] + compression_args + [
"-dJPEGQ=95",
"-dPDFA=" + pdfa_part,
"-dPDFACompatibilityPolicy=1",
"-sOutputFile=" + gs_pdf.name,
]
args_gs.extend(pdf_pages)
args_gs.extend(fspath(s) for s in pdf_pages) # Stringify Path objs
log.debug(args_gs)
p = run(args_gs, stdout=PIPE, stderr=STDOUT,
universal_newlines=True)
@@ -206,7 +277,7 @@ def generate_pdfa(pdf_pages, output_file, compression, log,
if p.returncode == 0:
# Ghostscript does not change return code when it fails to create
# PDF/A - check PDF/A status elsewhere
copy(gs_pdf.name, output_file)
copy(gs_pdf.name, fspath(output_file))
else:
log.error('Ghostscript PDF/A rendering failed')
raise SubprocessOutputError()
+18 -8
View File
@@ -15,14 +15,11 @@
# You should have received a copy of the GNU General Public License
# along with OCRmyPDF. If not, see <http://www.gnu.org/licenses/>.
from subprocess import CalledProcessError, run, PIPE
from subprocess import run, PIPE
from functools import lru_cache
import sys
import os
import shutil
from . import get_version
from ..exceptions import ExitCode, MissingDependencyError
from ..exceptions import MissingDependencyError
@lru_cache(maxsize=1)
@@ -30,7 +27,6 @@ def version():
return get_version('jbig2', regex=r'jbig2enc (\d+(\.\d+)*).*')
@lru_cache(maxsize=1)
def available():
try:
version()
@@ -44,10 +40,24 @@ def convert_group(*, cwd, infiles, out_prefix):
'jbig2',
'-b',
out_prefix,
'-s',
'-s', # symbol mode (lossy)
# '-r', # refinement mode (lossless symbol mode, currently disabled in
# jbig2)
'-p',
]
args.extend(infiles)
proc = run(args, cwd=cwd, stdout=PIPE, stderr=PIPE)
proc.check_returncode()
return proc
return proc
def convert_single(*, cwd, infile, outfile):
args = [
'jbig2',
'-p',
infile
]
with open(outfile, 'wb') as fstdout:
proc = run(args, cwd=cwd, stdout=fstdout, stderr=PIPE)
proc.check_returncode()
return proc
+11 -7
View File
@@ -15,15 +15,11 @@
# You should have received a copy of the GNU General Public License
# along with OCRmyPDF. If not, see <http://www.gnu.org/licenses/>.
from subprocess import CalledProcessError, run
from tempfile import TemporaryFile
from subprocess import run
from functools import lru_cache
import sys
import os
import shutil
from . import get_version
from ..exceptions import ExitCode
from ..exceptions import MissingDependencyError
@lru_cache(maxsize=1)
@@ -31,6 +27,14 @@ def version():
return get_version('pngquant', regex=r'(\d+(\.\d+)*).*')
def available():
try:
version()
except MissingDependencyError:
return False
return True
def quantize(input_file, output_file, quality_min, quality_max):
args = [
'pngquant',
@@ -42,4 +46,4 @@ def quantize(input_file, output_file, quality_min, quality_max):
input_file
]
proc = run(args)
proc.check_returncode()
proc.check_returncode()
+4 -174
View File
@@ -17,15 +17,9 @@
from subprocess import CalledProcessError, STDOUT, PIPE, run
from functools import lru_cache
import sys
import os
import re
import resource
from ..exceptions import InputFileError, SubprocessOutputError, \
MissingDependencyError, EncryptedPdfError
from . import get_version
from ..helpers import re_symlink
from ..helpers import fspath
@lru_cache(maxsize=1)
@@ -37,7 +31,7 @@ def check(input_file, log=None):
args_qpdf = [
'qpdf',
'--check',
input_file
fspath(input_file)
]
if log is None:
@@ -48,8 +42,8 @@ def check(input_file, log=None):
check=True)
except CalledProcessError as e:
if e.returncode == 2:
log.error("{0}: not a valid PDF, and could not repair it.".format(
input_file))
log.error("%s: not a valid PDF, and could not repair it.",
input_file)
log.error("Details:")
log.error(e.output)
elif e.returncode == 3:
@@ -59,167 +53,3 @@ def check(input_file, log=None):
log.warning(e.output)
return False
return True
def _probably_encrypted(e):
"""qpdf can report a false positive "file is encrypted" message for damaged
files - suppress this"""
return e.returncode == 2 and \
'invalid password' in e.output and \
'file is damaged' not in e.output
def repair(input_file, output_file, log):
args_qpdf = [
'qpdf', input_file, output_file
]
try:
run(args_qpdf, stderr=STDOUT, stdout=PIPE, universal_newlines=True,
check=True)
except CalledProcessError as e:
if e.returncode == 3 and e.output.find("operation succeeded"):
log.debug('qpdf found and fixed errors: ' + e.output)
return
if _probably_encrypted(e):
raise EncryptedPdfError() from e
elif e.returncode == 2:
log.error("{0}: not a valid PDF, and could not repair it.".format(
input_file))
log.error("Details: " + e.output)
raise InputFileError() from e
else:
log.error("{0}: unknown error".format(
input_file))
log.error(e.output)
raise SubprocessOutputError() from e
def get_npages(input_file, log):
try:
pages = run(
['qpdf', '--show-npages', input_file],
universal_newlines=True, check=True, stdout=PIPE, stderr=STDOUT)
except CalledProcessError as e:
if e.returncode == 2 and e.output.find('No such file'):
log.error(e.output)
raise InputFileError() from e
return int(pages)
def split_pages(input_file, work_folder, npages):
"""Split multipage PDF into individual pages.
Incredibly enough, this multiple process approach is about 70 times
faster than using Ghostscript.
"""
for n in range(int(npages)):
args_qpdf = [
'qpdf', input_file,
'--pages', input_file, '{0}'.format(n + 1), '--',
os.path.join(work_folder, '{0:06d}.page.pdf'.format(n + 1))
]
run(args_qpdf, check=True)
def extract_page(input_file, output_file, pageno):
args_qpdf = [
'qpdf', input_file,
'--pages', input_file, '{0}'.format(pageno + 1), '--',
output_file
]
run(args_qpdf, check=True)
def _merge_inner(input_files, output_file, min_version=None, log=None):
"""Merge the list of input files (all filenames) into the output file.
The input files may contain one or more pages.
"""
# Single page 'merges' should still be attempted to that the same error
# checking is applied to single page case
version_arg = ['--min-version={}'.format(min_version)] \
if min_version else []
if log is None:
import logging as log
args_qpdf = [
'qpdf'
] + version_arg + [
input_files[0], '--pages'
] + input_files + ['--', output_file]
try:
run(args_qpdf, check=True, stderr=PIPE, universal_newlines=True)
except CalledProcessError as e:
if e.returncode == 3 and \
e.stderr.find("unknown token while reading object") and \
e.stderr.find("operation succeeded"):
# Only whitelist the 'unknown token' problem (decimal/string issue)
# qpdf issue #165
log.warning('qpdf found and fixed errors: ' + e.stderr)
return
raise e from e
def merge(input_files, output_file, min_version=None, log=None, max_files=None):
"""Merge the list of input files (all filenames) into the output file.
The input files may contain one or more pages.
"""
# qpdf requires that every file that contributes to the output has a file
# descriptor that remains open. That means, given our approach of one
# intermediate PDF per, we can practically hit the number of file
# descriptors.
if max_files is None or max_files < 2:
# Find out how many open file descriptors we can get away with
ulimits = resource.getrlimit(resource.RLIMIT_NOFILE)
max_open_files = ulimits[0]
max_files = max_open_files // 2 # Conservative guess
# We'll write things alongside the output file
output_dir = os.path.dirname(output_file)
import random
import string
def randstr():
return ''.join(random.sample(string.ascii_lowercase, 6))
# How many files to grab at once, merging all their contents
step_size = max_files
workqueue = input_files.copy()
counter = 1
next_workqueue = []
while len(workqueue) > 1 or len(next_workqueue) > 0:
# Take n files out of the queue
n = min(step_size, len(workqueue))
job = workqueue[0:n]
del workqueue[0:n]
log.debug('merging ' + repr(job))
# Merge them into 1 file, which will contain n^depth pages
merge_file = os.path.join(
output_dir, "merge-{:06d}-{}.pdf".format(counter, randstr()))
counter += 1
_merge_inner(job, merge_file, min_version=min_version, log=log)
# On the next
next_workqueue.append(merge_file)
log.debug('next_workqueue ' + repr(next_workqueue))
# If we're out of things to do in this queue, move on to the next
# queue. On the counter-th pass of the workqueue we can chew through
# (step_size)**N pages, so on most systems the second pass finishes
# the job.
if len(workqueue) == 0:
workqueue = next_workqueue
next_workqueue = []
re_symlink(workqueue.pop(), output_file, log)
+34 -22
View File
@@ -17,17 +17,15 @@
import sys
import os
import re
import shutil
from functools import lru_cache
from collections import namedtuple
from textwrap import dedent
from subprocess import PIPE, CalledProcessError, \
TimeoutExpired, check_output, STDOUT
from subprocess import CalledProcessError, TimeoutExpired, check_output, STDOUT, run, PIPE
from contextlib import suppress
from ..exceptions import MissingDependencyError, TesseractConfigError
from ..helpers import page_number
from ..helpers import page_number, fspath
from . import get_version
OrientationConfidence = namedtuple(
@@ -71,7 +69,8 @@ def has_textonly_pdf():
"""
args_tess = [
'tesseract',
'--print-parameters'
'--print-parameters',
'pdf'
]
params = ''
try:
@@ -93,22 +92,33 @@ def psm():
@lru_cache(maxsize=1)
def languages():
def lang_error(output):
msg = dedent("""Tesseract failed to report available languages.
Output from Tesseract:
-----------
""")
msg += output
print(msg, file=sys.stderr)
args_tess = [
'tesseract',
'--list-langs'
]
try:
langs = check_output(
args_tess, universal_newlines=True, stderr=STDOUT)
proc = run(
args_tess, universal_newlines=True, stdout=PIPE, stderr=STDOUT,
check=True
)
output = proc.stdout
except CalledProcessError as e:
msg = dedent("""Tesseract failed to report available languages.
Output from Tesseract:
-----------
""")
msg += e.output
print(msg, file=sys.stderr)
lang_error(e.output)
raise MissingDependencyError from e
return set(lang.strip() for lang in langs.splitlines()[1:])
header, *rest = output.splitlines()
if not header.startswith('List of available languages'):
lang_error(output)
raise MissingDependencyError
return set(lang.strip() for lang in rest)
def tess_base_args(langs, engine_mode):
@@ -122,11 +132,10 @@ def tess_base_args(langs, engine_mode):
return args
def get_orientation(input_file, language: list, engine_mode, timeout: float,
log):
def get_orientation(input_file, engine_mode, timeout: float, log):
args_tesseract = tess_base_args(['osd'], engine_mode) + [
psm(), '0',
input_file,
fspath(input_file),
'stdout'
]
@@ -188,6 +197,14 @@ def tesseract_log_output(log, stdout, input_file):
log.warning(prefix + "lots of diacritics - possibly poor OCR")
elif line.startswith('OSD: Weak margin'):
log.warning(prefix + "unsure about page orientation")
elif 'Error in pixScanForForeground' in line:
pass # Appears to be spurious/problem with nonwhite borders
elif 'Error in boxClipToRectangle' in line:
pass # Always appears with pixScanForForeground message
elif 'parameter not found: ' in line.lower():
log.error(prefix + line.strip())
problem = line.split('found: ')[1]
raise TesseractConfigError(problem)
elif 'error' in line.lower() or 'exception' in line.lower():
log.error(prefix + line.strip())
elif 'warning' in line.lower():
@@ -261,8 +278,6 @@ def generate_hocr(input_file, output_files, language: list, engine_mode,
_generate_null_hocr(output_hocr, output_sidecar, input_file)
except CalledProcessError as e:
tesseract_log_output(log, e.output, input_file)
if b'read_params_file: parameter not found' in e.output:
raise TesseractConfigError() from e
if b'Image too large' in e.output:
_generate_null_hocr(output_hocr, output_sidecar, input_file)
return
@@ -348,9 +363,6 @@ def generate_pdf(*, input_image, skip_pdf=None, output_pdf, output_text,
use_skip_page(text_only, skip_pdf, output_pdf, output_text)
except CalledProcessError as e:
tesseract_log_output(log, e.output, input_image)
if b'read_params_file: parameter not found' in e.output:
raise TesseractConfigError() from e
if b'Image too large' in e.output:
use_skip_page(text_only, skip_pdf, output_pdf, output_text)
return
+21 -17
View File
@@ -15,9 +15,9 @@
# You should have received a copy of the GNU General Public License
# along with OCRmyPDF. If not, see <http://www.gnu.org/licenses/>.
from functools import partial
from functools import partial, wraps
from collections.abc import Iterable
from contextlib import suppress, contextmanager
from contextlib import suppress
from pathlib import Path
import sys
import os
@@ -29,8 +29,8 @@ def re_symlink(input_file, soft_link_name, log=None):
"""
Helper function: relinks soft symbolic link if necessary
"""
input_file = str(input_file) # For Py3.5
soft_link_name = str(soft_link_name)
input_file = fspath(input_file) # For Py3.5
soft_link_name = fspath(soft_link_name)
if log is None:
prdebug = partial(print, file=sys.stderr)
else:
@@ -71,7 +71,7 @@ def is_iterable_notstr(thing):
def page_number(input_file):
"Get one-based page number implied by filename (000002.pdf -> 2)"
"""Get one-based page number implied by filename (000002.pdf -> 2)"""
return int(os.path.basename(fspath(input_file))[0:6])
@@ -108,14 +108,14 @@ def is_file_writable(test_file):
# defaults to strict=False. This implements strict=False like behavior
# for Python 3.5.
if sys.version_info[0:2] <= (3, 5):
p = Path(os.path.realpath(str(p)))
p = Path(os.path.realpath(fspath(p)))
else:
p = p.resolve(strict=False)
# p.is_file() throws an exception in some cases
if p.exists() and p.is_file():
return os.access(
str(p), os.W_OK,
fspath(p), os.W_OK,
effective_ids=(os.access in os.supports_effective_ids))
else:
try:
@@ -130,17 +130,9 @@ def is_file_writable(test_file):
if sys.version_info[0:2] <= (3, 5):
def universal_open(p, *args, **kwargs):
"Work around Python 3.5's inability to open(pathlib.Path())"
try:
return p.open(*args, **kwargs)
except AttributeError:
return open(p, *args, **kwargs)
def fspath(path):
"""https://www.python.org/dev/peps/pep-0519/#os"""
import pathlib
'''https://www.python.org/dev/peps/pep-0519/#os'''
if isinstance(path, (str, bytes)):
return path
@@ -167,7 +159,6 @@ if sys.version_info[0:2] <= (3, 5):
+ path_type.__name__)
else:
universal_open = open
fspath = os.fspath
@@ -177,3 +168,16 @@ def flatten_groups(groups):
yield from obj
else:
yield obj
def deprecated(func):
"""Warn that function is deprecated"""
@wraps(func)
def new_func(*args, **kwargs):
warnings.simplefilter('always', DeprecationWarning) # turn off filter
warnings.warn("Call to deprecated function {}.".format(func.__name__),
category=DeprecationWarning,
stacklevel=2)
warnings.simplefilter('default', DeprecationWarning) # reset filter
return func(*args, **kwargs)
return new_func
+16 -17
View File
@@ -16,10 +16,10 @@
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
@@ -31,7 +31,6 @@
from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.units import inch
from xml.etree import ElementTree
from PIL import Image
from collections import namedtuple
from math import atan, sin, cos
import re
@@ -55,7 +54,7 @@ class HocrTransform():
box_pattern = re.compile(r'bbox((\s+\d+){4})')
baseline_pattern = re.compile(r'''
baseline \s+
baseline \s+
([\-\+]?\d*\.?\d*) \s+ # +/- decimal float
([\-\+]?\d+) # +/- int''', re.VERBOSE)
ligatures = str.maketrans({
@@ -139,7 +138,7 @@ class HocrTransform():
matches = cls.baseline_pattern.search(element.attrib['title'])
if matches:
return float(matches.group(1)), int(matches.group(2))
return (0, 0)
return (0, 0)
def pt_from_pixel(self, pxl):
"""
@@ -193,12 +192,12 @@ class HocrTransform():
pdf.rect(
pt.x1, self.height - pt.y2, pt.x2 - pt.x1, pt.y2 - pt.y1,
fill=1)
found_lines = False
for line in self.hocr.findall(
".//%sspan[@class='%s']" % (self.xmlns, "ocr_line")):
found_lines = True
self._do_line(pdf, line, "ocrx_word", fontname, invisibleText,
self._do_line(pdf, line, "ocrx_word", fontname, invisibleText,
interwordSpaces, showBoundingboxes)
if not found_lines:
@@ -221,7 +220,7 @@ class HocrTransform():
return x * poly[0] + poly[1]
def _do_line(self, pdf, line, elemclass, fontname, invisibleText,
def _do_line(self, pdf, line, elemclass, fontname, invisibleText,
interwordSpaces, showBoundingboxes):
pxl_line_coords = self.element_coordinates(line)
line_box = self.pt_from_pixel(pxl_line_coords)
@@ -255,10 +254,10 @@ class HocrTransform():
pdf.setLineWidth(0.5)
# negate slope because it is defined as a rise/run in pixel
# coordinates and page coordinates have the y axis flipped
pdf.line(line_box.x1,
pdf.line(line_box.x1,
baseline_y2,
line_box.x2,
self.polyval((-slope, baseline_y2),
self.polyval((-slope, baseline_y2),
line_box.x2 - line_box.x1))
# light green for bounding box of word/line
pdf.setDash(6, 3)
@@ -282,16 +281,16 @@ class HocrTransform():
box = self.pt_from_pixel(pxl_coords)
if interwordSpaces:
# if `--interword-spaces` is true, append a space
# to the end of each text element to allow simpler PDF viewers
# such as PDF.js to better recognize words in search and copy
# to the end of each text element to allow simpler PDF viewers
# such as PDF.js to better recognize words in search and copy
# and paste. Do not remove space from last word in line, even
# though it would look better, because it will interfere with
# naive text extraction. \n does not work either.
elemtxt += ' '
box = Rect._make((
box.x1,
box.x1,
line_box.y1,
box.x2 + pdf.stringWidth(' ', fontname, line_height),
box.x2 + pdf.stringWidth(' ', fontname, line_height),
line_box.y2))
box_width = box.x2 - box.x1
font_width = pdf.stringWidth(elemtxt, fontname, fontsize)
@@ -312,14 +311,14 @@ class HocrTransform():
# content stream while this issues a "offset" (Td) command.
# .moveCursor() is relative to start of the text line, where the
# "text line" means whatever reportlab defines it as. Do not use
# use .getCursor(), since moveCursor() rather unintuitively plans
# use .getCursor(), since moveCursor() rather unintuitively plans
# its moves relative to .getStartOfLine().
# For skewed lines, in the text transform we set up a rotated
# coordinate system, so we don't have to account for the
# coordinate system, so we don't have to account for the
# incremental offset. Surprisingly most PDF viewers can handle this.
cursor = text.getStartOfLine()
dx = box.x1 - cursor[0]
dy = baseline_y2 - cursor[1]
dy = baseline_y2 - cursor[1]
text.moveCursor(dx, dy)
# If reportlab tells us this word is 0 units wide, our best seems
+333 -133
View File
@@ -20,42 +20,53 @@
#
# Python FFI wrapper for Leptonica library
import argparse
import sys
import os
import logging
import warnings
from tempfile import TemporaryFile
from collections.abc import Sequence
from contextlib import suppress
from ctypes.util import find_library
from .lib._leptonica import ffi
from functools import lru_cache
from enum import Enum
from io import BytesIO
from tempfile import TemporaryFile
import argparse
import logging
import os
import sys
import warnings
from .lib._leptonica import ffi
from .helpers import fspath
lept = ffi.dlopen(find_library('lept'))
# pylint: disable=protected-access
logger = logging.getLogger(__name__)
lept = ffi.dlopen(find_library('lept'))
lept.setMsgSeverity(lept.L_SEVERITY_WARNING)
def stderr(*objs):
"""Python 2/3 compatible print to stderr.
"""
"""Shorthand print to stderr."""
print("leptonica.py:", *objs, file=sys.stderr)
class _LeptonicaErrorTrap(object):
"""Context manager to trap errors reported by Leptonica.
class _LeptonicaErrorTrap:
"""
Context manager to trap errors reported by Leptonica.
Leptonica's error return codes are unreliable to the point of being
almost useless. It does, however, write errors to stderr provided that is
not disabled at its compile time. Fortunately this is done using error
macros so it is very self-consistent.
Leptonica's error return codes don't provide much informatino about what
went wrong. Leptonica does, however, write more detailed errors to stderr
(provided this is not disabled at compile time). The Leptonica source
code is very consistent in its use of macros to generate errors.
This context manager redirects stderr to a temporary file which is then
read and parsed for error messages. As a side benefit, debug messages
from Leptonica are also suppressed.
"""
def __init__(self):
self.tmpfile = None
self.copy_of_stderr = -1
def __enter__(self):
from io import UnsupportedOperation
self.tmpfile = TemporaryFile()
@@ -96,6 +107,8 @@ class _LeptonicaErrorTrap(object):
raise FileNotFoundError()
if 'pixWrite: stream not opened' in leptonica_output:
raise LeptonicaIOError()
if 'index not valid' in leptonica_output:
raise IndexError()
raise LeptonicaError(leptonica_output)
return False
@@ -109,8 +122,45 @@ class LeptonicaIOError(LeptonicaError):
pass
class Pix:
"""Wrapper around leptonica's PIX object.
class LeptonicaObject:
"""General wrapper for Leptonica objects
When Leptonica returns an object, we bundled it in a wrapper class, which
manages its memory. The wrapper class assumes that it will be calling some
sort of lept.thingDestroy() function when the instance is deleted. Most
Leptonica objects are reference counted, and destroy decrements the
refcount.
Most of the time, when Leptonica returns something, we wrap and it the job
is done. When wrapping objects that came from a Leptonica container, like
a PIXA returning PIX, the subclass must clone the object before passing it
here, to maintain the reference count.
CFFI ensures that the destroy function is called at garbage collection time
so we do not need to mess with __del__.
"""
cdata_destroy = lambda cdata: None
LEPTONICA_TYPENAME = ''
def __init__(self, cdata):
if not cdata:
raise ValueError('Tried to wrap a NULL ' + self.LEPTONICA_TYPENAME)
self._cdata = ffi.gc(cdata, self._destroy)
@classmethod
def _destroy(cls, cdata):
"""Destroy some cdata"""
# Leptonica API uses double-pointers for its destroy APIs to prevent
# dangling pointers. This means we need to put our single pointer,
# cdata, in a temporary CDATA**.
pp = ffi.new('{} **'.format(cls.LEPTONICA_TYPENAME), cdata)
cls.cdata_destroy(pp)
class Pix(LeptonicaObject):
"""
Wrapper around leptonica's PIX object.
Leptonica uses referencing counting on PIX objects. Also, many Leptonica
functions return the original object with an increased reference count
@@ -126,19 +176,18 @@ class Pix:
This class treats Pix objects as immutable. All methods return new
modified objects. This allows convenient chaining:
>>> Pix.read('filename.jpg').scale((0.5, 0.5)).deskew().show()
>>> Pix.open('filename.jpg').scale((0.5, 0.5)).deskew().show()
"""
def __init__(self, pix):
self._pix = ffi.gc(pix, Pix._pix_destroy)
LEPTONICA_TYPENAME = "PIX"
cdata_destroy = lept.pixDestroy
def __repr__(self):
if self._pix:
if self._cdata:
s = "<leptonica.Pix image size={0}x{1} depth={2}{4} at 0x{3:x}>"
return s.format(self._pix.w, self._pix.h, self._pix.d,
int(ffi.cast('intptr_t', self._pix)),
'(colormapped)' if self._pix.colormap else '')
return s.format(self._cdata.w, self._cdata.h, self._cdata.d,
int(ffi.cast('intptr_t', self._cdata)),
'(colormapped)' if self._cdata.colormap else '')
else:
return "<leptonica.Pix image NULL>"
@@ -151,7 +200,7 @@ class Pix:
data = ffi.new('l_uint8 **')
size = ffi.new('size_t *')
err = lept.pixWriteMemPng(data, size, self._pix, 0)
err = lept.pixWriteMemPng(data, size, self._cdata, 0)
if err != 0:
raise LeptonicaIOError("pixWriteMemPng")
@@ -162,7 +211,7 @@ class Pix:
data = ffi.new('l_uint32 **')
size = ffi.new('size_t *')
err = lept.pixSerializeToMemory(self._pix, data, size)
err = lept.pixSerializeToMemory(self._cdata, data, size)
if err != 0:
raise LeptonicaIOError("pixSerializeToMemory")
@@ -179,32 +228,38 @@ class Pix:
cdata_bytes = ffi.new('char[]', state['data'])
cdata_uint32 = ffi.cast('l_uint32 *', cdata_bytes)
pix = lept.pixDeserializeFromMemory(
cdata_uint32, len(state['data']))
pix = lept.pixDeserializeFromMemory(cdata_uint32, len(state['data']))
Pix.__init__(self, pix)
def __eq__(self, other):
return self.__getstate__() == other.__getstate__()
if not isinstance(other, Pix):
return NotImplemented
same = ffi.new('l_int32 *', 0)
with _LeptonicaErrorTrap():
err = lept.pixEqual(self._cdata, other._cdata, same)
if err:
raise TypeError()
return bool(same[0])
@property
def width(self):
return self._pix.w
return self._cdata.w
@property
def height(self):
return self._pix.h
return self._cdata.h
@property
def depth(self):
return self._pix.d
return self._cdata.d
@property
def size(self):
return (self._pix.w, self._pix.h)
return (self._cdata.w, self._cdata.h)
@property
def info(self):
return {'dpi': (self._pix.xres, self._pix.yres)}
return {'dpi': (self._cdata.xres, self._cdata.yres)}
@property
def mode(self):
@@ -213,7 +268,7 @@ class Pix:
return '1'
elif self.depth >= 16:
return 'RGB'
elif not self._pix.colormap:
elif not self._cdata.colormap:
return 'L'
else:
return 'P'
@@ -245,10 +300,21 @@ class Pix:
with _LeptonicaErrorTrap():
lept.pixWriteImpliedFormat(
os.fsencode(filename),
self._pix, jpeg_quality, jpeg_progressive)
self._cdata, jpeg_quality, jpeg_progressive)
@classmethod
def frompil(self, pillow_image):
"""Create a copy of a PIL.Image from this Pix"""
bio = BytesIO()
pillow_image.save(bio, format='png', compress_level=1)
py_buffer = bio.getbuffer()
c_buffer = ffi.from_buffer(py_buffer)
with _LeptonicaErrorTrap():
pix = Pix(lept.pixReadMem(c_buffer, len(c_buffer)))
return pix
def topil(self):
"Returns a PIL.Image version of this Pix"
"""Returns a PIL.Image version of this Pix"""
from PIL import Image
# Leptonica manages data in words, so it implicitly does an endian
@@ -261,17 +327,17 @@ class Pix:
raw_mode = 'ABGR'
elif self.mode == '1':
raw_mode = '1;I'
pix = Pix(lept.pixEndianByteSwapNew(pix._pix))
pix = Pix(lept.pixEndianByteSwapNew(pix._cdata))
else:
raw_mode = self.mode
pix = Pix(lept.pixEndianByteSwapNew(pix._pix))
pix = Pix(lept.pixEndianByteSwapNew(pix._cdata))
else:
raw_mode = self.mode # no endian swap needed
size = (pix._pix.w, pix._pix.h)
bytecount = pix._pix.wpl * 4 * pix._pix.h
buf = ffi.buffer(pix._pix.data, bytecount)
stride = pix._pix.wpl * 4
size = (pix._cdata.w, pix._cdata.h)
bytecount = pix._cdata.wpl * 4 * pix._cdata.h
buf = ffi.buffer(pix._cdata.data, bytecount)
stride = pix._cdata.wpl * 4
im = Image.frombytes(self.mode, size, buf, 'raw', raw_mode, stride)
@@ -290,21 +356,21 @@ class Pix:
for skew angle
"""
with _LeptonicaErrorTrap():
return Pix(lept.pixDeskew(self._pix, reduction_factor))
return Pix(lept.pixDeskew(self._cdata, reduction_factor))
def scale(self, scale_xy):
"Returns the pix object rescaled according to the proportions given."
with _LeptonicaErrorTrap():
return Pix(lept.pixScale(self._pix, scale_xy[0], scale_xy[1]))
return Pix(lept.pixScale(self._cdata, scale_xy[0], scale_xy[1]))
def rotate180(self):
with _LeptonicaErrorTrap():
return Pix(lept.pixRotate180(ffi.NULL, self._pix))
return Pix(lept.pixRotate180(ffi.NULL, self._cdata))
def rotate_orth(self, quads):
"Orthographic rotation, quads: 0-3, number of clockwise rotations"
with _LeptonicaErrorTrap():
return Pix(lept.pixRotateOrth(self._pix, quads))
return Pix(lept.pixRotateOrth(self._cdata, quads))
def find_skew(self):
"""Returns a tuple (deskew angle in degrees, confidence value).
@@ -314,7 +380,7 @@ class Pix:
with _LeptonicaErrorTrap():
angle = ffi.new('float *', 0.0)
confidence = ffi.new('float *', 0.0)
result = lept.pixFindSkew(self._pix, angle, confidence)
result = lept.pixFindSkew(self._cdata, angle, confidence)
if result == 0:
return (angle[0], confidence[0])
else:
@@ -322,22 +388,21 @@ class Pix:
def convert_rgb_to_luminance(self):
with _LeptonicaErrorTrap():
gray_pix = lept.pixConvertRGBToLuminance(self._pix)
gray_pix = lept.pixConvertRGBToLuminance(self._cdata)
if gray_pix:
return Pix(gray_pix)
return None
def remove_colormap(self, removal_type):
"""Remove a palette (colormap); if no colormap, returns a copy of this
"""Remove a palette (colormap); if no colormap, returns a copy of this
image
removal_type - any of lept.REMOVE_CMAP_*
"""
return self
# with _LeptonicaErrorTrap():
# return Pix(lept.pixRemoveColormapGeneral(
# self._pix, removal_type, lept.L_COPY))
with _LeptonicaErrorTrap():
return Pix(lept.pixRemoveColormapGeneral(
self._cdata, removal_type, lept.L_COPY))
def otsu_adaptive_threshold(
self, tile_size=(300, 300), kernel_size=(4, 4), scorefract=0.1):
@@ -346,8 +411,9 @@ class Pix:
smoothx, smoothy = kernel_size
p_pix = ffi.new('PIX **')
pix = Pix(lept.pixConvertTo8(self._cdata, 0))
result = lept.pixOtsuAdaptiveThreshold(
self._pix,
pix._cdata,
sx, sy,
smoothx, smoothy,
scorefract,
@@ -364,22 +430,42 @@ class Pix:
with _LeptonicaErrorTrap():
sx, sy = tile_size
smoothx, smoothy = kernel_size
if mask is None:
mask = ffi.NULL
mask = ffi.NULL
if isinstance(mask, Pix):
mask = mask._pix
mask = mask._cdata
pix = Pix(lept.pixConvertTo8(self._cdata, 0))
thresh_pix = lept.pixOtsuThreshOnBackgroundNorm(
self._pix,
pix._cdata,
mask,
sx, sy,
thresh, mincount, bgval,
smoothx, smoothy,
scorefract,
ffi.NULL
)
if thresh_pix == ffi.NULL:
return None
)
return Pix(thresh_pix)
def masked_threshold_on_background_norm(
self, mask=None, tile_size=(10, 15), thresh=100, mincount=50,
kernel_size=(2, 2), scorefract=0.1):
with _LeptonicaErrorTrap():
sx, sy = tile_size
smoothx, smoothy = kernel_size
mask = ffi.NULL
if isinstance(mask, Pix):
mask = mask._cdata
pix = Pix(lept.pixConvertTo8(self._cdata, 0))
thresh_pix = lept.pixMaskedThreshOnBackgroundNorm(
pix._cdata,
mask,
sx, sy,
thresh, mincount,
smoothx, smoothy,
scorefract,
ffi.NULL
)
return Pix(thresh_pix)
def crop_to_foreground(
@@ -387,7 +473,7 @@ class Pix:
showmorph=0, display=0, pdfdir=ffi.NULL):
with _LeptonicaErrorTrap():
cropbox = Box(lept.pixFindPageForeground(
self._pix,
self._cdata,
threshold,
mindist,
erasedist,
@@ -396,11 +482,9 @@ class Pix:
display,
pdfdir))
print(repr(cropbox))
cropped_pix = lept.pixClipRectangle(
self._pix,
cropbox._box,
self._cdata,
cropbox._cdata,
ffi.NULL)
return Pix(cropped_pix)
@@ -409,7 +493,7 @@ class Pix:
self, mask=None, grayscale=None, gamma=1.0, black=0, white=255):
with _LeptonicaErrorTrap():
return Pix(lept.pixCleanBackgroundToWhite(
self._pix,
self._cdata,
mask or ffi.NULL,
grayscale or ffi.NULL,
gamma,
@@ -420,7 +504,7 @@ class Pix:
with _LeptonicaErrorTrap():
return Pix(lept.pixGammaTRC(
ffi.NULL,
self._pix,
self._cdata,
gamma,
minval,
maxval
@@ -433,7 +517,7 @@ class Pix:
target_pix = self.remove_colormap(lept.REMOVE_CMAP_BASED_ON_SRC)
with _LeptonicaErrorTrap():
return Pix(lept.pixBackgroundNorm(
target_pix._pix,
target_pix._cdata,
mask or ffi.NULL,
grayscale or ffi.NULL,
tile_size[0],
@@ -443,7 +527,7 @@ class Pix:
bg_val,
smooth_kernel[0],
smooth_kernel[1]
))
))
@staticmethod
@lru_cache(maxsize=1)
@@ -457,50 +541,88 @@ class Pix:
# implementation of pixCorrelationBinary that overflows on larger
# images. Ubuntu 14.04/trusty has 1.70. Ubuntu PPA
# ppa:alex-p/tesseract-ocr has leptonlib 1.75.
pix1_count = ffi.new('l_int32 *')
pix2_count = ffi.new('l_int32 *')
pixn_count = ffi.new('l_int32 *')
tab8 = Pix.make_pixel_sum_tab8()
raise LeptonicaError("Leptonica version is too old")
lept.pixCountPixels(pix1._pix, pix1_count, tab8)
lept.pixCountPixels(pix2._pix, pix2_count, tab8)
pixn = Pix(lept.pixAnd(ffi.NULL, pix1._pix, pix2._pix))
lept.pixCountPixels(pixn._pix, pixn_count, tab8)
# Python converts these int32s to larger units as needed
# to avoid overflow. Overflow happens easily here.
correlation = (
(pixn_count[0] * pixn_count[0]) /
(pix1_count[0] * pix2_count[0])
)
return correlation
else:
correlation = ffi.new('float *', 0.0)
result = lept.pixCorrelationBinary(pix1._pix, pix2._pix,
correlation)
if result != 0:
raise LeptonicaError("Correlation failed")
return correlation[0]
correlation = ffi.new('float *', 0.0)
result = lept.pixCorrelationBinary(pix1._cdata, pix2._cdata,
correlation)
if result != 0:
raise LeptonicaError("Correlation failed")
return correlation[0]
def generate_pdf_ci_data(self, type_, quality):
"Convert to PDF data, with transcoding"
p_compdata = ffi.new('L_COMP_DATA **')
result = lept.pixGenerateCIData(self._pix, type_, quality, 0,
result = lept.pixGenerateCIData(self._cdata, type_, quality, 0,
p_compdata)
if result != 0:
raise LeptonicaError("Generate PDF data failed")
return CompressedData(p_compdata[0])
@staticmethod
def _pix_destroy(pix):
p_pix = ffi.new('PIX **', pix)
lept.pixDestroy(p_pix)
# print('pix destroy ' + repr(pix))
def invert(self):
return Pix(lept.pixInvert(ffi.NULL, self._cdata))
def locate_barcodes(self):
try:
with _LeptonicaErrorTrap():
pix = Pix(lept.pixConvertTo8(self._cdata, 0))
pixa_candidates = PixArray(lept.pixExtractBarcodes(pix._cdata, 0))
with suppress(FileNotFoundError):
os.unlink('junkpixt.png') # leptonica may produce this
sarray = StringArray(lept.pixReadBarcodes(
pixa_candidates._cdata,
lept.L_BF_ANY,
lept.L_USE_WIDTHS,
ffi.NULL,
0
))
except (LeptonicaError, ValueError) as e:
return
for n, s in enumerate(sarray):
decoded = s.decode()
if decoded.strip() == '':
continue
box = pixa_candidates.get_box(n)
left, top = box.x, box.y
right, bottom = box.x + box.w, box.y + box.h
yield (decoded, (left, top, right, bottom))
def despeckle(self, size):
if size == 2:
speckle2 = """
oooo
oC o
o o
oooo
"""
sel1 = Sel.from_selstr(speckle2, 'speckle2')
sel2 = Sel.create_brick(2, 2, 0, 0, lept.SEL_HIT)
elif size == 3:
speckle3 = """
ooooo
oC o
o o
o o
ooooo
"""
sel1 = Sel.from_selstr(speckle3, 'speckle3')
sel2 = Sel.create_brick(3, 3, 0, 0, lept.SEL_HIT)
else:
raise ValueError(size)
pixhmt = Pix(lept.pixHMT(ffi.NULL, self._cdata, sel1._cdata))
pixdilated = Pix(lept.pixDilate(ffi.NULL, pixhmt._cdata, sel2._cdata))
pixsub = Pix(lept.pixSubtract(ffi.NULL, self._cdata, pixdilated._cdata))
return pixsub
class CompressedData:
def __init__(self, compdata):
self._compdata = ffi.gc(compdata, CompressedData._destroy)
class CompressedData(LeptonicaObject):
"""Wrapper for L_COMP_DATA - abstract compressed image data"""
LEPTONICA_TYPENAME = 'L_COMP_DATA'
cdata_destroy = lept.l_CIDataDestroy
@classmethod
def open(cls, path, jpeg_quality=75):
@@ -515,64 +637,142 @@ class CompressedData:
return CompressedData(p_compdata[0])
def __len__(self):
return self._compdata.nbytescomp
return self._cdata.nbytescomp
def read(self):
buf = ffi.buffer(self._compdata.datacomp, self._compdata.nbytescomp)
buf = ffi.buffer(self._cdata.datacomp, self._cdata.nbytescomp)
return bytes(buf)
def __getattr__(self, name):
if hasattr(self._compdata, name):
return getattr(self._compdata, name)
if hasattr(self._cdata, name):
return getattr(self._cdata, name)
raise AttributeError(name)
def get_palette_pdf_string(self):
"Returns palette pre-formatted for use in PDF"
buflen = len('< ') + len(' rrggbb') * self._compdata.ncolors + len('>')
buf = ffi.buffer(self._compdata.cmapdatahex, buflen)
buflen = len('< ') + len(' rrggbb') * self._cdata.ncolors + len('>')
buf = ffi.buffer(self._cdata.cmapdatahex, buflen)
return bytes(buf)
@staticmethod
def _destroy(compdata):
pp = ffi.new('L_COMP_DATA **', compdata)
lept.l_CIDataDestroy(pp)
class PixArray(LeptonicaObject, Sequence):
"""Wrapper around PIXA (array of PIX)"""
LEPTONICA_TYPENAME = 'PIXA'
cdata_destroy = lept.pixaDestroy
def __len__(self):
return self._cdata[0].n
def __getitem__(self, n):
with _LeptonicaErrorTrap():
return Pix(lept.pixaGetPix(self._cdata, n, lept.L_CLONE))
def get_box(self, n):
with _LeptonicaErrorTrap():
return Box(lept.pixaGetBox(self._cdata, n, lept.L_CLONE))
class Box:
"""Wrapper around Leptonica's BOX objects.
class Box(LeptonicaObject):
"""Wrapper around Leptonica's BOX objects (a pixel rectangle)
See class Pix for notes about reference counting.
Uses x, y, w, h coordinates.
"""
def __init__(self, box):
self._box = ffi.gc(box, Box._box_destroy)
LEPTONICA_TYPENAME = 'BOX'
cdata_destroy = lept.boxDestroy
def __repr__(self):
if self._box:
if self._cdata:
return '<leptonica.Box x={0} y={1} w={2} h={3}>'.format(
self.x, self.y, self.w, self.h)
return '<leptonica.Box NULL>'
@property
def x(self):
return self._box.x
return self._cdata.x
@property
def y(self):
return self._box.y
return self._cdata.y
@property
def w(self):
return self._box.w
return self._cdata.w
@property
def h(self):
return self._box.h
return self._cdata.h
@staticmethod
def _box_destroy(box):
p_box = ffi.new('BOX **', box)
lept.boxDestroy(p_box)
class BoxArray(LeptonicaObject, Sequence):
"""Wrapper around Leptonica's BOXA (Array of BOX) objects."""
LEPTONICA_TYPENAME = 'BOXA'
cdata_destroy = lept.boxaDestroy
def __repr__(self):
if not self._cdata:
return '<BoxArray>'
boxes = (repr(box) for box in self)
return '<BoxArray [' + ', '.join(boxes) + ']>'
def __len__(self):
return self._cdata.n
def __getitem__(self, n):
if not isinstance(n, int):
raise TypeError('list indices must be integers')
if 0 <= n < len(self):
return Box(lept.boxaGetBox(self._cdata, n, lept.L_CLONE))
raise IndexError(n)
class StringArray(LeptonicaObject, Sequence):
"""Leptonica SARRAY/string array"""
LEPTONICA_TYPENAME = 'SARRAY'
cdata_destroy = lept.sarrayDestroy
def __len__(self):
return self._cdata.n
def __getitem__(self, n):
if 0 <= n < len(self):
return ffi.string(self._cdata.array[n])
raise IndexError(n)
class Sel(LeptonicaObject):
"""Leptonica 'sel'/selection element for hit-miss transform"""
LEPTONICA_TYPENAME = 'SEL'
cdata_destroy = lept.selDestroy
@classmethod
def from_selstr(cls, selstr, name):
# TODO this will strip a horizontal line of don't care's
lines = [line.strip() for line in selstr.split('\n') if line.strip()]
h = len(lines)
w = len(lines[0])
lengths = set(len(line) for line in lines)
if len(lengths) != 1:
raise ValueError("All lines in selstr must be same length")
repacked = ''.join(line.strip() for line in lines)
buf_selstr = ffi.from_buffer(repacked.encode('ascii'))
buf_name = ffi.from_buffer(name.encode('ascii'))
sel = lept.selCreateFromString(buf_selstr, h, w, buf_name)
return cls(sel)
@classmethod
def create_brick(cls, h, w, cy, cx, type_):
sel = lept.selCreateBrick(h, w, cy, cx, type_)
return cls(sel)
def __repr__(self):
selstr = ffi.gc(lept.selPrintToString(self._cdata), lept.lept_free)
return '<Sel \n' + ffi.string(selstr).decode('ascii') + '\n>'
@lru_cache(maxsize=1)
@@ -588,7 +788,7 @@ def get_leptonica_version():
def deskew(infile, outfile, dpi):
try:
pix_source = Pix.read(infile)
pix_source = Pix.open(infile)
except LeptonicaIOError:
raise LeptonicaIOError("Failed to open file: %s" % infile)
@@ -607,7 +807,7 @@ def deskew(infile, outfile, dpi):
def remove_background(infile, outfile, tile_size=(40, 60), gamma=1.0,
black_threshold=70, white_threshold=190):
try:
pix = Pix.read(infile)
pix = Pix.open(infile)
except LeptonicaIOError:
raise LeptonicaIOError("Failed to open file: %s" % infile)
@@ -635,4 +835,4 @@ if __name__ == '__main__':
parser_deskew.set_defaults(func=deskew)
args = parser.parse_args()
args.func(args)
args.func(args)
-10
View File
@@ -16,13 +16,3 @@
# along with OCRmyPDF. If not, see <http://www.gnu.org/licenses/>.
"""Bindings to external libraries"""
import os as _os
try:
import fitz
except ImportError:
fitz = None
if _os.environ.get('_OCRMYPDF_NO_FITZ'):
fitz = None
File diff suppressed because one or more lines are too long
+188 -9
View File
@@ -19,7 +19,6 @@
from cffi import FFI
ffibuilder = FFI()
ffibuilder.set_source("ocrmypdf.lib._leptonica", None)
ffibuilder.cdef("""
typedef signed char l_int8;
typedef unsigned char l_uint8;
@@ -32,6 +31,8 @@ typedef double l_float64;
typedef long long l_int64;
typedef unsigned long long l_uint64;
typedef int l_ok; /*!< return type 0 if OK, 1 on error */
struct Pix
{
l_uint32 w; /* width in pixels */
@@ -61,6 +62,17 @@ struct PixColormap
};
typedef struct PixColormap PIXCMAP;
/*! Array of pix */
struct Pixa
{
l_int32 n; /*!< number of Pix in ptr array */
l_int32 nalloc; /*!< number of Pix ptrs allocated */
l_uint32 refcount; /*!< reference count (1 if no clones) */
struct Pix **pix; /*!< the array of ptrs to pix */
struct Boxa *boxa; /*!< array of boxes */
};
typedef struct Pixa PIXA;
struct Box
{
l_int32 x;
@@ -72,6 +84,25 @@ struct Box
};
typedef struct Box BOX;
/*! Array of Box */
struct Boxa
{
l_int32 n; /*!< number of box in ptr array */
l_int32 nalloc; /*!< number of box ptrs allocated */
l_uint32 refcount; /*!< reference count (1 if no clones) */
struct Box **box; /*!< box ptr array */
};
typedef struct Boxa BOXA;
/*! String array: an array of C strings */
struct Sarray
{
l_int32 nalloc; /*!< size of allocated ptr array */
l_int32 n; /*!< number of strings allocated */
l_int32 refcount; /*!< reference count (1 if no clones) */
char **array; /*!< string array */
};
typedef struct Sarray SARRAY;
/*! Pdf formatted encoding types */
enum {
@@ -104,6 +135,18 @@ struct L_Compressed_Data
};
typedef struct L_Compressed_Data L_COMP_DATA;
/*! Selection */
struct Sel
{
l_int32 sy; /*!< sel height */
l_int32 sx; /*!< sel width */
l_int32 cy; /*!< y location of sel origin */
l_int32 cx; /*!< x location of sel origin */
l_int32 **data; /*!< {0,1,2}; data[i][j] in [row][col] order */
char *name; /*!< used to find sel by name */
};
typedef struct Sel SEL;
enum {
REMOVE_CMAP_TO_BINARY = 0, /*!< remove colormap for conv to 1 bpp */
REMOVE_CMAP_TO_GRAYSCALE = 1, /*!< remove colormap for conv to 8 bpp */
@@ -122,10 +165,48 @@ enum {
/*!< the array with clones (e.g., pix) */
};
/*! Flags for method of extracting barcode widths */
enum {
L_USE_WIDTHS = 1, /*!< use histogram of barcode widths */
L_USE_WINDOWS = 2 /*!< find best window for decoding transitions */
};
/*! Flags for barcode formats */
enum {
L_BF_UNKNOWN = 0, /*!< unknown format */
L_BF_ANY = 1, /*!< try decoding with all known formats */
L_BF_CODE128 = 2, /*!< decode with Code128 format */
L_BF_EAN8 = 3, /*!< decode with EAN8 format */
L_BF_EAN13 = 4, /*!< decode with EAN13 format */
L_BF_CODE2OF5 = 5, /*!< decode with Code 2 of 5 format */
L_BF_CODEI2OF5 = 6, /*!< decode with Interleaved 2 of 5 format */
L_BF_CODE39 = 7, /*!< decode with Code39 format */
L_BF_CODE93 = 8, /*!< decode with Code93 format */
L_BF_CODABAR = 9, /*!< decode with Code93 format */
L_BF_UPCA = 10 /*!< decode with UPC A format */
};
enum {
L_SEVERITY_EXTERNAL = 0, /* Get the severity from the environment */
L_SEVERITY_ALL = 1, /* Lowest severity: print all messages */
L_SEVERITY_DEBUG = 2, /* Print debugging and higher messages */
L_SEVERITY_INFO = 3, /* Print informational and higher messages */
L_SEVERITY_WARNING = 4, /* Print warning and higher messages */
L_SEVERITY_ERROR = 5, /* Print error and higher messages */
L_SEVERITY_NONE = 6 /* Highest severity: print no messages */
};
enum {
SEL_DONT_CARE = 0,
SEL_HIT = 1,
SEL_MISS = 2
};
""")
ffibuilder.cdef("""
PIX * pixRead ( const char *filename );
PIX * pixReadMem ( const l_uint8 *data, size_t size );
PIX * pixScale ( PIX *pixs, l_float32 scalex, l_float32 scaley );
l_int32 pixFindSkew ( PIX *pixs, l_float32 *pangle, l_float32 *pconf );
l_int32 pixWriteImpliedFormat ( const char *filename, PIX *pix, l_int32 quality, l_int32 progressive );
@@ -137,6 +218,11 @@ pixWriteMemPng(l_uint8 **pdata,
void pixDestroy ( PIX **ppix );
l_ok
pixEqual(PIX *pix1,
PIX *pix2,
l_int32 *psame);
PIX *
pixEndianByteSwapNew(PIX *pixs);
@@ -157,6 +243,8 @@ l_int32 pixSerializeToMemory ( PIX *pixs, l_uint32 **pdata, size_t *pnbytes );
PIX * pixConvertRGBToLuminance(PIX *pixs);
PIX * pixConvertTo8(PIX *pixs, l_int32 cmapflag);
PIX * pixRemoveColormap(PIX *pixs, l_int32 type);
l_int32
@@ -182,6 +270,18 @@ pixOtsuThreshOnBackgroundNorm(PIX *pixs,
l_float32 scorefract,
l_int32 *pthresh);
PIX *
pixMaskedThreshOnBackgroundNorm(PIX *pixs,
PIX *pixim,
l_int32 sx,
l_int32 sy,
l_int32 thresh,
l_int32 mincount,
l_int32 smoothx,
l_int32 smoothy,
l_float32 scorefract,
l_int32 *pthresh);
PIX *
pixCleanBackgroundToWhite(PIX *pixs,
PIX *pixim,
@@ -265,13 +365,13 @@ pixGetAverageMaskedRGB(PIX *pixs,
l_float32 *pgval,
l_float32 *pbval);
PIX *
PIX *
pixGlobalNormRGB(PIX * pixd,
PIX * pixs,
l_int32 rval,
l_int32 gval,
l_int32 bval,
l_int32 mapval);
l_int32 mapval);
PIX *
pixInvert(PIX * pixd,
@@ -289,22 +389,101 @@ pixGenerateCIData(PIX *pixs,
l_int32 ascii85,
L_COMP_DATA **pcid);
l_int32
l_generateCIDataForPdf(const char *fname,
PIX *pix,
l_int32 quality,
SARRAY *
pixProcessBarcodes(PIX *pixs,
l_int32 format,
l_int32 method,
SARRAY **psaw,
l_int32 debugflag);
PIX *
pixaGetPix(PIXA *pixa,
l_int32 index,
l_int32 accesstype);
BOX*
pixaGetBox (PIXA * pixa,
l_int32 index,
l_int32 accesstype );
PIXA *
pixExtractBarcodes(PIX *pixs,
l_int32 debugflag);
BOXA *
pixLocateBarcodes ( PIX *pixs, l_int32 thresh, PIX **ppixb, PIX **ppixm );
SARRAY *
pixReadBarcodes(PIXA *pixa,
l_int32 format,
l_int32 method,
SARRAY **psaw,
l_int32 debugflag);
l_int32
l_generateCIDataForPdf(const char *fname,
PIX *pix,
l_int32 quality,
L_COMP_DATA **pcid);
void
BOX *
boxClone ( BOX *box );
BOX *
boxaGetBox ( BOXA *boxa, l_int32 index, l_int32 accessflag );
SEL *
selCreateFromString ( const char *text, l_int32 h, l_int32 w, const char *name );
SEL *
selCreateBrick ( l_int32 h, l_int32 w, l_int32 cy, l_int32 cx, l_int32 type );
char *
selPrintToString(SEL *sel);
PIX *
pixDilate ( PIX *pixd, PIX *pixs, SEL *sel );
PIX *
pixErode ( PIX *pixd, PIX *pixs, SEL *sel );
PIX *
pixHMT ( PIX *pixd, PIX *pixs, SEL *sel );
PIX *
pixSubtract ( PIX *pixd, PIX *pixs1, PIX *pixs2 );
void
boxDestroy(BOX **pbox);
void
boxaDestroy ( BOXA **pboxa );
void
pixaDestroy(PIXA **ppixa);
l_ok
pixRenderBoxa ( PIX *pix, BOXA *boxa, l_int32 width, l_int32 op );
void
l_CIDataDestroy(L_COMP_DATA **pcid);
void
lept_free(void *ptr);
sarrayDestroy(SARRAY **psa);
void
lept_free(void *ptr);
void selDestroy ( SEL **psel );
l_int32
setMsgSeverity(l_int32 newsev);
""")
ffibuilder.set_source("ocrmypdf.lib._leptonica", None)
if __name__ == '__main__':
ffibuilder.compile(verbose=True)
@@ -16,30 +16,26 @@
# along with OCRmyPDF. If not, see <http://www.gnu.org/licenses/>.
from pathlib import Path
from subprocess import CalledProcessError
import concurrent.futures
from collections import defaultdict, namedtuple
import struct
from collections import defaultdict
import logging
import sys
from io import BytesIO
from PIL import Image
import pikepdf
from ._jobcontext import JobContext
from . import leptonica
from .helpers import re_symlink
from .helpers import re_symlink, fspath
from .exec import pngquant, jbig2enc
PAGE_GROUP_SIZE = 10
JPEG_QUALITY = 75
PNG_QUALITY = (65, 75)
DEFAULT_JPEG_QUALITY = 75
DEFAULT_PNG_QUALITY = 70
def img_name(root, xref, ext):
return str(root / '{:08d}{}'.format(xref, ext))
return fspath(root / '{:08d}{}'.format(xref, ext))
def png_name(root, xref):
@@ -54,26 +50,34 @@ def tif_name(root, xref):
return img_name(root, xref, '.tif')
def extract_image(*, pike, root, log, image, xref, jbig2s,
pngs, jpegs, options):
def extract_image_filter(pike, root, log, image, xref):
if image.Subtype != '/Image':
return False
return None
if image.Length < 100:
log.debug("Skipping small image, xref {}".format(xref))
return False
log.debug("Skipping small image, xref %s", xref)
return None
pim = pikepdf.PdfImage(image)
if len(pim.filter_decodeparms) > 1:
log.debug("Skipping multiply filtered, xref {}".format(xref))
return False
log.debug("Skipping multiply filtered, xref %s", xref)
return None
filtdp = pim.filter_decodeparms[0]
if pim.bits_per_component > 8:
return False # Don't mess with wide gamut images
return None # Don't mess with wide gamut images
if filtdp[0] == '/JPXDecode':
return False # Don't do JPEG2000
return None # Don't do JPEG2000
return pim, filtdp
def extract_image_jbig2(*, pike, root, log, image, xref, options):
result = extract_image_filter(pike, root, log, image, xref)
if result is None:
return None
pim, filtdp = result
if pim.bits_per_component == 1 \
and filtdp != '/JBIG2Decode' \
@@ -84,9 +88,18 @@ def extract_image(*, pike, root, log, image, xref, jbig2s,
ext = pim.extract_to(stream=f)
imgname.rename(imgname.with_suffix(ext))
except pikepdf.UnsupportedImageTypeError:
return False
jbig2s.append((xref, ext))
elif filtdp[0] == '/DCTDecode' \
return None
return xref, ext
return None
def extract_image_generic(*, pike, root, log, image, xref, options):
result = extract_image_filter(pike, root, log, image, xref)
if result is None:
return None
pim, filtdp = result
if filtdp[0] == '/DCTDecode' \
and options.optimize >= 2:
# This is a simple heuristic derived from some training data, that has
# about a 70% chance of guessing whether the JPEG is high quality,
@@ -95,7 +108,7 @@ def extract_image(*, pike, root, log, image, xref, jbig2s,
# bytes_per_pixel = int(raw_jpeg.Length) / (w * h)
# jpeg_quality_estimate = 117.0 * (bytes_per_pixel ** 0.213)
# if jpeg_quality_estimate < 65:
# return False
# return None
# We could get the ICC profile here, but there's no need to look at it
# for quality transcoding
@@ -110,113 +123,185 @@ def extract_image(*, pike, root, log, image, xref, jbig2s,
ext = pim.extract_to(stream=f)
imgname.rename(imgname.with_suffix(ext))
except pikepdf.UnsupportedImageTypeError:
return False
jpegs.append(xref)
return None
return xref, ext
elif pim.indexed \
and pim.colorspace in pim.SIMPLE_COLORSPACES \
and options.optimize >= 3:
# Try to improve on indexed images - these are far from low hanging
# fruit in most cases
pim.as_pil_image().save(png_name(root, xref))
pngs.append(xref)
return xref, '.png'
elif not pim.indexed and pim.colorspace in pim.SIMPLE_COLORSPACES:
# An optimization opportunity here, not currently taken, is directly
# generating a PNG from compressed data
pim.as_pil_image().save(png_name(root, xref))
pngs.append(xref)
else:
return False
return xref, '.png'
return True
return None
def extract_images(pike, root, log, options):
# Extract images we can improve
changed_xrefs = set()
jbig2_groups = defaultdict(lambda: [])
jpegs = []
pngs = []
def extract_images(pike, root, log, options, extract_fn):
"""Extract image using extract_fn
extract_fn decides where the image is interesting in this case
"""
include_xrefs = set()
exclude_xrefs = set()
errors = 0
for pageno, page in enumerate(pike.pages):
group, _ = divmod(pageno, PAGE_GROUP_SIZE)
try:
xobjs = page.Resources.XObject
except AttributeError:
continue
for imname, image in dict(xobjs).items():
xref = image._objgen[0]
if xref in changed_xrefs:
continue # Don't improve same image twice
try:
result = extract_image(
pike=pike, root=root, log=log, image=image,
xref=xref, jbig2s=jbig2_groups[group], pngs=pngs,
jpegs=jpegs, options=options
)
if result:
changed_xrefs.add(xref)
except Exception as e:
log.debug("Image {} xref {}".format(imname, xref))
log.debug(repr(e))
errors += 1
for _imname, image in dict(xobjs).items():
if image.objgen[1] != 0:
continue # Ignore images in an incremental PDF
xref = image.objgen[0]
if hasattr(image, 'SMask'):
# Ignore soft masks
smask_xref = image.SMask.objgen[0]
exclude_xrefs.add(smask_xref)
include_xrefs.add(xref)
working_xrefs = include_xrefs - exclude_xrefs
for xref in working_xrefs:
image = pike.get_object((xref, 0))
try:
result = extract_fn(
pike=pike, root=root, log=log, image=image,
xref=xref, options=options
)
except Exception as e:
log.debug("Image xref %s", xref)
log.debug(repr(e))
errors += 1
else:
if result:
_, ext = result
yield pageno, xref, ext
def extract_images_generic(pike, root, log, options):
"""Extract any >=2bpp image we think we can improve"""
jpegs = []
pngs = []
for _, xref, ext in extract_images(
pike, root, log, options, extract_image_generic):
log.debug('xref = %s ext = %s', xref, ext)
if ext == '.png':
pngs.append(xref)
elif ext == '.jpg':
jpegs.append(xref)
log.debug(
"Optimizable images: "
"JPEGs: %s PNGs: %s", len(jpegs), len(pngs)
)
return jpegs, pngs
def extract_images_jbig2(pike, root, log, options):
"""Extract any bitonal image that we think we can improve as JBIG2"""
jbig2_groups = defaultdict(list)
for pageno, xref, ext in extract_images(
pike, root, log, options, extract_image_jbig2):
group = pageno // options.jbig2_page_group_size
jbig2_groups[group].append((xref, ext))
# Elide empty groups
jbig2_groups = {group: xrefs for group, xrefs in jbig2_groups.items()
if len(xrefs) > 0}
log.debug(
"Optimizable images: "
"JBIG2 groups: {} JPEGs: {} PNGs: {} Errors: {}".format(
len(jbig2_groups), len(jpegs), len(pngs), errors
))
return changed_xrefs, jbig2_groups, jpegs, pngs
"JBIG2 groups: %s", (len(jbig2_groups),)
)
return jbig2_groups
def convert_to_jbig2(pike, jbig2_groups, root, log, options):
"""
Convert a group of JBIG2 images and insert into PDF.
def _produce_jbig2_images(jbig2_groups, root, log, options):
"""Produce JBIG2 images from their groups"""
We use a group because JBIG2 works best with a symbol dictionary that spans
multiple pages. When inserted back into the PDF, each JBIG2 must reference
the symbol dictionary it is associated with. So convert a group at a time,
and replace their streams with a parameter set that points to the
appropriate dictionary.
If too many pages shared the same dictionary JBIG2 encoding becomes more
expensive and less efficient.
"""
with concurrent.futures.ThreadPoolExecutor(
max_workers=options.jobs) as executor:
futures = []
for group, xref_exts in jbig2_groups.items():
def jbig2_group_futures(executor, root, groups):
for group, xref_exts in groups.items():
prefix = 'group{:08d}'.format(group)
future = executor.submit(
jbig2enc.convert_group,
cwd=str(root),
cwd=fspath(root),
infiles=(img_name(root, xref, ext) for xref, ext in xref_exts),
out_prefix=prefix
)
futures.append(future)
yield future
def jbig2_single_futures(executor, root, groups):
for group, xref_exts in groups.items():
prefix = 'group{:08d}'.format(group)
# Second loop is to ensure multiple images per page are unpacked
for n, xref_ext in enumerate(xref_exts):
xref, ext = xref_ext
future = executor.submit(
jbig2enc.convert_single,
cwd=fspath(root),
infile=img_name(root, xref, ext),
outfile=root / ('{}.{:04d}'.format(prefix, n))
)
yield future
if options.jbig2_page_group_size > 1:
jbig2_futures = jbig2_group_futures
else:
jbig2_futures = jbig2_single_futures
with concurrent.futures.ThreadPoolExecutor(
max_workers=options.jobs) as executor:
futures = jbig2_futures(executor, root, jbig2_groups)
for future in concurrent.futures.as_completed(futures):
proc = future.result()
log.debug(proc.stderr.decode())
def convert_to_jbig2(pike, jbig2_groups, root, log, options):
"""Convert images to JBIG2 and insert into PDF.
When the JBIG2 page group size is > 1 we do several JBIG2 images at once
and build a symbol dictionary that will span several pages. Each JBIG2
image must reference to its symbol dictionary. If too many pages shared the
same dictionary JBIG2 encoding becomes more expensive and less efficient.
The default value of 10 was determined through testing. Currently this
must be lossy encoding since jbig2enc does not support refinement coding.
When the JBIG2 symbolic coder is not used, each JBIG2 stands on its own
and needs no dictionary. Currently this is must be lossless JBIG2.
"""
_produce_jbig2_images(jbig2_groups, root, log, options)
for group, xref_exts in jbig2_groups.items():
prefix = 'group{:08d}'.format(group)
jbig2_globals_data = (root / (prefix + '.sym')).read_bytes()
jbig2_globals = pikepdf.Stream(pike, jbig2_globals_data)
jbig2_symfile = root / (prefix + '.sym')
if jbig2_symfile.exists():
jbig2_globals_data = jbig2_symfile.read_bytes()
jbig2_globals = pikepdf.Stream(pike, jbig2_globals_data)
jbig2_globals_dict = pikepdf.Dictionary({
'/JBIG2Globals': jbig2_globals
})
elif options.jbig2_page_group_size == 1:
jbig2_globals_dict = None
else:
raise FileNotFoundError(jbig2_symfile)
for n, xref_ext in enumerate(xref_exts):
xref, ext = xref_ext
xref, _ = xref_ext
jbig2_im_file = root / (prefix + '.{:04d}'.format(n))
jbig2_im_data = jbig2_im_file.read_bytes()
im_obj = pike._get_object_id(xref, 0)
im_obj = pike.get_object(xref, 0)
im_obj.write(
jbig2_im_data, pikepdf.Name('/JBIG2Decode'),
pikepdf.Dictionary({
'/JBIG2Globals': jbig2_globals
})
jbig2_im_data,
filter=pikepdf.Name('/JBIG2Decode'),
decode_parms=jbig2_globals_dict
)
@@ -229,38 +314,44 @@ def transcode_jpegs(pike, jpegs, root, log, options):
# DEBUG:PIL.Image:Error closing: 'NoneType' object has no attribute
# 'close'. Seems to be mostly harmless
# https://github.com/python-pillow/Pillow/issues/1144
with Image.open(str(in_jpg)) as im:
im.save(str(opt_jpg),
with Image.open(fspath(in_jpg)) as im:
im.save(fspath(opt_jpg),
optimize=True,
quality=JPEG_QUALITY)
quality=options.jpeg_quality)
# pylint: disable=no-member
if opt_jpg.stat().st_size > in_jpg.stat().st_size:
log.debug("xref {}, jpeg, made larger - skip".format(xref))
log.debug("xref %s, jpeg, made larger - skip", xref)
continue
compdata = leptonica.CompressedData.open(opt_jpg)
im_obj = pike._get_object_id(xref, 0)
im_obj = pike.get_object(xref, 0)
im_obj.write(
compdata.read(), pikepdf.Name('/DCTDecode'),
pikepdf.Null()
compdata.read(), filter=pikepdf.Name('/DCTDecode')
)
def transcode_pngs(pike, pngs, root, log, options):
if options.optimize >= 2:
png_quality = (
max(10, options.png_quality - 10),
min(100, options.png_quality + 10)
)
with concurrent.futures.ThreadPoolExecutor(
max_workers=options.jobs) as executor:
for xref in pngs:
executor.submit(
pngquant.quantize,
png_name(root, xref), png_name(root, xref),
PNG_QUALITY[0], PNG_QUALITY[1])
png_quality[0], png_quality[1])
for xref in pngs:
im_obj = pike._get_object_id(xref, 0)
im_obj = pike.get_object(xref, 0)
# Open, transcode (!), package for PDF
try:
pix = leptonica.Pix.open(png_name(root, xref))
if pix.depth == 1:
pix = pix.invert() # PDF assumes 1 is black for monochrome
compdata = pix.generate_pdf_ci_data(
leptonica.lept.L_FLATE_ENCODE, 0
)
@@ -275,7 +366,7 @@ def transcode_pngs(pike, pngs, root, log, options):
if len(compdata) > int(im_obj.stream_dict.Length):
continue # If we produced a larger image, don't use
predictor = pikepdf.Null()
predictor = None
if compdata.predictor > 0:
predictor = pikepdf.Dictionary({'/Predictor': compdata.predictor})
@@ -298,7 +389,10 @@ def transcode_pngs(pike, pngs, root, log, options):
elif compdata.spp == 4:
cs = pikepdf.Name('/DeviceCMYK')
im_obj.ColorSpace = cs
im_obj.write(compdata.read(), pikepdf.Name('/FlateDecode'), predictor)
im_obj.write(
compdata.read(),
filter=pikepdf.Name('/FlateDecode'), decode_parms=predictor
)
def optimize(
@@ -312,27 +406,32 @@ def optimize(
re_symlink(input_file, output_file, log)
return
global PNG_QUALITY
global JPEG_QUALITY
if options.optimize == 3:
PNG_QUALITY = (20, 40)
JPEG_QUALITY = 40
if options.jpeg_quality == 0:
options.jpeg_quality = \
DEFAULT_JPEG_QUALITY if options.optimize < 3 else 40
if options.png_quality == 0:
options.png_quality = \
DEFAULT_PNG_QUALITY if options.optimize < 3 else 30
if options.jbig2_page_group_size == 0:
options.jbig2_page_group_size = \
10 if options.jbig2_lossy else 1
pike = pikepdf.Pdf.open(input_file)
root = Path(output_file).parent / 'images'
root.mkdir(exist_ok=True)
changed_xrefs, jbig2_groups, jpegs, pngs = extract_images(
pike, root, log, options)
root.mkdir(exist_ok=True) # pylint: disable=no-member
convert_to_jbig2(pike, jbig2_groups, root, log, options)
jpegs, pngs = extract_images_generic(pike, root, log, options)
transcode_jpegs(pike, jpegs, root, log, options)
transcode_pngs(pike, pngs, root, log, options)
# Not object_stream_mode + preserve_pdfa generates noncompliant PDFs
target_file = output_file + '_opt.pdf'
pike.save(target_file, preserve_pdfa=True)
jbig2_groups = extract_images_jbig2(pike, root, log, options)
convert_to_jbig2(pike, jbig2_groups, root, log, options)
target_file = Path(output_file).with_suffix('.opt.pdf')
pike.remove_unreferenced_resources()
pike.save(target_file, preserve_pdfa=True,
object_stream_mode=pikepdf.ObjectStreamMode.generate)
input_size = Path(input_file).stat().st_size
output_size = Path(target_file).stat().st_size
@@ -349,16 +448,38 @@ def optimize(
def main(infile, outfile, level, jobs=1):
Options = namedtuple('Options', 'jobs optimize')
from tempfile import TemporaryDirectory
from shutil import copy
class OptimizeOptions:
"""Emulate ocrmypdf's options"""
def __init__(
self, jobs, optimize, jpeg_quality, png_quality, jb2lossy):
self.jobs = jobs
self.optimize = optimize
self.jpeg_quality = jpeg_quality
self.png_quality = png_quality
self.jbig2_page_group_size = 0
self.jbig2_lossy = jb2lossy
logging.basicConfig(level=logging.DEBUG)
log = logging.getLogger()
ctx = JobContext()
options = Options(jobs=jobs, optimize=int(level))
options = OptimizeOptions(
jobs=jobs,
optimize=int(level),
jpeg_quality=0, # Use default
png_quality=0,
jb2lossy=False
)
ctx.set_options(options)
optimize(infile, outfile, log, ctx)
with TemporaryDirectory() as td:
tmpout = Path(td) / 'out.pdf'
optimize(infile, tmpout, log, ctx)
copy(fspath(tmpout), fspath(outfile))
if __name__ == '__main__':
+90 -140
View File
@@ -15,17 +15,37 @@
# You should have received a copy of the GNU General Public License
# along with OCRmyPDF. If not, see <http://www.gnu.org/licenses/>.
# Generate a PDFA_def.ps file for Ghostscript >= 9.14
"""
Generate a PDFMARK file for Ghostscript >= 9.14, for PDF/A conversion
pdfmark is an extension to the Postscript language that describes some PDF
features like bookmarks and annotations. It was originally specified Adobe
Distiller, for Postscript to PDF conversion:
https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/pdfmark_reference.pdf
Ghostscript uses pdfmark for PDF to PDF/A conversion as well. To use Ghostscript
to create a PDF/A, we need to create a pdfmark file with the necessary metadata.
This takes care of the many version-specific bugs and pecularities in
Ghostscript's handling of pdfmark.
"""
from string import Template
from binascii import hexlify
from datetime import datetime
from xml.parsers.expat import ExpatError
from pathlib import Path
from string import Template
import pkg_resources
import PyPDF2 as pypdf
import warnings
from defusedxml.minidom import parseString as defused_parseString
from unittest.mock import patch
import os
import pikepdf
from pikepdf.models.metadata import (
encode_pdf_date as _encode_date,
decode_pdf_date as _decode_date
)
from .helpers import deprecated
ICC_PROFILE_RELPATH = 'data/sRGB.icc'
@@ -37,17 +57,10 @@ SRGB_ICC_PROFILE = pkg_resources.resource_filename(
# files, from the Ghostscript documentation. Lines beginning with % are
# comments. Python substitution variables have a '$' prefix.
pdfa_def_template = u"""%!
% This is derived from Ghostscript's template for creating a PDF/A document.
% This is a small PostScript program that includes some necessary information
% to create a PDF/A compliant file.
% Define entries in the document Info dictionary :
/ICCProfile ($icc_profile)
/ICCProfile $icc_profile
def
[$docinfo
/DOCINFO pdfmark
% Define an ICC profile :
[/_objdef {icc_PDFA} /type /stream /OBJ pdfmark
@@ -78,8 +91,10 @@ def
"""
@deprecated
def encode_text_string(s: str) -> str:
'''Encode text string to hex string for use in a PDF
"""
Encode text string to hex string for use in a PDF
From PDF 32000-1:2008 a string object may be included in hexademical form
if it is enclosed in angle brackets. For general Unicode the string should
@@ -87,7 +102,7 @@ def encode_text_string(s: str) -> str:
ASCII strings could be encoded as PdfDocEncoding literals provided
that certain Postscript sequences are escaped. But it's far simpler to
encode everything as UTF-16.
'''
"""
# Sometimes lazy C programmers leave their NULs at the end of strings they
# insert into PDFs
@@ -103,122 +118,78 @@ def encode_text_string(s: str) -> str:
return ascii_hex_str
def encode_pdf_date(d: datetime) -> str:
"""Encode Python datetime object as PDF date string
From Adobe pdfmark manual:
(D:YYYYMMDDHHmmSSOHH'mm')
D: is an optional prefix. YYYY is the year. All fields after the year are
optional. MM is the month (01-12), DD is the day (01-31), HH is the
hour (00-23), mm are the minutes (00-59), and SS are the seconds
(00-59). The remainder of the string defines the relation of local
time to GMT. O is either + for a positive difference (local time is
later than GMT) or - (minus) for a negative difference. HH' is the
absolute value of the offset from GMT in hours, and mm' is the
absolute value of the offset in minutes. If no GMT information is
specified, the relation between the specified time and GMT is
considered unknown. Regardless of whether or not GMT
information is specified, the remainder of the string should specify
the local time.
def _encode_ascii(s: str) -> str:
"""
Aggressively strip non-ASCII and PDF escape sequences
pdfmark_date_fmt = r'%Y%m%d%H%M%S'
s = d.strftime(pdfmark_date_fmt)
tz = d.strftime('%z')
if tz == 'Z' or tz == '':
# Ghostscript <= 9.23 handles missing timezones incorrectly, so if
# timezone is missing, move it into GMT.
# https://bugs.ghostscript.com/show_bug.cgi?id=699182
s += "+00'00'"
else:
sign, tz_hours, tz_mins = tz[0], tz[1:3], tz[3:5]
s += "{}{}'{}'".format(sign, tz_hours, tz_mins)
return s
def decode_pdf_date(s: str) -> datetime:
if s.startswith('D:'):
s = s[2:]
# Literal Z00'00', is incorrect but found in the wild,
# probably made by OS X Quartz -- standardize
if s.endswith("Z00'00'"):
s = s.replace("Z00'00'", '+0000')
elif s.endswith('Z'):
s = s.replace('Z', '+0000')
s = s.replace("'", "") # Remove apos from PDF time strings
return datetime.strptime(s, r'%Y%m%d%H%M%S%z')
def _get_pdfmark_dates(pdfmark):
"""Encode dates for pdfmark Postscript. The best way to deal with a
missing date entry is set it to null, because if the key is omitted
Ghostscript will set it to now - we do not want to erase the fact that
the value was unknown. Setting to an empty string breaks Ghostscript
9.22 as reported here:
https://bugs.ghostscript.com/show_bug.cgi?id=699182
Ghostscript 9.24+ lost support for UTF-16BE in pdfmark files for reasons
given in GhostPDL commit e997c683. Our temporary workaround is use ASCII
and drop all non-ASCII characters. A slightly improved alternative would
be to implement PdfDocEncoding in pikepdf and encode to that, or handle
metadata there.
"""
for key in ('/CreationDate', '/ModDate'):
if key not in pdfmark:
continue
if pdfmark[key].strip() == '':
yield ' {} null'.format(key)
continue
date_str = pdfmark[key]
if date_str.startswith('D:'):
date_str = date_str[2:]
try:
yield ' {} (D:{})'.format(
key,
encode_pdf_date(decode_pdf_date(date_str)))
except ValueError:
yield ' {} null'.format(key)
trans = str.maketrans({
'(': '',
')': '',
'\\': '',
'\0': ''
})
return s.translate(trans).encode('ascii', errors='replace').decode()
def _get_pdfa_def(icc_profile, icc_identifier, pdfmark):
"""Create a Postscript file for Ghostscript. pdfmark contains the various
objects as strings; these must be encoded in ASCII, and dates have a
special format."""
@deprecated
def encode_pdf_date(*args, **kwargs):
return _encode_date(*args, **kwargs)
# Ghostscript <= 9.21 has a bug where null entries in DOCINFO might produce
# ERROR: VMerror (-25) on closing pdfwrite device.
# https://bugs.ghostscript.com/show_bug.cgi?id=697684
# Work around this by only adding keys that have a nontrivial value
docinfo_keys = ('/Title', '/Author', '/Subject', '/Creator', '/Keywords')
docinfo_line_template = ' {key} <{value}>'
def docinfo_gen():
yield from _get_pdfmark_dates(pdfmark)
for key in docinfo_keys:
if key in pdfmark and pdfmark[key].strip() != '':
line = docinfo_line_template.format(
key=key, value=encode_text_string(pdfmark[key]))
yield line
docinfo = '\n'.join(docinfo_gen())
@deprecated
def decode_pdf_date(*args, **kwargs):
return _decode_date(*args, **kwargs)
def _get_pdfa_def(icc_profile, icc_identifier, pdfmark=None, ascii_docinfo=None):
"""
Create a Postscript pdfmark file for Ghostscript.
pdfmark contains the various objects as strings; these must be encoded in
ASCII, and dates have a special format.
:param icc_profile: filename of the ICC profile to include in pdfmark
:param icc_identifier: ICC identifier such as 'sRGB'
:param pdfmark: a dictionary containing keys to include the pdfmark
:param ascii_docinfo: parameter is no longer meaningful
:returns: a string containing the entire pdfmark
"""
t = Template(pdfa_def_template)
result = t.substitute(icc_profile=icc_profile,
icc_identifier=icc_identifier,
docinfo=docinfo)
icc_identifier=icc_identifier)
return result
def generate_pdfa_ps(target_filename, pdfmark, icc='sRGB'):
def generate_pdfa_ps(target_filename, pdfmark=None, icc='sRGB', ascii_docinfo=None):
if icc == 'sRGB':
icc_profile = SRGB_ICC_PROFILE
else:
raise NotImplementedError("Only supporting sRGB")
# pdfmark must contain the full path to the ICC profile, and pdfmark must
# also encoded in ASCII. ocrmypdf can be installed anywhere, including to
# paths that have a non-ASCII character in the filename. Ghostscript
# accepts hex-encoded strings and converts them to byte strings, so
# we encode the path with fsencode() and use the hex representation.
# UTF-16 not accepted here. (Even though ASCII encodable is the usual case,
# do this always to avoid making it a rare conditional.)
bytes_icc_profile = os.fsencode(icc_profile)
hex_icc_profile = hexlify(bytes_icc_profile)
icc_profile = '<' + hex_icc_profile.decode('ascii') + '>'
ps = _get_pdfa_def(icc_profile, icc, pdfmark)
# We should have encoded everything to pure ASCII by this point, and
# to be safe, only allow ASCII in PostScript
with open(target_filename, 'w', encoding='ascii') as f:
f.write(ps)
Path(target_filename).write_text(ps, encoding='ascii')
def file_claims_pdfa(filename):
@@ -230,38 +201,17 @@ def file_claims_pdfa(filename):
This checks if the XMP metadata contains a PDF/A marker.
"""
warnings.simplefilter('ignore', pypdf.utils.PdfReadWarning)
pdf = pypdf.PdfFileReader(filename)
try:
# Monkeypatch PyPDF2 to use defusedxml as its XML parser, for safety
with patch('xml.dom.minidom.parseString', new=defused_parseString):
xmp = pdf.getXmpMetadata()
except ExpatError:
return {'pass': False, 'output': 'pdf',
'conformance': 'Invalid XML metadata'}
try:
pdfa_nodes = xmp.getNodesInNamespace(
aboutUri='',
namespace='http://www.aiim.org/pdfa/ns/id/')
except AttributeError:
pdf = pikepdf.open(filename)
pdfmeta = pdf.open_metadata()
if not pdfmeta.pdfa_status:
return {'pass': False, 'output': 'pdf',
'conformance': 'No XMP metadata'}
pdfa_dict = {attr.localName: attr.value for attr in pdfa_nodes}
if not pdfa_dict:
return {'pass': False, 'output': 'pdf',
'conformance': 'No XMP metadata'}
part_conformance = pdfa_dict['part'] + pdfa_dict['conformance']
'conformance': 'No PDF/A metadata in XMP'}
valid_part_conforms = {'1A', '1B', '2A', '2B', '2U', '3A', '3B', '3U'}
conformance = 'PDF/A-{}'.format(
part_conformance)
if part_conformance in valid_part_conforms:
conformance = 'PDF/A-{}'.format(pdfmeta.pdfa_status)
pdfa_dict = {}
if pdfmeta.pdfa_status in valid_part_conforms:
pdfa_dict['pass'] = True
pdfa_dict['output'] = 'pdfa'
pdfa_dict['conformance'] = conformance
return pdfa_dict
@@ -16,24 +16,25 @@
# You should have received a copy of the GNU General Public License
# along with OCRmyPDF. If not, see <http://www.gnu.org/licenses/>.
from subprocess import Popen, PIPE
from decimal import Decimal
from math import hypot, isclose
import re
import sys
from collections import namedtuple
from collections.abc import MutableMapping, Mapping
import warnings
from pathlib import Path
from decimal import Decimal
from enum import Enum
from contextlib import contextmanager
from .lib import fitz
from .helpers import universal_open, fspath
from math import hypot, isclose
from pathlib import Path
from unittest.mock import Mock
from warnings import warn
import re
from pikepdf import PdfMatrix
import pikepdf
from . import ghosttext
from .layout import get_page_analysis, get_text_boxes
from ..exceptions import EncryptedPdfError
from ..helpers import fspath
Colorspace = Enum('Colorspace',
'gray rgb cmyk lab icc index sep devn pattern jpeg2000')
@@ -41,7 +42,6 @@ Encoding = Enum('Encoding',
'ccitt jpeg jpeg2000 jbig2 asciihex ascii85 lzw flate ' + \
'runlength')
FRIENDLY_COLORSPACE = {
'/DeviceGray': Colorspace.gray,
'/CalGray': Colorspace.gray,
@@ -85,28 +85,6 @@ FRIENDLY_COMP = {
UNIT_SQUARE = (1.0, 0.0, 0.0, 1.0, 0.0, 0.0)
def _matrix_from_shorthand(shorthand):
"""Convert from PDF matrix shorthand to full matrix
PDF 1.7 spec defines a shorthand for describing the entries of a matrix
since the last column is always (0, 0, 1).
"""
a, b, c, d, e, f = map(float, shorthand)
return ((a, b, 0),
(c, d, 0),
(e, f, 1))
def _shorthand_from_matrix(matrix):
"""Convert from transformation matrix to PDF shorthand."""
a, b = matrix[0][0], matrix[0][1]
c, d = matrix[1][0], matrix[1][1]
e, f = matrix[2][0], matrix[2][1]
return tuple(map(float, (a, b, c, d, e, f)))
def _is_unit_square(shorthand):
values = map(float, shorthand)
pairwise = zip(values, UNIT_SQUARE)
@@ -119,23 +97,30 @@ InlineSettings = namedtuple('InlineSettings',
['iimage', 'shorthand', 'stack_depth'])
ContentsInfo = namedtuple('ContentsInfo',
['xobject_settings', 'inline_images', 'found_text'])
['xobject_settings', 'inline_images', 'found_vector'])
TextboxInfo = namedtuple('TextboxInfo',
['bbox', 'is_visible', 'is_corrupt'])
class VectorInfo:
def __init__(self):
pass
def _normalize_stack(operations):
"""Convert runs of qQ's in the stack into single operations"""
for operands, command in operations:
command = str(command)
if re.match(r'Q*q+$', command): # Zero or more Q, one or more q
for char in command: # Split into individual
yield ([], char) # Yield individual
def _normalize_stack(graphobjs):
"""Convert runs of qQ's in the stack into single graphobjs"""
for operands, operator in graphobjs:
operator = str(operator)
if re.match(r'Q*q+$', operator): # Zero or more Q, one or more q
for char in operator: # Split into individual
yield ([], char) # Yield individual
else:
yield (operands, command)
yield (operands, operator)
def _interpret_contents(contentstream, initial_shorthand=UNIT_SQUARE):
"""Interpret the PDF content stream
"""Interpret the PDF content stream.
The stack represents the state of the PDF graphics stack. We are only
interested in the current transformation matrix (CTM) so we only track
@@ -153,53 +138,61 @@ def _interpret_contents(contentstream, initial_shorthand=UNIT_SQUARE):
PDF units suit our needs so we initialize ctm to the identity matrix.
According to the PDF specification, the maximum stack depth is 32. Other
viewers tolerate some amount beyond this. We issue a warning if the
stack depth exceeds the spec limit and set a hard limit beyond this to
bound our memory requirements. If the stack underflows behavior is
undefined in the spec, but we just pretend nothing happened and leave the
CTM unchanged.
"""
stack = []
ctm = PdfMatrix(initial_shorthand)
xobject_settings = []
inline_images = []
found_text = False
text_operators = set(['Tj', 'TJ', '"', "'"])
operator_whitelist = """q Q Do cm TJ Tj " ' BI ID EI"""
found_vector = False
vector_ops = set('S s f F f* B B* b b*'.split())
image_ops = set('BI ID EI q Q Do cm'.split())
operator_whitelist = ' '.join(vector_ops | image_ops)
for n, op in enumerate(_normalize_stack(
for n, graphobj in enumerate(_normalize_stack(
pikepdf.parse_content_stream(contentstream, operator_whitelist))):
operands, command = op
if command == 'q':
operands, operator = graphobj
if operator == 'q':
stack.append(ctm)
if len(stack) > 32:
raise RuntimeError(
"PDF graphics stack overflow, command %i" % n)
elif command == 'Q':
if len(stack) > 32: # See docstring
if len(stack) > 128:
raise RuntimeError(
"PDF graphics stack overflowed hard limit, operator %i" % n)
warn("PDF graphics stack overflowed spec limit")
elif operator == 'Q':
try:
ctm = stack.pop()
except IndexError:
raise RuntimeError(
"PDF graphics stack underflow, command %i" % n)
elif command == 'cm':
# Keeping the ctm the same seems to be the only sensible thing
# to do. Just pretend nothing happened, keep calm and carry on.
warn("PDF graphics stack underflowed - PDF may be malformed")
elif operator == 'cm':
ctm = PdfMatrix(operands) @ ctm
elif command == 'Do':
elif operator == 'Do':
image_name = operands[0]
settings = XobjectSettings(
name=image_name, shorthand=ctm.shorthand,
stack_depth=len(stack))
xobject_settings.append(settings)
elif command == 'INLINE IMAGE':
elif operator == 'INLINE IMAGE': # BI/ID/EI are grouped into this
iimage = operands[0]
inline = InlineSettings(
iimage=iimage, shorthand=ctm.shorthand,
stack_depth=len(stack))
inline_images.append(inline)
elif command in text_operators:
found_text = True
elif operator in vector_ops:
found_vector = True
return ContentsInfo(
xobject_settings=xobject_settings,
inline_images=inline_images,
found_text=found_text)
found_vector=found_vector)
def _get_dpi(ctm_shorthand, image_size):
@@ -295,7 +288,7 @@ class ImageInfo:
self._bpc = int(pim.bits_per_component)
try:
self._enc = FRIENDLY_ENCODING.get(pim.filters[0], 'image')
except IndexError as e:
except IndexError:
self._enc = '?'
try:
@@ -403,7 +396,6 @@ def _find_regular_images(container, contentsinfo):
that contains images.
Generates images with their DPI at time of drawing.
"""
for pdfimage, xobj in _image_xobjects(container):
@@ -453,11 +445,11 @@ def _find_form_xobject_images(pdf, container, contentsinfo):
# but in practice both Form XObjects and multiple drawing of the
# same object are both very rare.
ctm_shorthand = settings.shorthand
yield from _find_images(
yield from _process_content_streams(
pdf=pdf, container=form_xobject, shorthand=ctm_shorthand)
def _find_images(*, pdf, container, shorthand=None):
def _process_content_streams(*, pdf, container, shorthand=None):
"""Find all individual instances of images drawn in the container
Usually the container is a page, but it may also be a Form XObject.
@@ -466,7 +458,7 @@ def _find_images(*, pdf, container, shorthand=None):
in an XObject.
Form XObjects may include inline images, XObject images,
and recursively, other Form XObjects; and also vector drawing commands.
and recursively, other Form XObjects; and also vector graphic objects.
Every instance of an image being drawn somewhere is flattened and
treated as a unique image, since if the same image is drawn multiple times
@@ -498,98 +490,83 @@ def _find_images(*, pdf, container, shorthand=None):
contentsinfo = _interpret_contents(container, initial_shorthand)
if contentsinfo.found_vector:
yield VectorInfo()
yield from _find_inline_images(contentsinfo)
yield from _find_regular_images(container, contentsinfo)
yield from _find_form_xobject_images(pdf, container, contentsinfo)
def _naive_find_text(*, pdf, page):
if not(page.get('/Type') == '/Page' and '/Contents' in page):
# Not a page, or has no /Contents => no text
return False
def _page_has_text(text_blocks, page_width, page_height):
"""Smarter text detection that ignores text in margins"""
# First we check the main content stream
contentsinfo = _interpret_contents(page, UNIT_SQUARE)
if contentsinfo.found_text:
return True
# Then see if there is a Form XObject with with a content stream
# that might have text. For full completeness we should recursively
# search nested Form XObjects, as we do with images. But that is
# rare.
if '/Resources' in page:
resources = page['/Resources']
if '/XObject' in resources:
xobjs = resources['/XObject'].as_dict()
for xobj in xobjs:
candidate = xobjs[xobj]
if candidate['/Subtype'] != '/Form':
continue
form_xobject = candidate
# Content stream is attached to Form XObject dictionary
sub_contentsinfo = _interpret_contents(
form_xobject, UNIT_SQUARE)
if sub_contentsinfo.found_text:
return True
return False
def _page_get_textblocks(infile, pageno):
"Smarter text detection"
doc = fitz.Document(infile)
if fitz.version[0] >= '1.13.0':
text = doc[pageno].getText('dict')
else:
import json
textjson = doc[pageno].getText('json')
text = json.loads(textjson)
if not text:
return
text['blocks'] = [blk for blk in text['blocks'] if blk['type'] == 0]
return text
def _page_has_text(text):
"Smarter text detection that ignores text in margins"
pw, ph = text['width'], text['height']
pw, ph = float(page_width), float(page_height)
margin_ratio = 0.125
interior_bbox = fitz.Rect(
margin_ratio * pw, margin_ratio * ph,
(1 - margin_ratio) * pw, (1 - margin_ratio) * ph
interior_bbox = (
margin_ratio * pw, # left
(1 - margin_ratio) * ph, # top
(1 - margin_ratio) * pw, # right
margin_ratio * ph # bottom (first quadrant: bottom < top)
)
def rects_intersect(a, b):
"""
Where (a,b) are 4-tuple rects (left-0, top-1, right-2, bottom-3)
https://stackoverflow.com/questions/306316/determine-if-two-rectangles-overlap-each-other
Formula assumes all boxes are in first quadrant
"""
return a[0] < b[2] and a[2] > b[0] and a[1] > b[3] and a[3] < b[1]
has_text = False
for block in text['blocks']:
bbox = fitz.Rect(block['bbox'])
if bbox & interior_bbox:
for bbox in text_blocks:
if rects_intersect(bbox, interior_bbox):
has_text = True
break
return has_text
def _pdf_get_pageinfo(pdf, pageno: int, infile):
def simplify_textboxes(miner):
"""Extract only limited content from text boxes
We do this to save memory and ensure that our objects are pickleable.
"""
for box in get_text_boxes(miner):
first_line = box._objs[0]
first_char = first_line._objs[0]
visible = (first_char.rendermode != 3)
corrupt = (first_char.get_text() == '\ufffd')
yield TextboxInfo(box.bbox, visible, corrupt)
def _pdf_get_pageinfo(pdf, pageno: int, infile, xmltext):
pageinfo = {}
pageinfo['pageno'] = pageno
pageinfo['images'] = []
page = pdf.pages[pageno]
if fitz:
pageinfo['textinfo'] = _page_get_textblocks(str(infile), pageno)
pageinfo['has_text'] = _page_has_text(pageinfo['textinfo'])
else:
pageinfo['has_text'] = _naive_find_text(pdf=pdf, page=page)
mediabox = [Decimal(d.decode()) for d in page.MediaBox.as_list()]
mediabox = [Decimal(d) for d in page.MediaBox.as_list()]
width_pt = mediabox[2] - mediabox[0]
height_pt = mediabox[3] - mediabox[1]
if xmltext is not None:
bboxes = ghosttext.page_get_textblocks(
fspath(infile), pageno, xmltext=xmltext, height=height_pt)
pageinfo['bboxes'] = bboxes
else:
pscript5_mode = str(pdf.docinfo.get('/Creator')).startswith('PScript5')
miner = get_page_analysis(infile, pageno, pscript5_mode)
pageinfo['textboxes'] = list(simplify_textboxes(miner))
bboxes = (box.bbox for box in pageinfo['textboxes'])
pageinfo['has_text'] = _page_has_text(
bboxes, width_pt, height_pt
)
userunit = page.get('/UserUnit', Decimal(1.0))
if not isinstance(userunit, Decimal):
userunit = userunit.decode()
userunit = Decimal(userunit)
pageinfo['userunit'] = userunit
pageinfo['width_inches'] = width_pt * userunit / Decimal(72.0)
pageinfo['height_inches'] = height_pt * userunit / Decimal(72.0)
@@ -600,9 +577,16 @@ def _pdf_get_pageinfo(pdf, pageno: int, infile):
pageinfo['rotate'] = 0
userunit_shorthand = (userunit, 0, 0, userunit, 0, 0)
pageinfo['images'] = [im for im in
_find_images(pdf=pdf, container=page,
shorthand=userunit_shorthand)]
contentsinfo = [ci for ci in
_process_content_streams(pdf=pdf, container=page,
shorthand=userunit_shorthand)]
pageinfo['has_vector'] = False
if any(isinstance(ci, VectorInfo) for ci in contentsinfo):
pageinfo['has_vector'] = True
pageinfo['images'] = [im for im in contentsinfo
if isinstance(im, ImageInfo)]
if pageinfo['images']:
xres = Decimal(max(image.xres for image in pageinfo['images']))
yres = Decimal(max(image.yres for image in pageinfo['images']))
@@ -615,16 +599,33 @@ def _pdf_get_pageinfo(pdf, pageno: int, infile):
return pageinfo
def _pdf_get_all_pageinfo(infile):
def _pdf_get_all_pageinfo(infile, detailed_analysis=False, log=None):
if not log:
log = Mock()
pdf = pikepdf.open(infile)
return [PageInfo(pdf, n, infile) for n in range(len(pdf.pages))]
if pdf.is_encrypted:
raise EncryptedPdfError() # Triggered by encryption with empty passwd
if detailed_analysis:
pages_xml = None
else:
pages_xml = ghosttext.extract_text_xml(infile, pdf, pageno=None, log=log)
pages = []
for n in range(len(pdf.pages)):
page_xml = pages_xml[n] if pages_xml else None
page = PageInfo(pdf, n, infile, page_xml, detailed_analysis)
pages.append(page)
return pages, pdf
class PageInfo:
def __init__(self, pdf, pageno, infile):
def __init__(self, pdf, pageno, infile, xmltext, detailed_analysis=False):
self._pageno = pageno
self._infile = infile
self._pageinfo = _pdf_get_pageinfo(pdf, pageno, infile)
self._pageinfo = _pdf_get_pageinfo(pdf, pageno, infile, xmltext)
self._detailed_analysis = detailed_analysis
@property
def pageno(self):
@@ -634,6 +635,16 @@ class PageInfo:
def has_text(self):
return self._pageinfo['has_text']
@property
def has_corrupt_text(self):
if not self._detailed_analysis:
raise NotImplementedError('Did not do detailed analysis')
return any(tbox.is_corrupt for tbox in self._pageinfo['textboxes'])
@property
def has_vector(self):
return self._pageinfo['has_vector']
@property
def width_inches(self):
return self._pageinfo['width_inches']
@@ -665,10 +676,26 @@ class PageInfo:
def images(self):
return self._pageinfo['images']
def get_textareas(self):
if not fitz:
raise NotImplementedError("no impl without fitz")
yield from self._pageinfo['textinfo']['blocks']
def get_textareas(self, visible=None, corrupt=None):
def predicate(obj, want_visible, want_corrupt):
result = True
if want_visible is not None:
if obj.is_visible != want_visible:
result = False
if want_corrupt is not None:
if obj.is_corrupt != want_corrupt:
result = False
return result
if 'textboxes' not in self._pageinfo:
if visible is not None and corrupt is not None:
raise NotImplementedError(
'Ghostscript textboxes cannot be classified')
return self._pageinfo['bboxes']
return (obj.bbox for obj in self._pageinfo['textboxes']
if predicate(obj, visible, corrupt))
@property
def xres(self):
@@ -700,16 +727,14 @@ class PageInfo:
class PdfInfo:
"""Get summary information about a PDF
"""Get summary information about a PDF"""
"""
def __init__(self, infile):
def __init__(self, infile, detailed_page_analysis=False, log=None):
self._infile = infile
self._pages = _pdf_get_all_pageinfo(infile)
if fitz:
self._toc = fitz.Document(fspath(infile)).getToC()
else:
self._toc = []
self._pages, pdf = _pdf_get_all_pageinfo(
infile, detailed_page_analysis, log=log)
self._needs_rendering = pdf.root.get('/NeedsRendering', False)
self._has_acroform = '/AcroForm' in pdf.root
@property
def pages(self):
@@ -724,6 +749,10 @@ class PdfInfo:
def has_userunit(self):
return any(page.userunit != 1.0 for page in self.pages)
@property
def has_acroform(self):
return self._has_acroform
@property
def filename(self):
if not isinstance(self._infile, (str, Path)):
@@ -731,8 +760,8 @@ class PdfInfo:
return self._infile
@property
def table_of_contents(self):
return self._toc
def needs_rendering(self):
return self._needs_rendering
def __getitem__(self, item):
return self._pages[item]
@@ -743,15 +772,6 @@ class PdfInfo:
def __repr__(self):
return "<PdfInfo('...'), page count={}>".format(len(self))
# def __getstate__(self):
# state = {'_infile': self._infile}
# return state
#
# def __setstate__(self, state):
# self._infile = state['_infile']
# self._pages = _pdf_get_all_pageinfo(self._infile)
def main():
import argparse
parser = argparse.ArgumentParser()
+96
View File
@@ -0,0 +1,96 @@
# © 2018 James R. Barlow: github.com/jbarlow83
#
# This file is part of OCRmyPDF.
#
# OCRmyPDF is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OCRmyPDF is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with OCRmyPDF. If not, see <http://www.gnu.org/licenses/>.
import re
import xml.etree.ElementTree as ET
from ..exec import ghostscript
# Forgive me for I have sinned
# I am using regular expressions to parse XML. However the XML in this case,
# generated by Ghostscript, is self-consistent enough to be parseable.
regex_remove_char_tags = re.compile(br"""
<char\b
(?: [^>] # anything single character but >
| \">\" # special case: trap ">"
)*
/> # terminate with '/>'
""", re.VERBOSE)
def page_get_textblocks(infile, pageno, xmltext, height):
"""Get text boxes out of Ghostscript txtwrite xml"""
root = xmltext
if not hasattr(xmltext, 'findall'):
return []
def blocks():
for span in root.findall('.//span'):
bbox_str = span.attrib['bbox']
font_size = span.attrib['size']
pts = [int(pt) for pt in bbox_str.split()]
pts[1] = pts[1] - int(float(font_size) + 0.5)
bbox_topdown = tuple(pts)
bb = bbox_topdown
bbox_bottomup = (bb[0], height - bb[3], bb[2], height - bb[1])
yield bbox_bottomup
def joined_blocks():
prev = None
for bbox in blocks():
if prev is None:
prev = bbox
if bbox[1] == prev[1] and bbox[3] == prev[3]:
gap = prev[2] - bbox[0]
height = abs(bbox[3] - bbox[1])
if gap < height:
# Join boxes
prev = (prev[0], prev[1], bbox[2], bbox[3])
continue
# yield previously joined bboxes and start anew
yield prev
prev = bbox
if prev is not None:
yield prev
return [block for block in joined_blocks()]
def extract_text_xml(infile, pdf, pageno=None, log=None):
existing_text = ghostscript.extract_text(infile, pageno=None)
existing_text = regex_remove_char_tags.sub(b' ', existing_text)
try:
root = ET.fromstringlist([
b'<document>\n', existing_text, b'</document>\n'
])
page_xml = root.findall('page')
except ET.ParseError as e:
log.error(
"An error occurred while attempting to retrieve existing text in "
"the input file. Will attempt to continue assuming that there is "
"no existing text in the file. The error was:")
log.error(e)
page_xml = [None] * len(pdf.pages)
page_count_difference = len(pdf.pages) - len(page_xml)
if page_count_difference != 0:
log.error("The number of pages in the input file is inconsistent.")
if page_count_difference > 0:
page_xml.extend([None] * page_count_difference)
return page_xml
+237
View File
@@ -0,0 +1,237 @@
# © 2018 James R. Barlow: github.com/jbarlow83
#
# This file is part of OCRmyPDF.
#
# OCRmyPDF is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OCRmyPDF is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with OCRmyPDF. If not, see <http://www.gnu.org/licenses/>.
import re
from math import copysign
from pathlib import Path
from unittest.mock import patch
import pdfminer.encodingdb
import pdfminer.pdfdevice
import pdfminer.pdfinterp
from pdfminer.converter import PDFLayoutAnalyzer
from pdfminer.glyphlist import glyphname2unicode
from pdfminer.layout import (LAParams, LTChar, LTContainer, LTLayoutContainer,
LTPage, LTTextBox, LTTextLine)
from pdfminer.pdfdocument import PDFTextExtractionNotAllowed
from pdfminer.pdffont import (PDFCIDFont, PDFFont, PDFType3Font,
PDFUnicodeNotDefined, PDFSimpleFont)
from pdfminer.pdfpage import PDFPage
from pdfminer.utils import bbox2str, fsplit, matrix2str
from ..exceptions import EncryptedPdfError
STRIP_NAME = re.compile(r'[0-9]+')
#
# Unconditional pdfminer patches
#
def name2unicode(name):
"""Fix pdfminer's name2unicode function
Font cids that are mapped to names of the form /g123 seem to be, by convention
characters with no corresponding Unicode entry. These can be subsetted fonts
or symbolic fonts. There seems to be no way to map /g123 fonts to Unicode,
barring a ToUnicode data structure.
"""
if name in glyphname2unicode:
return glyphname2unicode[name]
if name.startswith('g') or name.startswith('a'):
raise KeyError(name)
if name.startswith('uni'):
try:
return chr(int(name[3:], 16))
except ValueError: # Not hexadecimal
raise KeyError(name)
m = STRIP_NAME.search(name)
if not m:
raise KeyError(name)
return chr(int(m.group(0)))
pdfminer.encodingdb.name2unicode = name2unicode
original_PDFFont_init = PDFFont.__init__
def PDFFont__init__(self, descriptor, widths, default_width=None):
original_PDFFont_init(self, descriptor, widths, default_width)
# PDF spec says descent should be negative
# A font with a positive descent implies it floats entirely above the
# baseline, i.e. it's not really a baseline anymore. I have fonts that
# claim a positive descent, but treating descent as positive always seems
# to misposition text.
if self.descent > 0:
self.descent = -self.descent
PDFFont.__init__ = PDFFont__init__
original_PDFSimpleFont_init = PDFSimpleFont.__init__
def PDFSimpleFont__init__(self, descriptor, widths, spec):
# Font encoding is specified either by a name of
# built-in encoding or a dictionary that describes
# the differences.
original_PDFSimpleFont_init(self, descriptor, widths, spec)
# pdfminer is incorrect. If there is no ToUnicode and no Encoding, do not
# assume Unicode conversion is possible. RM 9.10.2
if not self.unicode_map and 'Encoding' not in spec:
self.cid2unicode = {}
return
PDFSimpleFont.__init__ = PDFSimpleFont__init__
#
# pdfminer patches when creator is PScript5.dll
#
def PDFType3Font__PScript5_get_height(self):
h = self.bbox[3]-self.bbox[1]
if h == 0:
h = self.ascent - self.descent
return h * copysign(1.0, self.vscale)
def PDFType3Font__PScript5_get_descent(self):
return self.descent * copysign(1.0, self.vscale)
def PDFType3Font__PScript5_get_ascent(self):
return self.ascent * copysign(1.0, self.vscale)
class LTStateAwareChar(LTChar):
"""A subclass of LTChar that tracks text render mode at time of drawing"""
__slots__ = (
'rendermode', '_text', 'matrix', 'fontname', 'adv', 'upright', 'size',
'width', 'height', 'bbox', 'x0', 'x1', 'y0', 'y1'
)
def __init__(self, matrix, font, fontsize, scaling, rise, text, textwidth,
textdisp, textstate, *args):
super().__init__(matrix, font, fontsize, scaling, rise, text, textwidth,
textdisp, *args)
self.rendermode = textstate.render
def is_compatible(self, obj):
"""Check if characters can be combined into a textline
We consider characters compatible if:
- the Unicode mapping is known, and both have the same render mode
- the Unicode mapping is unknown but both are part of the same font
"""
both_unicode_mapped = (isinstance(self._text, str) and
isinstance(obj._text, str))
try:
if both_unicode_mapped:
return self.rendermode == obj.rendermode
font0, _ = self._text
font1, _ = obj._text
return font0 == font1 and self.rendermode == obj.rendermode
except (ValueError, AttributeError):
return False
def get_text(self):
if isinstance(self._text, tuple):
return ''
return self._text
def __repr__(self):
return ('<%s %s matrix=%s rendermode=%r font=%r adv=%s text=%r>' %
(self.__class__.__name__, bbox2str(self.bbox),
matrix2str(self.matrix), self.rendermode, self.fontname, self.adv,
self.get_text()))
class TextPositionTracker(PDFLayoutAnalyzer):
"""A page layout analyzer that pays attention to text visibility"""
def __init__(self, rsrcmgr, pageno=1, laparams=None):
super().__init__(rsrcmgr, pageno, laparams)
self.textstate = None
self.result = None
def begin_page(self, page, ctm):
super().begin_page(page, ctm)
self.cur_item = LTPage(self.pageno, page.mediabox)
def end_page(self, page):
assert not self._stack, str(len(self._stack))
assert isinstance(self.cur_item, LTPage), str(type(self.cur_item))
if self.laparams is not None:
self.cur_item.analyze(self.laparams)
self.pageno += 1
self.receive_layout(self.cur_item)
def render_string(self, textstate, seq, *args):
self.textstate = textstate.copy()
super().render_string(self.textstate, seq, *args)
def render_char(self, matrix, font, fontsize, scaling, rise, cid, *args):
try:
text = font.to_unichr(cid)
assert isinstance(text, str), str(type(text))
except PDFUnicodeNotDefined:
text = self.handle_undefined_char(font, cid)
textwidth = font.char_width(cid)
textdisp = font.char_disp(cid)
item = LTStateAwareChar(
matrix, font, fontsize, scaling, rise, text,
textwidth, textdisp, self.textstate, *args)
self.cur_item.add(item)
return item.adv
def handle_undefined_char(self, font, cid):
#log.info('undefined: %r, %r', font, cid)
return (font.fontname, cid)
def receive_layout(self, ltpage):
self.result = ltpage
def get_result(self):
return self.result
def get_page_analysis(infile, pageno, pscript5_mode):
rman = pdfminer.pdfinterp.PDFResourceManager(caching=True)
dev = TextPositionTracker(rman, laparams=LAParams())
interp = pdfminer.pdfinterp.PDFPageInterpreter(rman, dev)
if pscript5_mode:
patcher = patch.multiple(
'pdfminer.pdffont.PDFType3Font',
spec=True,
get_ascent=PDFType3Font__PScript5_get_ascent,
get_descent=PDFType3Font__PScript5_get_descent,
get_height=PDFType3Font__PScript5_get_height
)
patcher.start()
try:
with Path(infile).open('rb') as f:
page = PDFPage.get_pages(f, pagenos=[pageno], maxpages=0)
interp.process_page(next(page))
except PDFTextExtractionNotAllowed:
raise EncryptedPdfError()
finally:
if pscript5_mode:
patcher.stop()
return dev.get_result()
def get_text_boxes(obj):
for child in obj:
if isinstance(child, (LTTextBox)):
yield child
else:
try:
yield from get_text_boxes(child)
except TypeError:
continue
-7
View File
@@ -1,7 +0,0 @@
pytest >= 3.2
pytest-helpers-namespace
pytest-xdist
pytest-cov
pytest-timeout
python-xmp-toolkit # requires apt-get install libexempi3
# or brew install exempi
@@ -1 +0,0 @@
Tesseract Open Source OCR Engine v4.0.0-beta.1 with Leptonica
@@ -1,25 +0,0 @@
a la Waterman
4 ons linzen
3 liter water
3 uien
bloem, boter
2 kopjes melk
laurier, kruidnagel, kerrie, zout
De linzgen wassen en in -l liter kokend wa-
ter 1 dag laten weken, 2 liter water bij
de linzen voegen, zonder het water waarin
ze geweekt zijn af te gieten, De helft van
de uien bakken met laurier en Kruicdnagel.
Alle uien, kerrie en gout bij de linzen
voegen, Alles aan de kook brengen,. Van de
bloem met boter en melk een papje maken en
verder afmaken met de soep, Als de linzen
gaar Zijn is de soep klaar.
@@ -0,0 +1 @@
Tesseract Open Source OCR Engine v3.05.01 with Leptonica
@@ -0,0 +1,25 @@
é la Waterman
h ens linzen
3 liter water
3 mien
bloem} hater
2 kopjes melk
laurier, kruidnagel, kerrie, gout
Be linzen wassen en in¢l liter kokend wa-
ter 1 dag laten weken. 2 liter water bi'
de linzen voegen, gender hat water wagrin
ze geweekt zijn af te gieten. De helft Van
de mien bakken met laurier en kruiénagal.
Alla mien, kerrie en zout bij de linzen
voegen. A1135 aan de Rook brengem. Van de
bloem mat boter-en melk een papje maken en
verder afmaken met de soap. A13 de linzen
gaar zijn is de seep klaar.
@@ -1,4 +0,0 @@
This should be a perfect circle:
@@ -1,3 +1,3 @@
Tesseract Open Source OCR Engine v4.0.0-beta.1 with Leptonica
Tesseract Open Source OCR Engine v3.05.01 with Leptonica
Too few characters. Skipping this page
OSD: Weak margin (0.00) for 24 blob text block, but using orientation anyway: 0
@@ -0,0 +1,4 @@
This shnuld be a perfect circle-
@@ -5,11 +5,11 @@
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name='ocr-system' content='tesseract 4.0.0-beta.1' />
<meta name='ocr-system' content='tesseract 3.05.01' />
<meta name='ocr-capabilities' content='ocr_page ocr_carea ocr_par ocr_line ocrx_word'/>
</head>
<body>
<div class='ocr_page' id='page_1' title='image "/var/folders/37/78_114p552q16vv6vmgm5kr00000gn/T/com.github.ocrmypdf.4ovfr32d/000001.ocr.png"; bbox 0 0 1000 800; ppageno 0'>
<div class='ocr_page' id='page_1' title='image "/var/folders/37/78_114p552q16vv6vmgm5kr00000gn/T/com.github.ocrmypdf.7vjmeixk/000001.ocr.png"; bbox 0 0 1000 800; ppageno 0'>
<div class='ocr_carea' id='block_1_1' title="bbox 296 96 704 504">
<p class='ocr_par' id='par_1_1' lang='eng' title="bbox 296 96 704 504">
<span class='ocr_line' id='line_1_1' title="bbox 296 96 704 504; baseline 0 296; x_size 169.33333; x_descenders 42.333332; x_ascenders 42.333336"><span class='ocrx_word' id='word_1_1' title='bbox 296 96 704 504; x_wconf 95'><strong> </strong></span>
@@ -18,7 +18,7 @@
</div>
<div class='ocr_carea' id='block_1_2' title="bbox 150 592 841 622">
<p class='ocr_par' id='par_1_2' lang='eng' title="bbox 150 592 841 622">
<span class='ocr_line' id='line_1_2' title="bbox 150 592 841 622; baseline 0 -6; x_size 30; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_2' title='bbox 150 592 230 616; x_wconf 96'><strong>This</strong></span> <span class='ocrx_word' id='word_1_3' title='bbox 260 592 384 616; x_wconf 95'><strong>should</strong></span> <span class='ocrx_word' id='word_1_4' title='bbox 413 592 449 616; x_wconf 95'><strong>be</strong></span> <span class='ocrx_word' id='word_1_5' title='bbox 479 600 493 616; x_wconf 95'><strong>a</strong></span> <span class='ocrx_word' id='word_1_6' title='bbox 523 592 668 622; x_wconf 95'><strong>perfect</strong></span> <span class='ocrx_word' id='word_1_7' title='bbox 698 592 841 616; x_wconf 55'><strong>circle:</strong></span>
<span class='ocr_line' id='line_1_2' title="bbox 150 592 841 622; baseline 0 -6; x_size 30; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_2' title='bbox 150 592 230 616; x_wconf 85'><strong>This</strong></span> <span class='ocrx_word' id='word_1_3' title='bbox 260 592 384 616; x_wconf 81'>shnuld</span> <span class='ocrx_word' id='word_1_4' title='bbox 413 592 449 616; x_wconf 81'><strong>be</strong></span> <span class='ocrx_word' id='word_1_5' title='bbox 479 600 493 616; x_wconf 85'><em>a</em></span> <span class='ocrx_word' id='word_1_6' title='bbox 523 592 668 622; x_wconf 76'>perfect</span> <span class='ocrx_word' id='word_1_7' title='bbox 698 592 841 616; x_wconf 76'><strong>circle-</strong></span>
</span>
</p>
</div>
@@ -1,3 +1,3 @@
Tesseract Open Source OCR Engine v4.0.0-beta.1 with Leptonica
Tesseract Open Source OCR Engine v3.05.01 with Leptonica
Too few characters. Skipping this page
OSD: Weak margin (0.00) for 24 blob text block, but using orientation anyway: 0
@@ -1,4 +1,4 @@
This should be a perfect circle:
This shnuld be a perfect circle-
@@ -1 +0,0 @@
Tesseract Open Source OCR Engine v4.0.0-beta.1 with Leptonica
@@ -1 +0,0 @@
Tesseract Open Source OCR Engine v4.0.0-beta.1 with Leptonica
@@ -1 +0,0 @@
Tesseract Open Source OCR Engine v4.0.0-beta.1 with Leptonica
@@ -1,123 +0,0 @@
The LinnSequencer
32 Track MIDI Sequence Recorder
The LinnSequencer is a state-of-the-art composition and performance tool for the professional musician. It is
extremely powerful, yet amazingly simple to learn and use. Its many remarkable features include:
¢ Operation is similar to multi-track tape recorder with PLAY, STOP, RECORD, FAST
FORWARD, REWIND, and LOCATE controls.
e Each of the 100 sequences contains 32 simultaneous, polyphonic tracks. Each track may
be assigned to one of 16 MIDI channels. Simultaneously plays up to 16 polyphonic
synthesizers!
¢ Ultra-fast 3%” disk drive stores complex songs in seconds and holds over 110,000 notes
per disk!
¢ One or all tracks may be TRANSPOSED at the touch of a key.
e Exclusive real-time ERASE function makes editing FAST.
* Exclusive REPEAT function automatically repeats any held notes at a pre-selected
rhythmic value.
¢ TIMING CORRECTION works during playback and operates without chopping notes.
¢ Optional SMPTE time code synchronization.
© Optional remote control.
Recording a Sequence
To record a sequence, simply press RECORD and PLAY,
then play your MIDI keyboard in time to the Sequencers
click track. When the sequence loops back around to bar 1,
you ll hear what you played—only all timing errors will be
corrected! (Timing correction may be adjusted or defeated).
Any additional notes played will be added into the track
— existing notes are not erased while recording!
FAST FORWARD, REWIND, and LOCATE controls
may be used at any time to quickly access any location in
your sequence for spot-recording. To overdub a new part,
select a different track and start recording—while you
record, the first track will play in perfect sync (unless you
MUTE it, or SOLO another track). In this way, up to 32
tracks may be overdubbed! All MIDI effects are recorded
including pitch bend, modulation, velocity, aftertouch,
sustain pedal, and program changes!
Editing
To erase a wrong note, simply hold ERASE and press
the note to be erased just before it plays in the sequence—
when played back, it will be gone. Notes may also be
added, erased, or changed using the SINGLE STEP func-
tion. To overdub notes at specific points within a sequence,
Additional Features
simply use LOCATE, FAST FORWARD, or REWIND to
find the desired bar number, then start recording.
The INSERT/COPY function allows you to move bars
from one location to another—in the same sequence or a
different one. For example, you might insert a copy of the
first verse between the second chorus and the bridge.
DELETE BARS operates the same way to remove
unwanted sections,
Creating a Song
One way to create a song is to record each track all the
way through (up to 999 bars). Another way is to record
each basic section (verse, chorus, etc.) in individual
sequences, then use the CREATE SONG function to “chain”
them together. CREATE SONG will then automatically
copy all the parts into a new sequence. If desired, you can
even set the last few bars to repeat infinitely, for a fadeout.
Composition Without Compromise
The technology you use should never be so complex that
it interferes with the creative process. Thats precisely why
the LinnSequencer is designed to let you compose, record
and edit while devoting your undivided attention to your
music. See your Linn dealer today for a demonstration!
* Simple, easy to learn operation—the 32 character LCD display clearly guides you through all operations. If needed, the
HELP button displays additional explanations.
* Non-destructive recording—existing notes are not erased while recording.
¢ Two FOOTSWITCH INPUTS may be assigned to remotely control many of the commonly used functions, including
ERASE, REPEAT, PLAY/STOP, or LOCATE.
¢ Iwo TRIGGER OUTPUTS may be programmed to output pulses at any selected note value.
© Will sync to standard LinnDrum or Linn 9000 sync tone.
© Utilizes ultra high-speed, 8 MHz 80186 16 bit computer internally for FAST operation.
* TEMPO may be specified in BEATS-PER-MINUTE or FRAMES-PER-BEAT at 24, 25, or 30 frames per second,
(even drop frame!)
¢ TEMPO may be entered numerically, adjustable in tenths of a Beat-Per-Minute increments, or by tapping quarter notes
on the TAP TEMPO button.
¢ TEMPO CHANGES may be programmed into a sequence, with smooth transitions if desired.
¢ Any TIME SIGNATURE may be used, and may be changed within a song.
linn
Linn Electronics, Inc.
18720 Oxnard Street, Tarzana, CA 91356
(818) 708-8131 TELEX #298949 LINN UR
@@ -1 +0,0 @@
Tesseract Open Source OCR Engine v4.0.0-beta.1 with Leptonica
@@ -0,0 +1 @@
Tesseract Open Source OCR Engine v3.05.01 with Leptonica
@@ -1,51 +1,51 @@
The LinnSequencer
32 Track MIDI Sequence Recorder
The LinnSequencer is a state-of-the-art composition and performance tool for the professional musician. It is
The LinnSequencer is a stateofthe-art composition and performance tool for the professional musician. It is
extremely powerful, yet amazingly simple to learn and use. Its many remarkable features include:
¢ Operation is similar to multi-track tape recorder with PLAY, STOP, RECORD, FAST
0 Operation is similar to multitrack tape recorder with PLAY, STOP, RECORD, FAST
FORWARD, REWIND, and LOCATE controls.
e Each of the 100 sequences contains 32 simultaneous, polyphonic tracks. Each track may
0 Each of the 100 sequences contains 32 simultaneous, polyphonic tracks. Each track may
be assigned to one of 16 MIDI channels. Simultaneously plays up to 16 polyphonic
synthesizers!
synthesizers !
¢ Ultra-fast 3%” disk drive stores complex songs in seconds and holds over 110,000 notes
0 Ultrafast 3 1/2 ” disk drive stores complex songs in seconds and holds over 110,000 notes
per disk!
¢ One or all tracks may be TRANSPOSED at the touch of a key.
e Exclusive real-time ERASE function makes editing FAST.
* Exclusive REPEAT function automatically repeats any held notes at a pre-selected
0 One or all tracks may be TRANSPOSED at the touch of a key.
0 Exclusive realtime ERASE function makes editing FAST.
0 Exclusive REPEAT function automatically repeats any held notes at a pre-selected
rhythmic value.
¢ TIMING CORRECTION works during playback and operates without chopping notes.
0 TIMING CORRECTION works during playback and operates without chopping notes.
¢ Optional SMPTE time code synchronization.
0 Optional SMPTE time code synchronization.
© Optional remote control.
0 Optional remote control.
Recording a Sequence
Recording 3 Sequence
To record a sequence, simply press RECORD and PLAY,
then play your MIDI keyboard in time to the Sequencers
click track. When the sequence loops back around to bar 1,
you ll hear what you played—only all timing errors will be
youll hear what you played—only all timing errors will be
corrected! (Timing correction may be adjusted or defeated).
Any additional notes played will be added into the track
existing notes are not erased while recording!
—existing notes are not erased while recording!
FAST FORWARD, REWIND, and LOCATE controls
may be used at any time to quickly access any location in
your sequence for spot-recording. To overdub a new part,
select a different track and start recordingwhile you
record, the first track will play in perfect sync (unless you
your sequence for spotrecording. To overdub a new part,
select a different track and start recording~while you
record, the rsttrack will play in perfect sync (unless you
MUTE it, or SOLO another track). In this way, up to 32
tracks may be overdubbed! All MIDI effects are recorded
including pitch bend, modulation, velocity, aftertouch,
@@ -58,7 +58,7 @@ the note to be erased just before it plays in the sequence—
when played back, it will be gone. Notes may also be
added, erased, or changed using the SINGLE STEP func-
tion. To overdub notes at specific points within a sequence,
tion. To overdub notes at specic points within a sequence,
Additional Features
@@ -70,7 +70,7 @@ from one location to another—in the same sequence or a
different one. For example, you might insert a copy of the
first verse between the second chorus and the bridge.
DELETE BARS operates the same way to remove
unwanted sections,
unwanted sections.
Creating a Song
@@ -90,34 +90,34 @@ the LinnSequencer is designed to let you compose, record
and edit while devoting your undivided attention to your
music. See your Linn dealer today for a demonstration!
* Simple, easy to learn operation—the 32 character LCD display clearly guides you through all operations. If needed, the
0 Simple, easy to learn operation—the 32 character LCD display clearly guides you through all operations. If needed, the
HELP button displays additional explanations.
* Non-destructive recording—existing notes are not erased while recording.
¢ Two FOOTSWITCH INPUTS may be assigned to remotely control many of the commonly used functions, including
0 Non-destructive recording—existing notes are not erased while recording.
0 Two FOOTSWITCH INPUTS may be assigned to remotely control many of the commonly used functions, including
ERASE, REPEAT, PLAY/STOP, or LOCATE.
¢ Iwo TRIGGER OUTPUTS may be programmed to output pulses at any selected note value.
0 Two TRIGGER OUTPUTS may be programmed to output pulses at any selected note value.
© Will sync to standard LinnDrum or Linn 9000 sync tone.
0 Will sync to standard LinnDrum or Linn 9000 sync tone.
© Utilizes ultra high-speed, 8 MHz 80186 16 bit computer internally for FAST operation.
* TEMPO may be specified in BEATS-PER-MINUTE or FRAMES-PER-BEAT at 24, 25, or 30 frames per second,
' Utilizes ultra highspeed, 8 MHz 80186 16 bit computer internally for FAST operation.
0 TEMPO may be specified in BEATS-PERMINUTE or FRAMES-PERBEAT at 24, 25, or 30 frames per second,
(even drop frame!)
¢ TEMPO may be entered numerically, adjustable in tenths of a Beat-Per-Minute increments, or by tapping quarter notes
0 TEMPO may be entered numerically, adjustable in tenths of a Beat-Per-Minute increments, or by tapping quarter notes
on the TAP TEMPO button.
¢ TEMPO CHANGES may be programmed into a sequence, with smooth transitions if desired.
¢ Any TIME SIGNATURE may be used, and may be changed within a song.
0 TEMPO CHANGES may be programmed into a sequence, with smooth transitions if desired.
° Any TIME SIGNATURE may be used, and may be changed within a song.
linn
E1111
Linn Electronics, Inc.
18720 Oxnard Street, Tarzana, CA 91356
(818) 708-8131 TELEX #298949 LINN UR
(818) 7088131 T ELEX #298949 LINN UR
@@ -5,328 +5,328 @@
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name='ocr-system' content='tesseract 4.0.0-beta.1' />
<meta name='ocr-system' content='tesseract 3.05.01' />
<meta name='ocr-capabilities' content='ocr_page ocr_carea ocr_par ocr_line ocrx_word'/>
</head>
<body>
<div class='ocr_page' id='page_1' title='image "/var/folders/37/78_114p552q16vv6vmgm5kr00000gn/T/com.github.ocrmypdf.im0i09rj/000001.ocr.png"; bbox 0 0 2550 3300; ppageno 0'>
<div class='ocr_page' id='page_1' title='image "/var/folders/37/78_114p552q16vv6vmgm5kr00000gn/T/com.github.ocrmypdf.wahjk6fa/000001.ocr.png"; bbox 0 0 2550 3300; ppageno 0'>
<div class='ocr_carea' id='block_1_1' title="bbox 582 131 1968 303">
<p class='ocr_par' id='par_1_1' lang='eng' title="bbox 582 131 1968 303">
<span class='ocr_line' id='line_1_1' title="bbox 882 131 1657 217; baseline 0.001 -17; x_size 85; x_descenders 16; x_ascenders 19"><span class='ocrx_word' id='word_1_1' title='bbox 882 132 1036 202; x_wconf 93'><strong>The</strong></span> <span class='ocrx_word' id='word_1_2' title='bbox 1061 131 1657 217; x_wconf 91'><strong>LinnSequencer</strong></span>
<span class='ocr_line' id='line_1_1' title="bbox 882 131 1657 217; baseline 0.001 -17; x_size 85; x_descenders 16; x_ascenders 19"><span class='ocrx_word' id='word_1_1' title='bbox 882 132 1036 202; x_wconf 86'>The</span> <span class='ocrx_word' id='word_1_2' title='bbox 1061 131 1657 217; x_wconf 84'>LinnSequencer</span>
</span>
<span class='ocr_line' id='line_1_2' title="bbox 582 215 1968 303; baseline 0 -17; x_size 87; x_descenders 16; x_ascenders 21"><span class='ocrx_word' id='word_1_3' title='bbox 582 215 674 286; x_wconf 96'><strong>32</strong></span> <span class='ocrx_word' id='word_1_4' title='bbox 697 218 923 288; x_wconf 95'><strong>Track</strong></span> <span class='ocrx_word' id='word_1_5' title='bbox 948 218 1181 287; x_wconf 96'><strong>MIDI</strong></span> <span class='ocrx_word' id='word_1_6' title='bbox 1208 217 1575 303; x_wconf 96'><strong>Sequence</strong></span> <span class='ocrx_word' id='word_1_7' title='bbox 1600 218 1968 288; x_wconf 96'><strong>Recorder</strong></span>
<span class='ocr_line' id='line_1_2' title="bbox 582 215 1968 303; baseline 0 -17; x_size 87; x_descenders 16; x_ascenders 21"><span class='ocrx_word' id='word_1_3' title='bbox 582 215 674 286; x_wconf 90'>32</span> <span class='ocrx_word' id='word_1_4' title='bbox 697 218 923 288; x_wconf 84'>Track</span> <span class='ocrx_word' id='word_1_5' title='bbox 948 218 1181 287; x_wconf 94'><strong>MIDI</strong></span> <span class='ocrx_word' id='word_1_6' title='bbox 1208 217 1575 303; x_wconf 89'>Sequence</span> <span class='ocrx_word' id='word_1_7' title='bbox 1600 218 1968 288; x_wconf 83'>Recorder</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_2' title="bbox 347 380 2188 574">
<p class='ocr_par' id='par_1_2' lang='eng' title="bbox 347 380 2188 423">
<span class='ocr_line' id='line_1_3' title="bbox 347 380 2188 423; baseline -0.001 -12; x_size 38; x_descenders 8; x_ascenders 10"><span class='ocrx_word' id='word_1_8' title='bbox 347 380 412 410; x_wconf 93'><strong>The</strong></span> <span class='ocrx_word' id='word_1_9' title='bbox 424 380 661 417; x_wconf 92'><strong>LinnSequencer</strong></span> <span class='ocrx_word' id='word_1_10' title='bbox 663 380 712 411; x_wconf 96'><strong>is</strong></span> <span class='ocrx_word' id='word_1_11' title='bbox 724 390 743 411; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_12' title='bbox 754 381 1005 423; x_wconf 96'><strong>state-of-the-art</strong></span> <span class='ocrx_word' id='word_1_13' title='bbox 1017 380 1226 418; x_wconf 96'><strong>composition</strong></span> <span class='ocrx_word' id='word_1_14' title='bbox 1238 381 1299 411; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_15' title='bbox 1311 380 1507 418; x_wconf 96'><strong>performance</strong></span> <span class='ocrx_word' id='word_1_16' title='bbox 1509 385 1591 411; x_wconf 96'><strong>tool</strong></span> <span class='ocrx_word' id='word_1_17' title='bbox 1593 380 1663 411; x_wconf 97'><strong>for</strong></span> <span class='ocrx_word' id='word_1_18' title='bbox 1674 381 1725 410; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_19' title='bbox 1737 380 1940 417; x_wconf 95'><strong>professional</strong></span> <span class='ocrx_word' id='word_1_20' title='bbox 1952 380 2103 411; x_wconf 96'><strong>musician.</strong></span> <span class='ocrx_word' id='word_1_21' title='bbox 2106 381 2152 410; x_wconf 96'><strong>It</strong></span> <span class='ocrx_word' id='word_1_22' title='bbox 2164 380 2188 410; x_wconf 96'><strong>is</strong></span>
<span class='ocr_line' id='line_1_3' title="bbox 347 380 2188 423; baseline -0.001 -12; x_size 38; x_descenders 8; x_ascenders 10"><span class='ocrx_word' id='word_1_8' title='bbox 347 380 412 410; x_wconf 86'>The</span> <span class='ocrx_word' id='word_1_9' title='bbox 424 380 676 417; x_wconf 85'>LinnSequencer</span> <span class='ocrx_word' id='word_1_10' title='bbox 688 380 712 411; x_wconf 87'>is</span> <span class='ocrx_word' id='word_1_11' title='bbox 724 390 743 411; x_wconf 90'>a</span> <span class='ocrx_word' id='word_1_12' title='bbox 754 381 1005 423; x_wconf 79'>stateofthe-art</span> <span class='ocrx_word' id='word_1_13' title='bbox 1017 380 1226 418; x_wconf 86'>composition</span> <span class='ocrx_word' id='word_1_14' title='bbox 1238 381 1299 411; x_wconf 88'>and</span> <span class='ocrx_word' id='word_1_15' title='bbox 1311 380 1525 418; x_wconf 85'>performance</span> <span class='ocrx_word' id='word_1_16' title='bbox 1536 380 1602 411; x_wconf 85'>tool</span> <span class='ocrx_word' id='word_1_17' title='bbox 1615 380 1663 411; x_wconf 82'>for</span> <span class='ocrx_word' id='word_1_18' title='bbox 1674 381 1725 410; x_wconf 94'>the</span> <span class='ocrx_word' id='word_1_19' title='bbox 1737 380 1940 417; x_wconf 85'>professional</span> <span class='ocrx_word' id='word_1_20' title='bbox 1952 380 2112 411; x_wconf 87'>musician.</span> <span class='ocrx_word' id='word_1_21' title='bbox 2127 381 2152 410; x_wconf 90'>It</span> <span class='ocrx_word' id='word_1_22' title='bbox 2164 380 2188 410; x_wconf 90'>is</span>
</span>
</p>
<p class='ocr_par' id='par_1_3' lang='eng' title="bbox 347 430 1988 468">
<span class='ocr_line' id='line_1_4' title="bbox 347 430 1988 468; baseline 0 -8; x_size 37; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_23' title='bbox 347 430 507 467; x_wconf 96'><strong>extremely</strong></span> <span class='ocrx_word' id='word_1_24' title='bbox 518 430 677 467; x_wconf 96'><strong>powerful,</strong></span> <span class='ocrx_word' id='word_1_25' title='bbox 691 435 739 467; x_wconf 96'><strong>yet</strong></span> <span class='ocrx_word' id='word_1_26' title='bbox 752 430 924 468; x_wconf 96'><strong>amazingly</strong></span> <span class='ocrx_word' id='word_1_27' title='bbox 936 430 1044 468; x_wconf 96'><strong>simple</strong></span> <span class='ocrx_word' id='word_1_28' title='bbox 1055 435 1087 461; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_29' title='bbox 1099 431 1183 461; x_wconf 96'><strong>learn</strong></span> <span class='ocrx_word' id='word_1_30' title='bbox 1195 431 1257 461; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_31' title='bbox 1269 440 1329 461; x_wconf 95'><strong>use.</strong></span> <span class='ocrx_word' id='word_1_32' title='bbox 1344 431 1393 461; x_wconf 96'><strong>Its</strong></span> <span class='ocrx_word' id='word_1_33' title='bbox 1406 440 1499 467; x_wconf 96'><strong>many</strong></span> <span class='ocrx_word' id='word_1_34' title='bbox 1510 430 1701 461; x_wconf 96'><strong>remarkable</strong></span> <span class='ocrx_word' id='word_1_35' title='bbox 1714 430 1843 460; x_wconf 96'><strong>features</strong></span> <span class='ocrx_word' id='word_1_36' title='bbox 1856 430 1988 461; x_wconf 96'><strong>include:</strong></span>
<span class='ocr_line' id='line_1_4' title="bbox 347 430 1988 468; baseline 0 -8; x_size 37; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_23' title='bbox 347 430 507 467; x_wconf 86'>extremely</span> <span class='ocrx_word' id='word_1_24' title='bbox 518 430 677 467; x_wconf 84'>powerful,</span> <span class='ocrx_word' id='word_1_25' title='bbox 691 435 739 467; x_wconf 91'>yet</span> <span class='ocrx_word' id='word_1_26' title='bbox 752 430 924 468; x_wconf 87'>amazingly</span> <span class='ocrx_word' id='word_1_27' title='bbox 936 430 1044 468; x_wconf 85'>simple</span> <span class='ocrx_word' id='word_1_28' title='bbox 1055 435 1087 461; x_wconf 87'>to</span> <span class='ocrx_word' id='word_1_29' title='bbox 1099 431 1183 461; x_wconf 88'>learn</span> <span class='ocrx_word' id='word_1_30' title='bbox 1195 431 1257 461; x_wconf 90'>and</span> <span class='ocrx_word' id='word_1_31' title='bbox 1269 440 1329 461; x_wconf 89'>use.</span> <span class='ocrx_word' id='word_1_32' title='bbox 1344 431 1393 461; x_wconf 87'>Its</span> <span class='ocrx_word' id='word_1_33' title='bbox 1406 440 1499 467; x_wconf 91'>many</span> <span class='ocrx_word' id='word_1_34' title='bbox 1510 430 1701 461; x_wconf 88'>remarkable</span> <span class='ocrx_word' id='word_1_35' title='bbox 1714 430 1843 460; x_wconf 85'>features</span> <span class='ocrx_word' id='word_1_36' title='bbox 1856 430 1988 461; x_wconf 87'>include:</span>
</span>
</p>
<p class='ocr_par' id='par_1_4' lang='eng' title="bbox 350 482 2093 574">
<span class='ocr_line' id='line_1_5' title="bbox 350 482 2093 527; baseline 0 -9; x_size 43; x_descenders 7; x_ascenders 11"><span class='ocrx_word' id='word_1_37' title='bbox 350 490 368 508; x_wconf 73'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_38' title='bbox 383 482 585 526; x_wconf 95'><strong>Operation</strong></span> <span class='ocrx_word' id='word_1_39' title='bbox 598 482 627 518; x_wconf 96'><strong>is</strong></span> <span class='ocrx_word' id='word_1_40' title='bbox 641 482 776 518; x_wconf 96'><strong>similar</strong></span> <span class='ocrx_word' id='word_1_41' title='bbox 789 488 829 518; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_42' title='bbox 843 482 1062 519; x_wconf 96'><strong>multi-track</strong></span> <span class='ocrx_word' id='word_1_43' title='bbox 1076 488 1160 527; x_wconf 96'><strong>tape</strong></span> <span class='ocrx_word' id='word_1_44' title='bbox 1173 483 1336 519; x_wconf 96'><strong>recorder</strong></span> <span class='ocrx_word' id='word_1_45' title='bbox 1350 482 1436 518; x_wconf 96'><strong>with</strong></span> <span class='ocrx_word' id='word_1_46' title='bbox 1451 483 1580 525; x_wconf 95'><strong>PLAY,</strong></span> <span class='ocrx_word' id='word_1_47' title='bbox 1598 483 1724 525; x_wconf 96'><strong>STOP,</strong></span> <span class='ocrx_word' id='word_1_48' title='bbox 1741 483 1957 525; x_wconf 96'><strong>RECORD,</strong></span> <span class='ocrx_word' id='word_1_49' title='bbox 1974 483 2093 518; x_wconf 96'><strong>FAST</strong></span>
<span class='ocr_line' id='line_1_5' title="bbox 350 482 2093 527; baseline 0 -9; x_size 43; x_descenders 7; x_ascenders 11"><span class='ocrx_word' id='word_1_37' title='bbox 350 490 368 508; x_wconf 68'><strong>0</strong></span> <span class='ocrx_word' id='word_1_38' title='bbox 383 482 585 526; x_wconf 88'>Operation</span> <span class='ocrx_word' id='word_1_39' title='bbox 598 482 627 518; x_wconf 89'>is</span> <span class='ocrx_word' id='word_1_40' title='bbox 641 482 776 518; x_wconf 88'>similar</span> <span class='ocrx_word' id='word_1_41' title='bbox 789 488 829 518; x_wconf 88'>to</span> <span class='ocrx_word' id='word_1_42' title='bbox 843 482 1062 519; x_wconf 86'>multitrack</span> <span class='ocrx_word' id='word_1_43' title='bbox 1076 488 1160 527; x_wconf 92'>tape</span> <span class='ocrx_word' id='word_1_44' title='bbox 1173 483 1336 519; x_wconf 88'>recorder</span> <span class='ocrx_word' id='word_1_45' title='bbox 1350 482 1436 518; x_wconf 87'>with</span> <span class='ocrx_word' id='word_1_46' title='bbox 1451 483 1580 525; x_wconf 90'>PLAY,</span> <span class='ocrx_word' id='word_1_47' title='bbox 1598 483 1724 525; x_wconf 90'>STOP,</span> <span class='ocrx_word' id='word_1_48' title='bbox 1741 483 1957 525; x_wconf 89'>RECORD,</span> <span class='ocrx_word' id='word_1_49' title='bbox 1974 483 2093 518; x_wconf 88'>FAST</span>
</span>
<span class='ocr_line' id='line_1_6' title="bbox 383 532 1345 574; baseline 0.001 -7; x_size 43; x_descenders 7; x_ascenders 11"><span class='ocrx_word' id='word_1_50' title='bbox 383 532 635 574; x_wconf 96'><strong>FORWARD,</strong></span> <span class='ocrx_word' id='word_1_51' title='bbox 652 532 865 574; x_wconf 95'><strong>REWIND,</strong></span> <span class='ocrx_word' id='word_1_52' title='bbox 882 532 956 568; x_wconf 95'><strong>and</strong></span> <span class='ocrx_word' id='word_1_53' title='bbox 971 532 1131 568; x_wconf 95'><strong>LOCATE</strong></span> <span class='ocrx_word' id='word_1_54' title='bbox 1132 532 1345 568; x_wconf 95'><strong>controls.</strong></span>
<span class='ocr_line' id='line_1_6' title="bbox 383 532 1345 574; baseline 0.001 -7; x_size 43; x_descenders 7; x_ascenders 11"><span class='ocrx_word' id='word_1_50' title='bbox 383 532 635 574; x_wconf 88'>FORWARD,</span> <span class='ocrx_word' id='word_1_51' title='bbox 652 532 865 574; x_wconf 89'>REWIND,</span> <span class='ocrx_word' id='word_1_52' title='bbox 882 532 956 568; x_wconf 91'>and</span> <span class='ocrx_word' id='word_1_53' title='bbox 971 532 1163 568; x_wconf 90'>LOCATE</span> <span class='ocrx_word' id='word_1_54' title='bbox 1177 532 1345 568; x_wconf 87'>controls.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_3' title="bbox 349 589 2136 685">
<p class='ocr_par' id='par_1_5' lang='eng' title="bbox 349 589 2136 685">
<span class='ocr_line' id='line_1_7' title="bbox 349 589 2136 634; baseline 0.001 -9; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_55' title='bbox 349 597 368 615; x_wconf 59'><strong>e</strong></span> <span class='ocrx_word' id='word_1_56' title='bbox 383 590 482 625; x_wconf 96'><strong>Each</strong></span> <span class='ocrx_word' id='word_1_57' title='bbox 496 589 539 625; x_wconf 96'><strong>of</strong></span> <span class='ocrx_word' id='word_1_58' title='bbox 549 590 611 626; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_59' title='bbox 625 590 686 625; x_wconf 96'><strong>100</strong></span> <span class='ocrx_word' id='word_1_60' title='bbox 700 601 895 634; x_wconf 96'><strong>sequences</strong></span> <span class='ocrx_word' id='word_1_61' title='bbox 909 590 1075 626; x_wconf 96'><strong>contains</strong></span> <span class='ocrx_word' id='word_1_62' title='bbox 1090 591 1135 626; x_wconf 96'><strong>32</strong></span> <span class='ocrx_word' id='word_1_63' title='bbox 1149 590 1418 633; x_wconf 96'><strong>simultaneous,</strong></span> <span class='ocrx_word' id='word_1_64' title='bbox 1435 590 1661 634; x_wconf 96'><strong>polyphonic</strong></span> <span class='ocrx_word' id='word_1_65' title='bbox 1674 590 1802 626; x_wconf 96'><strong>tracks.</strong></span> <span class='ocrx_word' id='word_1_66' title='bbox 1819 590 1921 626; x_wconf 96'><strong>Each</strong></span> <span class='ocrx_word' id='word_1_67' title='bbox 1934 590 2035 626; x_wconf 96'><strong>track</strong></span> <span class='ocrx_word' id='word_1_68' title='bbox 2050 600 2136 634; x_wconf 96'><strong>may</strong></span>
<span class='ocr_line' id='line_1_7' title="bbox 349 589 2136 634; baseline 0.001 -9; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_55' title='bbox 349 597 368 615; x_wconf 67'><strong>0</strong></span> <span class='ocrx_word' id='word_1_56' title='bbox 383 590 482 625; x_wconf 90'>Each</span> <span class='ocrx_word' id='word_1_57' title='bbox 496 589 539 625; x_wconf 87'>of</span> <span class='ocrx_word' id='word_1_58' title='bbox 549 590 611 626; x_wconf 92'>the</span> <span class='ocrx_word' id='word_1_59' title='bbox 625 590 686 625; x_wconf 91'>100</span> <span class='ocrx_word' id='word_1_60' title='bbox 700 601 895 634; x_wconf 89'>sequences</span> <span class='ocrx_word' id='word_1_61' title='bbox 909 590 1075 626; x_wconf 88'>contains</span> <span class='ocrx_word' id='word_1_62' title='bbox 1090 591 1135 626; x_wconf 89'>32</span> <span class='ocrx_word' id='word_1_63' title='bbox 1149 590 1418 633; x_wconf 87'>simultaneous,</span> <span class='ocrx_word' id='word_1_64' title='bbox 1435 590 1661 634; x_wconf 89'>polyphonic</span> <span class='ocrx_word' id='word_1_65' title='bbox 1674 590 1802 626; x_wconf 85'>tracks.</span> <span class='ocrx_word' id='word_1_66' title='bbox 1819 590 1921 626; x_wconf 89'>Each</span> <span class='ocrx_word' id='word_1_67' title='bbox 1934 590 2035 626; x_wconf 88'>track</span> <span class='ocrx_word' id='word_1_68' title='bbox 2050 600 2136 634; x_wconf 89'>may</span>
</span>
<span class='ocr_line' id='line_1_8' title="bbox 383 639 2022 685; baseline 0.001 -10; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_69' title='bbox 383 639 428 675; x_wconf 95'><strong>be</strong></span> <span class='ocrx_word' id='word_1_70' title='bbox 442 639 607 684; x_wconf 95'><strong>assigned</strong></span> <span class='ocrx_word' id='word_1_71' title='bbox 621 645 659 676; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_72' title='bbox 674 650 745 676; x_wconf 96'><strong>one</strong></span> <span class='ocrx_word' id='word_1_73' title='bbox 759 640 801 676; x_wconf 96'><strong>of</strong></span> <span class='ocrx_word' id='word_1_74' title='bbox 813 641 851 676; x_wconf 96'><strong>16</strong></span> <span class='ocrx_word' id='word_1_75' title='bbox 864 641 980 675; x_wconf 96'><strong>MIDI</strong></span> <span class='ocrx_word' id='word_1_76' title='bbox 996 640 1176 676; x_wconf 95'><strong>channels.</strong></span> <span class='ocrx_word' id='word_1_77' title='bbox 1194 640 1498 684; x_wconf 96'><strong>Simultaneously</strong></span> <span class='ocrx_word' id='word_1_78' title='bbox 1510 640 1609 685; x_wconf 96'><strong>plays</strong></span> <span class='ocrx_word' id='word_1_79' title='bbox 1624 651 1674 684; x_wconf 96'><strong>up</strong></span> <span class='ocrx_word' id='word_1_80' title='bbox 1688 645 1727 676; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_81' title='bbox 1742 641 1780 676; x_wconf 96'><strong>16</strong></span> <span class='ocrx_word' id='word_1_82' title='bbox 1794 640 2022 684; x_wconf 96'><strong>polyphonic</strong></span>
<span class='ocr_line' id='line_1_8' title="bbox 383 639 2022 685; baseline 0.001 -10; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_69' title='bbox 383 639 428 675; x_wconf 95'>be</span> <span class='ocrx_word' id='word_1_70' title='bbox 442 639 607 684; x_wconf 88'>assigned</span> <span class='ocrx_word' id='word_1_71' title='bbox 621 645 659 676; x_wconf 92'>to</span> <span class='ocrx_word' id='word_1_72' title='bbox 674 650 745 676; x_wconf 91'>one</span> <span class='ocrx_word' id='word_1_73' title='bbox 759 640 801 676; x_wconf 84'>of</span> <span class='ocrx_word' id='word_1_74' title='bbox 813 641 851 676; x_wconf 92'>16</span> <span class='ocrx_word' id='word_1_75' title='bbox 864 641 980 675; x_wconf 90'>MIDI</span> <span class='ocrx_word' id='word_1_76' title='bbox 996 640 1176 676; x_wconf 88'>channels.</span> <span class='ocrx_word' id='word_1_77' title='bbox 1194 640 1498 684; x_wconf 90'>Simultaneously</span> <span class='ocrx_word' id='word_1_78' title='bbox 1510 640 1609 685; x_wconf 90'>plays</span> <span class='ocrx_word' id='word_1_79' title='bbox 1624 651 1674 684; x_wconf 91'>up</span> <span class='ocrx_word' id='word_1_80' title='bbox 1688 645 1727 676; x_wconf 90'>to</span> <span class='ocrx_word' id='word_1_81' title='bbox 1742 641 1780 676; x_wconf 94'>16</span> <span class='ocrx_word' id='word_1_82' title='bbox 1794 640 2022 684; x_wconf 87'>polyphonic</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_4' title="bbox 384 689 632 734">
<p class='ocr_par' id='par_1_6' lang='eng' title="bbox 384 689 632 734">
<span class='ocr_line' id='line_1_9' title="bbox 384 689 632 734; baseline 0.004 -9; x_size 46; x_descenders 9; x_ascenders 12"><span class='ocrx_word' id='word_1_83' title='bbox 384 689 632 734; x_wconf 96'><strong>synthesizers!</strong></span>
<span class='ocr_line' id='line_1_9' title="bbox 384 689 632 734; baseline 0.004 -9; x_size 46; x_descenders 9; x_ascenders 12"><span class='ocrx_word' id='word_1_83' title='bbox 384 689 618 734; x_wconf 84'>synthesizers</span> <span class='ocrx_word' id='word_1_84' title='bbox 625 690 632 726; x_wconf 85'><strong>!</strong></span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_5' title="bbox 349 748 2117 793">
<p class='ocr_par' id='par_1_7' lang='eng' title="bbox 349 748 2117 793">
<span class='ocr_line' id='line_1_10' title="bbox 349 748 2117 793; baseline 0 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_84' title='bbox 349 755 367 774; x_wconf 58'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_85' title='bbox 383 748 573 784; x_wconf 91'><strong>Ultra-fast</strong></span> <span class='ocrx_word' id='word_1_86' title='bbox 588 749 677 784; x_wconf 22'><strong>3%”</strong></span> <span class='ocrx_word' id='word_1_87' title='bbox 694 748 775 784; x_wconf 96'><strong>disk</strong></span> <span class='ocrx_word' id='word_1_88' title='bbox 790 748 887 784; x_wconf 96'><strong>drive</strong></span> <span class='ocrx_word' id='word_1_89' title='bbox 901 754 1012 785; x_wconf 96'><strong>stores</strong></span> <span class='ocrx_word' id='word_1_90' title='bbox 1027 748 1194 793; x_wconf 96'><strong>complex</strong></span> <span class='ocrx_word' id='word_1_91' title='bbox 1208 760 1316 793; x_wconf 96'><strong>songs</strong></span> <span class='ocrx_word' id='word_1_92' title='bbox 1330 748 1368 784; x_wconf 96'><strong>in</strong></span> <span class='ocrx_word' id='word_1_93' title='bbox 1382 748 1535 785; x_wconf 96'><strong>seconds</strong></span> <span class='ocrx_word' id='word_1_94' title='bbox 1550 748 1624 784; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_95' title='bbox 1638 748 1728 784; x_wconf 96'><strong>holds</strong></span> <span class='ocrx_word' id='word_1_96' title='bbox 1730 759 1844 784; x_wconf 96'><strong>over</strong></span> <span class='ocrx_word' id='word_1_97' title='bbox 1859 749 2000 791; x_wconf 96'><strong>110,000</strong></span> <span class='ocrx_word' id='word_1_98' title='bbox 2013 753 2117 784; x_wconf 96'><strong>notes</strong></span>
<span class='ocr_line' id='line_1_10' title="bbox 349 748 2117 793; baseline 0 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_85' title='bbox 349 755 367 774; x_wconf 66'><strong>0</strong></span> <span class='ocrx_word' id='word_1_86' title='bbox 383 748 573 784; x_wconf 87'>Ultrafast</span> <span class='ocrx_word' id='word_1_87' title='bbox 588 749 606 784; x_wconf 90'>3</span> <span class='ocrx_word' id='word_1_88' title='bbox 616 749 652 784; x_wconf 86'>1/2</span> <span class='ocrx_word' id='word_1_89' title='bbox 663 749 677 764; x_wconf 87'><em>”</em></span> <span class='ocrx_word' id='word_1_90' title='bbox 694 748 775 784; x_wconf 91'>disk</span> <span class='ocrx_word' id='word_1_91' title='bbox 790 748 887 784; x_wconf 89'>drive</span> <span class='ocrx_word' id='word_1_92' title='bbox 901 754 1012 785; x_wconf 85'>stores</span> <span class='ocrx_word' id='word_1_93' title='bbox 1027 748 1194 793; x_wconf 87'>complex</span> <span class='ocrx_word' id='word_1_94' title='bbox 1208 760 1316 793; x_wconf 87'>songs</span> <span class='ocrx_word' id='word_1_95' title='bbox 1330 748 1368 784; x_wconf 87'>in</span> <span class='ocrx_word' id='word_1_96' title='bbox 1382 748 1535 785; x_wconf 87'>seconds</span> <span class='ocrx_word' id='word_1_97' title='bbox 1550 748 1624 784; x_wconf 89'>and</span> <span class='ocrx_word' id='word_1_98' title='bbox 1638 748 1746 784; x_wconf 87'>holds</span> <span class='ocrx_word' id='word_1_99' title='bbox 1761 759 1844 784; x_wconf 85'>over</span> <span class='ocrx_word' id='word_1_100' title='bbox 1859 749 2000 791; x_wconf 88'>110,000</span> <span class='ocrx_word' id='word_1_101' title='bbox 2013 753 2117 784; x_wconf 89'>notes</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_6' title="bbox 383 797 554 842">
<p class='ocr_par' id='par_1_8' lang='eng' title="bbox 383 797 554 842">
<span class='ocr_line' id='line_1_11' title="bbox 383 797 554 842; baseline 0 -8; x_size 45; x_descenders 8; x_ascenders 12"><span class='ocrx_word' id='word_1_99' title='bbox 383 808 446 842; x_wconf 96'><strong>per</strong></span> <span class='ocrx_word' id='word_1_100' title='bbox 459 797 554 834; x_wconf 96'><strong>disk!</strong></span>
<span class='ocr_line' id='line_1_11' title="bbox 383 797 554 842; baseline 0 -8; x_size 45; x_descenders 8; x_ascenders 12"><span class='ocrx_word' id='word_1_102' title='bbox 383 808 446 842; x_wconf 82'>per</span> <span class='ocrx_word' id='word_1_103' title='bbox 459 797 554 834; x_wconf 86'>disk!</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_7' title="bbox 349 855 2030 1016">
<p class='ocr_par' id='par_1_9' lang='eng' title="bbox 349 855 2030 1016">
<span class='ocr_line' id='line_1_12' title="bbox 350 855 1638 900; baseline 0.001 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_101' title='bbox 350 863 367 881; x_wconf 45'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_102' title='bbox 383 856 444 891; x_wconf 95'><strong>One</strong></span> <span class='ocrx_word' id='word_1_103' title='bbox 445 866 502 891; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_104' title='bbox 503 855 580 891; x_wconf 96'><strong>all</strong></span> <span class='ocrx_word' id='word_1_105' title='bbox 594 856 712 892; x_wconf 95'><strong>tracks</strong></span> <span class='ocrx_word' id='word_1_106' title='bbox 726 867 811 900; x_wconf 95'><strong>may</strong></span> <span class='ocrx_word' id='word_1_107' title='bbox 823 856 869 892; x_wconf 81'><strong>be</strong></span> <span class='ocrx_word' id='word_1_108' title='bbox 882 856 1175 892; x_wconf 96'><strong>TRANSPOSED</strong></span> <span class='ocrx_word' id='word_1_109' title='bbox 1178 857 1264 892; x_wconf 96'><strong>at</strong></span> <span class='ocrx_word' id='word_1_110' title='bbox 1277 856 1338 892; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_111' title='bbox 1351 856 1463 892; x_wconf 96'><strong>touch</strong></span> <span class='ocrx_word' id='word_1_112' title='bbox 1477 867 1501 892; x_wconf 96'><strong>of</strong></span> <span class='ocrx_word' id='word_1_113' title='bbox 1502 856 1554 892; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_114' title='bbox 1568 856 1638 900; x_wconf 96'><strong>key.</strong></span>
<span class='ocr_line' id='line_1_12' title="bbox 350 855 1638 900; baseline 0.001 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_104' title='bbox 350 863 367 881; x_wconf 71'><strong>0</strong></span> <span class='ocrx_word' id='word_1_105' title='bbox 383 856 464 891; x_wconf 90'>One</span> <span class='ocrx_word' id='word_1_106' title='bbox 478 866 520 891; x_wconf 87'>or</span> <span class='ocrx_word' id='word_1_107' title='bbox 534 855 580 891; x_wconf 88'>all</span> <span class='ocrx_word' id='word_1_108' title='bbox 594 856 712 892; x_wconf 89'>tracks</span> <span class='ocrx_word' id='word_1_109' title='bbox 726 867 811 900; x_wconf 90'>may</span> <span class='ocrx_word' id='word_1_110' title='bbox 823 856 869 892; x_wconf 88'>be</span> <span class='ocrx_word' id='word_1_111' title='bbox 882 856 1212 892; x_wconf 90'>TRANSPOSED</span> <span class='ocrx_word' id='word_1_112' title='bbox 1227 861 1264 892; x_wconf 90'>at</span> <span class='ocrx_word' id='word_1_113' title='bbox 1277 856 1338 892; x_wconf 85'>the</span> <span class='ocrx_word' id='word_1_114' title='bbox 1351 856 1463 892; x_wconf 90'>touch</span> <span class='ocrx_word' id='word_1_115' title='bbox 1477 856 1520 892; x_wconf 89'>of</span> <span class='ocrx_word' id='word_1_116' title='bbox 1531 867 1554 892; x_wconf 90'>a</span> <span class='ocrx_word' id='word_1_117' title='bbox 1568 856 1638 900; x_wconf 89'>key.</span>
</span>
<span class='ocr_line' id='line_1_13' title="bbox 350 913 1535 958; baseline 0.001 -9; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_115' title='bbox 350 921 367 939; x_wconf 45'><strong>e</strong></span> <span class='ocrx_word' id='word_1_116' title='bbox 383 913 568 950; x_wconf 96'><strong>Exclusive</strong></span> <span class='ocrx_word' id='word_1_117' title='bbox 581 913 756 950; x_wconf 96'><strong>real-time</strong></span> <span class='ocrx_word' id='word_1_118' title='bbox 769 914 929 950; x_wconf 96'><strong>ERASE</strong></span> <span class='ocrx_word' id='word_1_119' title='bbox 944 914 1114 950; x_wconf 96'><strong>function</strong></span> <span class='ocrx_word' id='word_1_120' title='bbox 1128 914 1251 950; x_wconf 96'><strong>makes</strong></span> <span class='ocrx_word' id='word_1_121' title='bbox 1266 914 1400 958; x_wconf 96'><strong>editing</strong></span> <span class='ocrx_word' id='word_1_122' title='bbox 1414 915 1535 950; x_wconf 95'><strong>FAST.</strong></span>
<span class='ocr_line' id='line_1_13' title="bbox 350 913 1535 958; baseline 0.001 -9; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_118' title='bbox 350 921 367 939; x_wconf 70'><strong>0</strong></span> <span class='ocrx_word' id='word_1_119' title='bbox 383 913 568 950; x_wconf 84'>Exclusive</span> <span class='ocrx_word' id='word_1_120' title='bbox 581 913 756 950; x_wconf 87'>realtime</span> <span class='ocrx_word' id='word_1_121' title='bbox 769 914 929 950; x_wconf 91'>ERASE</span> <span class='ocrx_word' id='word_1_122' title='bbox 944 914 1114 950; x_wconf 87'>function</span> <span class='ocrx_word' id='word_1_123' title='bbox 1128 914 1251 950; x_wconf 88'>makes</span> <span class='ocrx_word' id='word_1_124' title='bbox 1266 914 1400 958; x_wconf 87'>editing</span> <span class='ocrx_word' id='word_1_125' title='bbox 1414 915 1535 950; x_wconf 91'>FAST.</span>
</span>
<span class='ocr_line' id='line_1_14' title="bbox 349 971 2030 1016; baseline 0.001 -10; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_123' title='bbox 349 979 367 997; x_wconf 0'><strong>*</strong></span> <span class='ocrx_word' id='word_1_124' title='bbox 382 971 568 1007; x_wconf 95'><strong>Exclusive</strong></span> <span class='ocrx_word' id='word_1_125' title='bbox 582 972 773 1007; x_wconf 96'><strong>REPEAT</strong></span> <span class='ocrx_word' id='word_1_126' title='bbox 787 972 958 1008; x_wconf 96'><strong>function</strong></span> <span class='ocrx_word' id='word_1_127' title='bbox 971 972 1245 1016; x_wconf 95'><strong>automatically</strong></span> <span class='ocrx_word' id='word_1_128' title='bbox 1258 977 1396 1016; x_wconf 96'><strong>repeats</strong></span> <span class='ocrx_word' id='word_1_129' title='bbox 1410 983 1481 1016; x_wconf 96'><strong>any</strong></span> <span class='ocrx_word' id='word_1_130' title='bbox 1493 972 1578 1008; x_wconf 96'><strong>held</strong></span> <span class='ocrx_word' id='word_1_131' title='bbox 1592 977 1694 1008; x_wconf 96'><strong>notes</strong></span> <span class='ocrx_word' id='word_1_132' title='bbox 1709 977 1746 1008; x_wconf 96'><strong>at</strong></span> <span class='ocrx_word' id='word_1_133' title='bbox 1760 982 1783 1008; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_134' title='bbox 1796 972 2030 1016; x_wconf 96'><strong>pre-selected</strong></span>
<span class='ocr_line' id='line_1_14' title="bbox 349 971 2030 1016; baseline 0.001 -10; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_126' title='bbox 349 979 367 997; x_wconf 67'><strong>0</strong></span> <span class='ocrx_word' id='word_1_127' title='bbox 382 971 568 1007; x_wconf 83'>Exclusive</span> <span class='ocrx_word' id='word_1_128' title='bbox 582 972 773 1007; x_wconf 87'>REPEAT</span> <span class='ocrx_word' id='word_1_129' title='bbox 787 972 958 1008; x_wconf 86'>function</span> <span class='ocrx_word' id='word_1_130' title='bbox 971 972 1245 1016; x_wconf 89'>automatically</span> <span class='ocrx_word' id='word_1_131' title='bbox 1258 977 1396 1016; x_wconf 90'>repeats</span> <span class='ocrx_word' id='word_1_132' title='bbox 1410 983 1481 1016; x_wconf 88'>any</span> <span class='ocrx_word' id='word_1_133' title='bbox 1493 972 1578 1008; x_wconf 91'>held</span> <span class='ocrx_word' id='word_1_134' title='bbox 1592 977 1694 1008; x_wconf 91'>notes</span> <span class='ocrx_word' id='word_1_135' title='bbox 1709 977 1746 1008; x_wconf 85'>at</span> <span class='ocrx_word' id='word_1_136' title='bbox 1760 982 1783 1008; x_wconf 89'>a</span> <span class='ocrx_word' id='word_1_137' title='bbox 1796 972 2030 1016; x_wconf 87'>pre-selected</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_8' title="bbox 382 1021 689 1065">
<p class='ocr_par' id='par_1_10' lang='eng' title="bbox 382 1021 689 1065">
<span class='ocr_line' id='line_1_15' title="bbox 382 1021 689 1065; baseline 0.003 -8; x_size 45; x_descenders 8; x_ascenders 12"><span class='ocrx_word' id='word_1_135' title='bbox 382 1021 564 1065; x_wconf 96'><strong>rhythmic</strong></span> <span class='ocrx_word' id='word_1_136' title='bbox 577 1021 689 1058; x_wconf 96'><strong>value.</strong></span>
<span class='ocr_line' id='line_1_15' title="bbox 382 1021 689 1065; baseline 0.003 -8; x_size 45; x_descenders 8; x_ascenders 12"><span class='ocrx_word' id='word_1_138' title='bbox 382 1021 564 1065; x_wconf 87'>rhythmic</span> <span class='ocrx_word' id='word_1_139' title='bbox 577 1021 689 1058; x_wconf 86'>value.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_9' title="bbox 349 1080 2174 1125">
<p class='ocr_par' id='par_1_11' lang='eng' title="bbox 349 1080 2174 1125">
<span class='ocr_line' id='line_1_16' title="bbox 349 1080 2174 1125; baseline 0.001 -11; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_137' title='bbox 349 1087 367 1105; x_wconf 80'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_138' title='bbox 382 1080 567 1115; x_wconf 95'><strong>TIMING</strong></span> <span class='ocrx_word' id='word_1_139' title='bbox 582 1080 870 1116; x_wconf 95'><strong>CORRECTION</strong></span> <span class='ocrx_word' id='word_1_140' title='bbox 872 1080 1041 1116; x_wconf 96'><strong>works</strong></span> <span class='ocrx_word' id='word_1_141' title='bbox 1056 1080 1186 1124; x_wconf 96'><strong>during</strong></span> <span class='ocrx_word' id='word_1_142' title='bbox 1199 1080 1378 1124; x_wconf 96'><strong>playback</strong></span> <span class='ocrx_word' id='word_1_143' title='bbox 1392 1080 1466 1116; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_144' title='bbox 1480 1085 1644 1124; x_wconf 96'><strong>operates</strong></span> <span class='ocrx_word' id='word_1_145' title='bbox 1658 1080 1814 1116; x_wconf 96'><strong>without</strong></span> <span class='ocrx_word' id='word_1_146' title='bbox 1831 1080 2044 1125; x_wconf 95'><strong>chopping</strong></span> <span class='ocrx_word' id='word_1_147' title='bbox 2061 1085 2174 1116; x_wconf 96'><strong>notes.</strong></span>
<span class='ocr_line' id='line_1_16' title="bbox 349 1080 2174 1125; baseline 0.001 -11; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_140' title='bbox 349 1087 367 1105; x_wconf 73'><strong>0</strong></span> <span class='ocrx_word' id='word_1_141' title='bbox 382 1080 567 1115; x_wconf 87'>TIMING</span> <span class='ocrx_word' id='word_1_142' title='bbox 582 1080 908 1116; x_wconf 90'>CORRECTION</span> <span class='ocrx_word' id='word_1_143' title='bbox 921 1080 1041 1116; x_wconf 90'>works</span> <span class='ocrx_word' id='word_1_144' title='bbox 1056 1080 1186 1124; x_wconf 86'>during</span> <span class='ocrx_word' id='word_1_145' title='bbox 1199 1080 1378 1124; x_wconf 89'>playback</span> <span class='ocrx_word' id='word_1_146' title='bbox 1392 1080 1466 1116; x_wconf 90'>and</span> <span class='ocrx_word' id='word_1_147' title='bbox 1480 1085 1644 1124; x_wconf 87'>operates</span> <span class='ocrx_word' id='word_1_148' title='bbox 1658 1080 1814 1116; x_wconf 91'>without</span> <span class='ocrx_word' id='word_1_149' title='bbox 1831 1080 2044 1125; x_wconf 87'>chopping</span> <span class='ocrx_word' id='word_1_150' title='bbox 2061 1085 2174 1116; x_wconf 88'>notes.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_10' title="bbox 349 1137 1287 1182">
<p class='ocr_par' id='par_1_12' lang='eng' title="bbox 349 1137 1287 1182">
<span class='ocr_line' id='line_1_17' title="bbox 349 1137 1287 1182; baseline 0.001 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_148' title='bbox 349 1145 367 1163; x_wconf 80'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_149' title='bbox 382 1137 560 1182; x_wconf 95'><strong>Optional</strong></span> <span class='ocrx_word' id='word_1_150' title='bbox 575 1138 708 1174; x_wconf 96'><strong>SMPTE</strong></span> <span class='ocrx_word' id='word_1_151' title='bbox 709 1138 839 1174; x_wconf 96'><strong>time</strong></span> <span class='ocrx_word' id='word_1_152' title='bbox 853 1138 945 1174; x_wconf 95'><strong>code</strong></span> <span class='ocrx_word' id='word_1_153' title='bbox 959 1138 1287 1182; x_wconf 96'><strong>synchronization.</strong></span>
<span class='ocr_line' id='line_1_17' title="bbox 349 1137 1287 1182; baseline 0.001 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_151' title='bbox 349 1145 367 1163; x_wconf 73'><strong>0</strong></span> <span class='ocrx_word' id='word_1_152' title='bbox 382 1137 560 1182; x_wconf 85'>Optional</span> <span class='ocrx_word' id='word_1_153' title='bbox 575 1138 739 1174; x_wconf 89'>SMPTE</span> <span class='ocrx_word' id='word_1_154' title='bbox 752 1138 839 1174; x_wconf 89'>time</span> <span class='ocrx_word' id='word_1_155' title='bbox 853 1138 945 1174; x_wconf 89'>code</span> <span class='ocrx_word' id='word_1_156' title='bbox 959 1138 1287 1182; x_wconf 88'>synchronization.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_11' title="bbox 349 1195 874 1240">
<p class='ocr_par' id='par_1_13' lang='eng' title="bbox 349 1195 874 1240">
<span class='ocr_line' id='line_1_18' title="bbox 349 1195 874 1240; baseline 0 -8; x_size 45; x_descenders 8; x_ascenders 12"><span class='ocrx_word' id='word_1_154' title='bbox 349 1203 367 1222; x_wconf 74'><strong>©</strong></span> <span class='ocrx_word' id='word_1_155' title='bbox 382 1195 560 1240; x_wconf 96'><strong>Optional</strong></span> <span class='ocrx_word' id='word_1_156' title='bbox 573 1201 709 1233; x_wconf 96'><strong>remote</strong></span> <span class='ocrx_word' id='word_1_157' title='bbox 723 1196 874 1233; x_wconf 95'><strong>control.</strong></span>
<span class='ocr_line' id='line_1_18' title="bbox 349 1195 874 1240; baseline 0 -8; x_size 45; x_descenders 8; x_ascenders 12"><span class='ocrx_word' id='word_1_157' title='bbox 349 1203 367 1222; x_wconf 70'><strong>0</strong></span> <span class='ocrx_word' id='word_1_158' title='bbox 382 1195 560 1240; x_wconf 87'>Optional</span> <span class='ocrx_word' id='word_1_159' title='bbox 573 1201 709 1233; x_wconf 86'>remote</span> <span class='ocrx_word' id='word_1_160' title='bbox 723 1196 874 1233; x_wconf 87'>control.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_12' title="bbox 346 1288 1239 1491">
<p class='ocr_par' id='par_1_14' lang='eng' title="bbox 346 1288 749 1329">
<span class='ocr_line' id='line_1_19' title="bbox 346 1288 749 1329; baseline 0.002 -9; x_size 42; x_descenders 9; x_ascenders 10"><span class='ocrx_word' id='word_1_158' title='bbox 346 1288 535 1329; x_wconf 95'><strong>Recording</strong></span> <span class='ocrx_word' id='word_1_159' title='bbox 547 1298 567 1321; x_wconf 95'><strong>a</strong></span> <span class='ocrx_word' id='word_1_160' title='bbox 579 1288 749 1328; x_wconf 96'><strong>Sequence</strong></span>
<span class='ocr_line' id='line_1_19' title="bbox 346 1288 749 1329; baseline 0.002 -9; x_size 42; x_descenders 9; x_ascenders 10"><span class='ocrx_word' id='word_1_161' title='bbox 346 1288 535 1329; x_wconf 82'>Recording</span> <span class='ocrx_word' id='word_1_162' title='bbox 547 1298 567 1321; x_wconf 73'>3</span> <span class='ocrx_word' id='word_1_163' title='bbox 579 1288 749 1328; x_wconf 86'>Sequence</span>
</span>
</p>
<p class='ocr_par' id='par_1_15' lang='eng' title="bbox 346 1339 1239 1491">
<span class='ocr_line' id='line_1_20' title="bbox 383 1339 1239 1373; baseline 0 -7; x_size 33; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_161' title='bbox 383 1340 420 1366; x_wconf 95'><strong>To</strong></span> <span class='ocrx_word' id='word_1_162' title='bbox 430 1339 524 1366; x_wconf 96'><strong>record</strong></span> <span class='ocrx_word' id='word_1_163' title='bbox 535 1347 551 1366; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_164' title='bbox 562 1347 704 1373; x_wconf 96'><strong>sequence,</strong></span> <span class='ocrx_word' id='word_1_165' title='bbox 716 1340 815 1373; x_wconf 96'><strong>simply</strong></span> <span class='ocrx_word' id='word_1_166' title='bbox 825 1348 898 1373; x_wconf 95'><strong>press</strong></span> <span class='ocrx_word' id='word_1_167' title='bbox 910 1340 1065 1367; x_wconf 96'><strong>RECORD</strong></span> <span class='ocrx_word' id='word_1_168' title='bbox 1075 1340 1131 1367; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_169' title='bbox 1142 1341 1239 1372; x_wconf 96'><strong>PLAY,</strong></span>
<span class='ocr_line' id='line_1_20' title="bbox 383 1339 1239 1373; baseline 0 -7; x_size 33; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_164' title='bbox 383 1340 420 1366; x_wconf 87'>To</span> <span class='ocrx_word' id='word_1_165' title='bbox 430 1339 524 1366; x_wconf 85'>record</span> <span class='ocrx_word' id='word_1_166' title='bbox 535 1347 551 1366; x_wconf 87'>a</span> <span class='ocrx_word' id='word_1_167' title='bbox 562 1347 704 1373; x_wconf 80'>sequence,</span> <span class='ocrx_word' id='word_1_168' title='bbox 716 1340 815 1373; x_wconf 91'>simply</span> <span class='ocrx_word' id='word_1_169' title='bbox 825 1348 898 1373; x_wconf 88'>press</span> <span class='ocrx_word' id='word_1_170' title='bbox 910 1340 1065 1367; x_wconf 90'>RECORD</span> <span class='ocrx_word' id='word_1_171' title='bbox 1075 1340 1131 1367; x_wconf 87'>and</span> <span class='ocrx_word' id='word_1_172' title='bbox 1142 1341 1239 1372; x_wconf 87'>PLAY,</span>
</span>
<span class='ocr_line' id='line_1_21' title="bbox 346 1378 1205 1412; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_170' title='bbox 346 1379 411 1406; x_wconf 96'><strong>then</strong></span> <span class='ocrx_word' id='word_1_171' title='bbox 422 1378 483 1412; x_wconf 96'><strong>play</strong></span> <span class='ocrx_word' id='word_1_172' title='bbox 493 1387 562 1412; x_wconf 96'><strong>your</strong></span> <span class='ocrx_word' id='word_1_173' title='bbox 572 1379 646 1405; x_wconf 96'><strong>MIDI</strong></span> <span class='ocrx_word' id='word_1_174' title='bbox 649 1379 792 1412; x_wconf 96'><strong>keyboard</strong></span> <span class='ocrx_word' id='word_1_175' title='bbox 792 1379 848 1406; x_wconf 95'><strong>in</strong></span> <span class='ocrx_word' id='word_1_176' title='bbox 858 1379 923 1406; x_wconf 95'><strong>time</strong></span> <span class='ocrx_word' id='word_1_177' title='bbox 934 1384 963 1406; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_178' title='bbox 974 1379 1019 1406; x_wconf 93'><strong>the</strong></span> <span class='ocrx_word' id='word_1_179' title='bbox 1030 1379 1205 1412; x_wconf 92'><strong>Sequencers</strong></span>
<span class='ocr_line' id='line_1_21' title="bbox 346 1378 1205 1412; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_173' title='bbox 346 1379 411 1406; x_wconf 91'>then</span> <span class='ocrx_word' id='word_1_174' title='bbox 422 1378 483 1412; x_wconf 89'>play</span> <span class='ocrx_word' id='word_1_175' title='bbox 493 1387 562 1412; x_wconf 87'>your</span> <span class='ocrx_word' id='word_1_176' title='bbox 572 1379 659 1405; x_wconf 89'>MIDI</span> <span class='ocrx_word' id='word_1_177' title='bbox 671 1379 810 1412; x_wconf 86'>keyboard</span> <span class='ocrx_word' id='word_1_178' title='bbox 821 1379 848 1406; x_wconf 90'>in</span> <span class='ocrx_word' id='word_1_179' title='bbox 858 1379 923 1406; x_wconf 90'>time</span> <span class='ocrx_word' id='word_1_180' title='bbox 934 1384 963 1406; x_wconf 90'>to</span> <span class='ocrx_word' id='word_1_181' title='bbox 974 1379 1019 1406; x_wconf 92'>the</span> <span class='ocrx_word' id='word_1_182' title='bbox 1030 1379 1205 1412; x_wconf 88'>Sequencers</span>
</span>
<span class='ocr_line' id='line_1_22' title="bbox 347 1417 1232 1452; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_180' title='bbox 347 1417 414 1445; x_wconf 96'><strong>click</strong></span> <span class='ocrx_word' id='word_1_181' title='bbox 425 1418 506 1445; x_wconf 91'><strong>track.</strong></span> <span class='ocrx_word' id='word_1_182' title='bbox 519 1418 609 1445; x_wconf 96'><strong>When</strong></span> <span class='ocrx_word' id='word_1_183' title='bbox 620 1419 665 1445; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_184' title='bbox 676 1426 810 1452; x_wconf 96'><strong>sequence</strong></span> <span class='ocrx_word' id='word_1_185' title='bbox 821 1419 901 1452; x_wconf 96'><strong>loops</strong></span> <span class='ocrx_word' id='word_1_186' title='bbox 912 1419 983 1446; x_wconf 96'><strong>back</strong></span> <span class='ocrx_word' id='word_1_187' title='bbox 995 1427 1082 1446; x_wconf 96'><strong>around</strong></span> <span class='ocrx_word' id='word_1_188' title='bbox 1084 1419 1141 1446; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_189' title='bbox 1152 1419 1189 1446; x_wconf 96'><strong>bar</strong></span> <span class='ocrx_word' id='word_1_190' title='bbox 1189 1419 1232 1450; x_wconf 74'><strong>1,</strong></span>
<span class='ocr_line' id='line_1_22' title="bbox 347 1417 1232 1452; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_183' title='bbox 347 1417 414 1445; x_wconf 86'>click</span> <span class='ocrx_word' id='word_1_184' title='bbox 425 1418 506 1445; x_wconf 84'>track.</span> <span class='ocrx_word' id='word_1_185' title='bbox 519 1418 609 1445; x_wconf 85'>When</span> <span class='ocrx_word' id='word_1_186' title='bbox 620 1419 665 1445; x_wconf 89'>the</span> <span class='ocrx_word' id='word_1_187' title='bbox 676 1426 810 1452; x_wconf 86'>sequence</span> <span class='ocrx_word' id='word_1_188' title='bbox 821 1419 901 1452; x_wconf 88'>loops</span> <span class='ocrx_word' id='word_1_189' title='bbox 912 1419 983 1446; x_wconf 86'>back</span> <span class='ocrx_word' id='word_1_190' title='bbox 995 1419 1101 1446; x_wconf 90'>around</span> <span class='ocrx_word' id='word_1_191' title='bbox 1112 1423 1141 1446; x_wconf 91'>to</span> <span class='ocrx_word' id='word_1_192' title='bbox 1152 1419 1201 1446; x_wconf 87'>bar</span> <span class='ocrx_word' id='word_1_193' title='bbox 1213 1419 1232 1450; x_wconf 88'>1,</span>
</span>
<span class='ocr_line' id='line_1_23' title="bbox 346 1457 1223 1491; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_191' title='bbox 346 1465 400 1490; x_wconf 14'><strong>you</strong></span> <span class='ocrx_word' id='word_1_192' title='bbox 404 1457 430 1484; x_wconf 14'><strong>ll</strong></span> <span class='ocrx_word' id='word_1_193' title='bbox 441 1457 506 1485; x_wconf 96'><strong>hear</strong></span> <span class='ocrx_word' id='word_1_194' title='bbox 517 1458 590 1485; x_wconf 96'><strong>what</strong></span> <span class='ocrx_word' id='word_1_195' title='bbox 600 1466 654 1491; x_wconf 93'><strong>you</strong></span> <span class='ocrx_word' id='word_1_196' title='bbox 666 1458 865 1491; x_wconf 91'><strong>played—only</strong></span> <span class='ocrx_word' id='word_1_197' title='bbox 876 1458 910 1485; x_wconf 96'><strong>all</strong></span> <span class='ocrx_word' id='word_1_198' title='bbox 921 1458 1018 1491; x_wconf 96'><strong>timing</strong></span> <span class='ocrx_word' id='word_1_199' title='bbox 1029 1466 1115 1485; x_wconf 96'><strong>errors</strong></span> <span class='ocrx_word' id='word_1_200' title='bbox 1126 1458 1179 1485; x_wconf 95'><strong>will</strong></span> <span class='ocrx_word' id='word_1_201' title='bbox 1189 1458 1223 1485; x_wconf 96'><strong>be</strong></span>
<span class='ocr_line' id='line_1_23' title="bbox 346 1457 1223 1491; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_194' title='bbox 346 1457 430 1490; x_wconf 84'>youll</span> <span class='ocrx_word' id='word_1_195' title='bbox 441 1457 506 1485; x_wconf 93'>hear</span> <span class='ocrx_word' id='word_1_196' title='bbox 517 1458 590 1485; x_wconf 79'>what</span> <span class='ocrx_word' id='word_1_197' title='bbox 600 1466 654 1491; x_wconf 88'>you</span> <span class='ocrx_word' id='word_1_198' title='bbox 666 1458 865 1491; x_wconf 77'>played—only</span> <span class='ocrx_word' id='word_1_199' title='bbox 876 1458 910 1485; x_wconf 90'>all</span> <span class='ocrx_word' id='word_1_200' title='bbox 921 1458 1018 1491; x_wconf 84'>timing</span> <span class='ocrx_word' id='word_1_201' title='bbox 1029 1466 1115 1485; x_wconf 84'>errors</span> <span class='ocrx_word' id='word_1_202' title='bbox 1126 1458 1179 1485; x_wconf 91'>will</span> <span class='ocrx_word' id='word_1_203' title='bbox 1189 1458 1223 1485; x_wconf 91'>be</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_13' title="bbox 346 1497 1245 1531">
<p class='ocr_par' id='par_1_16' lang='eng' title="bbox 346 1497 1245 1531">
<span class='ocr_line' id='line_1_24' title="bbox 346 1497 1245 1531; baseline 0.001 -7; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_202' title='bbox 346 1497 494 1524; x_wconf 96'><strong>corrected!</strong></span> <span class='ocrx_word' id='word_1_203' title='bbox 508 1497 628 1530; x_wconf 96'><strong>(Timing</strong></span> <span class='ocrx_word' id='word_1_204' title='bbox 638 1497 791 1525; x_wconf 95'><strong>correction</strong></span> <span class='ocrx_word' id='word_1_205' title='bbox 802 1506 864 1531; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_206' title='bbox 875 1498 909 1525; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_207' title='bbox 920 1497 1047 1531; x_wconf 96'><strong>adjusted</strong></span> <span class='ocrx_word' id='word_1_208' title='bbox 1058 1505 1089 1525; x_wconf 97'><strong>or</strong></span> <span class='ocrx_word' id='word_1_209' title='bbox 1099 1497 1245 1531; x_wconf 96'><strong>defeated).</strong></span>
<span class='ocr_line' id='line_1_24' title="bbox 346 1497 1245 1531; baseline 0.001 -7; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_204' title='bbox 346 1497 494 1524; x_wconf 86'>corrected!</span> <span class='ocrx_word' id='word_1_205' title='bbox 508 1497 628 1530; x_wconf 85'>(Timing</span> <span class='ocrx_word' id='word_1_206' title='bbox 638 1497 791 1525; x_wconf 82'>correction</span> <span class='ocrx_word' id='word_1_207' title='bbox 802 1506 864 1531; x_wconf 88'>may</span> <span class='ocrx_word' id='word_1_208' title='bbox 875 1498 909 1525; x_wconf 91'>be</span> <span class='ocrx_word' id='word_1_209' title='bbox 920 1497 1047 1531; x_wconf 81'>adjusted</span> <span class='ocrx_word' id='word_1_210' title='bbox 1058 1505 1089 1525; x_wconf 92'>or</span> <span class='ocrx_word' id='word_1_211' title='bbox 1099 1497 1245 1531; x_wconf 87'>defeated).</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_14' title="bbox 346 1536 1205 1965">
<p class='ocr_par' id='par_1_17' lang='eng' title="bbox 346 1536 1186 1610">
<span class='ocr_line' id='line_1_25' title="bbox 346 1536 1186 1570; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_210' title='bbox 346 1537 409 1569; x_wconf 94'><strong>Any</strong></span> <span class='ocrx_word' id='word_1_211' title='bbox 419 1536 571 1563; x_wconf 96'><strong>additional</strong></span> <span class='ocrx_word' id='word_1_212' title='bbox 582 1541 659 1564; x_wconf 96'><strong>notes</strong></span> <span class='ocrx_word' id='word_1_213' title='bbox 670 1537 766 1570; x_wconf 96'><strong>played</strong></span> <span class='ocrx_word' id='word_1_214' title='bbox 777 1537 830 1563; x_wconf 96'><strong>will</strong></span> <span class='ocrx_word' id='word_1_215' title='bbox 840 1537 874 1564; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_216' title='bbox 885 1537 976 1564; x_wconf 96'><strong>added</strong></span> <span class='ocrx_word' id='word_1_217' title='bbox 986 1537 1045 1564; x_wconf 96'><strong>into</strong></span> <span class='ocrx_word' id='word_1_218' title='bbox 1055 1537 1101 1564; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_219' title='bbox 1111 1537 1186 1564; x_wconf 96'><strong>track</strong></span>
<span class='ocr_line' id='line_1_25' title="bbox 346 1536 1186 1570; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_212' title='bbox 346 1537 409 1569; x_wconf 90'>Any</span> <span class='ocrx_word' id='word_1_213' title='bbox 419 1536 571 1563; x_wconf 86'>additional</span> <span class='ocrx_word' id='word_1_214' title='bbox 582 1541 659 1564; x_wconf 85'>notes</span> <span class='ocrx_word' id='word_1_215' title='bbox 670 1537 766 1570; x_wconf 87'>played</span> <span class='ocrx_word' id='word_1_216' title='bbox 777 1537 830 1563; x_wconf 88'>will</span> <span class='ocrx_word' id='word_1_217' title='bbox 840 1537 874 1564; x_wconf 92'>be</span> <span class='ocrx_word' id='word_1_218' title='bbox 885 1537 976 1564; x_wconf 88'>added</span> <span class='ocrx_word' id='word_1_219' title='bbox 986 1537 1045 1564; x_wconf 89'>into</span> <span class='ocrx_word' id='word_1_220' title='bbox 1055 1537 1101 1564; x_wconf 89'>the</span> <span class='ocrx_word' id='word_1_221' title='bbox 1111 1537 1186 1564; x_wconf 82'>track</span>
</span>
<span class='ocr_line' id='line_1_26' title="bbox 347 1575 1052 1610; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_220' title='bbox 347 1591 381 1594; x_wconf 0'><strong>—</strong></span> <span class='ocrx_word' id='word_1_221' title='bbox 382 1575 495 1609; x_wconf 0'><strong>existing</strong></span> <span class='ocrx_word' id='word_1_222' title='bbox 505 1580 582 1603; x_wconf 96'><strong>notes</strong></span> <span class='ocrx_word' id='word_1_223' title='bbox 593 1584 637 1603; x_wconf 96'><strong>are</strong></span> <span class='ocrx_word' id='word_1_224' title='bbox 648 1580 696 1603; x_wconf 97'><strong>not</strong></span> <span class='ocrx_word' id='word_1_225' title='bbox 707 1576 800 1603; x_wconf 96'><strong>erased</strong></span> <span class='ocrx_word' id='word_1_226' title='bbox 811 1576 890 1603; x_wconf 96'><strong>while</strong></span> <span class='ocrx_word' id='word_1_227' title='bbox 900 1576 1052 1610; x_wconf 96'><strong>recording!</strong></span>
<span class='ocr_line' id='line_1_26' title="bbox 347 1575 1052 1610; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_222' title='bbox 347 1575 495 1609; x_wconf 86'>—existing</span> <span class='ocrx_word' id='word_1_223' title='bbox 505 1580 582 1603; x_wconf 89'>notes</span> <span class='ocrx_word' id='word_1_224' title='bbox 593 1584 637 1603; x_wconf 90'>are</span> <span class='ocrx_word' id='word_1_225' title='bbox 648 1580 696 1603; x_wconf 88'>not</span> <span class='ocrx_word' id='word_1_226' title='bbox 707 1576 800 1603; x_wconf 90'>erased</span> <span class='ocrx_word' id='word_1_227' title='bbox 811 1576 890 1603; x_wconf 87'>while</span> <span class='ocrx_word' id='word_1_228' title='bbox 900 1576 1052 1610; x_wconf 87'>recording!</span>
</span>
</p>
<p class='ocr_par' id='par_1_18' lang='eng' title="bbox 346 1616 1205 1965">
<span class='ocr_line' id='line_1_27' title="bbox 384 1616 1199 1648; baseline 0.001 -6; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_228' title='bbox 384 1616 471 1642; x_wconf 96'><strong>FAST</strong></span> <span class='ocrx_word' id='word_1_229' title='bbox 481 1616 671 1648; x_wconf 96'><strong>FORWARD,</strong></span> <span class='ocrx_word' id='word_1_230' title='bbox 684 1617 838 1643; x_wconf 95'><strong>REWIND,</strong></span> <span class='ocrx_word' id='word_1_231' title='bbox 839 1616 912 1648; x_wconf 95'><strong>and</strong></span> <span class='ocrx_word' id='word_1_232' title='bbox 924 1616 1045 1643; x_wconf 96'><strong>LOCATE</strong></span> <span class='ocrx_word' id='word_1_233' title='bbox 1046 1616 1199 1643; x_wconf 95'><strong>controls</strong></span>
<span class='ocr_line' id='line_1_27' title="bbox 384 1616 1199 1648; baseline 0.001 -6; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_229' title='bbox 384 1616 471 1642; x_wconf 88'>FAST</span> <span class='ocrx_word' id='word_1_230' title='bbox 481 1616 671 1648; x_wconf 88'>FORWARD,</span> <span class='ocrx_word' id='word_1_231' title='bbox 684 1617 844 1648; x_wconf 87'>REWIND,</span> <span class='ocrx_word' id='word_1_232' title='bbox 857 1616 912 1643; x_wconf 89'>and</span> <span class='ocrx_word' id='word_1_233' title='bbox 924 1616 1068 1643; x_wconf 78'>LOCATE</span> <span class='ocrx_word' id='word_1_234' title='bbox 1079 1616 1199 1643; x_wconf 87'>controls</span>
</span>
<span class='ocr_line' id='line_1_28' title="bbox 346 1655 1202 1689; baseline 0 -7; x_size 34; x_descenders 6; x_ascenders 9"><span class='ocrx_word' id='word_1_234' title='bbox 346 1663 409 1688; x_wconf 92'><strong>may</strong></span> <span class='ocrx_word' id='word_1_235' title='bbox 419 1655 453 1682; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_236' title='bbox 463 1655 530 1682; x_wconf 96'><strong>used</strong></span> <span class='ocrx_word' id='word_1_237' title='bbox 541 1659 569 1682; x_wconf 96'><strong>at</strong></span> <span class='ocrx_word' id='word_1_238' title='bbox 580 1663 632 1688; x_wconf 96'><strong>any</strong></span> <span class='ocrx_word' id='word_1_239' title='bbox 642 1655 707 1683; x_wconf 96'><strong>time</strong></span> <span class='ocrx_word' id='word_1_240' title='bbox 717 1659 746 1683; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_241' title='bbox 757 1655 867 1689; x_wconf 96'><strong>quickly</strong></span> <span class='ocrx_word' id='word_1_242' title='bbox 878 1664 968 1683; x_wconf 96'><strong>access</strong></span> <span class='ocrx_word' id='word_1_243' title='bbox 979 1664 1032 1689; x_wconf 96'><strong>any</strong></span> <span class='ocrx_word' id='word_1_244' title='bbox 1042 1655 1164 1683; x_wconf 96'><strong>location</strong></span> <span class='ocrx_word' id='word_1_245' title='bbox 1174 1655 1202 1682; x_wconf 96'><strong>in</strong></span>
<span class='ocr_line' id='line_1_28' title="bbox 346 1655 1202 1689; baseline 0 -7; x_size 34; x_descenders 6; x_ascenders 9"><span class='ocrx_word' id='word_1_235' title='bbox 346 1663 409 1688; x_wconf 89'>may</span> <span class='ocrx_word' id='word_1_236' title='bbox 419 1655 453 1682; x_wconf 94'>be</span> <span class='ocrx_word' id='word_1_237' title='bbox 463 1655 530 1682; x_wconf 90'>used</span> <span class='ocrx_word' id='word_1_238' title='bbox 541 1659 569 1682; x_wconf 90'>at</span> <span class='ocrx_word' id='word_1_239' title='bbox 580 1663 632 1688; x_wconf 86'>any</span> <span class='ocrx_word' id='word_1_240' title='bbox 642 1655 707 1683; x_wconf 88'>time</span> <span class='ocrx_word' id='word_1_241' title='bbox 717 1659 746 1683; x_wconf 88'>to</span> <span class='ocrx_word' id='word_1_242' title='bbox 757 1655 867 1689; x_wconf 88'>quickly</span> <span class='ocrx_word' id='word_1_243' title='bbox 878 1664 968 1683; x_wconf 87'>access</span> <span class='ocrx_word' id='word_1_244' title='bbox 979 1664 1032 1689; x_wconf 87'>any</span> <span class='ocrx_word' id='word_1_245' title='bbox 1042 1655 1164 1683; x_wconf 90'>location</span> <span class='ocrx_word' id='word_1_246' title='bbox 1174 1655 1202 1682; x_wconf 94'>in</span>
</span>
<span class='ocr_line' id='line_1_29' title="bbox 346 1694 1204 1728; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_246' title='bbox 346 1702 414 1727; x_wconf 96'><strong>your</strong></span> <span class='ocrx_word' id='word_1_247' title='bbox 424 1702 558 1727; x_wconf 96'><strong>sequence</strong></span> <span class='ocrx_word' id='word_1_248' title='bbox 570 1694 612 1721; x_wconf 93'><strong>for</strong></span> <span class='ocrx_word' id='word_1_249' title='bbox 623 1695 847 1728; x_wconf 91'><strong>spot-recording.</strong></span> <span class='ocrx_word' id='word_1_250' title='bbox 860 1696 897 1722; x_wconf 93'><strong>To</strong></span> <span class='ocrx_word' id='word_1_251' title='bbox 908 1695 1028 1722; x_wconf 93'><strong>overdub</strong></span> <span class='ocrx_word' id='word_1_252' title='bbox 1039 1703 1056 1722; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_253' title='bbox 1066 1703 1099 1722; x_wconf 96'><strong>new</strong></span> <span class='ocrx_word' id='word_1_254' title='bbox 1100 1699 1204 1728; x_wconf 96'><strong>part,</strong></span>
<span class='ocr_line' id='line_1_29' title="bbox 346 1694 1204 1728; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_247' title='bbox 346 1702 414 1727; x_wconf 88'>your</span> <span class='ocrx_word' id='word_1_248' title='bbox 424 1702 558 1727; x_wconf 87'>sequence</span> <span class='ocrx_word' id='word_1_249' title='bbox 570 1694 612 1721; x_wconf 84'>for</span> <span class='ocrx_word' id='word_1_250' title='bbox 623 1695 847 1728; x_wconf 84'>spotrecording.</span> <span class='ocrx_word' id='word_1_251' title='bbox 860 1696 897 1722; x_wconf 89'>To</span> <span class='ocrx_word' id='word_1_252' title='bbox 908 1695 1028 1722; x_wconf 82'>overdub</span> <span class='ocrx_word' id='word_1_253' title='bbox 1039 1703 1056 1722; x_wconf 91'>a</span> <span class='ocrx_word' id='word_1_254' title='bbox 1066 1703 1125 1722; x_wconf 89'>new</span> <span class='ocrx_word' id='word_1_255' title='bbox 1135 1699 1204 1728; x_wconf 88'>part,</span>
</span>
<span class='ocr_line' id='line_1_30' title="bbox 347 1733 1150 1768; baseline 0.001 -8; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_255' title='bbox 347 1733 426 1761; x_wconf 97'><strong>select</strong></span> <span class='ocrx_word' id='word_1_256' title='bbox 437 1741 453 1761; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_257' title='bbox 463 1733 589 1761; x_wconf 96'><strong>different</strong></span> <span class='ocrx_word' id='word_1_258' title='bbox 599 1734 674 1761; x_wconf 96'><strong>track</strong></span> <span class='ocrx_word' id='word_1_259' title='bbox 685 1734 741 1761; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_260' title='bbox 752 1738 818 1761; x_wconf 93'><strong>start</strong></span> <span class='ocrx_word' id='word_1_261' title='bbox 828 1734 1086 1768; x_wconf 91'><strong>recordingwhile</strong></span> <span class='ocrx_word' id='word_1_262' title='bbox 1096 1742 1150 1767; x_wconf 96'><strong>you</strong></span>
<span class='ocr_line' id='line_1_30' title="bbox 347 1733 1150 1768; baseline 0.001 -8; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_256' title='bbox 347 1733 426 1761; x_wconf 88'>select</span> <span class='ocrx_word' id='word_1_257' title='bbox 437 1741 453 1761; x_wconf 88'>a</span> <span class='ocrx_word' id='word_1_258' title='bbox 463 1733 589 1761; x_wconf 86'>different</span> <span class='ocrx_word' id='word_1_259' title='bbox 599 1734 674 1761; x_wconf 85'>track</span> <span class='ocrx_word' id='word_1_260' title='bbox 685 1734 741 1761; x_wconf 87'>and</span> <span class='ocrx_word' id='word_1_261' title='bbox 752 1738 818 1761; x_wconf 83'>start</span> <span class='ocrx_word' id='word_1_262' title='bbox 828 1734 1086 1768; x_wconf 63'>recording~while</span> <span class='ocrx_word' id='word_1_263' title='bbox 1096 1742 1150 1767; x_wconf 89'>you</span>
</span>
<span class='ocr_line' id='line_1_31' title="bbox 346 1773 1203 1808; baseline 0.001 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_263' title='bbox 346 1774 448 1806; x_wconf 96'><strong>record,</strong></span> <span class='ocrx_word' id='word_1_264' title='bbox 460 1774 506 1801; x_wconf 97'><strong>the</strong></span> <span class='ocrx_word' id='word_1_265' title='bbox 517 1773 577 1801; x_wconf 96'><strong>first</strong></span> <span class='ocrx_word' id='word_1_266' title='bbox 581 1774 662 1801; x_wconf 96'><strong>track</strong></span> <span class='ocrx_word' id='word_1_267' title='bbox 673 1774 726 1801; x_wconf 96'><strong>will</strong></span> <span class='ocrx_word' id='word_1_268' title='bbox 736 1774 799 1807; x_wconf 96'><strong>play</strong></span> <span class='ocrx_word' id='word_1_269' title='bbox 809 1774 836 1801; x_wconf 96'><strong>in</strong></span> <span class='ocrx_word' id='word_1_270' title='bbox 847 1774 949 1808; x_wconf 97'><strong>perfect</strong></span> <span class='ocrx_word' id='word_1_271' title='bbox 961 1782 1026 1808; x_wconf 96'><strong>sync</strong></span> <span class='ocrx_word' id='word_1_272' title='bbox 1037 1774 1137 1808; x_wconf 96'><strong>(unless</strong></span> <span class='ocrx_word' id='word_1_273' title='bbox 1148 1782 1203 1807; x_wconf 96'><strong>you</strong></span>
<span class='ocr_line' id='line_1_31' title="bbox 346 1773 1203 1808; baseline 0.001 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_264' title='bbox 346 1774 448 1806; x_wconf 86'>record,</span> <span class='ocrx_word' id='word_1_265' title='bbox 460 1774 506 1801; x_wconf 87'>the</span> <span class='ocrx_word' id='word_1_266' title='bbox 517 1773 662 1801; x_wconf 64'>firsttrack</span> <span class='ocrx_word' id='word_1_267' title='bbox 673 1774 726 1801; x_wconf 91'>will</span> <span class='ocrx_word' id='word_1_268' title='bbox 736 1774 799 1807; x_wconf 89'>play</span> <span class='ocrx_word' id='word_1_269' title='bbox 809 1774 836 1801; x_wconf 91'>in</span> <span class='ocrx_word' id='word_1_270' title='bbox 847 1774 949 1808; x_wconf 84'>perfect</span> <span class='ocrx_word' id='word_1_271' title='bbox 961 1782 1026 1808; x_wconf 87'>sync</span> <span class='ocrx_word' id='word_1_272' title='bbox 1037 1774 1137 1808; x_wconf 89'>(unless</span> <span class='ocrx_word' id='word_1_273' title='bbox 1148 1782 1203 1807; x_wconf 93'>you</span>
</span>
<span class='ocr_line' id='line_1_32' title="bbox 346 1813 1191 1847; baseline 0.002 -8; x_size 33; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_274' title='bbox 346 1813 431 1840; x_wconf 95'><strong>MUTE</strong></span> <span class='ocrx_word' id='word_1_275' title='bbox 431 1813 492 1845; x_wconf 95'><strong>it,</strong></span> <span class='ocrx_word' id='word_1_276' title='bbox 505 1821 537 1840; x_wconf 95'><strong>or</strong></span> <span class='ocrx_word' id='word_1_277' title='bbox 547 1813 642 1840; x_wconf 95'><strong>SOLO</strong></span> <span class='ocrx_word' id='word_1_278' title='bbox 653 1814 756 1841; x_wconf 95'><strong>another</strong></span> <span class='ocrx_word' id='word_1_279' title='bbox 757 1814 875 1847; x_wconf 94'><strong>track).</strong></span> <span class='ocrx_word' id='word_1_280' title='bbox 889 1814 920 1840; x_wconf 96'><strong>In</strong></span> <span class='ocrx_word' id='word_1_281' title='bbox 930 1813 984 1841; x_wconf 96'><strong>this</strong></span> <span class='ocrx_word' id='word_1_282' title='bbox 995 1822 1057 1847; x_wconf 96'><strong>way,</strong></span> <span class='ocrx_word' id='word_1_283' title='bbox 1069 1822 1106 1847; x_wconf 96'><strong>up</strong></span> <span class='ocrx_word' id='word_1_284' title='bbox 1117 1818 1146 1841; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_285' title='bbox 1158 1814 1191 1841; x_wconf 96'><strong>32</strong></span>
<span class='ocr_line' id='line_1_32' title="bbox 346 1813 1191 1847; baseline 0.002 -8; x_size 33; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_274' title='bbox 346 1813 454 1840; x_wconf 86'>MUTE</span> <span class='ocrx_word' id='word_1_275' title='bbox 464 1813 492 1845; x_wconf 88'>it,</span> <span class='ocrx_word' id='word_1_276' title='bbox 505 1821 537 1840; x_wconf 84'>or</span> <span class='ocrx_word' id='word_1_277' title='bbox 547 1813 642 1840; x_wconf 88'>SOLO</span> <span class='ocrx_word' id='word_1_278' title='bbox 653 1814 769 1841; x_wconf 87'>another</span> <span class='ocrx_word' id='word_1_279' title='bbox 779 1814 875 1847; x_wconf 86'>track).</span> <span class='ocrx_word' id='word_1_280' title='bbox 889 1814 920 1840; x_wconf 86'>In</span> <span class='ocrx_word' id='word_1_281' title='bbox 930 1813 984 1841; x_wconf 86'>this</span> <span class='ocrx_word' id='word_1_282' title='bbox 995 1822 1057 1847; x_wconf 87'>way,</span> <span class='ocrx_word' id='word_1_283' title='bbox 1069 1822 1106 1847; x_wconf 88'>up</span> <span class='ocrx_word' id='word_1_284' title='bbox 1117 1818 1146 1841; x_wconf 77'>to</span> <span class='ocrx_word' id='word_1_285' title='bbox 1158 1814 1191 1841; x_wconf 90'>32</span>
</span>
<span class='ocr_line' id='line_1_33' title="bbox 346 1852 1205 1885; baseline 0.001 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_286' title='bbox 346 1852 434 1879; x_wconf 96'><strong>tracks</strong></span> <span class='ocrx_word' id='word_1_287' title='bbox 445 1860 508 1885; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_288' title='bbox 518 1853 552 1879; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_289' title='bbox 562 1853 748 1880; x_wconf 96'><strong>overdubbed!</strong></span> <span class='ocrx_word' id='word_1_290' title='bbox 761 1853 808 1880; x_wconf 94'><strong>All</strong></span> <span class='ocrx_word' id='word_1_291' title='bbox 819 1854 892 1880; x_wconf 96'><strong>MIDI</strong></span> <span class='ocrx_word' id='word_1_292' title='bbox 895 1853 1011 1880; x_wconf 96'><strong>effects</strong></span> <span class='ocrx_word' id='word_1_293' title='bbox 1022 1861 1067 1880; x_wconf 96'><strong>are</strong></span> <span class='ocrx_word' id='word_1_294' title='bbox 1076 1853 1205 1880; x_wconf 96'><strong>recorded</strong></span>
<span class='ocr_line' id='line_1_33' title="bbox 346 1852 1205 1885; baseline 0.001 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_286' title='bbox 346 1852 434 1879; x_wconf 84'>tracks</span> <span class='ocrx_word' id='word_1_287' title='bbox 445 1860 508 1885; x_wconf 90'>may</span> <span class='ocrx_word' id='word_1_288' title='bbox 518 1853 552 1879; x_wconf 93'>be</span> <span class='ocrx_word' id='word_1_289' title='bbox 562 1853 748 1880; x_wconf 90'>overdubbed!</span> <span class='ocrx_word' id='word_1_290' title='bbox 761 1853 808 1880; x_wconf 92'>All</span> <span class='ocrx_word' id='word_1_291' title='bbox 819 1854 905 1880; x_wconf 81'>MIDI</span> <span class='ocrx_word' id='word_1_292' title='bbox 917 1853 1011 1880; x_wconf 81'>effects</span> <span class='ocrx_word' id='word_1_293' title='bbox 1022 1861 1067 1880; x_wconf 86'>are</span> <span class='ocrx_word' id='word_1_294' title='bbox 1076 1853 1205 1880; x_wconf 87'>recorded</span>
</span>
<span class='ocr_line' id='line_1_34' title="bbox 346 1891 1168 1926; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_295' title='bbox 346 1891 485 1925; x_wconf 96'><strong>including</strong></span> <span class='ocrx_word' id='word_1_296' title='bbox 495 1891 570 1925; x_wconf 96'><strong>pitch</strong></span> <span class='ocrx_word' id='word_1_297' title='bbox 580 1892 663 1924; x_wconf 96'><strong>bend,</strong></span> <span class='ocrx_word' id='word_1_298' title='bbox 675 1892 850 1920; x_wconf 96'><strong>modulation,</strong></span> <span class='ocrx_word' id='word_1_299' title='bbox 854 1892 991 1926; x_wconf 93'><strong>velocity,</strong></span> <span class='ocrx_word' id='word_1_300' title='bbox 1004 1892 1168 1924; x_wconf 92'><strong>aftertouch,</strong></span>
<span class='ocr_line' id='line_1_34' title="bbox 346 1891 1168 1926; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_295' title='bbox 346 1891 485 1925; x_wconf 84'>including</span> <span class='ocrx_word' id='word_1_296' title='bbox 495 1891 570 1925; x_wconf 87'>pitch</span> <span class='ocrx_word' id='word_1_297' title='bbox 580 1892 663 1924; x_wconf 84'>bend,</span> <span class='ocrx_word' id='word_1_298' title='bbox 675 1892 859 1924; x_wconf 86'>modulation,</span> <span class='ocrx_word' id='word_1_299' title='bbox 872 1892 991 1926; x_wconf 83'>velocity,</span> <span class='ocrx_word' id='word_1_300' title='bbox 1004 1892 1168 1924; x_wconf 85'>aftertouch,</span>
</span>
<span class='ocr_line' id='line_1_35' title="bbox 346 1931 895 1965; baseline 0.002 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_301' title='bbox 346 1931 448 1958; x_wconf 96'><strong>sustain</strong></span> <span class='ocrx_word' id='word_1_302' title='bbox 459 1931 549 1965; x_wconf 95'><strong>pedal,</strong></span> <span class='ocrx_word' id='word_1_303' title='bbox 561 1932 617 1959; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_304' title='bbox 628 1940 756 1965; x_wconf 96'><strong>program</strong></span> <span class='ocrx_word' id='word_1_305' title='bbox 766 1932 895 1965; x_wconf 96'><strong>changes!</strong></span>
<span class='ocr_line' id='line_1_35' title="bbox 346 1931 895 1965; baseline 0.002 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_301' title='bbox 346 1931 448 1958; x_wconf 88'>sustain</span> <span class='ocrx_word' id='word_1_302' title='bbox 459 1931 549 1965; x_wconf 88'>pedal,</span> <span class='ocrx_word' id='word_1_303' title='bbox 561 1932 617 1959; x_wconf 90'>and</span> <span class='ocrx_word' id='word_1_304' title='bbox 628 1940 756 1965; x_wconf 88'>program</span> <span class='ocrx_word' id='word_1_305' title='bbox 766 1932 895 1965; x_wconf 87'>changes!</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_15' title="bbox 346 1998 1212 2163">
<p class='ocr_par' id='par_1_19' lang='eng' title="bbox 346 1998 479 2040">
<span class='ocr_line' id='line_1_36' title="bbox 346 1998 479 2040; baseline -0.008 -9; x_size 43; x_descenders 10; x_ascenders 11"><span class='ocrx_word' id='word_1_306' title='bbox 346 1998 479 2040; x_wconf 96'><strong>Editing</strong></span>
<span class='ocr_line' id='line_1_36' title="bbox 346 1998 479 2040; baseline -0.008 -9; x_size 43; x_descenders 10; x_ascenders 11"><span class='ocrx_word' id='word_1_306' title='bbox 346 1998 479 2040; x_wconf 87'>Editing</span>
</span>
</p>
<p class='ocr_par' id='par_1_20' lang='eng' title="bbox 346 2050 1212 2163">
<span class='ocr_line' id='line_1_37' title="bbox 383 2050 1186 2084; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_307' title='bbox 383 2050 419 2076; x_wconf 96'><strong>To</strong></span> <span class='ocrx_word' id='word_1_308' title='bbox 430 2057 503 2076; x_wconf 95'><strong>erase</strong></span> <span class='ocrx_word' id='word_1_309' title='bbox 514 2058 530 2077; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_310' title='bbox 540 2058 617 2077; x_wconf 96'><strong>wrong</strong></span> <span class='ocrx_word' id='word_1_311' title='bbox 618 2054 717 2083; x_wconf 96'><strong>note,</strong></span> <span class='ocrx_word' id='word_1_312' title='bbox 729 2050 829 2083; x_wconf 96'><strong>simply</strong></span> <span class='ocrx_word' id='word_1_313' title='bbox 839 2050 905 2077; x_wconf 96'><strong>hold</strong></span> <span class='ocrx_word' id='word_1_314' title='bbox 916 2051 1013 2077; x_wconf 96'><strong>ERASE</strong></span> <span class='ocrx_word' id='word_1_315' title='bbox 1015 2051 1083 2077; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_316' title='bbox 1085 2050 1186 2084; x_wconf 96'><strong>press</strong></span>
<span class='ocr_line' id='line_1_37' title="bbox 383 2050 1186 2084; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_307' title='bbox 383 2050 419 2076; x_wconf 89'>To</span> <span class='ocrx_word' id='word_1_308' title='bbox 430 2057 503 2076; x_wconf 87'>erase</span> <span class='ocrx_word' id='word_1_309' title='bbox 514 2058 530 2077; x_wconf 91'>a</span> <span class='ocrx_word' id='word_1_310' title='bbox 540 2058 634 2083; x_wconf 88'>wrong</span> <span class='ocrx_word' id='word_1_311' title='bbox 644 2054 717 2082; x_wconf 84'>note,</span> <span class='ocrx_word' id='word_1_312' title='bbox 729 2050 829 2083; x_wconf 89'>simply</span> <span class='ocrx_word' id='word_1_313' title='bbox 839 2050 905 2077; x_wconf 88'>hold</span> <span class='ocrx_word' id='word_1_314' title='bbox 916 2051 1037 2077; x_wconf 85'>ERASE</span> <span class='ocrx_word' id='word_1_315' title='bbox 1048 2050 1103 2077; x_wconf 89'>and</span> <span class='ocrx_word' id='word_1_316' title='bbox 1113 2059 1186 2084; x_wconf 89'>press</span>
</span>
<span class='ocr_line' id='line_1_38' title="bbox 346 2089 1212 2124; baseline 0.002 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_317' title='bbox 346 2089 391 2116; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_318' title='bbox 402 2094 465 2117; x_wconf 96'><strong>note</strong></span> <span class='ocrx_word' id='word_1_319' title='bbox 475 2094 504 2117; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_320' title='bbox 515 2090 549 2117; x_wconf 97'><strong>be</strong></span> <span class='ocrx_word' id='word_1_321' title='bbox 559 2090 652 2117; x_wconf 96'><strong>erased</strong></span> <span class='ocrx_word' id='word_1_322' title='bbox 661 2090 718 2123; x_wconf 96'><strong>just</strong></span> <span class='ocrx_word' id='word_1_323' title='bbox 729 2090 808 2117; x_wconf 96'><strong>before</strong></span> <span class='ocrx_word' id='word_1_324' title='bbox 808 2090 852 2117; x_wconf 96'><strong>it</strong></span> <span class='ocrx_word' id='word_1_325' title='bbox 862 2090 937 2124; x_wconf 96'><strong>plays</strong></span> <span class='ocrx_word' id='word_1_326' title='bbox 947 2090 975 2117; x_wconf 96'><strong>in</strong></span> <span class='ocrx_word' id='word_1_327' title='bbox 986 2090 1032 2118; x_wconf 93'><strong>the</strong></span> <span class='ocrx_word' id='word_1_328' title='bbox 1043 2098 1212 2124; x_wconf 88'><strong>sequence—</strong></span>
<span class='ocr_line' id='line_1_38' title="bbox 346 2089 1212 2124; baseline 0.002 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_317' title='bbox 346 2089 391 2116; x_wconf 86'>the</span> <span class='ocrx_word' id='word_1_318' title='bbox 402 2094 465 2117; x_wconf 86'>note</span> <span class='ocrx_word' id='word_1_319' title='bbox 475 2094 504 2117; x_wconf 86'>to</span> <span class='ocrx_word' id='word_1_320' title='bbox 515 2090 549 2117; x_wconf 93'>be</span> <span class='ocrx_word' id='word_1_321' title='bbox 559 2090 652 2117; x_wconf 89'>erased</span> <span class='ocrx_word' id='word_1_322' title='bbox 661 2090 718 2123; x_wconf 91'>just</span> <span class='ocrx_word' id='word_1_323' title='bbox 729 2090 822 2117; x_wconf 85'>before</span> <span class='ocrx_word' id='word_1_324' title='bbox 833 2090 852 2117; x_wconf 89'>it</span> <span class='ocrx_word' id='word_1_325' title='bbox 862 2090 937 2124; x_wconf 87'>plays</span> <span class='ocrx_word' id='word_1_326' title='bbox 947 2090 975 2117; x_wconf 92'>in</span> <span class='ocrx_word' id='word_1_327' title='bbox 986 2090 1032 2118; x_wconf 87'>the</span> <span class='ocrx_word' id='word_1_328' title='bbox 1043 2098 1212 2124; x_wconf 78'>sequence—</span>
</span>
<span class='ocr_line' id='line_1_39' title="bbox 346 2129 1134 2163; baseline 0.003 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_329' title='bbox 346 2129 406 2156; x_wconf 96'><strong>when</strong></span> <span class='ocrx_word' id='word_1_330' title='bbox 407 2129 531 2162; x_wconf 96'><strong>played</strong></span> <span class='ocrx_word' id='word_1_331' title='bbox 542 2129 621 2161; x_wconf 96'><strong>back,</strong></span> <span class='ocrx_word' id='word_1_332' title='bbox 633 2129 652 2156; x_wconf 96'><strong>it</strong></span> <span class='ocrx_word' id='word_1_333' title='bbox 663 2129 716 2156; x_wconf 96'><strong>will</strong></span> <span class='ocrx_word' id='word_1_334' title='bbox 726 2130 760 2157; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_335' title='bbox 771 2138 849 2163; x_wconf 96'><strong>gone.</strong></span> <span class='ocrx_word' id='word_1_336' title='bbox 861 2131 947 2157; x_wconf 96'><strong>Notes</strong></span> <span class='ocrx_word' id='word_1_337' title='bbox 958 2138 1021 2163; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_338' title='bbox 1031 2130 1089 2157; x_wconf 96'><strong>also</strong></span> <span class='ocrx_word' id='word_1_339' title='bbox 1100 2130 1134 2157; x_wconf 96'><strong>be</strong></span>
<span class='ocr_line' id='line_1_39' title="bbox 346 2129 1134 2163; baseline 0.003 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_329' title='bbox 346 2129 425 2156; x_wconf 92'>when</span> <span class='ocrx_word' id='word_1_330' title='bbox 435 2129 531 2162; x_wconf 91'>played</span> <span class='ocrx_word' id='word_1_331' title='bbox 542 2129 621 2161; x_wconf 82'>back,</span> <span class='ocrx_word' id='word_1_332' title='bbox 633 2129 652 2156; x_wconf 84'>it</span> <span class='ocrx_word' id='word_1_333' title='bbox 663 2129 716 2156; x_wconf 89'>will</span> <span class='ocrx_word' id='word_1_334' title='bbox 726 2130 760 2157; x_wconf 88'>be</span> <span class='ocrx_word' id='word_1_335' title='bbox 771 2138 849 2163; x_wconf 86'>gone.</span> <span class='ocrx_word' id='word_1_336' title='bbox 861 2131 947 2157; x_wconf 86'>Notes</span> <span class='ocrx_word' id='word_1_337' title='bbox 958 2138 1021 2163; x_wconf 88'>may</span> <span class='ocrx_word' id='word_1_338' title='bbox 1031 2130 1089 2157; x_wconf 87'>also</span> <span class='ocrx_word' id='word_1_339' title='bbox 1100 2130 1134 2157; x_wconf 91'>be</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_16' title="bbox 345 2168 1228 2242">
<p class='ocr_par' id='par_1_21' lang='eng' title="bbox 345 2168 1228 2242">
<span class='ocr_line' id='line_1_40' title="bbox 346 2168 1220 2203; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_340' title='bbox 346 2168 445 2200; x_wconf 96'><strong>added,</strong></span> <span class='ocrx_word' id='word_1_341' title='bbox 457 2168 560 2200; x_wconf 96'><strong>erased,</strong></span> <span class='ocrx_word' id='word_1_342' title='bbox 572 2177 604 2196; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_343' title='bbox 614 2169 739 2202; x_wconf 96'><strong>changed</strong></span> <span class='ocrx_word' id='word_1_344' title='bbox 749 2169 829 2203; x_wconf 96'><strong>using</strong></span> <span class='ocrx_word' id='word_1_345' title='bbox 839 2169 885 2196; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_346' title='bbox 896 2170 1031 2196; x_wconf 96'><strong>SINGLE</strong></span> <span class='ocrx_word' id='word_1_347' title='bbox 1042 2170 1107 2196; x_wconf 91'><strong>STEP</strong></span> <span class='ocrx_word' id='word_1_348' title='bbox 1109 2169 1220 2196; x_wconf 91'><strong>func-</strong></span>
<span class='ocr_line' id='line_1_40' title="bbox 346 2168 1220 2203; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_340' title='bbox 346 2168 445 2200; x_wconf 86'>added,</span> <span class='ocrx_word' id='word_1_341' title='bbox 457 2168 560 2200; x_wconf 87'>erased,</span> <span class='ocrx_word' id='word_1_342' title='bbox 572 2177 604 2196; x_wconf 93'>or</span> <span class='ocrx_word' id='word_1_343' title='bbox 614 2169 739 2202; x_wconf 82'>changed</span> <span class='ocrx_word' id='word_1_344' title='bbox 749 2169 829 2203; x_wconf 86'>using</span> <span class='ocrx_word' id='word_1_345' title='bbox 839 2169 885 2196; x_wconf 85'>the</span> <span class='ocrx_word' id='word_1_346' title='bbox 896 2170 1031 2196; x_wconf 89'>SINGLE</span> <span class='ocrx_word' id='word_1_347' title='bbox 1042 2170 1131 2196; x_wconf 87'>STEP</span> <span class='ocrx_word' id='word_1_348' title='bbox 1143 2169 1220 2196; x_wconf 82'>func-</span>
</span>
<span class='ocr_line' id='line_1_41' title="bbox 345 2207 1228 2242; baseline 0.002 -8; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_349' title='bbox 345 2207 412 2234; x_wconf 96'><strong>tion.</strong></span> <span class='ocrx_word' id='word_1_350' title='bbox 424 2208 461 2235; x_wconf 93'><strong>To</strong></span> <span class='ocrx_word' id='word_1_351' title='bbox 472 2208 592 2235; x_wconf 91'><strong>overdub</strong></span> <span class='ocrx_word' id='word_1_352' title='bbox 603 2212 667 2235; x_wconf 96'><strong>notes</strong></span> <span class='ocrx_word' id='word_1_353' title='bbox 668 2212 718 2235; x_wconf 96'><strong>at</strong></span> <span class='ocrx_word' id='word_1_354' title='bbox 729 2208 841 2242; x_wconf 96'><strong>specific</strong></span> <span class='ocrx_word' id='word_1_355' title='bbox 851 2209 943 2242; x_wconf 97'><strong>points</strong></span> <span class='ocrx_word' id='word_1_356' title='bbox 955 2208 1049 2236; x_wconf 96'><strong>within</strong></span> <span class='ocrx_word' id='word_1_357' title='bbox 1060 2217 1076 2236; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_358' title='bbox 1086 2216 1228 2242; x_wconf 96'><strong>sequence,</strong></span>
<span class='ocr_line' id='line_1_41' title="bbox 345 2207 1228 2242; baseline 0.002 -8; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_349' title='bbox 345 2207 412 2234; x_wconf 87'>tion.</span> <span class='ocrx_word' id='word_1_350' title='bbox 424 2208 461 2235; x_wconf 88'>To</span> <span class='ocrx_word' id='word_1_351' title='bbox 472 2208 592 2235; x_wconf 88'>overdub</span> <span class='ocrx_word' id='word_1_352' title='bbox 603 2212 680 2235; x_wconf 84'>notes</span> <span class='ocrx_word' id='word_1_353' title='bbox 691 2212 718 2235; x_wconf 89'>at</span> <span class='ocrx_word' id='word_1_354' title='bbox 729 2208 841 2242; x_wconf 83'>specific</span> <span class='ocrx_word' id='word_1_355' title='bbox 851 2209 943 2242; x_wconf 89'>points</span> <span class='ocrx_word' id='word_1_356' title='bbox 955 2208 1049 2236; x_wconf 87'>within</span> <span class='ocrx_word' id='word_1_357' title='bbox 1060 2217 1076 2236; x_wconf 87'>a</span> <span class='ocrx_word' id='word_1_358' title='bbox 1086 2216 1228 2242; x_wconf 86'>sequence,</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_17' title="bbox 345 2293 705 2326">
<p class='ocr_par' id='par_1_22' lang='eng' title="bbox 345 2293 705 2326">
<span class='ocr_line' id='line_1_42' title="bbox 345 2293 705 2326; baseline 0.003 -1; x_size 38.38298; x_descenders 5.3829789; x_ascenders 10"><span class='ocrx_word' id='word_1_359' title='bbox 345 2293 541 2326; x_wconf 96'><strong>Additional</strong></span> <span class='ocrx_word' id='word_1_360' title='bbox 553 2293 705 2326; x_wconf 96'><strong>Features</strong></span>
<span class='ocr_line' id='line_1_42' title="bbox 345 2293 705 2326; baseline 0.003 -1; x_size 38.38298; x_descenders 5.3829789; x_ascenders 10"><span class='ocrx_word' id='word_1_359' title='bbox 345 2293 541 2326; x_wconf 86'>Additional</span> <span class='ocrx_word' id='word_1_360' title='bbox 553 2293 705 2326; x_wconf 83'>Features</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_18' title="bbox 1295 1289 2165 1593">
<p class='ocr_par' id='par_1_23' lang='eng' title="bbox 1296 1289 2165 1362">
<span class='ocr_line' id='line_1_43' title="bbox 1296 1289 2165 1322; baseline 0.001 -7; x_size 35.040108; x_descenders 6.9264708; x_ascenders 8.613636"><span class='ocrx_word' id='word_1_361' title='bbox 1296 1289 1394 1322; x_wconf 96'><strong>simply</strong></span> <span class='ocrx_word' id='word_1_362' title='bbox 1404 1297 1452 1316; x_wconf 96'><strong>use</strong></span> <span class='ocrx_word' id='word_1_363' title='bbox 1463 1290 1615 1321; x_wconf 96'><strong>LOCATE,</strong></span> <span class='ocrx_word' id='word_1_364' title='bbox 1628 1290 1716 1316; x_wconf 96'><strong>FAST</strong></span> <span class='ocrx_word' id='word_1_365' title='bbox 1726 1289 1910 1316; x_wconf 95'><strong>FORWARD,</strong></span> <span class='ocrx_word' id='word_1_366' title='bbox 1911 1297 1960 1321; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_367' title='bbox 1972 1290 2098 1316; x_wconf 95'><strong>REWIND</strong></span> <span class='ocrx_word' id='word_1_368' title='bbox 2100 1290 2165 1317; x_wconf 95'><strong>to</strong></span>
<span class='ocr_line' id='line_1_43' title="bbox 1296 1289 2165 1322; baseline 0.001 -7; x_size 35.040108; x_descenders 6.9264708; x_ascenders 8.613636"><span class='ocrx_word' id='word_1_361' title='bbox 1296 1289 1394 1322; x_wconf 91'>simply</span> <span class='ocrx_word' id='word_1_362' title='bbox 1404 1297 1452 1316; x_wconf 87'>use</span> <span class='ocrx_word' id='word_1_363' title='bbox 1463 1290 1615 1321; x_wconf 86'>LOCATE,</span> <span class='ocrx_word' id='word_1_364' title='bbox 1628 1290 1716 1316; x_wconf 88'>FAST</span> <span class='ocrx_word' id='word_1_365' title='bbox 1726 1289 1917 1321; x_wconf 86'>FORWARD,</span> <span class='ocrx_word' id='word_1_366' title='bbox 1929 1297 1960 1317; x_wconf 92'>or</span> <span class='ocrx_word' id='word_1_367' title='bbox 1972 1290 2126 1316; x_wconf 91'>REWIND</span> <span class='ocrx_word' id='word_1_368' title='bbox 2136 1294 2165 1317; x_wconf 82'>to</span>
</span>
<span class='ocr_line' id='line_1_44' title="bbox 1297 1328 2033 1362; baseline 0.001 -7; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_369' title='bbox 1297 1328 1356 1355; x_wconf 96'><strong>find</strong></span> <span class='ocrx_word' id='word_1_370' title='bbox 1366 1329 1412 1355; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_371' title='bbox 1423 1328 1527 1356; x_wconf 96'><strong>desired</strong></span> <span class='ocrx_word' id='word_1_372' title='bbox 1537 1329 1587 1356; x_wconf 96'><strong>bar</strong></span> <span class='ocrx_word' id='word_1_373' title='bbox 1598 1329 1720 1361; x_wconf 96'><strong>number,</strong></span> <span class='ocrx_word' id='word_1_374' title='bbox 1732 1329 1798 1356; x_wconf 97'><strong>then</strong></span> <span class='ocrx_word' id='word_1_375' title='bbox 1809 1333 1874 1356; x_wconf 96'><strong>start</strong></span> <span class='ocrx_word' id='word_1_376' title='bbox 1885 1329 2033 1362; x_wconf 96'><strong>recording.</strong></span>
<span class='ocr_line' id='line_1_44' title="bbox 1297 1328 2033 1362; baseline 0.001 -7; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_369' title='bbox 1297 1328 1356 1355; x_wconf 77'>find</span> <span class='ocrx_word' id='word_1_370' title='bbox 1366 1329 1412 1355; x_wconf 89'>the</span> <span class='ocrx_word' id='word_1_371' title='bbox 1423 1328 1527 1356; x_wconf 85'>desired</span> <span class='ocrx_word' id='word_1_372' title='bbox 1537 1329 1587 1356; x_wconf 88'>bar</span> <span class='ocrx_word' id='word_1_373' title='bbox 1598 1329 1720 1361; x_wconf 86'>number,</span> <span class='ocrx_word' id='word_1_374' title='bbox 1732 1329 1798 1356; x_wconf 78'>then</span> <span class='ocrx_word' id='word_1_375' title='bbox 1809 1333 1874 1356; x_wconf 87'>start</span> <span class='ocrx_word' id='word_1_376' title='bbox 1885 1329 2033 1362; x_wconf 85'>recording.</span>
</span>
</p>
<p class='ocr_par' id='par_1_24' lang='eng' title="bbox 1295 1368 2160 1593">
<span class='ocr_line' id='line_1_45' title="bbox 1332 1368 2160 1402; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_377' title='bbox 1332 1368 1391 1395; x_wconf 93'><strong>The</strong></span> <span class='ocrx_word' id='word_1_378' title='bbox 1402 1368 1626 1395; x_wconf 91'><strong>INSERT/COPY</strong></span> <span class='ocrx_word' id='word_1_379' title='bbox 1626 1368 1789 1395; x_wconf 96'><strong>function</strong></span> <span class='ocrx_word' id='word_1_380' title='bbox 1800 1368 1893 1395; x_wconf 96'><strong>allows</strong></span> <span class='ocrx_word' id='word_1_381' title='bbox 1904 1376 1958 1402; x_wconf 96'><strong>you</strong></span> <span class='ocrx_word' id='word_1_382' title='bbox 1968 1373 1997 1395; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_383' title='bbox 2008 1377 2087 1396; x_wconf 96'><strong>move</strong></span> <span class='ocrx_word' id='word_1_384' title='bbox 2097 1369 2160 1396; x_wconf 97'><strong>bars</strong></span>
<span class='ocr_line' id='line_1_45' title="bbox 1332 1368 2160 1402; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_377' title='bbox 1332 1368 1391 1395; x_wconf 90'>The</span> <span class='ocrx_word' id='word_1_378' title='bbox 1402 1368 1650 1395; x_wconf 86'>INSERT/COPY</span> <span class='ocrx_word' id='word_1_379' title='bbox 1662 1368 1789 1395; x_wconf 81'>function</span> <span class='ocrx_word' id='word_1_380' title='bbox 1800 1368 1893 1395; x_wconf 90'>allows</span> <span class='ocrx_word' id='word_1_381' title='bbox 1904 1376 1958 1402; x_wconf 91'>you</span> <span class='ocrx_word' id='word_1_382' title='bbox 1968 1373 1997 1395; x_wconf 91'>to</span> <span class='ocrx_word' id='word_1_383' title='bbox 2008 1377 2087 1396; x_wconf 91'>move</span> <span class='ocrx_word' id='word_1_384' title='bbox 2097 1369 2160 1396; x_wconf 89'>bars</span>
</span>
<span class='ocr_line' id='line_1_46' title="bbox 1297 1407 2151 1441; baseline 0.002 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_385' title='bbox 1297 1407 1369 1434; x_wconf 96'><strong>from</strong></span> <span class='ocrx_word' id='word_1_386' title='bbox 1380 1415 1433 1434; x_wconf 95'><strong>one</strong></span> <span class='ocrx_word' id='word_1_387' title='bbox 1443 1407 1565 1435; x_wconf 95'><strong>location</strong></span> <span class='ocrx_word' id='word_1_388' title='bbox 1576 1411 1605 1434; x_wconf 92'><strong>to</strong></span> <span class='ocrx_word' id='word_1_389' title='bbox 1616 1407 1796 1435; x_wconf 91'><strong>another—in</strong></span> <span class='ocrx_word' id='word_1_390' title='bbox 1806 1408 1852 1435; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_391' title='bbox 1863 1416 1937 1435; x_wconf 96'><strong>same</strong></span> <span class='ocrx_word' id='word_1_392' title='bbox 1948 1416 2067 1441; x_wconf 96'><strong>sequence</strong></span> <span class='ocrx_word' id='word_1_393' title='bbox 2068 1416 2125 1435; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_394' title='bbox 2135 1416 2151 1435; x_wconf 96'><strong>a</strong></span>
<span class='ocr_line' id='line_1_46' title="bbox 1297 1407 2151 1441; baseline 0.002 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_385' title='bbox 1297 1407 1369 1434; x_wconf 86'>from</span> <span class='ocrx_word' id='word_1_386' title='bbox 1380 1415 1433 1434; x_wconf 88'>one</span> <span class='ocrx_word' id='word_1_387' title='bbox 1443 1407 1565 1435; x_wconf 85'>location</span> <span class='ocrx_word' id='word_1_388' title='bbox 1576 1411 1605 1434; x_wconf 89'>to</span> <span class='ocrx_word' id='word_1_389' title='bbox 1616 1407 1796 1435; x_wconf 85'>another—in</span> <span class='ocrx_word' id='word_1_390' title='bbox 1806 1408 1852 1435; x_wconf 88'>the</span> <span class='ocrx_word' id='word_1_391' title='bbox 1863 1416 1937 1435; x_wconf 90'>same</span> <span class='ocrx_word' id='word_1_392' title='bbox 1948 1416 2083 1441; x_wconf 88'>sequence</span> <span class='ocrx_word' id='word_1_393' title='bbox 2093 1416 2125 1435; x_wconf 90'>or</span> <span class='ocrx_word' id='word_1_394' title='bbox 2135 1416 2151 1435; x_wconf 88'>a</span>
</span>
<span class='ocr_line' id='line_1_47' title="bbox 1296 1447 2160 1481; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_395' title='bbox 1296 1447 1421 1474; x_wconf 96'><strong>different</strong></span> <span class='ocrx_word' id='word_1_396' title='bbox 1431 1455 1491 1474; x_wconf 96'><strong>one.</strong></span> <span class='ocrx_word' id='word_1_397' title='bbox 1504 1448 1555 1474; x_wconf 96'><strong>For</strong></span> <span class='ocrx_word' id='word_1_398' title='bbox 1565 1448 1698 1481; x_wconf 95'><strong>example,</strong></span> <span class='ocrx_word' id='word_1_399' title='bbox 1710 1456 1764 1481; x_wconf 96'><strong>you</strong></span> <span class='ocrx_word' id='word_1_400' title='bbox 1775 1448 1863 1481; x_wconf 96'><strong>might</strong></span> <span class='ocrx_word' id='word_1_401' title='bbox 1873 1448 1955 1475; x_wconf 96'><strong>insert</strong></span> <span class='ocrx_word' id='word_1_402' title='bbox 1966 1456 1983 1475; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_403' title='bbox 1993 1456 2064 1481; x_wconf 96'><strong>copy</strong></span> <span class='ocrx_word' id='word_1_404' title='bbox 2074 1448 2106 1475; x_wconf 96'><strong>of</strong></span> <span class='ocrx_word' id='word_1_405' title='bbox 2115 1448 2160 1475; x_wconf 96'><strong>the</strong></span>
<span class='ocr_line' id='line_1_47' title="bbox 1296 1447 2160 1481; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_395' title='bbox 1296 1447 1421 1474; x_wconf 81'>different</span> <span class='ocrx_word' id='word_1_396' title='bbox 1431 1455 1491 1474; x_wconf 89'>one.</span> <span class='ocrx_word' id='word_1_397' title='bbox 1504 1448 1555 1474; x_wconf 87'>For</span> <span class='ocrx_word' id='word_1_398' title='bbox 1565 1448 1698 1481; x_wconf 84'>example,</span> <span class='ocrx_word' id='word_1_399' title='bbox 1710 1456 1764 1481; x_wconf 91'>you</span> <span class='ocrx_word' id='word_1_400' title='bbox 1775 1448 1863 1481; x_wconf 84'>might</span> <span class='ocrx_word' id='word_1_401' title='bbox 1873 1448 1955 1475; x_wconf 86'>insert</span> <span class='ocrx_word' id='word_1_402' title='bbox 1966 1456 1983 1475; x_wconf 92'>a</span> <span class='ocrx_word' id='word_1_403' title='bbox 1993 1456 2064 1481; x_wconf 88'>copy</span> <span class='ocrx_word' id='word_1_404' title='bbox 2074 1448 2106 1475; x_wconf 90'>of</span> <span class='ocrx_word' id='word_1_405' title='bbox 2115 1448 2160 1475; x_wconf 90'>the</span>
</span>
<span class='ocr_line' id='line_1_48' title="bbox 1297 1486 2087 1521; baseline 0 -7; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_406' title='bbox 1297 1486 1355 1514; x_wconf 96'><strong>first</strong></span> <span class='ocrx_word' id='word_1_407' title='bbox 1366 1495 1439 1514; x_wconf 96'><strong>verse</strong></span> <span class='ocrx_word' id='word_1_408' title='bbox 1449 1487 1571 1514; x_wconf 96'><strong>between</strong></span> <span class='ocrx_word' id='word_1_409' title='bbox 1582 1487 1628 1514; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_410' title='bbox 1638 1487 1740 1514; x_wconf 96'><strong>second</strong></span> <span class='ocrx_word' id='word_1_411' title='bbox 1751 1487 1838 1514; x_wconf 96'><strong>chorus</strong></span> <span class='ocrx_word' id='word_1_412' title='bbox 1841 1495 1899 1514; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_413' title='bbox 1901 1487 1975 1514; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_414' title='bbox 1985 1487 2087 1521; x_wconf 96'><strong>bridge.</strong></span>
<span class='ocr_line' id='line_1_48' title="bbox 1297 1486 2087 1521; baseline 0 -7; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_406' title='bbox 1297 1486 1355 1514; x_wconf 82'>first</span> <span class='ocrx_word' id='word_1_407' title='bbox 1366 1495 1439 1514; x_wconf 89'>verse</span> <span class='ocrx_word' id='word_1_408' title='bbox 1449 1487 1571 1514; x_wconf 89'>between</span> <span class='ocrx_word' id='word_1_409' title='bbox 1582 1487 1628 1514; x_wconf 88'>the</span> <span class='ocrx_word' id='word_1_410' title='bbox 1638 1487 1740 1514; x_wconf 87'>second</span> <span class='ocrx_word' id='word_1_411' title='bbox 1751 1487 1852 1514; x_wconf 83'>chorus</span> <span class='ocrx_word' id='word_1_412' title='bbox 1863 1487 1919 1514; x_wconf 90'>and</span> <span class='ocrx_word' id='word_1_413' title='bbox 1929 1487 1975 1514; x_wconf 88'>the</span> <span class='ocrx_word' id='word_1_414' title='bbox 1985 1487 2087 1521; x_wconf 85'>bridge.</span>
</span>
<span class='ocr_line' id='line_1_49' title="bbox 1296 1527 2047 1560; baseline 0.003 -8; x_size 32; x_descenders 6; x_ascenders 7"><span class='ocrx_word' id='word_1_415' title='bbox 1296 1527 1441 1553; x_wconf 95'><strong>DELETE</strong></span> <span class='ocrx_word' id='word_1_416' title='bbox 1453 1527 1527 1553; x_wconf 96'><strong>BARS</strong></span> <span class='ocrx_word' id='word_1_417' title='bbox 1529 1527 1681 1559; x_wconf 96'><strong>operates</strong></span> <span class='ocrx_word' id='word_1_418' title='bbox 1691 1527 1737 1553; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_419' title='bbox 1748 1535 1823 1554; x_wconf 96'><strong>same</strong></span> <span class='ocrx_word' id='word_1_420' title='bbox 1833 1535 1891 1560; x_wconf 96'><strong>way</strong></span> <span class='ocrx_word' id='word_1_421' title='bbox 1901 1531 1930 1554; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_422' title='bbox 1940 1535 2047 1554; x_wconf 96'><strong>remove</strong></span>
<span class='ocr_line' id='line_1_49' title="bbox 1296 1527 2047 1560; baseline 0.003 -8; x_size 32; x_descenders 6; x_ascenders 7"><span class='ocrx_word' id='word_1_415' title='bbox 1296 1527 1441 1553; x_wconf 88'>DELETE</span> <span class='ocrx_word' id='word_1_416' title='bbox 1453 1527 1546 1553; x_wconf 90'>BARS</span> <span class='ocrx_word' id='word_1_417' title='bbox 1557 1531 1681 1559; x_wconf 84'>operates</span> <span class='ocrx_word' id='word_1_418' title='bbox 1691 1527 1737 1553; x_wconf 86'>the</span> <span class='ocrx_word' id='word_1_419' title='bbox 1748 1535 1823 1554; x_wconf 90'>same</span> <span class='ocrx_word' id='word_1_420' title='bbox 1833 1535 1891 1560; x_wconf 93'>way</span> <span class='ocrx_word' id='word_1_421' title='bbox 1901 1531 1930 1554; x_wconf 91'>to</span> <span class='ocrx_word' id='word_1_422' title='bbox 1940 1535 2047 1554; x_wconf 90'>remove</span>
</span>
<span class='ocr_line' id='line_1_50' title="bbox 1295 1565 1577 1593; baseline 0.004 -1; x_size 34.748871; x_descenders 6.7488689; x_ascenders 9"><span class='ocrx_word' id='word_1_423' title='bbox 1295 1569 1422 1592; x_wconf 96'><strong>unwanted</strong></span> <span class='ocrx_word' id='word_1_424' title='bbox 1423 1565 1577 1593; x_wconf 95'><strong>sections,</strong></span>
<span class='ocr_line' id='line_1_50' title="bbox 1295 1565 1577 1593; baseline 0.004 -1; x_size 34.748871; x_descenders 6.7488689; x_ascenders 9"><span class='ocrx_word' id='word_1_423' title='bbox 1295 1565 1441 1592; x_wconf 88'>unwanted</span> <span class='ocrx_word' id='word_1_424' title='bbox 1452 1565 1577 1593; x_wconf 84'>sections.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_19' title="bbox 1295 1638 2215 1960">
<p class='ocr_par' id='par_1_25' lang='eng' title="bbox 1296 1638 1589 1680">
<span class='ocr_line' id='line_1_51' title="bbox 1296 1638 1589 1680; baseline 0 -9; x_size 42; x_descenders 9; x_ascenders 10"><span class='ocrx_word' id='word_1_425' title='bbox 1296 1638 1452 1680; x_wconf 96'><strong>Creating</strong></span> <span class='ocrx_word' id='word_1_426' title='bbox 1465 1648 1485 1671; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_427' title='bbox 1497 1639 1589 1680; x_wconf 96'><strong>Song</strong></span>
<span class='ocr_line' id='line_1_51' title="bbox 1296 1638 1589 1680; baseline 0 -9; x_size 42; x_descenders 9; x_ascenders 10"><span class='ocrx_word' id='word_1_425' title='bbox 1296 1638 1452 1680; x_wconf 86'>Creating</span> <span class='ocrx_word' id='word_1_426' title='bbox 1465 1648 1485 1671; x_wconf 85'>a</span> <span class='ocrx_word' id='word_1_427' title='bbox 1497 1639 1589 1680; x_wconf 87'>Song</span>
</span>
</p>
<p class='ocr_par' id='par_1_26' lang='eng' title="bbox 1295 1690 2215 1960">
<span class='ocr_line' id='line_1_52' title="bbox 1333 1690 2146 1723; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_428' title='bbox 1333 1690 1394 1717; x_wconf 96'><strong>One</strong></span> <span class='ocrx_word' id='word_1_429' title='bbox 1404 1698 1446 1717; x_wconf 96'><strong>way</strong></span> <span class='ocrx_word' id='word_1_430' title='bbox 1445 1694 1500 1723; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_431' title='bbox 1511 1694 1598 1717; x_wconf 96'><strong>create</strong></span> <span class='ocrx_word' id='word_1_432' title='bbox 1608 1698 1625 1717; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_433' title='bbox 1635 1698 1687 1717; x_wconf 95'><strong>song</strong></span> <span class='ocrx_word' id='word_1_434' title='bbox 1688 1690 1736 1723; x_wconf 95'><strong>is</strong></span> <span class='ocrx_word' id='word_1_435' title='bbox 1747 1694 1776 1717; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_436' title='bbox 1787 1690 1880 1717; x_wconf 96'><strong>record</strong></span> <span class='ocrx_word' id='word_1_437' title='bbox 1891 1690 1958 1717; x_wconf 96'><strong>each</strong></span> <span class='ocrx_word' id='word_1_438' title='bbox 1969 1690 2044 1717; x_wconf 97'><strong>track</strong></span> <span class='ocrx_word' id='word_1_439' title='bbox 2056 1690 2090 1717; x_wconf 96'><strong>all</strong></span> <span class='ocrx_word' id='word_1_440' title='bbox 2101 1690 2146 1717; x_wconf 96'><strong>the</strong></span>
<span class='ocr_line' id='line_1_52' title="bbox 1333 1690 2146 1723; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_428' title='bbox 1333 1690 1394 1717; x_wconf 88'>One</span> <span class='ocrx_word' id='word_1_429' title='bbox 1404 1698 1462 1723; x_wconf 93'>way</span> <span class='ocrx_word' id='word_1_430' title='bbox 1472 1694 1500 1717; x_wconf 89'>to</span> <span class='ocrx_word' id='word_1_431' title='bbox 1511 1694 1598 1717; x_wconf 88'>create</span> <span class='ocrx_word' id='word_1_432' title='bbox 1608 1698 1625 1717; x_wconf 88'>a</span> <span class='ocrx_word' id='word_1_433' title='bbox 1635 1698 1704 1723; x_wconf 83'>song</span> <span class='ocrx_word' id='word_1_434' title='bbox 1715 1690 1736 1717; x_wconf 90'>is</span> <span class='ocrx_word' id='word_1_435' title='bbox 1747 1694 1776 1717; x_wconf 89'>to</span> <span class='ocrx_word' id='word_1_436' title='bbox 1787 1690 1880 1717; x_wconf 86'>record</span> <span class='ocrx_word' id='word_1_437' title='bbox 1891 1690 1958 1717; x_wconf 89'>each</span> <span class='ocrx_word' id='word_1_438' title='bbox 1969 1690 2044 1717; x_wconf 87'>track</span> <span class='ocrx_word' id='word_1_439' title='bbox 2056 1690 2090 1717; x_wconf 89'>all</span> <span class='ocrx_word' id='word_1_440' title='bbox 2101 1690 2146 1717; x_wconf 88'>the</span>
</span>
<span class='ocr_line' id='line_1_53' title="bbox 1295 1729 2121 1762; baseline 0.001 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_441' title='bbox 1295 1737 1353 1762; x_wconf 96'><strong>way</strong></span> <span class='ocrx_word' id='word_1_442' title='bbox 1362 1729 1481 1762; x_wconf 96'><strong>through</strong></span> <span class='ocrx_word' id='word_1_443' title='bbox 1493 1729 1541 1762; x_wconf 95'><strong>(up</strong></span> <span class='ocrx_word' id='word_1_444' title='bbox 1552 1733 1581 1756; x_wconf 95'><strong>to</strong></span> <span class='ocrx_word' id='word_1_445' title='bbox 1592 1730 1644 1756; x_wconf 96'><strong>999</strong></span> <span class='ocrx_word' id='word_1_446' title='bbox 1654 1729 1738 1762; x_wconf 96'><strong>bars).</strong></span> <span class='ocrx_word' id='word_1_447' title='bbox 1751 1729 1878 1757; x_wconf 96'><strong>Another</strong></span> <span class='ocrx_word' id='word_1_448' title='bbox 1888 1737 1930 1757; x_wconf 96'><strong>way</strong></span> <span class='ocrx_word' id='word_1_449' title='bbox 1929 1729 1977 1762; x_wconf 96'><strong>is</strong></span> <span class='ocrx_word' id='word_1_450' title='bbox 1987 1733 2016 1757; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_451' title='bbox 2027 1729 2121 1757; x_wconf 96'><strong>record</strong></span>
<span class='ocr_line' id='line_1_53' title="bbox 1295 1729 2121 1762; baseline 0.001 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_441' title='bbox 1295 1737 1353 1762; x_wconf 87'>way</span> <span class='ocrx_word' id='word_1_442' title='bbox 1362 1729 1481 1762; x_wconf 83'>through</span> <span class='ocrx_word' id='word_1_443' title='bbox 1493 1729 1541 1762; x_wconf 90'>(up</span> <span class='ocrx_word' id='word_1_444' title='bbox 1552 1733 1581 1756; x_wconf 89'>to</span> <span class='ocrx_word' id='word_1_445' title='bbox 1592 1730 1644 1756; x_wconf 89'>999</span> <span class='ocrx_word' id='word_1_446' title='bbox 1654 1729 1738 1762; x_wconf 90'>bars).</span> <span class='ocrx_word' id='word_1_447' title='bbox 1751 1729 1878 1757; x_wconf 89'>Another</span> <span class='ocrx_word' id='word_1_448' title='bbox 1888 1737 1945 1762; x_wconf 89'>way</span> <span class='ocrx_word' id='word_1_449' title='bbox 1956 1729 1977 1757; x_wconf 90'>is</span> <span class='ocrx_word' id='word_1_450' title='bbox 1987 1733 2016 1757; x_wconf 89'>to</span> <span class='ocrx_word' id='word_1_451' title='bbox 2027 1729 2121 1757; x_wconf 86'>record</span>
</span>
<span class='ocr_line' id='line_1_54' title="bbox 1296 1768 2066 1802; baseline 0 -6; x_size 33; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_452' title='bbox 1296 1768 1362 1796; x_wconf 96'><strong>each</strong></span> <span class='ocrx_word' id='word_1_453' title='bbox 1373 1768 1448 1796; x_wconf 96'><strong>basic</strong></span> <span class='ocrx_word' id='word_1_454' title='bbox 1458 1768 1562 1796; x_wconf 96'><strong>section</strong></span> <span class='ocrx_word' id='word_1_455' title='bbox 1574 1769 1666 1802; x_wconf 96'><strong>(verse,</strong></span> <span class='ocrx_word' id='word_1_456' title='bbox 1679 1769 1779 1796; x_wconf 96'><strong>chorus,</strong></span> <span class='ocrx_word' id='word_1_457' title='bbox 1782 1769 1865 1802; x_wconf 96'><strong>etc.)</strong></span> <span class='ocrx_word' id='word_1_458' title='bbox 1876 1768 1904 1795; x_wconf 96'><strong>in</strong></span> <span class='ocrx_word' id='word_1_459' title='bbox 1914 1768 2066 1796; x_wconf 96'><strong>individual</strong></span>
<span class='ocr_line' id='line_1_54' title="bbox 1296 1768 2066 1802; baseline 0 -6; x_size 33; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_452' title='bbox 1296 1768 1362 1796; x_wconf 86'>each</span> <span class='ocrx_word' id='word_1_453' title='bbox 1373 1768 1448 1796; x_wconf 87'>basic</span> <span class='ocrx_word' id='word_1_454' title='bbox 1458 1768 1562 1796; x_wconf 83'>section</span> <span class='ocrx_word' id='word_1_455' title='bbox 1574 1769 1666 1802; x_wconf 89'>(verse,</span> <span class='ocrx_word' id='word_1_456' title='bbox 1679 1769 1788 1801; x_wconf 86'>chorus,</span> <span class='ocrx_word' id='word_1_457' title='bbox 1800 1769 1865 1802; x_wconf 83'>etc.)</span> <span class='ocrx_word' id='word_1_458' title='bbox 1876 1768 1904 1795; x_wconf 91'>in</span> <span class='ocrx_word' id='word_1_459' title='bbox 1914 1768 2066 1796; x_wconf 86'>individual</span>
</span>
<span class='ocr_line' id='line_1_55' title="bbox 1296 1808 2215 1841; baseline 0 -6; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_460' title='bbox 1296 1816 1451 1841; x_wconf 96'><strong>sequences,</strong></span> <span class='ocrx_word' id='word_1_461' title='bbox 1463 1808 1528 1835; x_wconf 96'><strong>then</strong></span> <span class='ocrx_word' id='word_1_462' title='bbox 1538 1816 1587 1835; x_wconf 96'><strong>use</strong></span> <span class='ocrx_word' id='word_1_463' title='bbox 1597 1808 1643 1835; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_464' title='bbox 1653 1809 1799 1835; x_wconf 96'><strong>CREATE</strong></span> <span class='ocrx_word' id='word_1_465' title='bbox 1810 1808 1883 1835; x_wconf 96'><strong>SONG</strong></span> <span class='ocrx_word' id='word_1_466' title='bbox 1885 1808 2050 1836; x_wconf 96'><strong>function</strong></span> <span class='ocrx_word' id='word_1_467' title='bbox 2060 1812 2089 1835; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_468' title='bbox 2103 1808 2215 1836; x_wconf 93'><strong>“chain”</strong></span>
<span class='ocr_line' id='line_1_55' title="bbox 1296 1808 2215 1841; baseline 0 -6; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_460' title='bbox 1296 1816 1451 1841; x_wconf 85'>sequences,</span> <span class='ocrx_word' id='word_1_461' title='bbox 1463 1808 1528 1835; x_wconf 86'>then</span> <span class='ocrx_word' id='word_1_462' title='bbox 1538 1816 1587 1835; x_wconf 90'>use</span> <span class='ocrx_word' id='word_1_463' title='bbox 1597 1808 1643 1835; x_wconf 89'>the</span> <span class='ocrx_word' id='word_1_464' title='bbox 1653 1809 1799 1835; x_wconf 89'>CREATE</span> <span class='ocrx_word' id='word_1_465' title='bbox 1810 1808 1911 1835; x_wconf 89'>SONG</span> <span class='ocrx_word' id='word_1_466' title='bbox 1923 1808 2050 1836; x_wconf 85'>function</span> <span class='ocrx_word' id='word_1_467' title='bbox 2060 1812 2089 1835; x_wconf 89'>to</span> <span class='ocrx_word' id='word_1_468' title='bbox 2103 1808 2215 1836; x_wconf 87'>“chain”</span>
</span>
<span class='ocr_line' id='line_1_56' title="bbox 1295 1847 2135 1881; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_469' title='bbox 1295 1848 1370 1874; x_wconf 96'><strong>them</strong></span> <span class='ocrx_word' id='word_1_470' title='bbox 1381 1848 1508 1881; x_wconf 95'><strong>together.</strong></span> <span class='ocrx_word' id='word_1_471' title='bbox 1521 1848 1667 1875; x_wconf 96'><strong>CREATE</strong></span> <span class='ocrx_word' id='word_1_472' title='bbox 1678 1848 1751 1875; x_wconf 96'><strong>SONG</strong></span> <span class='ocrx_word' id='word_1_473' title='bbox 1753 1847 1842 1874; x_wconf 96'><strong>will</strong></span> <span class='ocrx_word' id='word_1_474' title='bbox 1853 1848 1918 1875; x_wconf 96'><strong>then</strong></span> <span class='ocrx_word' id='word_1_475' title='bbox 1929 1848 2135 1881; x_wconf 96'><strong>automatically</strong></span>
<span class='ocr_line' id='line_1_56' title="bbox 1295 1847 2135 1881; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_469' title='bbox 1295 1848 1370 1874; x_wconf 91'>them</span> <span class='ocrx_word' id='word_1_470' title='bbox 1381 1848 1508 1881; x_wconf 83'>together.</span> <span class='ocrx_word' id='word_1_471' title='bbox 1521 1848 1667 1875; x_wconf 87'>CREATE</span> <span class='ocrx_word' id='word_1_472' title='bbox 1678 1848 1779 1875; x_wconf 91'>SONG</span> <span class='ocrx_word' id='word_1_473' title='bbox 1789 1847 1842 1874; x_wconf 92'>will</span> <span class='ocrx_word' id='word_1_474' title='bbox 1853 1848 1918 1875; x_wconf 86'>then</span> <span class='ocrx_word' id='word_1_475' title='bbox 1929 1848 2135 1881; x_wconf 81'>automatically</span>
</span>
<span class='ocr_line' id='line_1_57' title="bbox 1296 1887 2162 1920; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_476' title='bbox 1296 1895 1349 1920; x_wconf 96'><strong>copy</strong></span> <span class='ocrx_word' id='word_1_477' title='bbox 1349 1887 1412 1920; x_wconf 96'><strong>all</strong></span> <span class='ocrx_word' id='word_1_478' title='bbox 1422 1887 1468 1914; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_479' title='bbox 1478 1891 1552 1920; x_wconf 96'><strong>parts</strong></span> <span class='ocrx_word' id='word_1_480' title='bbox 1563 1887 1621 1914; x_wconf 95'><strong>into</strong></span> <span class='ocrx_word' id='word_1_481' title='bbox 1632 1895 1649 1914; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_482' title='bbox 1659 1895 1718 1914; x_wconf 96'><strong>new</strong></span> <span class='ocrx_word' id='word_1_483' title='bbox 1729 1895 1870 1920; x_wconf 96'><strong>sequence.</strong></span> <span class='ocrx_word' id='word_1_484' title='bbox 1884 1887 1911 1914; x_wconf 96'><strong>If</strong></span> <span class='ocrx_word' id='word_1_485' title='bbox 1919 1887 2033 1919; x_wconf 96'><strong>desired,</strong></span> <span class='ocrx_word' id='word_1_486' title='bbox 2045 1895 2099 1920; x_wconf 96'><strong>you</strong></span> <span class='ocrx_word' id='word_1_487' title='bbox 2110 1895 2162 1914; x_wconf 96'><strong>can</strong></span>
<span class='ocr_line' id='line_1_57' title="bbox 1296 1887 2162 1920; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_476' title='bbox 1296 1895 1366 1920; x_wconf 89'>copy</span> <span class='ocrx_word' id='word_1_477' title='bbox 1377 1887 1412 1914; x_wconf 88'>all</span> <span class='ocrx_word' id='word_1_478' title='bbox 1422 1887 1468 1914; x_wconf 85'>the</span> <span class='ocrx_word' id='word_1_479' title='bbox 1478 1891 1552 1920; x_wconf 86'>parts</span> <span class='ocrx_word' id='word_1_480' title='bbox 1563 1887 1621 1914; x_wconf 86'>into</span> <span class='ocrx_word' id='word_1_481' title='bbox 1632 1895 1649 1914; x_wconf 91'>a</span> <span class='ocrx_word' id='word_1_482' title='bbox 1659 1895 1718 1914; x_wconf 91'>new</span> <span class='ocrx_word' id='word_1_483' title='bbox 1729 1895 1870 1920; x_wconf 83'>sequence.</span> <span class='ocrx_word' id='word_1_484' title='bbox 1884 1887 1911 1914; x_wconf 84'>If</span> <span class='ocrx_word' id='word_1_485' title='bbox 1919 1887 2033 1919; x_wconf 89'>desired,</span> <span class='ocrx_word' id='word_1_486' title='bbox 2045 1895 2099 1920; x_wconf 92'>you</span> <span class='ocrx_word' id='word_1_487' title='bbox 2110 1895 2162 1914; x_wconf 85'>can</span>
</span>
<span class='ocr_line' id='line_1_58' title="bbox 1296 1926 2169 1960; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_488' title='bbox 1296 1934 1361 1953; x_wconf 96'><strong>even</strong></span> <span class='ocrx_word' id='word_1_489' title='bbox 1372 1930 1411 1953; x_wconf 96'><strong>set</strong></span> <span class='ocrx_word' id='word_1_490' title='bbox 1422 1926 1468 1953; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_491' title='bbox 1478 1926 1528 1953; x_wconf 96'><strong>last</strong></span> <span class='ocrx_word' id='word_1_492' title='bbox 1540 1926 1590 1953; x_wconf 96'><strong>few</strong></span> <span class='ocrx_word' id='word_1_493' title='bbox 1601 1927 1664 1953; x_wconf 96'><strong>bars</strong></span> <span class='ocrx_word' id='word_1_494' title='bbox 1675 1931 1704 1954; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_495' title='bbox 1715 1935 1795 1960; x_wconf 96'><strong>repeat</strong></span> <span class='ocrx_word' id='word_1_496' title='bbox 1795 1926 1955 1960; x_wconf 96'><strong>infinitely,</strong></span> <span class='ocrx_word' id='word_1_497' title='bbox 1968 1926 2011 1954; x_wconf 95'><strong>for</strong></span> <span class='ocrx_word' id='word_1_498' title='bbox 2022 1935 2038 1954; x_wconf 93'><strong>a</strong></span> <span class='ocrx_word' id='word_1_499' title='bbox 2049 1927 2169 1954; x_wconf 92'><strong>fadeout.</strong></span>
<span class='ocr_line' id='line_1_58' title="bbox 1296 1926 2169 1960; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_488' title='bbox 1296 1934 1361 1953; x_wconf 89'>even</span> <span class='ocrx_word' id='word_1_489' title='bbox 1372 1930 1411 1953; x_wconf 90'>set</span> <span class='ocrx_word' id='word_1_490' title='bbox 1422 1926 1468 1953; x_wconf 88'>the</span> <span class='ocrx_word' id='word_1_491' title='bbox 1478 1926 1528 1953; x_wconf 89'>last</span> <span class='ocrx_word' id='word_1_492' title='bbox 1540 1926 1590 1953; x_wconf 88'>few</span> <span class='ocrx_word' id='word_1_493' title='bbox 1601 1927 1664 1953; x_wconf 89'>bars</span> <span class='ocrx_word' id='word_1_494' title='bbox 1675 1931 1704 1954; x_wconf 85'>to</span> <span class='ocrx_word' id='word_1_495' title='bbox 1715 1931 1806 1960; x_wconf 89'>repeat</span> <span class='ocrx_word' id='word_1_496' title='bbox 1816 1926 1955 1960; x_wconf 84'>infinitely,</span> <span class='ocrx_word' id='word_1_497' title='bbox 1968 1926 2011 1954; x_wconf 86'>for</span> <span class='ocrx_word' id='word_1_498' title='bbox 2022 1935 2038 1954; x_wconf 92'>a</span> <span class='ocrx_word' id='word_1_499' title='bbox 2049 1927 2169 1954; x_wconf 83'>fadeout.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_20' title="bbox 1293 2000 2179 2242">
<p class='ocr_par' id='par_1_27' lang='eng' title="bbox 1294 2000 1948 2040">
<span class='ocr_line' id='line_1_59' title="bbox 1294 2000 1948 2040; baseline 0.002 -8; x_size 40; x_descenders 8; x_ascenders 10"><span class='ocrx_word' id='word_1_500' title='bbox 1294 2000 1532 2040; x_wconf 95'><strong>Composition</strong></span> <span class='ocrx_word' id='word_1_501' title='bbox 1544 2000 1699 2033; x_wconf 96'><strong>Without</strong></span> <span class='ocrx_word' id='word_1_502' title='bbox 1711 2000 1948 2040; x_wconf 96'><strong>Compromise</strong></span>
<span class='ocr_line' id='line_1_59' title="bbox 1294 2000 1948 2040; baseline 0.002 -8; x_size 40; x_descenders 8; x_ascenders 10"><span class='ocrx_word' id='word_1_500' title='bbox 1294 2000 1532 2040; x_wconf 84'>Composition</span> <span class='ocrx_word' id='word_1_501' title='bbox 1544 2000 1699 2033; x_wconf 85'>Without</span> <span class='ocrx_word' id='word_1_502' title='bbox 1711 2000 1948 2040; x_wconf 85'>Compromise</span>
</span>
</p>
<p class='ocr_par' id='par_1_28' lang='eng' title="bbox 1293 2051 2179 2242">
<span class='ocr_line' id='line_1_60' title="bbox 1331 2051 2179 2085; baseline 0 -7; x_size 34; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_503' title='bbox 1331 2051 1389 2078; x_wconf 96'><strong>The</strong></span> <span class='ocrx_word' id='word_1_504' title='bbox 1399 2051 1563 2085; x_wconf 96'><strong>technology</strong></span> <span class='ocrx_word' id='word_1_505' title='bbox 1573 2059 1627 2084; x_wconf 96'><strong>you</strong></span> <span class='ocrx_word' id='word_1_506' title='bbox 1638 2060 1686 2079; x_wconf 96'><strong>use</strong></span> <span class='ocrx_word' id='word_1_507' title='bbox 1697 2051 1797 2078; x_wconf 96'><strong>should</strong></span> <span class='ocrx_word' id='word_1_508' title='bbox 1808 2059 1887 2078; x_wconf 96'><strong>never</strong></span> <span class='ocrx_word' id='word_1_509' title='bbox 1897 2052 1932 2079; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_510' title='bbox 1942 2059 1973 2079; x_wconf 96'><strong>so</strong></span> <span class='ocrx_word' id='word_1_511' title='bbox 1984 2051 2110 2085; x_wconf 67'><strong>complex</strong></span> <span class='ocrx_word' id='word_1_512' title='bbox 2120 2052 2179 2078; x_wconf 96'><strong>that</strong></span>
<span class='ocr_line' id='line_1_60' title="bbox 1331 2051 2179 2085; baseline 0 -7; x_size 34; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_503' title='bbox 1331 2051 1389 2078; x_wconf 90'>The</span> <span class='ocrx_word' id='word_1_504' title='bbox 1399 2051 1563 2085; x_wconf 83'>technology</span> <span class='ocrx_word' id='word_1_505' title='bbox 1573 2059 1627 2084; x_wconf 92'>you</span> <span class='ocrx_word' id='word_1_506' title='bbox 1638 2060 1686 2079; x_wconf 86'>use</span> <span class='ocrx_word' id='word_1_507' title='bbox 1697 2051 1797 2078; x_wconf 89'>should</span> <span class='ocrx_word' id='word_1_508' title='bbox 1808 2059 1887 2078; x_wconf 87'>never</span> <span class='ocrx_word' id='word_1_509' title='bbox 1897 2052 1932 2079; x_wconf 91'>be</span> <span class='ocrx_word' id='word_1_510' title='bbox 1942 2059 1973 2079; x_wconf 89'>so</span> <span class='ocrx_word' id='word_1_511' title='bbox 1984 2051 2110 2085; x_wconf 85'>complex</span> <span class='ocrx_word' id='word_1_512' title='bbox 2120 2052 2179 2078; x_wconf 86'>that</span>
</span>
<span class='ocr_line' id='line_1_61' title="bbox 1294 2090 2157 2124; baseline 0 -6; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_513' title='bbox 1294 2090 1313 2118; x_wconf 96'><strong>it</strong></span> <span class='ocrx_word' id='word_1_514' title='bbox 1323 2091 1459 2118; x_wconf 96'><strong>interferes</strong></span> <span class='ocrx_word' id='word_1_515' title='bbox 1470 2091 1535 2118; x_wconf 96'><strong>with</strong></span> <span class='ocrx_word' id='word_1_516' title='bbox 1545 2091 1591 2118; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_517' title='bbox 1602 2091 1715 2118; x_wconf 96'><strong>creative</strong></span> <span class='ocrx_word' id='word_1_518' title='bbox 1725 2099 1841 2124; x_wconf 93'><strong>process.</strong></span> <span class='ocrx_word' id='word_1_519' title='bbox 1854 2091 1947 2118; x_wconf 92'><strong>Thats</strong></span> <span class='ocrx_word' id='word_1_520' title='bbox 1957 2091 2086 2124; x_wconf 96'><strong>precisely</strong></span> <span class='ocrx_word' id='word_1_521' title='bbox 2096 2091 2157 2124; x_wconf 96'><strong>why</strong></span>
<span class='ocr_line' id='line_1_61' title="bbox 1294 2090 2157 2124; baseline 0 -6; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_513' title='bbox 1294 2090 1313 2118; x_wconf 86'>it</span> <span class='ocrx_word' id='word_1_514' title='bbox 1323 2091 1459 2118; x_wconf 87'>interferes</span> <span class='ocrx_word' id='word_1_515' title='bbox 1470 2091 1535 2118; x_wconf 84'>with</span> <span class='ocrx_word' id='word_1_516' title='bbox 1545 2091 1591 2118; x_wconf 88'>the</span> <span class='ocrx_word' id='word_1_517' title='bbox 1602 2091 1715 2118; x_wconf 90'>creative</span> <span class='ocrx_word' id='word_1_518' title='bbox 1725 2099 1841 2124; x_wconf 83'>process.</span> <span class='ocrx_word' id='word_1_519' title='bbox 1854 2091 1947 2118; x_wconf 78'>Thats</span> <span class='ocrx_word' id='word_1_520' title='bbox 1957 2091 2086 2124; x_wconf 86'>precisely</span> <span class='ocrx_word' id='word_1_521' title='bbox 2096 2091 2157 2124; x_wconf 89'>why</span>
</span>
<span class='ocr_line' id='line_1_62' title="bbox 1293 2130 2156 2164; baseline 0 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_522' title='bbox 1293 2130 1339 2157; x_wconf 93'><strong>the</strong></span> <span class='ocrx_word' id='word_1_523' title='bbox 1350 2130 1562 2164; x_wconf 90'><strong>LinnSequencer</strong></span> <span class='ocrx_word' id='word_1_524' title='bbox 1564 2130 1607 2157; x_wconf 97'><strong>is</strong></span> <span class='ocrx_word' id='word_1_525' title='bbox 1619 2130 1747 2164; x_wconf 96'><strong>designed</strong></span> <span class='ocrx_word' id='word_1_526' title='bbox 1758 2134 1787 2157; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_527' title='bbox 1798 2130 1834 2157; x_wconf 96'><strong>let</strong></span> <span class='ocrx_word' id='word_1_528' title='bbox 1844 2138 1899 2163; x_wconf 96'><strong>you</strong></span> <span class='ocrx_word' id='word_1_529' title='bbox 1910 2138 2051 2164; x_wconf 96'><strong>compose,</strong></span> <span class='ocrx_word' id='word_1_530' title='bbox 2063 2130 2156 2157; x_wconf 96'><strong>record</strong></span>
<span class='ocr_line' id='line_1_62' title="bbox 1293 2130 2156 2164; baseline 0 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_522' title='bbox 1293 2130 1339 2157; x_wconf 90'>the</span> <span class='ocrx_word' id='word_1_523' title='bbox 1350 2130 1576 2164; x_wconf 80'>LinnSequencer</span> <span class='ocrx_word' id='word_1_524' title='bbox 1586 2130 1607 2157; x_wconf 89'>is</span> <span class='ocrx_word' id='word_1_525' title='bbox 1619 2130 1747 2164; x_wconf 87'>designed</span> <span class='ocrx_word' id='word_1_526' title='bbox 1758 2134 1787 2157; x_wconf 87'>to</span> <span class='ocrx_word' id='word_1_527' title='bbox 1798 2130 1834 2157; x_wconf 89'>let</span> <span class='ocrx_word' id='word_1_528' title='bbox 1844 2138 1899 2163; x_wconf 93'>you</span> <span class='ocrx_word' id='word_1_529' title='bbox 1910 2138 2051 2164; x_wconf 88'>compose,</span> <span class='ocrx_word' id='word_1_530' title='bbox 2063 2130 2156 2157; x_wconf 87'>record</span>
</span>
<span class='ocr_line' id='line_1_63' title="bbox 1294 2169 2145 2203; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_531' title='bbox 1294 2178 1330 2197; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_532' title='bbox 1331 2169 1414 2197; x_wconf 96'><strong>edit</strong></span> <span class='ocrx_word' id='word_1_533' title='bbox 1425 2170 1503 2197; x_wconf 96'><strong>while</strong></span> <span class='ocrx_word' id='word_1_534' title='bbox 1514 2170 1643 2203; x_wconf 96'><strong>devoting</strong></span> <span class='ocrx_word' id='word_1_535' title='bbox 1653 2178 1721 2203; x_wconf 96'><strong>your</strong></span> <span class='ocrx_word' id='word_1_536' title='bbox 1731 2170 1882 2197; x_wconf 96'><strong>undivided</strong></span> <span class='ocrx_word' id='word_1_537' title='bbox 1893 2170 2027 2197; x_wconf 96'><strong>attention</strong></span> <span class='ocrx_word' id='word_1_538' title='bbox 2037 2174 2067 2197; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_539' title='bbox 2077 2178 2145 2203; x_wconf 96'><strong>your</strong></span>
<span class='ocr_line' id='line_1_63' title="bbox 1294 2169 2145 2203; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_531' title='bbox 1294 2170 1349 2197; x_wconf 90'>and</span> <span class='ocrx_word' id='word_1_532' title='bbox 1360 2169 1414 2197; x_wconf 83'>edit</span> <span class='ocrx_word' id='word_1_533' title='bbox 1425 2170 1503 2197; x_wconf 89'>while</span> <span class='ocrx_word' id='word_1_534' title='bbox 1514 2170 1643 2203; x_wconf 90'>devoting</span> <span class='ocrx_word' id='word_1_535' title='bbox 1653 2178 1721 2203; x_wconf 92'>your</span> <span class='ocrx_word' id='word_1_536' title='bbox 1731 2170 1882 2197; x_wconf 88'>undivided</span> <span class='ocrx_word' id='word_1_537' title='bbox 1893 2170 2027 2197; x_wconf 86'>attention</span> <span class='ocrx_word' id='word_1_538' title='bbox 2037 2174 2067 2197; x_wconf 91'>to</span> <span class='ocrx_word' id='word_1_539' title='bbox 2077 2178 2145 2203; x_wconf 90'>your</span>
</span>
<span class='ocr_line' id='line_1_64' title="bbox 1294 2209 2126 2242; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_540' title='bbox 1294 2209 1388 2236; x_wconf 95'><strong>music.</strong></span> <span class='ocrx_word' id='word_1_541' title='bbox 1402 2209 1451 2236; x_wconf 96'><strong>See</strong></span> <span class='ocrx_word' id='word_1_542' title='bbox 1460 2217 1529 2242; x_wconf 96'><strong>your</strong></span> <span class='ocrx_word' id='word_1_543' title='bbox 1540 2209 1611 2236; x_wconf 96'><strong>Linn</strong></span> <span class='ocrx_word' id='word_1_544' title='bbox 1621 2209 1712 2236; x_wconf 95'><strong>dealer</strong></span> <span class='ocrx_word' id='word_1_545' title='bbox 1722 2209 1806 2242; x_wconf 95'><strong>today</strong></span> <span class='ocrx_word' id='word_1_546' title='bbox 1817 2209 1859 2236; x_wconf 95'><strong>for</strong></span> <span class='ocrx_word' id='word_1_547' title='bbox 1870 2217 1887 2236; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_548' title='bbox 1897 2209 2126 2236; x_wconf 96'><strong>demonstration!</strong></span>
<span class='ocr_line' id='line_1_64' title="bbox 1294 2209 2126 2242; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_540' title='bbox 1294 2209 1388 2236; x_wconf 88'>music.</span> <span class='ocrx_word' id='word_1_541' title='bbox 1402 2209 1451 2236; x_wconf 89'>See</span> <span class='ocrx_word' id='word_1_542' title='bbox 1460 2217 1529 2242; x_wconf 92'>your</span> <span class='ocrx_word' id='word_1_543' title='bbox 1540 2209 1611 2236; x_wconf 87'>Linn</span> <span class='ocrx_word' id='word_1_544' title='bbox 1621 2209 1712 2236; x_wconf 86'>dealer</span> <span class='ocrx_word' id='word_1_545' title='bbox 1722 2209 1806 2242; x_wconf 85'>today</span> <span class='ocrx_word' id='word_1_546' title='bbox 1817 2209 1859 2236; x_wconf 87'>for</span> <span class='ocrx_word' id='word_1_547' title='bbox 1870 2217 1887 2236; x_wconf 88'>a</span> <span class='ocrx_word' id='word_1_548' title='bbox 1897 2209 2126 2236; x_wconf 76'>demonstration!</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_21' title="bbox 347 2343 2171 2378">
<p class='ocr_par' id='par_1_29' lang='eng' title="bbox 347 2343 2171 2378">
<span class='ocr_line' id='line_1_65' title="bbox 347 2343 2171 2378; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_549' title='bbox 347 2350 361 2363; x_wconf 58'><strong>*</strong></span> <span class='ocrx_word' id='word_1_550' title='bbox 373 2343 483 2377; x_wconf 96'><strong>Simple,</strong></span> <span class='ocrx_word' id='word_1_551' title='bbox 495 2352 559 2377; x_wconf 96'><strong>easy</strong></span> <span class='ocrx_word' id='word_1_552' title='bbox 569 2348 598 2371; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_553' title='bbox 609 2344 683 2371; x_wconf 93'><strong>learn</strong></span> <span class='ocrx_word' id='word_1_554' title='bbox 694 2344 922 2378; x_wconf 91'><strong>operation—the</strong></span> <span class='ocrx_word' id='word_1_555' title='bbox 934 2345 967 2372; x_wconf 96'><strong>32</strong></span> <span class='ocrx_word' id='word_1_556' title='bbox 978 2345 1116 2372; x_wconf 96'><strong>character</strong></span> <span class='ocrx_word' id='word_1_557' title='bbox 1126 2345 1200 2372; x_wconf 96'><strong>LCD</strong></span> <span class='ocrx_word' id='word_1_558' title='bbox 1211 2345 1316 2378; x_wconf 96'><strong>display</strong></span> <span class='ocrx_word' id='word_1_559' title='bbox 1326 2345 1424 2378; x_wconf 97'><strong>clearly</strong></span> <span class='ocrx_word' id='word_1_560' title='bbox 1434 2345 1528 2378; x_wconf 96'><strong>guides</strong></span> <span class='ocrx_word' id='word_1_561' title='bbox 1539 2353 1594 2378; x_wconf 97'><strong>you</strong></span> <span class='ocrx_word' id='word_1_562' title='bbox 1604 2345 1705 2378; x_wconf 96'><strong>through</strong></span> <span class='ocrx_word' id='word_1_563' title='bbox 1706 2344 1770 2371; x_wconf 96'><strong>all</strong></span> <span class='ocrx_word' id='word_1_564' title='bbox 1781 2344 1947 2377; x_wconf 96'><strong>operations.</strong></span> <span class='ocrx_word' id='word_1_565' title='bbox 1961 2344 1989 2371; x_wconf 96'><strong>If</strong></span> <span class='ocrx_word' id='word_1_566' title='bbox 1997 2344 2112 2376; x_wconf 96'><strong>needed,</strong></span> <span class='ocrx_word' id='word_1_567' title='bbox 2125 2345 2171 2371; x_wconf 96'><strong>the</strong></span>
<span class='ocr_line' id='line_1_65' title="bbox 347 2343 2171 2378; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_549' title='bbox 347 2350 361 2363; x_wconf 69'><strong>0</strong></span> <span class='ocrx_word' id='word_1_550' title='bbox 373 2343 483 2377; x_wconf 83'>Simple,</span> <span class='ocrx_word' id='word_1_551' title='bbox 495 2352 559 2377; x_wconf 89'>easy</span> <span class='ocrx_word' id='word_1_552' title='bbox 569 2348 598 2371; x_wconf 91'>to</span> <span class='ocrx_word' id='word_1_553' title='bbox 609 2344 683 2371; x_wconf 89'>learn</span> <span class='ocrx_word' id='word_1_554' title='bbox 694 2344 922 2378; x_wconf 80'>operation—the</span> <span class='ocrx_word' id='word_1_555' title='bbox 934 2345 967 2372; x_wconf 88'>32</span> <span class='ocrx_word' id='word_1_556' title='bbox 978 2345 1116 2372; x_wconf 86'>character</span> <span class='ocrx_word' id='word_1_557' title='bbox 1126 2345 1200 2372; x_wconf 92'>LCD</span> <span class='ocrx_word' id='word_1_558' title='bbox 1211 2345 1316 2378; x_wconf 90'>display</span> <span class='ocrx_word' id='word_1_559' title='bbox 1326 2345 1424 2378; x_wconf 88'>clearly</span> <span class='ocrx_word' id='word_1_560' title='bbox 1434 2345 1528 2378; x_wconf 86'>guides</span> <span class='ocrx_word' id='word_1_561' title='bbox 1539 2353 1594 2378; x_wconf 91'>you</span> <span class='ocrx_word' id='word_1_562' title='bbox 1604 2345 1724 2378; x_wconf 87'>through</span> <span class='ocrx_word' id='word_1_563' title='bbox 1735 2344 1770 2371; x_wconf 88'>all</span> <span class='ocrx_word' id='word_1_564' title='bbox 1781 2344 1947 2377; x_wconf 86'>operations.</span> <span class='ocrx_word' id='word_1_565' title='bbox 1961 2344 1989 2371; x_wconf 88'>If</span> <span class='ocrx_word' id='word_1_566' title='bbox 1997 2344 2112 2376; x_wconf 88'>needed,</span> <span class='ocrx_word' id='word_1_567' title='bbox 2125 2345 2171 2371; x_wconf 88'>the</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_22' title="bbox 373 2381 1083 2415">
<p class='ocr_par' id='par_1_30' lang='eng' title="bbox 373 2381 1083 2415">
<span class='ocr_line' id='line_1_66' title="bbox 373 2381 1083 2415; baseline 0.003 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_568' title='bbox 373 2381 448 2407; x_wconf 96'><strong>HELP</strong></span> <span class='ocrx_word' id='word_1_569' title='bbox 450 2381 583 2408; x_wconf 96'><strong>button</strong></span> <span class='ocrx_word' id='word_1_570' title='bbox 594 2381 711 2415; x_wconf 96'><strong>displays</strong></span> <span class='ocrx_word' id='word_1_571' title='bbox 722 2382 875 2409; x_wconf 96'><strong>additional</strong></span> <span class='ocrx_word' id='word_1_572' title='bbox 886 2382 1083 2415; x_wconf 96'><strong>explanations.</strong></span>
<span class='ocr_line' id='line_1_66' title="bbox 373 2381 1083 2415; baseline 0.003 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_568' title='bbox 373 2381 472 2407; x_wconf 85'>HELP</span> <span class='ocrx_word' id='word_1_569' title='bbox 483 2381 583 2408; x_wconf 85'>button</span> <span class='ocrx_word' id='word_1_570' title='bbox 594 2381 711 2415; x_wconf 87'>displays</span> <span class='ocrx_word' id='word_1_571' title='bbox 722 2382 875 2409; x_wconf 89'>additional</span> <span class='ocrx_word' id='word_1_572' title='bbox 886 2382 1083 2415; x_wconf 87'>explanations.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_23' title="bbox 347 2427 2145 2507">
<p class='ocr_par' id='par_1_31' lang='eng' title="bbox 347 2427 2145 2507">
<span class='ocr_line' id='line_1_67' title="bbox 347 2427 1468 2461; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_573' title='bbox 347 2432 361 2446; x_wconf 70'><strong>*</strong></span> <span class='ocrx_word' id='word_1_574' title='bbox 373 2427 612 2454; x_wconf 91'><strong>Non-destructive</strong></span> <span class='ocrx_word' id='word_1_575' title='bbox 622 2427 914 2461; x_wconf 89'><strong>recording—existing</strong></span> <span class='ocrx_word' id='word_1_576' title='bbox 924 2432 1002 2455; x_wconf 96'><strong>notes</strong></span> <span class='ocrx_word' id='word_1_577' title='bbox 1013 2436 1057 2455; x_wconf 96'><strong>are</strong></span> <span class='ocrx_word' id='word_1_578' title='bbox 1068 2432 1116 2455; x_wconf 96'><strong>not</strong></span> <span class='ocrx_word' id='word_1_579' title='bbox 1127 2428 1220 2455; x_wconf 96'><strong>erased</strong></span> <span class='ocrx_word' id='word_1_580' title='bbox 1231 2428 1309 2455; x_wconf 96'><strong>while</strong></span> <span class='ocrx_word' id='word_1_581' title='bbox 1319 2428 1468 2461; x_wconf 92'><strong>recording.</strong></span>
<span class='ocr_line' id='line_1_67' title="bbox 347 2427 1468 2461; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_573' title='bbox 347 2432 361 2446; x_wconf 69'><strong>0</strong></span> <span class='ocrx_word' id='word_1_574' title='bbox 373 2427 612 2454; x_wconf 88'>Non-destructive</span> <span class='ocrx_word' id='word_1_575' title='bbox 622 2427 914 2461; x_wconf 85'>recording—existing</span> <span class='ocrx_word' id='word_1_576' title='bbox 924 2432 1002 2455; x_wconf 90'>notes</span> <span class='ocrx_word' id='word_1_577' title='bbox 1013 2436 1057 2455; x_wconf 88'>are</span> <span class='ocrx_word' id='word_1_578' title='bbox 1068 2432 1116 2455; x_wconf 84'>not</span> <span class='ocrx_word' id='word_1_579' title='bbox 1127 2428 1220 2455; x_wconf 87'>erased</span> <span class='ocrx_word' id='word_1_580' title='bbox 1231 2428 1309 2455; x_wconf 91'>while</span> <span class='ocrx_word' id='word_1_581' title='bbox 1319 2428 1468 2461; x_wconf 87'>recording.</span>
</span>
<span class='ocr_line' id='line_1_68' title="bbox 347 2473 2145 2507; baseline 0.001 -8; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_582' title='bbox 347 2478 361 2492; x_wconf 70'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_583' title='bbox 372 2473 433 2500; x_wconf 93'><strong>Two</strong></span> <span class='ocrx_word' id='word_1_584' title='bbox 444 2473 689 2500; x_wconf 90'><strong>FOOTSWITCH</strong></span> <span class='ocrx_word' id='word_1_585' title='bbox 701 2474 818 2500; x_wconf 95'><strong>INPUTS</strong></span> <span class='ocrx_word' id='word_1_586' title='bbox 819 2474 894 2501; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_587' title='bbox 893 2473 939 2507; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_588' title='bbox 941 2473 1091 2507; x_wconf 96'><strong>assigned</strong></span> <span class='ocrx_word' id='word_1_589' title='bbox 1101 2478 1130 2501; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_590' title='bbox 1141 2474 1271 2507; x_wconf 96'><strong>remotely</strong></span> <span class='ocrx_word' id='word_1_591' title='bbox 1281 2473 1387 2501; x_wconf 96'><strong>control</strong></span> <span class='ocrx_word' id='word_1_592' title='bbox 1398 2482 1481 2507; x_wconf 96'><strong>many</strong></span> <span class='ocrx_word' id='word_1_593' title='bbox 1491 2473 1523 2501; x_wconf 96'><strong>of</strong></span> <span class='ocrx_word' id='word_1_594' title='bbox 1531 2474 1578 2501; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_595' title='bbox 1588 2473 1750 2506; x_wconf 96'><strong>commonly</strong></span> <span class='ocrx_word' id='word_1_596' title='bbox 1760 2473 1827 2500; x_wconf 96'><strong>used</strong></span> <span class='ocrx_word' id='word_1_597' title='bbox 1840 2473 1991 2505; x_wconf 96'><strong>functions,</strong></span> <span class='ocrx_word' id='word_1_598' title='bbox 2003 2473 2145 2507; x_wconf 96'><strong>including</strong></span>
<span class='ocr_line' id='line_1_68' title="bbox 347 2473 2145 2507; baseline 0.001 -8; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_582' title='bbox 347 2478 361 2492; x_wconf 71'><strong>0</strong></span> <span class='ocrx_word' id='word_1_583' title='bbox 372 2473 433 2500; x_wconf 90'>Two</span> <span class='ocrx_word' id='word_1_584' title='bbox 444 2473 689 2500; x_wconf 89'>FOOTSWITCH</span> <span class='ocrx_word' id='word_1_585' title='bbox 701 2474 837 2501; x_wconf 79'>INPUTS</span> <span class='ocrx_word' id='word_1_586' title='bbox 848 2481 910 2507; x_wconf 89'>may</span> <span class='ocrx_word' id='word_1_587' title='bbox 921 2473 955 2500; x_wconf 91'>be</span> <span class='ocrx_word' id='word_1_588' title='bbox 966 2473 1091 2507; x_wconf 85'>assigned</span> <span class='ocrx_word' id='word_1_589' title='bbox 1101 2478 1130 2501; x_wconf 81'>to</span> <span class='ocrx_word' id='word_1_590' title='bbox 1141 2474 1271 2507; x_wconf 84'>remotely</span> <span class='ocrx_word' id='word_1_591' title='bbox 1281 2473 1387 2501; x_wconf 86'>control</span> <span class='ocrx_word' id='word_1_592' title='bbox 1398 2482 1481 2507; x_wconf 86'>many</span> <span class='ocrx_word' id='word_1_593' title='bbox 1491 2473 1523 2501; x_wconf 90'>of</span> <span class='ocrx_word' id='word_1_594' title='bbox 1531 2474 1578 2501; x_wconf 89'>the</span> <span class='ocrx_word' id='word_1_595' title='bbox 1588 2473 1750 2506; x_wconf 82'>commonly</span> <span class='ocrx_word' id='word_1_596' title='bbox 1760 2473 1827 2500; x_wconf 88'>used</span> <span class='ocrx_word' id='word_1_597' title='bbox 1840 2473 1991 2505; x_wconf 77'>functions,</span> <span class='ocrx_word' id='word_1_598' title='bbox 2003 2473 2145 2507; x_wconf 84'>including</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_24' title="bbox 372 2510 1090 2543">
<p class='ocr_par' id='par_1_32' lang='eng' title="bbox 372 2510 1090 2543">
<span class='ocr_line' id='line_1_69' title="bbox 372 2510 1090 2543; baseline 0.001 -6; x_size 35.625; x_descenders 8.90625; x_ascenders 8.90625"><span class='ocrx_word' id='word_1_599' title='bbox 372 2510 500 2542; x_wconf 96'><strong>ERASE,</strong></span> <span class='ocrx_word' id='word_1_600' title='bbox 513 2511 660 2542; x_wconf 92'><strong>REPEAT,</strong></span> <span class='ocrx_word' id='word_1_601' title='bbox 673 2511 883 2543; x_wconf 89'><strong>PLAY/STOP,</strong></span> <span class='ocrx_word' id='word_1_602' title='bbox 896 2519 927 2538; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_603' title='bbox 939 2511 1090 2538; x_wconf 96'><strong>LOCATE.</strong></span>
<span class='ocr_line' id='line_1_69' title="bbox 372 2510 1090 2543; baseline 0.001 -6; x_size 35.625; x_descenders 8.90625; x_ascenders 8.90625"><span class='ocrx_word' id='word_1_599' title='bbox 372 2510 500 2542; x_wconf 88'>ERASE,</span> <span class='ocrx_word' id='word_1_600' title='bbox 513 2511 660 2542; x_wconf 86'>REPEAT,</span> <span class='ocrx_word' id='word_1_601' title='bbox 673 2511 883 2543; x_wconf 80'>PLAY/STOP,</span> <span class='ocrx_word' id='word_1_602' title='bbox 896 2519 927 2538; x_wconf 90'>or</span> <span class='ocrx_word' id='word_1_603' title='bbox 939 2511 1090 2538; x_wconf 83'>LOCATE.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_25' title="bbox 347 2556 1768 2590">
<p class='ocr_par' id='par_1_33' lang='eng' title="bbox 347 2556 1768 2590">
<span class='ocr_line' id='line_1_70' title="bbox 347 2556 1768 2590; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_604' title='bbox 347 2561 361 2575; x_wconf 86'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_605' title='bbox 372 2556 433 2583; x_wconf 85'><strong>Iwo</strong></span> <span class='ocrx_word' id='word_1_606' title='bbox 443 2556 612 2583; x_wconf 96'><strong>TRIGGER</strong></span> <span class='ocrx_word' id='word_1_607' title='bbox 623 2556 778 2584; x_wconf 96'><strong>OUTPUTS</strong></span> <span class='ocrx_word' id='word_1_608' title='bbox 780 2557 871 2590; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_609' title='bbox 881 2557 915 2584; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_610' title='bbox 925 2557 1119 2590; x_wconf 96'><strong>programmed</strong></span> <span class='ocrx_word' id='word_1_611' title='bbox 1129 2561 1158 2584; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_612' title='bbox 1169 2561 1270 2590; x_wconf 96'><strong>output</strong></span> <span class='ocrx_word' id='word_1_613' title='bbox 1281 2557 1370 2590; x_wconf 96'><strong>pulses</strong></span> <span class='ocrx_word' id='word_1_614' title='bbox 1381 2561 1409 2584; x_wconf 96'><strong>at</strong></span> <span class='ocrx_word' id='word_1_615' title='bbox 1419 2565 1472 2590; x_wconf 96'><strong>any</strong></span> <span class='ocrx_word' id='word_1_616' title='bbox 1483 2557 1598 2584; x_wconf 96'><strong>selected</strong></span> <span class='ocrx_word' id='word_1_617' title='bbox 1608 2561 1673 2584; x_wconf 97'><strong>note</strong></span> <span class='ocrx_word' id='word_1_618' title='bbox 1683 2556 1768 2583; x_wconf 96'><strong>value.</strong></span>
<span class='ocr_line' id='line_1_70' title="bbox 347 2556 1768 2590; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_604' title='bbox 347 2561 361 2575; x_wconf 71'><strong>0</strong></span> <span class='ocrx_word' id='word_1_605' title='bbox 372 2556 433 2583; x_wconf 91'>Two</span> <span class='ocrx_word' id='word_1_606' title='bbox 443 2556 612 2583; x_wconf 83'>TRIGGER</span> <span class='ocrx_word' id='word_1_607' title='bbox 623 2556 797 2584; x_wconf 84'>OUTPUTS</span> <span class='ocrx_word' id='word_1_608' title='bbox 808 2565 871 2590; x_wconf 89'>may</span> <span class='ocrx_word' id='word_1_609' title='bbox 881 2557 915 2584; x_wconf 91'>be</span> <span class='ocrx_word' id='word_1_610' title='bbox 925 2557 1119 2590; x_wconf 84'>programmed</span> <span class='ocrx_word' id='word_1_611' title='bbox 1129 2561 1158 2584; x_wconf 93'>to</span> <span class='ocrx_word' id='word_1_612' title='bbox 1169 2561 1270 2590; x_wconf 87'>output</span> <span class='ocrx_word' id='word_1_613' title='bbox 1281 2557 1370 2590; x_wconf 88'>pulses</span> <span class='ocrx_word' id='word_1_614' title='bbox 1381 2561 1409 2584; x_wconf 92'>at</span> <span class='ocrx_word' id='word_1_615' title='bbox 1419 2565 1472 2590; x_wconf 90'>any</span> <span class='ocrx_word' id='word_1_616' title='bbox 1483 2557 1598 2584; x_wconf 86'>selected</span> <span class='ocrx_word' id='word_1_617' title='bbox 1608 2561 1673 2584; x_wconf 89'>note</span> <span class='ocrx_word' id='word_1_618' title='bbox 1683 2556 1768 2583; x_wconf 89'>value.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_26' title="bbox 347 2601 1226 2635">
<p class='ocr_par' id='par_1_34' lang='eng' title="bbox 347 2601 1226 2635">
<span class='ocr_line' id='line_1_71' title="bbox 347 2601 1226 2635; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_619' title='bbox 347 2607 361 2620; x_wconf 58'><strong>©</strong></span> <span class='ocrx_word' id='word_1_620' title='bbox 372 2601 434 2628; x_wconf 96'><strong>Will</strong></span> <span class='ocrx_word' id='word_1_621' title='bbox 445 2609 510 2634; x_wconf 96'><strong>sync</strong></span> <span class='ocrx_word' id='word_1_622' title='bbox 521 2605 549 2628; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_623' title='bbox 561 2602 690 2629; x_wconf 93'><strong>standard</strong></span> <span class='ocrx_word' id='word_1_624' title='bbox 701 2602 864 2629; x_wconf 91'><strong>LinnDrum</strong></span> <span class='ocrx_word' id='word_1_625' title='bbox 875 2610 907 2629; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_626' title='bbox 918 2602 989 2629; x_wconf 96'><strong>Linn</strong></span> <span class='ocrx_word' id='word_1_627' title='bbox 1000 2603 1069 2629; x_wconf 95'><strong>9000</strong></span> <span class='ocrx_word' id='word_1_628' title='bbox 1080 2610 1129 2635; x_wconf 96'><strong>sync</strong></span> <span class='ocrx_word' id='word_1_629' title='bbox 1131 2607 1226 2630; x_wconf 96'><strong>tone.</strong></span>
<span class='ocr_line' id='line_1_71' title="bbox 347 2601 1226 2635; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_619' title='bbox 347 2607 361 2620; x_wconf 65'><strong>0</strong></span> <span class='ocrx_word' id='word_1_620' title='bbox 372 2601 434 2628; x_wconf 88'>Will</span> <span class='ocrx_word' id='word_1_621' title='bbox 445 2609 510 2634; x_wconf 89'>sync</span> <span class='ocrx_word' id='word_1_622' title='bbox 521 2605 549 2628; x_wconf 84'>to</span> <span class='ocrx_word' id='word_1_623' title='bbox 561 2602 690 2629; x_wconf 88'>standard</span> <span class='ocrx_word' id='word_1_624' title='bbox 701 2602 864 2629; x_wconf 86'>LinnDrum</span> <span class='ocrx_word' id='word_1_625' title='bbox 875 2610 907 2629; x_wconf 91'>or</span> <span class='ocrx_word' id='word_1_626' title='bbox 918 2602 989 2629; x_wconf 89'>Linn</span> <span class='ocrx_word' id='word_1_627' title='bbox 1000 2603 1069 2629; x_wconf 90'>9000</span> <span class='ocrx_word' id='word_1_628' title='bbox 1080 2610 1145 2635; x_wconf 87'>sync</span> <span class='ocrx_word' id='word_1_629' title='bbox 1155 2607 1226 2630; x_wconf 89'>tone.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_27' title="bbox 347 2648 2100 2727">
<p class='ocr_par' id='par_1_35' lang='eng' title="bbox 347 2648 2100 2727">
<span class='ocr_line' id='line_1_72' title="bbox 347 2648 1664 2682; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_630' title='bbox 347 2654 360 2667; x_wconf 45'><strong>©</strong></span> <span class='ocrx_word' id='word_1_631' title='bbox 372 2648 483 2675; x_wconf 95'><strong>Utilizes</strong></span> <span class='ocrx_word' id='word_1_632' title='bbox 493 2648 564 2680; x_wconf 96'><strong>ultra</strong></span> <span class='ocrx_word' id='word_1_633' title='bbox 573 2648 744 2682; x_wconf 96'><strong>high-speed,</strong></span> <span class='ocrx_word' id='word_1_634' title='bbox 757 2649 772 2676; x_wconf 95'><strong>8</strong></span> <span class='ocrx_word' id='word_1_635' title='bbox 783 2649 862 2675; x_wconf 94'><strong>MHz</strong></span> <span class='ocrx_word' id='word_1_636' title='bbox 873 2649 954 2676; x_wconf 96'><strong>80186</strong></span> <span class='ocrx_word' id='word_1_637' title='bbox 965 2649 994 2676; x_wconf 96'><strong>16</strong></span> <span class='ocrx_word' id='word_1_638' title='bbox 1004 2648 1043 2676; x_wconf 96'><strong>bit</strong></span> <span class='ocrx_word' id='word_1_639' title='bbox 1054 2653 1197 2682; x_wconf 96'><strong>computer</strong></span> <span class='ocrx_word' id='word_1_640' title='bbox 1208 2649 1350 2682; x_wconf 96'><strong>internally</strong></span> <span class='ocrx_word' id='word_1_641' title='bbox 1361 2649 1403 2676; x_wconf 96'><strong>for</strong></span> <span class='ocrx_word' id='word_1_642' title='bbox 1414 2649 1502 2676; x_wconf 96'><strong>FAST</strong></span> <span class='ocrx_word' id='word_1_643' title='bbox 1512 2648 1664 2682; x_wconf 96'><strong>operation.</strong></span>
<span class='ocr_line' id='line_1_72' title="bbox 347 2648 1664 2682; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_630' title='bbox 347 2654 360 2667; x_wconf 75'>&#39;</span> <span class='ocrx_word' id='word_1_631' title='bbox 372 2648 483 2675; x_wconf 89'>Utilizes</span> <span class='ocrx_word' id='word_1_632' title='bbox 493 2648 564 2680; x_wconf 75'>ultra</span> <span class='ocrx_word' id='word_1_633' title='bbox 573 2648 744 2682; x_wconf 86'>highspeed,</span> <span class='ocrx_word' id='word_1_634' title='bbox 757 2649 772 2676; x_wconf 91'>8</span> <span class='ocrx_word' id='word_1_635' title='bbox 783 2649 862 2675; x_wconf 89'>MHz</span> <span class='ocrx_word' id='word_1_636' title='bbox 873 2649 954 2676; x_wconf 88'>80186</span> <span class='ocrx_word' id='word_1_637' title='bbox 965 2649 994 2676; x_wconf 91'>16</span> <span class='ocrx_word' id='word_1_638' title='bbox 1004 2648 1043 2676; x_wconf 90'>bit</span> <span class='ocrx_word' id='word_1_639' title='bbox 1054 2653 1197 2682; x_wconf 88'>computer</span> <span class='ocrx_word' id='word_1_640' title='bbox 1208 2649 1350 2682; x_wconf 90'>internally</span> <span class='ocrx_word' id='word_1_641' title='bbox 1361 2649 1403 2676; x_wconf 87'>for</span> <span class='ocrx_word' id='word_1_642' title='bbox 1414 2649 1502 2676; x_wconf 87'>FAST</span> <span class='ocrx_word' id='word_1_643' title='bbox 1512 2648 1664 2682; x_wconf 81'>operation.</span>
</span>
<span class='ocr_line' id='line_1_73' title="bbox 347 2694 2100 2727; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_644' title='bbox 347 2699 361 2713; x_wconf 31'><strong>*</strong></span> <span class='ocrx_word' id='word_1_645' title='bbox 372 2694 476 2720; x_wconf 96'><strong>TEMPO</strong></span> <span class='ocrx_word' id='word_1_646' title='bbox 478 2694 562 2721; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_647' title='bbox 561 2694 606 2727; x_wconf 95'><strong>be</strong></span> <span class='ocrx_word' id='word_1_648' title='bbox 608 2694 764 2727; x_wconf 95'><strong>specified</strong></span> <span class='ocrx_word' id='word_1_649' title='bbox 774 2694 802 2721; x_wconf 93'><strong>in</strong></span> <span class='ocrx_word' id='word_1_650' title='bbox 814 2695 1172 2722; x_wconf 91'><strong>BEATS-PER-MINUTE</strong></span> <span class='ocrx_word' id='word_1_651' title='bbox 1183 2703 1215 2722; x_wconf 93'><strong>or</strong></span> <span class='ocrx_word' id='word_1_652' title='bbox 1225 2695 1547 2722; x_wconf 91'><strong>FRAMES-PER-BEAT</strong></span> <span class='ocrx_word' id='word_1_653' title='bbox 1543 2695 1605 2721; x_wconf 96'><strong>at</strong></span> <span class='ocrx_word' id='word_1_654' title='bbox 1616 2695 1659 2726; x_wconf 96'><strong>24,</strong></span> <span class='ocrx_word' id='word_1_655' title='bbox 1672 2695 1716 2726; x_wconf 96'><strong>25,</strong></span> <span class='ocrx_word' id='word_1_656' title='bbox 1728 2702 1760 2721; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_657' title='bbox 1772 2695 1806 2721; x_wconf 96'><strong>30</strong></span> <span class='ocrx_word' id='word_1_658' title='bbox 1817 2694 1917 2721; x_wconf 96'><strong>frames</strong></span> <span class='ocrx_word' id='word_1_659' title='bbox 1928 2702 1976 2727; x_wconf 96'><strong>per</strong></span> <span class='ocrx_word' id='word_1_660' title='bbox 1987 2694 2100 2726; x_wconf 96'><strong>second,</strong></span>
<span class='ocr_line' id='line_1_73' title="bbox 347 2694 2100 2727; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_644' title='bbox 347 2699 361 2713; x_wconf 70'><strong>0</strong></span> <span class='ocrx_word' id='word_1_645' title='bbox 372 2694 504 2721; x_wconf 88'>TEMPO</span> <span class='ocrx_word' id='word_1_646' title='bbox 515 2702 578 2727; x_wconf 92'>may</span> <span class='ocrx_word' id='word_1_647' title='bbox 589 2694 623 2721; x_wconf 90'>be</span> <span class='ocrx_word' id='word_1_648' title='bbox 633 2694 764 2727; x_wconf 87'>specified</span> <span class='ocrx_word' id='word_1_649' title='bbox 774 2694 802 2721; x_wconf 89'>in</span> <span class='ocrx_word' id='word_1_650' title='bbox 814 2695 1172 2722; x_wconf 84'>BEATS-PERMINUTE</span> <span class='ocrx_word' id='word_1_651' title='bbox 1183 2703 1215 2722; x_wconf 93'>or</span> <span class='ocrx_word' id='word_1_652' title='bbox 1225 2695 1567 2722; x_wconf 84'>FRAMES-PERBEAT</span> <span class='ocrx_word' id='word_1_653' title='bbox 1577 2698 1605 2721; x_wconf 89'>at</span> <span class='ocrx_word' id='word_1_654' title='bbox 1616 2695 1659 2726; x_wconf 91'>24,</span> <span class='ocrx_word' id='word_1_655' title='bbox 1672 2695 1716 2726; x_wconf 88'>25,</span> <span class='ocrx_word' id='word_1_656' title='bbox 1728 2702 1760 2721; x_wconf 90'>or</span> <span class='ocrx_word' id='word_1_657' title='bbox 1772 2695 1806 2721; x_wconf 88'>30</span> <span class='ocrx_word' id='word_1_658' title='bbox 1817 2694 1917 2721; x_wconf 86'>frames</span> <span class='ocrx_word' id='word_1_659' title='bbox 1928 2702 1976 2727; x_wconf 89'>per</span> <span class='ocrx_word' id='word_1_660' title='bbox 1987 2694 2100 2726; x_wconf 87'>second,</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_28' title="bbox 373 2731 652 2765">
<p class='ocr_par' id='par_1_36' lang='eng' title="bbox 373 2731 652 2765">
<span class='ocr_line' id='line_1_74' title="bbox 373 2731 652 2765; baseline 0 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_661' title='bbox 373 2731 449 2764; x_wconf 96'><strong>(even</strong></span> <span class='ocrx_word' id='word_1_662' title='bbox 460 2731 529 2765; x_wconf 95'><strong>drop</strong></span> <span class='ocrx_word' id='word_1_663' title='bbox 541 2731 652 2764; x_wconf 95'><strong>frame!)</strong></span>
<span class='ocr_line' id='line_1_74' title="bbox 373 2731 652 2765; baseline 0 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_661' title='bbox 373 2731 449 2764; x_wconf 87'>(even</span> <span class='ocrx_word' id='word_1_662' title='bbox 460 2731 529 2765; x_wconf 88'>drop</span> <span class='ocrx_word' id='word_1_663' title='bbox 541 2731 652 2764; x_wconf 81'>frame!)</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_29' title="bbox 347 2777 2174 2811">
<p class='ocr_par' id='par_1_37' lang='eng' title="bbox 347 2777 2174 2811">
<span class='ocr_line' id='line_1_75' title="bbox 347 2777 2174 2811; baseline 0.001 -8; x_size 33; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_664' title='bbox 347 2782 360 2796; x_wconf 81'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_665' title='bbox 372 2777 476 2803; x_wconf 94'><strong>TEMPO</strong></span> <span class='ocrx_word' id='word_1_666' title='bbox 478 2777 562 2804; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_667' title='bbox 561 2777 622 2810; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_668' title='bbox 633 2778 741 2804; x_wconf 95'><strong>entered</strong></span> <span class='ocrx_word' id='word_1_669' title='bbox 751 2777 934 2811; x_wconf 96'><strong>numerically,</strong></span> <span class='ocrx_word' id='word_1_670' title='bbox 946 2777 1101 2811; x_wconf 95'><strong>adjustable</strong></span> <span class='ocrx_word' id='word_1_671' title='bbox 1111 2777 1139 2804; x_wconf 95'><strong>in</strong></span> <span class='ocrx_word' id='word_1_672' title='bbox 1149 2778 1239 2805; x_wconf 96'><strong>tenths</strong></span> <span class='ocrx_word' id='word_1_673' title='bbox 1250 2778 1282 2805; x_wconf 96'><strong>of</strong></span> <span class='ocrx_word' id='word_1_674' title='bbox 1290 2786 1307 2805; x_wconf 91'><strong>a</strong></span> <span class='ocrx_word' id='word_1_675' title='bbox 1317 2777 1567 2805; x_wconf 91'><strong>Beat-Per-Minute</strong></span> <span class='ocrx_word' id='word_1_676' title='bbox 1577 2777 1748 2809; x_wconf 96'><strong>increments,</strong></span> <span class='ocrx_word' id='word_1_677' title='bbox 1760 2785 1792 2804; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_678' title='bbox 1803 2777 1839 2810; x_wconf 96'><strong>by</strong></span> <span class='ocrx_word' id='word_1_679' title='bbox 1849 2777 1964 2811; x_wconf 96'><strong>tapping</strong></span> <span class='ocrx_word' id='word_1_680' title='bbox 1975 2781 2086 2810; x_wconf 96'><strong>quarter</strong></span> <span class='ocrx_word' id='word_1_681' title='bbox 2097 2781 2174 2804; x_wconf 96'><strong>notes</strong></span>
<span class='ocr_line' id='line_1_75' title="bbox 347 2777 2174 2811; baseline 0.001 -8; x_size 33; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_664' title='bbox 347 2782 360 2796; x_wconf 72'><strong>0</strong></span> <span class='ocrx_word' id='word_1_665' title='bbox 372 2777 504 2804; x_wconf 82'>TEMPO</span> <span class='ocrx_word' id='word_1_666' title='bbox 515 2785 578 2810; x_wconf 91'>may</span> <span class='ocrx_word' id='word_1_667' title='bbox 588 2777 622 2804; x_wconf 92'>be</span> <span class='ocrx_word' id='word_1_668' title='bbox 633 2778 741 2804; x_wconf 84'>entered</span> <span class='ocrx_word' id='word_1_669' title='bbox 751 2777 934 2811; x_wconf 80'>numerically,</span> <span class='ocrx_word' id='word_1_670' title='bbox 946 2777 1101 2811; x_wconf 85'>adjustable</span> <span class='ocrx_word' id='word_1_671' title='bbox 1111 2777 1139 2804; x_wconf 92'>in</span> <span class='ocrx_word' id='word_1_672' title='bbox 1149 2778 1239 2805; x_wconf 88'>tenths</span> <span class='ocrx_word' id='word_1_673' title='bbox 1250 2778 1282 2805; x_wconf 85'>of</span> <span class='ocrx_word' id='word_1_674' title='bbox 1290 2786 1307 2805; x_wconf 94'>a</span> <span class='ocrx_word' id='word_1_675' title='bbox 1317 2777 1567 2805; x_wconf 85'>Beat-Per-Minute</span> <span class='ocrx_word' id='word_1_676' title='bbox 1577 2777 1748 2809; x_wconf 85'>increments,</span> <span class='ocrx_word' id='word_1_677' title='bbox 1760 2785 1792 2804; x_wconf 87'>or</span> <span class='ocrx_word' id='word_1_678' title='bbox 1803 2777 1839 2810; x_wconf 94'>by</span> <span class='ocrx_word' id='word_1_679' title='bbox 1849 2777 1964 2811; x_wconf 84'>tapping</span> <span class='ocrx_word' id='word_1_680' title='bbox 1975 2781 2086 2810; x_wconf 85'>quarter</span> <span class='ocrx_word' id='word_1_681' title='bbox 2097 2781 2174 2804; x_wconf 85'>notes</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_30' title="bbox 372 2815 808 2842">
<p class='ocr_par' id='par_1_38' lang='eng' title="bbox 372 2815 808 2842">
<span class='ocr_line' id='line_1_76' title="bbox 372 2815 808 2842; baseline 0.002 -1; x_size 32.351353; x_descenders 5.3513513; x_ascenders 9"><span class='ocrx_word' id='word_1_682' title='bbox 372 2822 410 2841; x_wconf 96'><strong>on</strong></span> <span class='ocrx_word' id='word_1_683' title='bbox 420 2815 466 2842; x_wconf 95'><strong>the</strong></span> <span class='ocrx_word' id='word_1_684' title='bbox 476 2815 545 2841; x_wconf 95'><strong>TAP</strong></span> <span class='ocrx_word' id='word_1_685' title='bbox 556 2816 660 2842; x_wconf 95'><strong>TEMPO</strong></span> <span class='ocrx_word' id='word_1_686' title='bbox 662 2815 808 2842; x_wconf 96'><strong>button.</strong></span>
<span class='ocr_line' id='line_1_76' title="bbox 372 2815 808 2842; baseline 0.002 -1; x_size 32.351353; x_descenders 5.3513513; x_ascenders 9"><span class='ocrx_word' id='word_1_682' title='bbox 372 2822 410 2841; x_wconf 93'>on</span> <span class='ocrx_word' id='word_1_683' title='bbox 420 2815 466 2842; x_wconf 86'>the</span> <span class='ocrx_word' id='word_1_684' title='bbox 476 2815 545 2841; x_wconf 91'>TAP</span> <span class='ocrx_word' id='word_1_685' title='bbox 556 2815 689 2842; x_wconf 85'>TEMPO</span> <span class='ocrx_word' id='word_1_686' title='bbox 699 2815 808 2842; x_wconf 83'>button.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_31' title="bbox 347 2861 1792 2940">
<p class='ocr_par' id='par_1_39' lang='eng' title="bbox 347 2861 1792 2940">
<span class='ocr_line' id='line_1_77' title="bbox 347 2861 1792 2895; baseline 0.001 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_687' title='bbox 347 2866 360 2880; x_wconf 43'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_688' title='bbox 372 2861 504 2887; x_wconf 96'><strong>TEMPO</strong></span> <span class='ocrx_word' id='word_1_689' title='bbox 515 2861 677 2888; x_wconf 96'><strong>CHANGES</strong></span> <span class='ocrx_word' id='word_1_690' title='bbox 679 2861 771 2894; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_691' title='bbox 781 2861 815 2888; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_692' title='bbox 825 2869 1000 2894; x_wconf 96'><strong>programmed</strong></span> <span class='ocrx_word' id='word_1_693' title='bbox 1001 2861 1087 2888; x_wconf 96'><strong>into</strong></span> <span class='ocrx_word' id='word_1_694' title='bbox 1099 2869 1115 2888; x_wconf 95'><strong>a</strong></span> <span class='ocrx_word' id='word_1_695' title='bbox 1126 2870 1268 2895; x_wconf 96'><strong>sequence,</strong></span> <span class='ocrx_word' id='word_1_696' title='bbox 1280 2861 1344 2888; x_wconf 96'><strong>with</strong></span> <span class='ocrx_word' id='word_1_697' title='bbox 1356 2866 1448 2888; x_wconf 95'><strong>smooth</strong></span> <span class='ocrx_word' id='word_1_698' title='bbox 1450 2861 1635 2888; x_wconf 96'><strong>transitions</strong></span> <span class='ocrx_word' id='word_1_699' title='bbox 1646 2861 1670 2887; x_wconf 96'><strong>if</strong></span> <span class='ocrx_word' id='word_1_700' title='bbox 1679 2861 1792 2888; x_wconf 87'><strong>desired.</strong></span>
<span class='ocr_line' id='line_1_77' title="bbox 347 2861 1792 2895; baseline 0.001 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_687' title='bbox 347 2866 360 2880; x_wconf 68'><strong>0</strong></span> <span class='ocrx_word' id='word_1_688' title='bbox 372 2861 504 2887; x_wconf 87'>TEMPO</span> <span class='ocrx_word' id='word_1_689' title='bbox 515 2861 696 2888; x_wconf 86'>CHANGES</span> <span class='ocrx_word' id='word_1_690' title='bbox 707 2869 771 2894; x_wconf 92'>may</span> <span class='ocrx_word' id='word_1_691' title='bbox 781 2861 815 2888; x_wconf 92'>be</span> <span class='ocrx_word' id='word_1_692' title='bbox 825 2861 1019 2894; x_wconf 85'>programmed</span> <span class='ocrx_word' id='word_1_693' title='bbox 1030 2861 1087 2888; x_wconf 88'>into</span> <span class='ocrx_word' id='word_1_694' title='bbox 1099 2869 1115 2888; x_wconf 87'>a</span> <span class='ocrx_word' id='word_1_695' title='bbox 1126 2870 1268 2895; x_wconf 87'>sequence,</span> <span class='ocrx_word' id='word_1_696' title='bbox 1280 2861 1344 2888; x_wconf 89'>with</span> <span class='ocrx_word' id='word_1_697' title='bbox 1356 2862 1467 2888; x_wconf 88'>smooth</span> <span class='ocrx_word' id='word_1_698' title='bbox 1478 2861 1635 2888; x_wconf 85'>transitions</span> <span class='ocrx_word' id='word_1_699' title='bbox 1646 2861 1670 2887; x_wconf 90'>if</span> <span class='ocrx_word' id='word_1_700' title='bbox 1679 2861 1792 2888; x_wconf 89'>desired.</span>
</span>
<span class='ocr_line' id='line_1_78' title="bbox 347 2906 1507 2940; baseline 0.002 -8; x_size 33; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_701' title='bbox 347 2911 360 2925; x_wconf 69'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_702' title='bbox 371 2906 434 2938; x_wconf 96'><strong>Any</strong></span> <span class='ocrx_word' id='word_1_703' title='bbox 444 2906 539 2932; x_wconf 96'><strong>TIME</strong></span> <span class='ocrx_word' id='word_1_704' title='bbox 550 2906 739 2933; x_wconf 96'><strong>SIGNATURE</strong></span> <span class='ocrx_word' id='word_1_705' title='bbox 740 2907 820 2933; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_706' title='bbox 819 2907 880 2939; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_707' title='bbox 891 2907 968 2938; x_wconf 96'><strong>used,</strong></span> <span class='ocrx_word' id='word_1_708' title='bbox 980 2907 1036 2934; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_709' title='bbox 1046 2915 1109 2940; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_710' title='bbox 1120 2907 1154 2934; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_711' title='bbox 1164 2907 1288 2940; x_wconf 96'><strong>changed</strong></span> <span class='ocrx_word' id='word_1_712' title='bbox 1299 2907 1393 2934; x_wconf 95'><strong>within</strong></span> <span class='ocrx_word' id='word_1_713' title='bbox 1404 2915 1420 2934; x_wconf 95'><strong>a</strong></span> <span class='ocrx_word' id='word_1_714' title='bbox 1431 2915 1507 2940; x_wconf 96'><strong>song.</strong></span>
<span class='ocr_line' id='line_1_78' title="bbox 347 2906 1507 2940; baseline 0.002 -8; x_size 33; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_701' title='bbox 347 2911 360 2925; x_wconf 74'><strong><em>°</em></strong></span> <span class='ocrx_word' id='word_1_702' title='bbox 371 2906 434 2938; x_wconf 92'>Any</span> <span class='ocrx_word' id='word_1_703' title='bbox 444 2906 539 2932; x_wconf 85'>TIME</span> <span class='ocrx_word' id='word_1_704' title='bbox 550 2906 763 2933; x_wconf 88'>SIGNATURE</span> <span class='ocrx_word' id='word_1_705' title='bbox 773 2915 836 2939; x_wconf 88'>may</span> <span class='ocrx_word' id='word_1_706' title='bbox 846 2907 880 2933; x_wconf 91'>be</span> <span class='ocrx_word' id='word_1_707' title='bbox 891 2907 968 2938; x_wconf 89'>used,</span> <span class='ocrx_word' id='word_1_708' title='bbox 980 2907 1036 2934; x_wconf 89'>and</span> <span class='ocrx_word' id='word_1_709' title='bbox 1046 2915 1109 2940; x_wconf 91'>may</span> <span class='ocrx_word' id='word_1_710' title='bbox 1120 2907 1154 2934; x_wconf 90'>be</span> <span class='ocrx_word' id='word_1_711' title='bbox 1164 2907 1288 2940; x_wconf 84'>changed</span> <span class='ocrx_word' id='word_1_712' title='bbox 1299 2907 1393 2934; x_wconf 83'>within</span> <span class='ocrx_word' id='word_1_713' title='bbox 1404 2915 1420 2934; x_wconf 89'>a</span> <span class='ocrx_word' id='word_1_714' title='bbox 1431 2915 1507 2940; x_wconf 87'>song.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_32' title="bbox 1540 2970 1878 3140">
<p class='ocr_par' id='par_1_40' lang='eng' title="bbox 1540 2970 1878 3140">
<span class='ocr_line' id='line_1_79' title="bbox 1540 2970 1800 3089; baseline 0 -14; x_size 100.5; x_descenders 16.5; x_ascenders 28.499998"><span class='ocrx_word' id='word_1_715' title='bbox 1540 2970 1800 3089; x_wconf 92'><strong>linn</strong></span>
<span class='ocr_line' id='line_1_79' title="bbox 1540 2970 1800 3089; baseline 0 -14; x_size 100.5; x_descenders 16.5; x_ascenders 28.499998"><span class='ocrx_word' id='word_1_715' title='bbox 1540 2970 1800 3089; x_wconf 74'>E1111</span>
</span>
<span class='ocr_line' id='line_1_80' title="bbox 1554 3108 1878 3140; baseline 0 -5; x_size 32; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_716' title='bbox 1554 3108 1624 3135; x_wconf 96'><strong>Linn</strong></span> <span class='ocrx_word' id='word_1_717' title='bbox 1635 3108 1808 3140; x_wconf 96'><strong>Electronics,</strong></span> <span class='ocrx_word' id='word_1_718' title='bbox 1822 3109 1878 3136; x_wconf 95'><strong>Inc.</strong></span>
<span class='ocr_line' id='line_1_80' title="bbox 1554 3108 1878 3140; baseline 0 -5; x_size 32; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_716' title='bbox 1554 3108 1624 3135; x_wconf 91'>Linn</span> <span class='ocrx_word' id='word_1_717' title='bbox 1635 3108 1808 3140; x_wconf 87'>Electronics,</span> <span class='ocrx_word' id='word_1_718' title='bbox 1822 3109 1878 3136; x_wconf 84'>Inc.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_33' title="bbox 1554 3150 2188 3226">
<p class='ocr_par' id='par_1_41' lang='eng' title="bbox 1554 3150 2188 3226">
<span class='ocr_line' id='line_1_81' title="bbox 1557 3150 2163 3182; baseline 0 -5; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_719' title='bbox 1557 3150 1638 3177; x_wconf 95'><strong>18720</strong></span> <span class='ocrx_word' id='word_1_720' title='bbox 1648 3150 1761 3177; x_wconf 96'><strong>Oxnard</strong></span> <span class='ocrx_word' id='word_1_721' title='bbox 1772 3150 1866 3182; x_wconf 96'><strong>Street,</strong></span> <span class='ocrx_word' id='word_1_722' title='bbox 1878 3150 2006 3182; x_wconf 96'><strong>Tarzana,</strong></span> <span class='ocrx_word' id='word_1_723' title='bbox 2019 3150 2071 3177; x_wconf 95'><strong>CA</strong></span> <span class='ocrx_word' id='word_1_724' title='bbox 2082 3150 2163 3177; x_wconf 96'><strong>91356</strong></span>
<span class='ocr_line' id='line_1_81' title="bbox 1557 3150 2163 3182; baseline 0 -5; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_719' title='bbox 1557 3150 1638 3177; x_wconf 88'>18720</span> <span class='ocrx_word' id='word_1_720' title='bbox 1648 3150 1761 3177; x_wconf 89'>Oxnard</span> <span class='ocrx_word' id='word_1_721' title='bbox 1772 3150 1866 3182; x_wconf 81'>Street,</span> <span class='ocrx_word' id='word_1_722' title='bbox 1878 3150 2006 3182; x_wconf 86'>Tarzana,</span> <span class='ocrx_word' id='word_1_723' title='bbox 2019 3150 2071 3177; x_wconf 93'>CA</span> <span class='ocrx_word' id='word_1_724' title='bbox 2082 3150 2163 3177; x_wconf 88'>91356</span>
</span>
<span class='ocr_line' id='line_1_82' title="bbox 1554 3192 2188 3226; baseline 0 -7; x_size 33.5; x_descenders 5.5; x_ascenders 8.5"><span class='ocrx_word' id='word_1_725' title='bbox 1554 3193 1622 3226; x_wconf 96'><strong>(818)</strong></span> <span class='ocrx_word' id='word_1_726' title='bbox 1633 3193 1755 3219; x_wconf 95'><strong>708-8131</strong></span> <span class='ocrx_word' id='word_1_727' title='bbox 1765 3193 1888 3219; x_wconf 95'><strong>TELEX</strong></span> <span class='ocrx_word' id='word_1_728' title='bbox 1899 3192 2022 3219; x_wconf 95'><strong>#298949</strong></span> <span class='ocrx_word' id='word_1_729' title='bbox 2033 3193 2125 3219; x_wconf 95'><strong>LINN</strong></span> <span class='ocrx_word' id='word_1_730' title='bbox 2135 3193 2188 3219; x_wconf 96'><strong>UR</strong></span>
<span class='ocr_line' id='line_1_82' title="bbox 1554 3192 2188 3226; baseline 0 -7; x_size 33.5; x_descenders 5.5; x_ascenders 8.5"><span class='ocrx_word' id='word_1_725' title='bbox 1554 3193 1622 3226; x_wconf 89'>(818)</span> <span class='ocrx_word' id='word_1_726' title='bbox 1633 3193 1755 3219; x_wconf 60'>7088131</span> <span class='ocrx_word' id='word_1_727' title='bbox 1765 3193 1788 3219; x_wconf 91'>T</span> <span class='ocrx_word' id='word_1_728' title='bbox 1789 3193 1888 3219; x_wconf 87'>ELEX</span> <span class='ocrx_word' id='word_1_729' title='bbox 1899 3192 2022 3219; x_wconf 82'>#298949</span> <span class='ocrx_word' id='word_1_730' title='bbox 2033 3193 2125 3219; x_wconf 88'>LINN</span> <span class='ocrx_word' id='word_1_731' title='bbox 2135 3193 2188 3219; x_wconf 89'>UR</span>
</span>
</p>
</div>
@@ -1 +1 @@
Tesseract Open Source OCR Engine v4.0.0-beta.1 with Leptonica
Tesseract Open Source OCR Engine v3.05.01 with Leptonica
@@ -1,51 +1,51 @@
The LinnSequencer
32 Track MIDI Sequence Recorder
The LinnSequencer is a state-of-the-art composition and performance tool for the professional musician. It is
The LinnSequencer is a stateofthe-art composition and performance tool for the professional musician. It is
extremely powerful, yet amazingly simple to learn and use. Its many remarkable features include:
¢ Operation is similar to multi-track tape recorder with PLAY, STOP, RECORD, FAST
0 Operation is similar to multitrack tape recorder with PLAY, STOP, RECORD, FAST
FORWARD, REWIND, and LOCATE controls.
e Each of the 100 sequences contains 32 simultaneous, polyphonic tracks. Each track may
0 Each of the 100 sequences contains 32 simultaneous, polyphonic tracks. Each track may
be assigned to one of 16 MIDI channels. Simultaneously plays up to 16 polyphonic
synthesizers!
synthesizers !
¢ Ultra-fast 3%” disk drive stores complex songs in seconds and holds over 110,000 notes
0 Ultrafast 3 1/2 ” disk drive stores complex songs in seconds and holds over 110,000 notes
per disk!
¢ One or all tracks may be TRANSPOSED at the touch of a key.
e Exclusive real-time ERASE function makes editing FAST.
* Exclusive REPEAT function automatically repeats any held notes at a pre-selected
0 One or all tracks may be TRANSPOSED at the touch of a key.
0 Exclusive realtime ERASE function makes editing FAST.
0 Exclusive REPEAT function automatically repeats any held notes at a pre-selected
rhythmic value.
¢ TIMING CORRECTION works during playback and operates without chopping notes.
0 TIMING CORRECTION works during playback and operates without chopping notes.
¢ Optional SMPTE time code synchronization.
0 Optional SMPTE time code synchronization.
© Optional remote control.
0 Optional remote control.
Recording a Sequence
Recording 3 Sequence
To record a sequence, simply press RECORD and PLAY,
then play your MIDI keyboard in time to the Sequencers
click track. When the sequence loops back around to bar 1,
you ll hear what you played—only all timing errors will be
youll hear what you played—only all timing errors will be
corrected! (Timing correction may be adjusted or defeated).
Any additional notes played will be added into the track
existing notes are not erased while recording!
—existing notes are not erased while recording!
FAST FORWARD, REWIND, and LOCATE controls
may be used at any time to quickly access any location in
your sequence for spot-recording. To overdub a new part,
select a different track and start recordingwhile you
record, the first track will play in perfect sync (unless you
your sequence for spotrecording. To overdub a new part,
select a different track and start recording~while you
record, the rsttrack will play in perfect sync (unless you
MUTE it, or SOLO another track). In this way, up to 32
tracks may be overdubbed! All MIDI effects are recorded
including pitch bend, modulation, velocity, aftertouch,
@@ -58,7 +58,7 @@ the note to be erased just before it plays in the sequence—
when played back, it will be gone. Notes may also be
added, erased, or changed using the SINGLE STEP func-
tion. To overdub notes at specific points within a sequence,
tion. To overdub notes at specic points within a sequence,
Additional Features
@@ -70,7 +70,7 @@ from one location to another—in the same sequence or a
different one. For example, you might insert a copy of the
first verse between the second chorus and the bridge.
DELETE BARS operates the same way to remove
unwanted sections,
unwanted sections.
Creating a Song
@@ -90,34 +90,34 @@ the LinnSequencer is designed to let you compose, record
and edit while devoting your undivided attention to your
music. See your Linn dealer today for a demonstration!
* Simple, easy to learn operation—the 32 character LCD display clearly guides you through all operations. If needed, the
0 Simple, easy to learn operation—the 32 character LCD display clearly guides you through all operations. If needed, the
HELP button displays additional explanations.
* Non-destructive recording—existing notes are not erased while recording.
¢ Two FOOTSWITCH INPUTS may be assigned to remotely control many of the commonly used functions, including
0 Non-destructive recording—existing notes are not erased while recording.
0 Two FOOTSWITCH INPUTS may be assigned to remotely control many of the commonly used functions, including
ERASE, REPEAT, PLAY/STOP, or LOCATE.
¢ Iwo TRIGGER OUTPUTS may be programmed to output pulses at any selected note value.
0 Two TRIGGER OUTPUTS may be programmed to output pulses at any selected note value.
© Will sync to standard LinnDrum or Linn 9000 sync tone.
0 Will sync to standard LinnDrum or Linn 9000 sync tone.
© Utilizes ultra high-speed, 8 MHz 80186 16 bit computer internally for FAST operation.
* TEMPO may be specified in BEATS-PER-MINUTE or FRAMES-PER-BEAT at 24, 25, or 30 frames per second,
' Utilizes ultra highspeed, 8 MHz 80186 16 bit computer internally for FAST operation.
0 TEMPO may be specified in BEATS-PERMINUTE or FRAMES-PERBEAT at 24, 25, or 30 frames per second,
(even drop frame!)
¢ TEMPO may be entered numerically, adjustable in tenths of a Beat-Per-Minute increments, or by tapping quarter notes
0 TEMPO may be entered numerically, adjustable in tenths of a Beat-Per-Minute increments, or by tapping quarter notes
on the TAP TEMPO button.
¢ TEMPO CHANGES may be programmed into a sequence, with smooth transitions if desired.
¢ Any TIME SIGNATURE may be used, and may be changed within a song.
0 TEMPO CHANGES may be programmed into a sequence, with smooth transitions if desired.
° Any TIME SIGNATURE may be used, and may be changed within a song.
linn
E1111
Linn Electronics, Inc.
18720 Oxnard Street, Tarzana, CA 91356
(818) 708-8131 TELEX #298949 LINN UR
(818) 7088131 T ELEX #298949 LINN UR
@@ -0,0 +1 @@
Tesseract Open Source OCR Engine v3.05.01 with Leptonica
@@ -1,51 +1,51 @@
The LinnSequencer
32 Track MIDI Sequence Recorder
The LinnSequencer is a state-of-the-art composition and performance tool for the professional musician. It is
The LinnSequencer is a stateofthe-art composition and performance tool for the professional musician. It is
extremely powerful, yet amazingly simple to learn and use. Its many remarkable features include:
¢ Operation is similar to multi-track tape recorder with PLAY, STOP, RECORD, FAST
0 Operation is similar to multitrack tape recorder with PLAY, STOP, RECORD, FAST
FORWARD, REWIND, and LOCATE controls.
e Each of the 100 sequences contains 32 simultaneous, polyphonic tracks. Each track may
0 Each of the 100 sequences contains 32 simultaneous, polyphonic tracks. Each track may
be assigned to one of 16 MIDI channels. Simultaneously plays up to 16 polyphonic
synthesizers!
synthesizers !
¢ Ultra-fast 3%” disk drive stores complex songs in seconds and holds over 110,000 notes
0 Ultrafast 3 1/2 ” disk drive stores complex songs in seconds and holds over 110,000 notes
per disk!
¢ One or all tracks may be TRANSPOSED at the touch of a key.
e Exclusive real-time ERASE function makes editing FAST.
* Exclusive REPEAT function automatically repeats any held notes at a pre-selected
0 One or all tracks may be TRANSPOSED at the touch of a key.
0 Exclusive realtime ERASE function makes editing FAST.
0 Exclusive REPEAT function automatically repeats any held notes at a pre-selected
rhythmic value.
¢ TIMING CORRECTION works during playback and operates without chopping notes.
0 TIMING CORRECTION works during playback and operates without chopping notes.
¢ Optional SMPTE time code synchronization.
0 Optional SMPTE time code synchronization.
© Optional remote control.
0 Optional remote control.
Recording a Sequence
Recording 3 Sequence
To record a sequence, simply press RECORD and PLAY,
then play your MIDI keyboard in time to the Sequencers
click track. When the sequence loops back around to bar 1,
you ll hear what you played—only all timing errors will be
youll hear what you played—only all timing errors will be
corrected! (Timing correction may be adjusted or defeated).
Any additional notes played will be added into the track
existing notes are not erased while recording!
—existing notes are not erased while recording!
FAST FORWARD, REWIND, and LOCATE controls
may be used at any time to quickly access any location in
your sequence for spot-recording. To overdub a new part,
select a different track and start recordingwhile you
record, the first track will play in perfect sync (unless you
your sequence for spotrecording. To overdub a new part,
select a different track and start recording~while you
record, the rsttrack will play in perfect sync (unless you
MUTE it, or SOLO another track). In this way, up to 32
tracks may be overdubbed! All MIDI effects are recorded
including pitch bend, modulation, velocity, aftertouch,
@@ -58,7 +58,7 @@ the note to be erased just before it plays in the sequence—
when played back, it will be gone. Notes may also be
added, erased, or changed using the SINGLE STEP func-
tion. To overdub notes at specific points within a sequence,
tion. To overdub notes at specic points within a sequence,
Additional Features
@@ -70,7 +70,7 @@ from one location to another—in the same sequence or a
different one. For example, you might insert a copy of the
first verse between the second chorus and the bridge.
DELETE BARS operates the same way to remove
unwanted sections,
unwanted sections.
Creating a Song
@@ -90,34 +90,34 @@ the LinnSequencer is designed to let you compose, record
and edit while devoting your undivided attention to your
music. See your Linn dealer today for a demonstration!
* Simple, easy to learn operation—the 32 character LCD display clearly guides you through all operations. If needed, the
0 Simple, easy to learn operation—the 32 character LCD display clearly guides you through all operations. If needed, the
HELP button displays additional explanations.
* Non-destructive recording—existing notes are not erased while recording.
¢ Two FOOTSWITCH INPUTS may be assigned to remotely control many of the commonly used functions, including
0 Non-destructive recording—existing notes are not erased while recording.
0 Two FOOTSWITCH INPUTS may be assigned to remotely control many of the commonly used functions, including
ERASE, REPEAT, PLAY/STOP, or LOCATE.
¢ Iwo TRIGGER OUTPUTS may be programmed to output pulses at any selected note value.
0 Two TRIGGER OUTPUTS may be programmed to output pulses at any selected note value.
© Will sync to standard LinnDrum or Linn 9000 sync tone.
0 Will sync to standard LinnDrum or Linn 9000 sync tone.
© Utilizes ultra high-speed, 8 MHz 80186 16 bit computer internally for FAST operation.
* TEMPO may be specified in BEATS-PER-MINUTE or FRAMES-PER-BEAT at 24, 25, or 30 frames per second,
' Utilizes ultra highspeed, 8 MHz 80186 16 bit computer internally for FAST operation.
0 TEMPO may be specified in BEATS-PERMINUTE or FRAMES-PERBEAT at 24, 25, or 30 frames per second,
(even drop frame!)
¢ TEMPO may be entered numerically, adjustable in tenths of a Beat-Per-Minute increments, or by tapping quarter notes
0 TEMPO may be entered numerically, adjustable in tenths of a Beat-Per-Minute increments, or by tapping quarter notes
on the TAP TEMPO button.
¢ TEMPO CHANGES may be programmed into a sequence, with smooth transitions if desired.
¢ Any TIME SIGNATURE may be used, and may be changed within a song.
0 TEMPO CHANGES may be programmed into a sequence, with smooth transitions if desired.
° Any TIME SIGNATURE may be used, and may be changed within a song.
linn
E1111
Linn Electronics, Inc.
18720 Oxnard Street, Tarzana, CA 91356
(818) 708-8131 TELEX #298949 LINN UR
(818) 7088131 T ELEX #298949 LINN UR
@@ -5,327 +5,328 @@
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name='ocr-system' content='tesseract 4.0.0-beta.1' />
<meta name='ocr-system' content='tesseract 3.05.01' />
<meta name='ocr-capabilities' content='ocr_page ocr_carea ocr_par ocr_line ocrx_word'/>
</head>
<body>
<div class='ocr_page' id='page_1' title='image "/var/folders/37/78_114p552q16vv6vmgm5kr00000gn/T/com.github.ocrmypdf.im0i09rj/000002.ocr.png"; bbox 0 0 2550 3300; ppageno 0'>
<div class='ocr_page' id='page_1' title='image "/var/folders/37/78_114p552q16vv6vmgm5kr00000gn/T/com.github.ocrmypdf.wahjk6fa/000002.ocr.png"; bbox 0 0 2550 3300; ppageno 0'>
<div class='ocr_carea' id='block_1_1' title="bbox 582 131 1968 303">
<p class='ocr_par' id='par_1_1' lang='eng' title="bbox 582 131 1968 303">
<span class='ocr_line' id='line_1_1' title="bbox 882 131 1657 217; baseline 0.001 -17; x_size 85; x_descenders 16; x_ascenders 19"><span class='ocrx_word' id='word_1_1' title='bbox 882 132 1036 202; x_wconf 93'><strong>The</strong></span> <span class='ocrx_word' id='word_1_2' title='bbox 1061 131 1657 217; x_wconf 91'><strong>LinnSequencer</strong></span>
<span class='ocr_line' id='line_1_1' title="bbox 882 131 1657 217; baseline 0.001 -17; x_size 85; x_descenders 16; x_ascenders 19"><span class='ocrx_word' id='word_1_1' title='bbox 882 132 1036 202; x_wconf 86'>The</span> <span class='ocrx_word' id='word_1_2' title='bbox 1061 131 1657 217; x_wconf 84'>LinnSequencer</span>
</span>
<span class='ocr_line' id='line_1_2' title="bbox 582 215 1968 303; baseline 0 -17; x_size 87; x_descenders 16; x_ascenders 21"><span class='ocrx_word' id='word_1_3' title='bbox 582 215 674 286; x_wconf 96'><strong>32</strong></span> <span class='ocrx_word' id='word_1_4' title='bbox 697 218 923 288; x_wconf 95'><strong>Track</strong></span> <span class='ocrx_word' id='word_1_5' title='bbox 948 218 1181 287; x_wconf 96'><strong>MIDI</strong></span> <span class='ocrx_word' id='word_1_6' title='bbox 1208 217 1575 303; x_wconf 96'><strong>Sequence</strong></span> <span class='ocrx_word' id='word_1_7' title='bbox 1600 218 1968 288; x_wconf 96'><strong>Recorder</strong></span>
<span class='ocr_line' id='line_1_2' title="bbox 582 215 1968 303; baseline 0 -17; x_size 87; x_descenders 16; x_ascenders 21"><span class='ocrx_word' id='word_1_3' title='bbox 582 215 674 286; x_wconf 90'>32</span> <span class='ocrx_word' id='word_1_4' title='bbox 697 218 923 288; x_wconf 84'>Track</span> <span class='ocrx_word' id='word_1_5' title='bbox 948 218 1181 287; x_wconf 94'><strong>MIDI</strong></span> <span class='ocrx_word' id='word_1_6' title='bbox 1208 217 1575 303; x_wconf 89'>Sequence</span> <span class='ocrx_word' id='word_1_7' title='bbox 1600 218 1968 288; x_wconf 83'>Recorder</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_2' title="bbox 347 380 2188 685">
<div class='ocr_carea' id='block_1_2' title="bbox 347 380 2188 574">
<p class='ocr_par' id='par_1_2' lang='eng' title="bbox 347 380 2188 423">
<span class='ocr_line' id='line_1_3' title="bbox 347 380 2188 423; baseline -0.001 -12; x_size 38; x_descenders 8; x_ascenders 10"><span class='ocrx_word' id='word_1_8' title='bbox 347 380 412 410; x_wconf 93'><strong>The</strong></span> <span class='ocrx_word' id='word_1_9' title='bbox 424 380 661 417; x_wconf 92'><strong>LinnSequencer</strong></span> <span class='ocrx_word' id='word_1_10' title='bbox 663 380 712 411; x_wconf 96'><strong>is</strong></span> <span class='ocrx_word' id='word_1_11' title='bbox 724 390 743 411; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_12' title='bbox 754 381 1005 423; x_wconf 96'><strong>state-of-the-art</strong></span> <span class='ocrx_word' id='word_1_13' title='bbox 1017 380 1226 418; x_wconf 96'><strong>composition</strong></span> <span class='ocrx_word' id='word_1_14' title='bbox 1238 381 1299 411; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_15' title='bbox 1311 380 1507 418; x_wconf 96'><strong>performance</strong></span> <span class='ocrx_word' id='word_1_16' title='bbox 1509 385 1591 411; x_wconf 96'><strong>tool</strong></span> <span class='ocrx_word' id='word_1_17' title='bbox 1593 380 1663 411; x_wconf 97'><strong>for</strong></span> <span class='ocrx_word' id='word_1_18' title='bbox 1674 381 1725 410; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_19' title='bbox 1737 380 1940 417; x_wconf 95'><strong>professional</strong></span> <span class='ocrx_word' id='word_1_20' title='bbox 1952 380 2103 411; x_wconf 96'><strong>musician.</strong></span> <span class='ocrx_word' id='word_1_21' title='bbox 2106 381 2152 410; x_wconf 96'><strong>It</strong></span> <span class='ocrx_word' id='word_1_22' title='bbox 2164 380 2188 410; x_wconf 96'><strong>is</strong></span>
<span class='ocr_line' id='line_1_3' title="bbox 347 380 2188 423; baseline -0.001 -12; x_size 38; x_descenders 8; x_ascenders 10"><span class='ocrx_word' id='word_1_8' title='bbox 347 380 412 410; x_wconf 86'>The</span> <span class='ocrx_word' id='word_1_9' title='bbox 424 380 676 417; x_wconf 85'>LinnSequencer</span> <span class='ocrx_word' id='word_1_10' title='bbox 688 380 712 411; x_wconf 87'>is</span> <span class='ocrx_word' id='word_1_11' title='bbox 724 390 743 411; x_wconf 90'>a</span> <span class='ocrx_word' id='word_1_12' title='bbox 754 381 1005 423; x_wconf 79'>stateofthe-art</span> <span class='ocrx_word' id='word_1_13' title='bbox 1017 380 1226 418; x_wconf 86'>composition</span> <span class='ocrx_word' id='word_1_14' title='bbox 1238 381 1299 411; x_wconf 88'>and</span> <span class='ocrx_word' id='word_1_15' title='bbox 1311 380 1525 418; x_wconf 85'>performance</span> <span class='ocrx_word' id='word_1_16' title='bbox 1536 380 1602 411; x_wconf 85'>tool</span> <span class='ocrx_word' id='word_1_17' title='bbox 1615 380 1663 411; x_wconf 82'>for</span> <span class='ocrx_word' id='word_1_18' title='bbox 1674 381 1725 410; x_wconf 94'>the</span> <span class='ocrx_word' id='word_1_19' title='bbox 1737 380 1940 417; x_wconf 85'>professional</span> <span class='ocrx_word' id='word_1_20' title='bbox 1952 380 2112 411; x_wconf 87'>musician.</span> <span class='ocrx_word' id='word_1_21' title='bbox 2127 381 2152 410; x_wconf 90'>It</span> <span class='ocrx_word' id='word_1_22' title='bbox 2164 380 2188 410; x_wconf 90'>is</span>
</span>
</p>
<p class='ocr_par' id='par_1_3' lang='eng' title="bbox 347 430 1988 468">
<span class='ocr_line' id='line_1_4' title="bbox 347 430 1988 468; baseline 0 -8; x_size 37; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_23' title='bbox 347 430 507 467; x_wconf 96'><strong>extremely</strong></span> <span class='ocrx_word' id='word_1_24' title='bbox 518 430 677 467; x_wconf 96'><strong>powerful,</strong></span> <span class='ocrx_word' id='word_1_25' title='bbox 691 435 739 467; x_wconf 96'><strong>yet</strong></span> <span class='ocrx_word' id='word_1_26' title='bbox 752 430 924 468; x_wconf 96'><strong>amazingly</strong></span> <span class='ocrx_word' id='word_1_27' title='bbox 936 430 1044 468; x_wconf 96'><strong>simple</strong></span> <span class='ocrx_word' id='word_1_28' title='bbox 1055 435 1087 461; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_29' title='bbox 1099 431 1183 461; x_wconf 96'><strong>learn</strong></span> <span class='ocrx_word' id='word_1_30' title='bbox 1195 431 1257 461; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_31' title='bbox 1269 440 1329 461; x_wconf 95'><strong>use.</strong></span> <span class='ocrx_word' id='word_1_32' title='bbox 1344 431 1393 461; x_wconf 96'><strong>Its</strong></span> <span class='ocrx_word' id='word_1_33' title='bbox 1406 440 1499 467; x_wconf 96'><strong>many</strong></span> <span class='ocrx_word' id='word_1_34' title='bbox 1510 430 1701 461; x_wconf 96'><strong>remarkable</strong></span> <span class='ocrx_word' id='word_1_35' title='bbox 1714 430 1843 460; x_wconf 96'><strong>features</strong></span> <span class='ocrx_word' id='word_1_36' title='bbox 1856 430 1988 461; x_wconf 96'><strong>include:</strong></span>
<span class='ocr_line' id='line_1_4' title="bbox 347 430 1988 468; baseline 0 -8; x_size 37; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_23' title='bbox 347 430 507 467; x_wconf 86'>extremely</span> <span class='ocrx_word' id='word_1_24' title='bbox 518 430 677 467; x_wconf 84'>powerful,</span> <span class='ocrx_word' id='word_1_25' title='bbox 691 435 739 467; x_wconf 91'>yet</span> <span class='ocrx_word' id='word_1_26' title='bbox 752 430 924 468; x_wconf 87'>amazingly</span> <span class='ocrx_word' id='word_1_27' title='bbox 936 430 1044 468; x_wconf 85'>simple</span> <span class='ocrx_word' id='word_1_28' title='bbox 1055 435 1087 461; x_wconf 87'>to</span> <span class='ocrx_word' id='word_1_29' title='bbox 1099 431 1183 461; x_wconf 88'>learn</span> <span class='ocrx_word' id='word_1_30' title='bbox 1195 431 1257 461; x_wconf 90'>and</span> <span class='ocrx_word' id='word_1_31' title='bbox 1269 440 1329 461; x_wconf 89'>use.</span> <span class='ocrx_word' id='word_1_32' title='bbox 1344 431 1393 461; x_wconf 87'>Its</span> <span class='ocrx_word' id='word_1_33' title='bbox 1406 440 1499 467; x_wconf 91'>many</span> <span class='ocrx_word' id='word_1_34' title='bbox 1510 430 1701 461; x_wconf 88'>remarkable</span> <span class='ocrx_word' id='word_1_35' title='bbox 1714 430 1843 460; x_wconf 85'>features</span> <span class='ocrx_word' id='word_1_36' title='bbox 1856 430 1988 461; x_wconf 87'>include:</span>
</span>
</p>
<p class='ocr_par' id='par_1_4' lang='eng' title="bbox 350 482 2093 574">
<span class='ocr_line' id='line_1_5' title="bbox 350 482 2093 527; baseline 0 -9; x_size 43; x_descenders 7; x_ascenders 11"><span class='ocrx_word' id='word_1_37' title='bbox 350 490 368 508; x_wconf 73'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_38' title='bbox 383 482 585 526; x_wconf 95'><strong>Operation</strong></span> <span class='ocrx_word' id='word_1_39' title='bbox 598 482 627 518; x_wconf 96'><strong>is</strong></span> <span class='ocrx_word' id='word_1_40' title='bbox 641 482 776 518; x_wconf 96'><strong>similar</strong></span> <span class='ocrx_word' id='word_1_41' title='bbox 789 488 829 518; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_42' title='bbox 843 482 1062 519; x_wconf 96'><strong>multi-track</strong></span> <span class='ocrx_word' id='word_1_43' title='bbox 1076 488 1160 527; x_wconf 96'><strong>tape</strong></span> <span class='ocrx_word' id='word_1_44' title='bbox 1173 483 1336 519; x_wconf 96'><strong>recorder</strong></span> <span class='ocrx_word' id='word_1_45' title='bbox 1350 482 1436 518; x_wconf 96'><strong>with</strong></span> <span class='ocrx_word' id='word_1_46' title='bbox 1451 483 1580 525; x_wconf 95'><strong>PLAY,</strong></span> <span class='ocrx_word' id='word_1_47' title='bbox 1598 483 1724 525; x_wconf 96'><strong>STOP,</strong></span> <span class='ocrx_word' id='word_1_48' title='bbox 1741 483 1957 525; x_wconf 96'><strong>RECORD,</strong></span> <span class='ocrx_word' id='word_1_49' title='bbox 1974 483 2093 518; x_wconf 96'><strong>FAST</strong></span>
<span class='ocr_line' id='line_1_5' title="bbox 350 482 2093 527; baseline 0 -9; x_size 43; x_descenders 7; x_ascenders 11"><span class='ocrx_word' id='word_1_37' title='bbox 350 490 368 508; x_wconf 68'><strong>0</strong></span> <span class='ocrx_word' id='word_1_38' title='bbox 383 482 585 526; x_wconf 88'>Operation</span> <span class='ocrx_word' id='word_1_39' title='bbox 598 482 627 518; x_wconf 89'>is</span> <span class='ocrx_word' id='word_1_40' title='bbox 641 482 776 518; x_wconf 88'>similar</span> <span class='ocrx_word' id='word_1_41' title='bbox 789 488 829 518; x_wconf 88'>to</span> <span class='ocrx_word' id='word_1_42' title='bbox 843 482 1062 519; x_wconf 86'>multitrack</span> <span class='ocrx_word' id='word_1_43' title='bbox 1076 488 1160 527; x_wconf 92'>tape</span> <span class='ocrx_word' id='word_1_44' title='bbox 1173 483 1336 519; x_wconf 88'>recorder</span> <span class='ocrx_word' id='word_1_45' title='bbox 1350 482 1436 518; x_wconf 87'>with</span> <span class='ocrx_word' id='word_1_46' title='bbox 1451 483 1580 525; x_wconf 90'>PLAY,</span> <span class='ocrx_word' id='word_1_47' title='bbox 1598 483 1724 525; x_wconf 90'>STOP,</span> <span class='ocrx_word' id='word_1_48' title='bbox 1741 483 1957 525; x_wconf 89'>RECORD,</span> <span class='ocrx_word' id='word_1_49' title='bbox 1974 483 2093 518; x_wconf 88'>FAST</span>
</span>
<span class='ocr_line' id='line_1_6' title="bbox 383 532 1345 574; baseline 0.001 -7; x_size 43; x_descenders 7; x_ascenders 11"><span class='ocrx_word' id='word_1_50' title='bbox 383 532 635 574; x_wconf 96'><strong>FORWARD,</strong></span> <span class='ocrx_word' id='word_1_51' title='bbox 652 532 865 574; x_wconf 95'><strong>REWIND,</strong></span> <span class='ocrx_word' id='word_1_52' title='bbox 882 532 956 568; x_wconf 95'><strong>and</strong></span> <span class='ocrx_word' id='word_1_53' title='bbox 971 532 1131 568; x_wconf 95'><strong>LOCATE</strong></span> <span class='ocrx_word' id='word_1_54' title='bbox 1132 532 1345 568; x_wconf 95'><strong>controls.</strong></span>
<span class='ocr_line' id='line_1_6' title="bbox 383 532 1345 574; baseline 0.001 -7; x_size 43; x_descenders 7; x_ascenders 11"><span class='ocrx_word' id='word_1_50' title='bbox 383 532 635 574; x_wconf 88'>FORWARD,</span> <span class='ocrx_word' id='word_1_51' title='bbox 652 532 865 574; x_wconf 89'>REWIND,</span> <span class='ocrx_word' id='word_1_52' title='bbox 882 532 956 568; x_wconf 91'>and</span> <span class='ocrx_word' id='word_1_53' title='bbox 971 532 1163 568; x_wconf 90'>LOCATE</span> <span class='ocrx_word' id='word_1_54' title='bbox 1177 532 1345 568; x_wconf 87'>controls.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_3' title="bbox 349 589 2136 685">
<p class='ocr_par' id='par_1_5' lang='eng' title="bbox 349 589 2136 685">
<span class='ocr_line' id='line_1_7' title="bbox 349 589 2136 634; baseline 0.001 -9; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_55' title='bbox 349 597 368 615; x_wconf 59'><strong>e</strong></span> <span class='ocrx_word' id='word_1_56' title='bbox 383 590 482 625; x_wconf 96'><strong>Each</strong></span> <span class='ocrx_word' id='word_1_57' title='bbox 496 589 539 625; x_wconf 96'><strong>of</strong></span> <span class='ocrx_word' id='word_1_58' title='bbox 549 590 611 626; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_59' title='bbox 625 590 686 625; x_wconf 96'><strong>100</strong></span> <span class='ocrx_word' id='word_1_60' title='bbox 700 601 895 634; x_wconf 96'><strong>sequences</strong></span> <span class='ocrx_word' id='word_1_61' title='bbox 909 590 1075 626; x_wconf 96'><strong>contains</strong></span> <span class='ocrx_word' id='word_1_62' title='bbox 1090 591 1135 626; x_wconf 96'><strong>32</strong></span> <span class='ocrx_word' id='word_1_63' title='bbox 1149 590 1418 633; x_wconf 96'><strong>simultaneous,</strong></span> <span class='ocrx_word' id='word_1_64' title='bbox 1435 590 1661 634; x_wconf 96'><strong>polyphonic</strong></span> <span class='ocrx_word' id='word_1_65' title='bbox 1674 590 1802 626; x_wconf 96'><strong>tracks.</strong></span> <span class='ocrx_word' id='word_1_66' title='bbox 1819 590 1921 626; x_wconf 96'><strong>Each</strong></span> <span class='ocrx_word' id='word_1_67' title='bbox 1934 590 2035 626; x_wconf 96'><strong>track</strong></span> <span class='ocrx_word' id='word_1_68' title='bbox 2050 600 2136 634; x_wconf 96'><strong>may</strong></span>
<span class='ocr_line' id='line_1_7' title="bbox 349 589 2136 634; baseline 0.001 -9; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_55' title='bbox 349 597 368 615; x_wconf 67'><strong>0</strong></span> <span class='ocrx_word' id='word_1_56' title='bbox 383 590 482 625; x_wconf 90'>Each</span> <span class='ocrx_word' id='word_1_57' title='bbox 496 589 539 625; x_wconf 87'>of</span> <span class='ocrx_word' id='word_1_58' title='bbox 549 590 611 626; x_wconf 92'>the</span> <span class='ocrx_word' id='word_1_59' title='bbox 625 590 686 625; x_wconf 91'>100</span> <span class='ocrx_word' id='word_1_60' title='bbox 700 601 895 634; x_wconf 89'>sequences</span> <span class='ocrx_word' id='word_1_61' title='bbox 909 590 1075 626; x_wconf 88'>contains</span> <span class='ocrx_word' id='word_1_62' title='bbox 1090 591 1135 626; x_wconf 89'>32</span> <span class='ocrx_word' id='word_1_63' title='bbox 1149 590 1418 633; x_wconf 87'>simultaneous,</span> <span class='ocrx_word' id='word_1_64' title='bbox 1435 590 1661 634; x_wconf 89'>polyphonic</span> <span class='ocrx_word' id='word_1_65' title='bbox 1674 590 1802 626; x_wconf 85'>tracks.</span> <span class='ocrx_word' id='word_1_66' title='bbox 1819 590 1921 626; x_wconf 89'>Each</span> <span class='ocrx_word' id='word_1_67' title='bbox 1934 590 2035 626; x_wconf 88'>track</span> <span class='ocrx_word' id='word_1_68' title='bbox 2050 600 2136 634; x_wconf 89'>may</span>
</span>
<span class='ocr_line' id='line_1_8' title="bbox 383 639 2022 685; baseline 0.001 -10; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_69' title='bbox 383 639 428 675; x_wconf 95'><strong>be</strong></span> <span class='ocrx_word' id='word_1_70' title='bbox 442 639 607 684; x_wconf 95'><strong>assigned</strong></span> <span class='ocrx_word' id='word_1_71' title='bbox 621 645 659 676; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_72' title='bbox 674 650 745 676; x_wconf 96'><strong>one</strong></span> <span class='ocrx_word' id='word_1_73' title='bbox 759 640 801 676; x_wconf 96'><strong>of</strong></span> <span class='ocrx_word' id='word_1_74' title='bbox 813 641 851 676; x_wconf 96'><strong>16</strong></span> <span class='ocrx_word' id='word_1_75' title='bbox 864 641 980 675; x_wconf 96'><strong>MIDI</strong></span> <span class='ocrx_word' id='word_1_76' title='bbox 996 640 1176 676; x_wconf 95'><strong>channels.</strong></span> <span class='ocrx_word' id='word_1_77' title='bbox 1194 640 1498 684; x_wconf 96'><strong>Simultaneously</strong></span> <span class='ocrx_word' id='word_1_78' title='bbox 1510 640 1609 685; x_wconf 96'><strong>plays</strong></span> <span class='ocrx_word' id='word_1_79' title='bbox 1624 651 1674 684; x_wconf 96'><strong>up</strong></span> <span class='ocrx_word' id='word_1_80' title='bbox 1688 645 1727 676; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_81' title='bbox 1742 641 1780 676; x_wconf 96'><strong>16</strong></span> <span class='ocrx_word' id='word_1_82' title='bbox 1794 640 2022 684; x_wconf 96'><strong>polyphonic</strong></span>
<span class='ocr_line' id='line_1_8' title="bbox 383 639 2022 685; baseline 0.001 -10; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_69' title='bbox 383 639 428 675; x_wconf 95'>be</span> <span class='ocrx_word' id='word_1_70' title='bbox 442 639 607 684; x_wconf 88'>assigned</span> <span class='ocrx_word' id='word_1_71' title='bbox 621 645 659 676; x_wconf 92'>to</span> <span class='ocrx_word' id='word_1_72' title='bbox 674 650 745 676; x_wconf 91'>one</span> <span class='ocrx_word' id='word_1_73' title='bbox 759 640 801 676; x_wconf 84'>of</span> <span class='ocrx_word' id='word_1_74' title='bbox 813 641 851 676; x_wconf 92'>16</span> <span class='ocrx_word' id='word_1_75' title='bbox 864 641 980 675; x_wconf 90'>MIDI</span> <span class='ocrx_word' id='word_1_76' title='bbox 996 640 1176 676; x_wconf 88'>channels.</span> <span class='ocrx_word' id='word_1_77' title='bbox 1194 640 1498 684; x_wconf 90'>Simultaneously</span> <span class='ocrx_word' id='word_1_78' title='bbox 1510 640 1609 685; x_wconf 90'>plays</span> <span class='ocrx_word' id='word_1_79' title='bbox 1624 651 1674 684; x_wconf 91'>up</span> <span class='ocrx_word' id='word_1_80' title='bbox 1688 645 1727 676; x_wconf 90'>to</span> <span class='ocrx_word' id='word_1_81' title='bbox 1742 641 1780 676; x_wconf 94'>16</span> <span class='ocrx_word' id='word_1_82' title='bbox 1794 640 2022 684; x_wconf 87'>polyphonic</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_3' title="bbox 384 689 632 734">
<div class='ocr_carea' id='block_1_4' title="bbox 384 689 632 734">
<p class='ocr_par' id='par_1_6' lang='eng' title="bbox 384 689 632 734">
<span class='ocr_line' id='line_1_9' title="bbox 384 689 632 734; baseline 0.004 -9; x_size 46; x_descenders 9; x_ascenders 12"><span class='ocrx_word' id='word_1_83' title='bbox 384 689 632 734; x_wconf 96'><strong>synthesizers!</strong></span>
<span class='ocr_line' id='line_1_9' title="bbox 384 689 632 734; baseline 0.004 -9; x_size 46; x_descenders 9; x_ascenders 12"><span class='ocrx_word' id='word_1_83' title='bbox 384 689 618 734; x_wconf 84'>synthesizers</span> <span class='ocrx_word' id='word_1_84' title='bbox 625 690 632 726; x_wconf 85'><strong>!</strong></span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_4' title="bbox 349 748 2117 793">
<div class='ocr_carea' id='block_1_5' title="bbox 349 748 2117 793">
<p class='ocr_par' id='par_1_7' lang='eng' title="bbox 349 748 2117 793">
<span class='ocr_line' id='line_1_10' title="bbox 349 748 2117 793; baseline 0 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_84' title='bbox 349 755 367 774; x_wconf 58'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_85' title='bbox 383 748 573 784; x_wconf 91'><strong>Ultra-fast</strong></span> <span class='ocrx_word' id='word_1_86' title='bbox 588 749 677 784; x_wconf 22'><strong>3%”</strong></span> <span class='ocrx_word' id='word_1_87' title='bbox 694 748 775 784; x_wconf 96'><strong>disk</strong></span> <span class='ocrx_word' id='word_1_88' title='bbox 790 748 887 784; x_wconf 96'><strong>drive</strong></span> <span class='ocrx_word' id='word_1_89' title='bbox 901 754 1012 785; x_wconf 96'><strong>stores</strong></span> <span class='ocrx_word' id='word_1_90' title='bbox 1027 748 1194 793; x_wconf 96'><strong>complex</strong></span> <span class='ocrx_word' id='word_1_91' title='bbox 1208 760 1316 793; x_wconf 96'><strong>songs</strong></span> <span class='ocrx_word' id='word_1_92' title='bbox 1330 748 1368 784; x_wconf 96'><strong>in</strong></span> <span class='ocrx_word' id='word_1_93' title='bbox 1382 748 1535 785; x_wconf 96'><strong>seconds</strong></span> <span class='ocrx_word' id='word_1_94' title='bbox 1550 748 1624 784; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_95' title='bbox 1638 748 1728 784; x_wconf 96'><strong>holds</strong></span> <span class='ocrx_word' id='word_1_96' title='bbox 1730 759 1844 784; x_wconf 96'><strong>over</strong></span> <span class='ocrx_word' id='word_1_97' title='bbox 1859 749 2000 791; x_wconf 96'><strong>110,000</strong></span> <span class='ocrx_word' id='word_1_98' title='bbox 2013 753 2117 784; x_wconf 96'><strong>notes</strong></span>
<span class='ocr_line' id='line_1_10' title="bbox 349 748 2117 793; baseline 0 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_85' title='bbox 349 755 367 774; x_wconf 66'><strong>0</strong></span> <span class='ocrx_word' id='word_1_86' title='bbox 383 748 573 784; x_wconf 87'>Ultrafast</span> <span class='ocrx_word' id='word_1_87' title='bbox 588 749 606 784; x_wconf 90'>3</span> <span class='ocrx_word' id='word_1_88' title='bbox 616 749 652 784; x_wconf 86'>1/2</span> <span class='ocrx_word' id='word_1_89' title='bbox 663 749 677 764; x_wconf 87'><em>”</em></span> <span class='ocrx_word' id='word_1_90' title='bbox 694 748 775 784; x_wconf 91'>disk</span> <span class='ocrx_word' id='word_1_91' title='bbox 790 748 887 784; x_wconf 89'>drive</span> <span class='ocrx_word' id='word_1_92' title='bbox 901 754 1012 785; x_wconf 85'>stores</span> <span class='ocrx_word' id='word_1_93' title='bbox 1027 748 1194 793; x_wconf 87'>complex</span> <span class='ocrx_word' id='word_1_94' title='bbox 1208 760 1316 793; x_wconf 87'>songs</span> <span class='ocrx_word' id='word_1_95' title='bbox 1330 748 1368 784; x_wconf 87'>in</span> <span class='ocrx_word' id='word_1_96' title='bbox 1382 748 1535 785; x_wconf 87'>seconds</span> <span class='ocrx_word' id='word_1_97' title='bbox 1550 748 1624 784; x_wconf 89'>and</span> <span class='ocrx_word' id='word_1_98' title='bbox 1638 748 1746 784; x_wconf 87'>holds</span> <span class='ocrx_word' id='word_1_99' title='bbox 1761 759 1844 784; x_wconf 85'>over</span> <span class='ocrx_word' id='word_1_100' title='bbox 1859 749 2000 791; x_wconf 88'>110,000</span> <span class='ocrx_word' id='word_1_101' title='bbox 2013 753 2117 784; x_wconf 89'>notes</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_5' title="bbox 383 797 554 842">
<div class='ocr_carea' id='block_1_6' title="bbox 383 797 554 842">
<p class='ocr_par' id='par_1_8' lang='eng' title="bbox 383 797 554 842">
<span class='ocr_line' id='line_1_11' title="bbox 383 797 554 842; baseline 0 -8; x_size 45; x_descenders 8; x_ascenders 12"><span class='ocrx_word' id='word_1_99' title='bbox 383 808 446 842; x_wconf 96'><strong>per</strong></span> <span class='ocrx_word' id='word_1_100' title='bbox 459 797 554 834; x_wconf 96'><strong>disk!</strong></span>
<span class='ocr_line' id='line_1_11' title="bbox 383 797 554 842; baseline 0 -8; x_size 45; x_descenders 8; x_ascenders 12"><span class='ocrx_word' id='word_1_102' title='bbox 383 808 446 842; x_wconf 82'>per</span> <span class='ocrx_word' id='word_1_103' title='bbox 459 797 554 834; x_wconf 86'>disk!</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_6' title="bbox 349 855 2030 1016">
<div class='ocr_carea' id='block_1_7' title="bbox 349 855 2030 1016">
<p class='ocr_par' id='par_1_9' lang='eng' title="bbox 349 855 2030 1016">
<span class='ocr_line' id='line_1_12' title="bbox 350 855 1638 900; baseline 0.001 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_101' title='bbox 350 863 367 881; x_wconf 45'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_102' title='bbox 383 856 444 891; x_wconf 95'><strong>One</strong></span> <span class='ocrx_word' id='word_1_103' title='bbox 445 866 502 891; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_104' title='bbox 503 855 580 891; x_wconf 96'><strong>all</strong></span> <span class='ocrx_word' id='word_1_105' title='bbox 594 856 712 892; x_wconf 95'><strong>tracks</strong></span> <span class='ocrx_word' id='word_1_106' title='bbox 726 867 811 900; x_wconf 95'><strong>may</strong></span> <span class='ocrx_word' id='word_1_107' title='bbox 823 856 869 892; x_wconf 81'><strong>be</strong></span> <span class='ocrx_word' id='word_1_108' title='bbox 882 856 1175 892; x_wconf 96'><strong>TRANSPOSED</strong></span> <span class='ocrx_word' id='word_1_109' title='bbox 1178 857 1264 892; x_wconf 96'><strong>at</strong></span> <span class='ocrx_word' id='word_1_110' title='bbox 1277 856 1338 892; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_111' title='bbox 1351 856 1463 892; x_wconf 96'><strong>touch</strong></span> <span class='ocrx_word' id='word_1_112' title='bbox 1477 867 1501 892; x_wconf 96'><strong>of</strong></span> <span class='ocrx_word' id='word_1_113' title='bbox 1502 856 1554 892; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_114' title='bbox 1568 856 1638 900; x_wconf 96'><strong>key.</strong></span>
<span class='ocr_line' id='line_1_12' title="bbox 350 855 1638 900; baseline 0.001 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_104' title='bbox 350 863 367 881; x_wconf 71'><strong>0</strong></span> <span class='ocrx_word' id='word_1_105' title='bbox 383 856 464 891; x_wconf 90'>One</span> <span class='ocrx_word' id='word_1_106' title='bbox 478 866 520 891; x_wconf 87'>or</span> <span class='ocrx_word' id='word_1_107' title='bbox 534 855 580 891; x_wconf 88'>all</span> <span class='ocrx_word' id='word_1_108' title='bbox 594 856 712 892; x_wconf 89'>tracks</span> <span class='ocrx_word' id='word_1_109' title='bbox 726 867 811 900; x_wconf 90'>may</span> <span class='ocrx_word' id='word_1_110' title='bbox 823 856 869 892; x_wconf 88'>be</span> <span class='ocrx_word' id='word_1_111' title='bbox 882 856 1212 892; x_wconf 90'>TRANSPOSED</span> <span class='ocrx_word' id='word_1_112' title='bbox 1227 861 1264 892; x_wconf 90'>at</span> <span class='ocrx_word' id='word_1_113' title='bbox 1277 856 1338 892; x_wconf 85'>the</span> <span class='ocrx_word' id='word_1_114' title='bbox 1351 856 1463 892; x_wconf 90'>touch</span> <span class='ocrx_word' id='word_1_115' title='bbox 1477 856 1520 892; x_wconf 89'>of</span> <span class='ocrx_word' id='word_1_116' title='bbox 1531 867 1554 892; x_wconf 90'>a</span> <span class='ocrx_word' id='word_1_117' title='bbox 1568 856 1638 900; x_wconf 89'>key.</span>
</span>
<span class='ocr_line' id='line_1_13' title="bbox 350 913 1535 958; baseline 0.001 -9; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_115' title='bbox 350 921 367 939; x_wconf 45'><strong>e</strong></span> <span class='ocrx_word' id='word_1_116' title='bbox 383 913 568 950; x_wconf 96'><strong>Exclusive</strong></span> <span class='ocrx_word' id='word_1_117' title='bbox 581 913 756 950; x_wconf 96'><strong>real-time</strong></span> <span class='ocrx_word' id='word_1_118' title='bbox 769 914 929 950; x_wconf 96'><strong>ERASE</strong></span> <span class='ocrx_word' id='word_1_119' title='bbox 944 914 1114 950; x_wconf 96'><strong>function</strong></span> <span class='ocrx_word' id='word_1_120' title='bbox 1128 914 1251 950; x_wconf 96'><strong>makes</strong></span> <span class='ocrx_word' id='word_1_121' title='bbox 1266 914 1400 958; x_wconf 96'><strong>editing</strong></span> <span class='ocrx_word' id='word_1_122' title='bbox 1414 915 1535 950; x_wconf 95'><strong>FAST.</strong></span>
<span class='ocr_line' id='line_1_13' title="bbox 350 913 1535 958; baseline 0.001 -9; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_118' title='bbox 350 921 367 939; x_wconf 70'><strong>0</strong></span> <span class='ocrx_word' id='word_1_119' title='bbox 383 913 568 950; x_wconf 84'>Exclusive</span> <span class='ocrx_word' id='word_1_120' title='bbox 581 913 756 950; x_wconf 87'>realtime</span> <span class='ocrx_word' id='word_1_121' title='bbox 769 914 929 950; x_wconf 91'>ERASE</span> <span class='ocrx_word' id='word_1_122' title='bbox 944 914 1114 950; x_wconf 87'>function</span> <span class='ocrx_word' id='word_1_123' title='bbox 1128 914 1251 950; x_wconf 88'>makes</span> <span class='ocrx_word' id='word_1_124' title='bbox 1266 914 1400 958; x_wconf 87'>editing</span> <span class='ocrx_word' id='word_1_125' title='bbox 1414 915 1535 950; x_wconf 91'>FAST.</span>
</span>
<span class='ocr_line' id='line_1_14' title="bbox 349 971 2030 1016; baseline 0.001 -10; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_123' title='bbox 349 979 367 997; x_wconf 0'><strong>*</strong></span> <span class='ocrx_word' id='word_1_124' title='bbox 382 971 568 1007; x_wconf 95'><strong>Exclusive</strong></span> <span class='ocrx_word' id='word_1_125' title='bbox 582 972 773 1007; x_wconf 96'><strong>REPEAT</strong></span> <span class='ocrx_word' id='word_1_126' title='bbox 787 972 958 1008; x_wconf 96'><strong>function</strong></span> <span class='ocrx_word' id='word_1_127' title='bbox 971 972 1245 1016; x_wconf 95'><strong>automatically</strong></span> <span class='ocrx_word' id='word_1_128' title='bbox 1258 977 1396 1016; x_wconf 96'><strong>repeats</strong></span> <span class='ocrx_word' id='word_1_129' title='bbox 1410 983 1481 1016; x_wconf 96'><strong>any</strong></span> <span class='ocrx_word' id='word_1_130' title='bbox 1493 972 1578 1008; x_wconf 96'><strong>held</strong></span> <span class='ocrx_word' id='word_1_131' title='bbox 1592 977 1694 1008; x_wconf 96'><strong>notes</strong></span> <span class='ocrx_word' id='word_1_132' title='bbox 1709 977 1746 1008; x_wconf 96'><strong>at</strong></span> <span class='ocrx_word' id='word_1_133' title='bbox 1760 982 1783 1008; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_134' title='bbox 1796 972 2030 1016; x_wconf 96'><strong>pre-selected</strong></span>
<span class='ocr_line' id='line_1_14' title="bbox 349 971 2030 1016; baseline 0.001 -10; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_126' title='bbox 349 979 367 997; x_wconf 67'><strong>0</strong></span> <span class='ocrx_word' id='word_1_127' title='bbox 382 971 568 1007; x_wconf 83'>Exclusive</span> <span class='ocrx_word' id='word_1_128' title='bbox 582 972 773 1007; x_wconf 87'>REPEAT</span> <span class='ocrx_word' id='word_1_129' title='bbox 787 972 958 1008; x_wconf 86'>function</span> <span class='ocrx_word' id='word_1_130' title='bbox 971 972 1245 1016; x_wconf 89'>automatically</span> <span class='ocrx_word' id='word_1_131' title='bbox 1258 977 1396 1016; x_wconf 90'>repeats</span> <span class='ocrx_word' id='word_1_132' title='bbox 1410 983 1481 1016; x_wconf 88'>any</span> <span class='ocrx_word' id='word_1_133' title='bbox 1493 972 1578 1008; x_wconf 91'>held</span> <span class='ocrx_word' id='word_1_134' title='bbox 1592 977 1694 1008; x_wconf 91'>notes</span> <span class='ocrx_word' id='word_1_135' title='bbox 1709 977 1746 1008; x_wconf 85'>at</span> <span class='ocrx_word' id='word_1_136' title='bbox 1760 982 1783 1008; x_wconf 89'>a</span> <span class='ocrx_word' id='word_1_137' title='bbox 1796 972 2030 1016; x_wconf 87'>pre-selected</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_7' title="bbox 382 1021 689 1065">
<div class='ocr_carea' id='block_1_8' title="bbox 382 1021 689 1065">
<p class='ocr_par' id='par_1_10' lang='eng' title="bbox 382 1021 689 1065">
<span class='ocr_line' id='line_1_15' title="bbox 382 1021 689 1065; baseline 0.003 -8; x_size 45; x_descenders 8; x_ascenders 12"><span class='ocrx_word' id='word_1_135' title='bbox 382 1021 564 1065; x_wconf 96'><strong>rhythmic</strong></span> <span class='ocrx_word' id='word_1_136' title='bbox 577 1021 689 1058; x_wconf 96'><strong>value.</strong></span>
<span class='ocr_line' id='line_1_15' title="bbox 382 1021 689 1065; baseline 0.003 -8; x_size 45; x_descenders 8; x_ascenders 12"><span class='ocrx_word' id='word_1_138' title='bbox 382 1021 564 1065; x_wconf 87'>rhythmic</span> <span class='ocrx_word' id='word_1_139' title='bbox 577 1021 689 1058; x_wconf 86'>value.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_8' title="bbox 349 1080 2174 1125">
<div class='ocr_carea' id='block_1_9' title="bbox 349 1080 2174 1125">
<p class='ocr_par' id='par_1_11' lang='eng' title="bbox 349 1080 2174 1125">
<span class='ocr_line' id='line_1_16' title="bbox 349 1080 2174 1125; baseline 0.001 -11; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_137' title='bbox 349 1087 367 1105; x_wconf 80'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_138' title='bbox 382 1080 567 1115; x_wconf 95'><strong>TIMING</strong></span> <span class='ocrx_word' id='word_1_139' title='bbox 582 1080 870 1116; x_wconf 95'><strong>CORRECTION</strong></span> <span class='ocrx_word' id='word_1_140' title='bbox 872 1080 1041 1116; x_wconf 96'><strong>works</strong></span> <span class='ocrx_word' id='word_1_141' title='bbox 1056 1080 1186 1124; x_wconf 96'><strong>during</strong></span> <span class='ocrx_word' id='word_1_142' title='bbox 1199 1080 1378 1124; x_wconf 96'><strong>playback</strong></span> <span class='ocrx_word' id='word_1_143' title='bbox 1392 1080 1466 1116; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_144' title='bbox 1480 1085 1644 1124; x_wconf 96'><strong>operates</strong></span> <span class='ocrx_word' id='word_1_145' title='bbox 1658 1080 1814 1116; x_wconf 96'><strong>without</strong></span> <span class='ocrx_word' id='word_1_146' title='bbox 1831 1080 2044 1125; x_wconf 95'><strong>chopping</strong></span> <span class='ocrx_word' id='word_1_147' title='bbox 2061 1085 2174 1116; x_wconf 96'><strong>notes.</strong></span>
<span class='ocr_line' id='line_1_16' title="bbox 349 1080 2174 1125; baseline 0.001 -11; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_140' title='bbox 349 1087 367 1105; x_wconf 73'><strong>0</strong></span> <span class='ocrx_word' id='word_1_141' title='bbox 382 1080 567 1115; x_wconf 87'>TIMING</span> <span class='ocrx_word' id='word_1_142' title='bbox 582 1080 908 1116; x_wconf 90'>CORRECTION</span> <span class='ocrx_word' id='word_1_143' title='bbox 921 1080 1041 1116; x_wconf 90'>works</span> <span class='ocrx_word' id='word_1_144' title='bbox 1056 1080 1186 1124; x_wconf 86'>during</span> <span class='ocrx_word' id='word_1_145' title='bbox 1199 1080 1378 1124; x_wconf 89'>playback</span> <span class='ocrx_word' id='word_1_146' title='bbox 1392 1080 1466 1116; x_wconf 90'>and</span> <span class='ocrx_word' id='word_1_147' title='bbox 1480 1085 1644 1124; x_wconf 87'>operates</span> <span class='ocrx_word' id='word_1_148' title='bbox 1658 1080 1814 1116; x_wconf 91'>without</span> <span class='ocrx_word' id='word_1_149' title='bbox 1831 1080 2044 1125; x_wconf 87'>chopping</span> <span class='ocrx_word' id='word_1_150' title='bbox 2061 1085 2174 1116; x_wconf 88'>notes.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_9' title="bbox 349 1137 1287 1182">
<div class='ocr_carea' id='block_1_10' title="bbox 349 1137 1287 1182">
<p class='ocr_par' id='par_1_12' lang='eng' title="bbox 349 1137 1287 1182">
<span class='ocr_line' id='line_1_17' title="bbox 349 1137 1287 1182; baseline 0.001 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_148' title='bbox 349 1145 367 1163; x_wconf 80'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_149' title='bbox 382 1137 560 1182; x_wconf 95'><strong>Optional</strong></span> <span class='ocrx_word' id='word_1_150' title='bbox 575 1138 708 1174; x_wconf 96'><strong>SMPTE</strong></span> <span class='ocrx_word' id='word_1_151' title='bbox 709 1138 839 1174; x_wconf 96'><strong>time</strong></span> <span class='ocrx_word' id='word_1_152' title='bbox 853 1138 945 1174; x_wconf 95'><strong>code</strong></span> <span class='ocrx_word' id='word_1_153' title='bbox 959 1138 1287 1182; x_wconf 96'><strong>synchronization.</strong></span>
<span class='ocr_line' id='line_1_17' title="bbox 349 1137 1287 1182; baseline 0.001 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_151' title='bbox 349 1145 367 1163; x_wconf 73'><strong>0</strong></span> <span class='ocrx_word' id='word_1_152' title='bbox 382 1137 560 1182; x_wconf 85'>Optional</span> <span class='ocrx_word' id='word_1_153' title='bbox 575 1138 739 1174; x_wconf 89'>SMPTE</span> <span class='ocrx_word' id='word_1_154' title='bbox 752 1138 839 1174; x_wconf 89'>time</span> <span class='ocrx_word' id='word_1_155' title='bbox 853 1138 945 1174; x_wconf 89'>code</span> <span class='ocrx_word' id='word_1_156' title='bbox 959 1138 1287 1182; x_wconf 88'>synchronization.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_10' title="bbox 349 1195 874 1240">
<div class='ocr_carea' id='block_1_11' title="bbox 349 1195 874 1240">
<p class='ocr_par' id='par_1_13' lang='eng' title="bbox 349 1195 874 1240">
<span class='ocr_line' id='line_1_18' title="bbox 349 1195 874 1240; baseline 0 -8; x_size 45; x_descenders 8; x_ascenders 12"><span class='ocrx_word' id='word_1_154' title='bbox 349 1203 367 1222; x_wconf 74'><strong>©</strong></span> <span class='ocrx_word' id='word_1_155' title='bbox 382 1195 560 1240; x_wconf 96'><strong>Optional</strong></span> <span class='ocrx_word' id='word_1_156' title='bbox 573 1201 709 1233; x_wconf 96'><strong>remote</strong></span> <span class='ocrx_word' id='word_1_157' title='bbox 723 1196 874 1233; x_wconf 95'><strong>control.</strong></span>
<span class='ocr_line' id='line_1_18' title="bbox 349 1195 874 1240; baseline 0 -8; x_size 45; x_descenders 8; x_ascenders 12"><span class='ocrx_word' id='word_1_157' title='bbox 349 1203 367 1222; x_wconf 70'><strong>0</strong></span> <span class='ocrx_word' id='word_1_158' title='bbox 382 1195 560 1240; x_wconf 87'>Optional</span> <span class='ocrx_word' id='word_1_159' title='bbox 573 1201 709 1233; x_wconf 86'>remote</span> <span class='ocrx_word' id='word_1_160' title='bbox 723 1196 874 1233; x_wconf 87'>control.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_11' title="bbox 346 1288 1239 1491">
<div class='ocr_carea' id='block_1_12' title="bbox 346 1288 1239 1491">
<p class='ocr_par' id='par_1_14' lang='eng' title="bbox 346 1288 749 1329">
<span class='ocr_line' id='line_1_19' title="bbox 346 1288 749 1329; baseline 0.002 -9; x_size 42; x_descenders 9; x_ascenders 10"><span class='ocrx_word' id='word_1_158' title='bbox 346 1288 535 1329; x_wconf 95'><strong>Recording</strong></span> <span class='ocrx_word' id='word_1_159' title='bbox 547 1298 567 1321; x_wconf 95'><strong>a</strong></span> <span class='ocrx_word' id='word_1_160' title='bbox 579 1288 749 1328; x_wconf 96'><strong>Sequence</strong></span>
<span class='ocr_line' id='line_1_19' title="bbox 346 1288 749 1329; baseline 0.002 -9; x_size 42; x_descenders 9; x_ascenders 10"><span class='ocrx_word' id='word_1_161' title='bbox 346 1288 535 1329; x_wconf 82'>Recording</span> <span class='ocrx_word' id='word_1_162' title='bbox 547 1298 567 1321; x_wconf 73'>3</span> <span class='ocrx_word' id='word_1_163' title='bbox 579 1288 749 1328; x_wconf 86'>Sequence</span>
</span>
</p>
<p class='ocr_par' id='par_1_15' lang='eng' title="bbox 346 1339 1239 1491">
<span class='ocr_line' id='line_1_20' title="bbox 383 1339 1239 1373; baseline 0 -7; x_size 33; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_161' title='bbox 383 1340 420 1366; x_wconf 95'><strong>To</strong></span> <span class='ocrx_word' id='word_1_162' title='bbox 430 1339 524 1366; x_wconf 96'><strong>record</strong></span> <span class='ocrx_word' id='word_1_163' title='bbox 535 1347 551 1366; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_164' title='bbox 562 1347 704 1373; x_wconf 96'><strong>sequence,</strong></span> <span class='ocrx_word' id='word_1_165' title='bbox 716 1340 815 1373; x_wconf 96'><strong>simply</strong></span> <span class='ocrx_word' id='word_1_166' title='bbox 825 1348 898 1373; x_wconf 95'><strong>press</strong></span> <span class='ocrx_word' id='word_1_167' title='bbox 910 1340 1065 1367; x_wconf 96'><strong>RECORD</strong></span> <span class='ocrx_word' id='word_1_168' title='bbox 1075 1340 1131 1367; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_169' title='bbox 1142 1341 1239 1372; x_wconf 96'><strong>PLAY,</strong></span>
<span class='ocr_line' id='line_1_20' title="bbox 383 1339 1239 1373; baseline 0 -7; x_size 33; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_164' title='bbox 383 1340 420 1366; x_wconf 87'>To</span> <span class='ocrx_word' id='word_1_165' title='bbox 430 1339 524 1366; x_wconf 85'>record</span> <span class='ocrx_word' id='word_1_166' title='bbox 535 1347 551 1366; x_wconf 87'>a</span> <span class='ocrx_word' id='word_1_167' title='bbox 562 1347 704 1373; x_wconf 80'>sequence,</span> <span class='ocrx_word' id='word_1_168' title='bbox 716 1340 815 1373; x_wconf 91'>simply</span> <span class='ocrx_word' id='word_1_169' title='bbox 825 1348 898 1373; x_wconf 88'>press</span> <span class='ocrx_word' id='word_1_170' title='bbox 910 1340 1065 1367; x_wconf 90'>RECORD</span> <span class='ocrx_word' id='word_1_171' title='bbox 1075 1340 1131 1367; x_wconf 87'>and</span> <span class='ocrx_word' id='word_1_172' title='bbox 1142 1341 1239 1372; x_wconf 87'>PLAY,</span>
</span>
<span class='ocr_line' id='line_1_21' title="bbox 346 1378 1205 1412; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_170' title='bbox 346 1379 411 1406; x_wconf 96'><strong>then</strong></span> <span class='ocrx_word' id='word_1_171' title='bbox 422 1378 483 1412; x_wconf 96'><strong>play</strong></span> <span class='ocrx_word' id='word_1_172' title='bbox 493 1387 562 1412; x_wconf 96'><strong>your</strong></span> <span class='ocrx_word' id='word_1_173' title='bbox 572 1379 646 1405; x_wconf 96'><strong>MIDI</strong></span> <span class='ocrx_word' id='word_1_174' title='bbox 649 1379 792 1412; x_wconf 96'><strong>keyboard</strong></span> <span class='ocrx_word' id='word_1_175' title='bbox 792 1379 848 1406; x_wconf 95'><strong>in</strong></span> <span class='ocrx_word' id='word_1_176' title='bbox 858 1379 923 1406; x_wconf 95'><strong>time</strong></span> <span class='ocrx_word' id='word_1_177' title='bbox 934 1384 963 1406; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_178' title='bbox 974 1379 1019 1406; x_wconf 93'><strong>the</strong></span> <span class='ocrx_word' id='word_1_179' title='bbox 1030 1379 1205 1412; x_wconf 92'><strong>Sequencers</strong></span>
<span class='ocr_line' id='line_1_21' title="bbox 346 1378 1205 1412; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_173' title='bbox 346 1379 411 1406; x_wconf 91'>then</span> <span class='ocrx_word' id='word_1_174' title='bbox 422 1378 483 1412; x_wconf 89'>play</span> <span class='ocrx_word' id='word_1_175' title='bbox 493 1387 562 1412; x_wconf 87'>your</span> <span class='ocrx_word' id='word_1_176' title='bbox 572 1379 659 1405; x_wconf 89'>MIDI</span> <span class='ocrx_word' id='word_1_177' title='bbox 671 1379 810 1412; x_wconf 86'>keyboard</span> <span class='ocrx_word' id='word_1_178' title='bbox 821 1379 848 1406; x_wconf 90'>in</span> <span class='ocrx_word' id='word_1_179' title='bbox 858 1379 923 1406; x_wconf 90'>time</span> <span class='ocrx_word' id='word_1_180' title='bbox 934 1384 963 1406; x_wconf 90'>to</span> <span class='ocrx_word' id='word_1_181' title='bbox 974 1379 1019 1406; x_wconf 92'>the</span> <span class='ocrx_word' id='word_1_182' title='bbox 1030 1379 1205 1412; x_wconf 88'>Sequencers</span>
</span>
<span class='ocr_line' id='line_1_22' title="bbox 347 1417 1232 1452; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_180' title='bbox 347 1417 414 1445; x_wconf 96'><strong>click</strong></span> <span class='ocrx_word' id='word_1_181' title='bbox 425 1418 506 1445; x_wconf 91'><strong>track.</strong></span> <span class='ocrx_word' id='word_1_182' title='bbox 519 1418 609 1445; x_wconf 96'><strong>When</strong></span> <span class='ocrx_word' id='word_1_183' title='bbox 620 1419 665 1445; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_184' title='bbox 676 1426 810 1452; x_wconf 96'><strong>sequence</strong></span> <span class='ocrx_word' id='word_1_185' title='bbox 821 1419 901 1452; x_wconf 96'><strong>loops</strong></span> <span class='ocrx_word' id='word_1_186' title='bbox 912 1419 983 1446; x_wconf 96'><strong>back</strong></span> <span class='ocrx_word' id='word_1_187' title='bbox 995 1427 1082 1446; x_wconf 96'><strong>around</strong></span> <span class='ocrx_word' id='word_1_188' title='bbox 1084 1419 1141 1446; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_189' title='bbox 1152 1419 1189 1446; x_wconf 96'><strong>bar</strong></span> <span class='ocrx_word' id='word_1_190' title='bbox 1189 1419 1232 1450; x_wconf 74'><strong>1,</strong></span>
<span class='ocr_line' id='line_1_22' title="bbox 347 1417 1232 1452; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_183' title='bbox 347 1417 414 1445; x_wconf 86'>click</span> <span class='ocrx_word' id='word_1_184' title='bbox 425 1418 506 1445; x_wconf 84'>track.</span> <span class='ocrx_word' id='word_1_185' title='bbox 519 1418 609 1445; x_wconf 85'>When</span> <span class='ocrx_word' id='word_1_186' title='bbox 620 1419 665 1445; x_wconf 89'>the</span> <span class='ocrx_word' id='word_1_187' title='bbox 676 1426 810 1452; x_wconf 86'>sequence</span> <span class='ocrx_word' id='word_1_188' title='bbox 821 1419 901 1452; x_wconf 88'>loops</span> <span class='ocrx_word' id='word_1_189' title='bbox 912 1419 983 1446; x_wconf 86'>back</span> <span class='ocrx_word' id='word_1_190' title='bbox 995 1419 1101 1446; x_wconf 90'>around</span> <span class='ocrx_word' id='word_1_191' title='bbox 1112 1423 1141 1446; x_wconf 91'>to</span> <span class='ocrx_word' id='word_1_192' title='bbox 1152 1419 1201 1446; x_wconf 87'>bar</span> <span class='ocrx_word' id='word_1_193' title='bbox 1213 1419 1232 1450; x_wconf 88'>1,</span>
</span>
<span class='ocr_line' id='line_1_23' title="bbox 346 1457 1223 1491; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_191' title='bbox 346 1465 400 1490; x_wconf 14'><strong>you</strong></span> <span class='ocrx_word' id='word_1_192' title='bbox 404 1457 430 1484; x_wconf 14'><strong>ll</strong></span> <span class='ocrx_word' id='word_1_193' title='bbox 441 1457 506 1485; x_wconf 96'><strong>hear</strong></span> <span class='ocrx_word' id='word_1_194' title='bbox 517 1458 590 1485; x_wconf 96'><strong>what</strong></span> <span class='ocrx_word' id='word_1_195' title='bbox 600 1466 654 1491; x_wconf 93'><strong>you</strong></span> <span class='ocrx_word' id='word_1_196' title='bbox 666 1458 865 1491; x_wconf 91'><strong>played—only</strong></span> <span class='ocrx_word' id='word_1_197' title='bbox 876 1458 910 1485; x_wconf 96'><strong>all</strong></span> <span class='ocrx_word' id='word_1_198' title='bbox 921 1458 1018 1491; x_wconf 96'><strong>timing</strong></span> <span class='ocrx_word' id='word_1_199' title='bbox 1029 1466 1115 1485; x_wconf 96'><strong>errors</strong></span> <span class='ocrx_word' id='word_1_200' title='bbox 1126 1458 1179 1485; x_wconf 95'><strong>will</strong></span> <span class='ocrx_word' id='word_1_201' title='bbox 1189 1458 1223 1485; x_wconf 96'><strong>be</strong></span>
<span class='ocr_line' id='line_1_23' title="bbox 346 1457 1223 1491; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_194' title='bbox 346 1457 430 1490; x_wconf 84'>youll</span> <span class='ocrx_word' id='word_1_195' title='bbox 441 1457 506 1485; x_wconf 93'>hear</span> <span class='ocrx_word' id='word_1_196' title='bbox 517 1458 590 1485; x_wconf 79'>what</span> <span class='ocrx_word' id='word_1_197' title='bbox 600 1466 654 1491; x_wconf 88'>you</span> <span class='ocrx_word' id='word_1_198' title='bbox 666 1458 865 1491; x_wconf 77'>played—only</span> <span class='ocrx_word' id='word_1_199' title='bbox 876 1458 910 1485; x_wconf 90'>all</span> <span class='ocrx_word' id='word_1_200' title='bbox 921 1458 1018 1491; x_wconf 84'>timing</span> <span class='ocrx_word' id='word_1_201' title='bbox 1029 1466 1115 1485; x_wconf 84'>errors</span> <span class='ocrx_word' id='word_1_202' title='bbox 1126 1458 1179 1485; x_wconf 91'>will</span> <span class='ocrx_word' id='word_1_203' title='bbox 1189 1458 1223 1485; x_wconf 91'>be</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_12' title="bbox 346 1497 1245 1531">
<div class='ocr_carea' id='block_1_13' title="bbox 346 1497 1245 1531">
<p class='ocr_par' id='par_1_16' lang='eng' title="bbox 346 1497 1245 1531">
<span class='ocr_line' id='line_1_24' title="bbox 346 1497 1245 1531; baseline 0.001 -7; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_202' title='bbox 346 1497 494 1524; x_wconf 96'><strong>corrected!</strong></span> <span class='ocrx_word' id='word_1_203' title='bbox 508 1497 628 1530; x_wconf 96'><strong>(Timing</strong></span> <span class='ocrx_word' id='word_1_204' title='bbox 638 1497 791 1525; x_wconf 95'><strong>correction</strong></span> <span class='ocrx_word' id='word_1_205' title='bbox 802 1506 864 1531; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_206' title='bbox 875 1498 909 1525; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_207' title='bbox 920 1497 1047 1531; x_wconf 96'><strong>adjusted</strong></span> <span class='ocrx_word' id='word_1_208' title='bbox 1058 1505 1089 1525; x_wconf 97'><strong>or</strong></span> <span class='ocrx_word' id='word_1_209' title='bbox 1099 1497 1245 1531; x_wconf 96'><strong>defeated).</strong></span>
<span class='ocr_line' id='line_1_24' title="bbox 346 1497 1245 1531; baseline 0.001 -7; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_204' title='bbox 346 1497 494 1524; x_wconf 86'>corrected!</span> <span class='ocrx_word' id='word_1_205' title='bbox 508 1497 628 1530; x_wconf 85'>(Timing</span> <span class='ocrx_word' id='word_1_206' title='bbox 638 1497 791 1525; x_wconf 82'>correction</span> <span class='ocrx_word' id='word_1_207' title='bbox 802 1506 864 1531; x_wconf 88'>may</span> <span class='ocrx_word' id='word_1_208' title='bbox 875 1498 909 1525; x_wconf 91'>be</span> <span class='ocrx_word' id='word_1_209' title='bbox 920 1497 1047 1531; x_wconf 81'>adjusted</span> <span class='ocrx_word' id='word_1_210' title='bbox 1058 1505 1089 1525; x_wconf 92'>or</span> <span class='ocrx_word' id='word_1_211' title='bbox 1099 1497 1245 1531; x_wconf 87'>defeated).</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_13' title="bbox 346 1536 1205 1965">
<div class='ocr_carea' id='block_1_14' title="bbox 346 1536 1205 1965">
<p class='ocr_par' id='par_1_17' lang='eng' title="bbox 346 1536 1186 1610">
<span class='ocr_line' id='line_1_25' title="bbox 346 1536 1186 1570; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_210' title='bbox 346 1537 409 1569; x_wconf 94'><strong>Any</strong></span> <span class='ocrx_word' id='word_1_211' title='bbox 419 1536 571 1563; x_wconf 96'><strong>additional</strong></span> <span class='ocrx_word' id='word_1_212' title='bbox 582 1541 659 1564; x_wconf 96'><strong>notes</strong></span> <span class='ocrx_word' id='word_1_213' title='bbox 670 1537 766 1570; x_wconf 96'><strong>played</strong></span> <span class='ocrx_word' id='word_1_214' title='bbox 777 1537 830 1563; x_wconf 96'><strong>will</strong></span> <span class='ocrx_word' id='word_1_215' title='bbox 840 1537 874 1564; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_216' title='bbox 885 1537 976 1564; x_wconf 96'><strong>added</strong></span> <span class='ocrx_word' id='word_1_217' title='bbox 986 1537 1045 1564; x_wconf 96'><strong>into</strong></span> <span class='ocrx_word' id='word_1_218' title='bbox 1055 1537 1101 1564; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_219' title='bbox 1111 1537 1186 1564; x_wconf 96'><strong>track</strong></span>
<span class='ocr_line' id='line_1_25' title="bbox 346 1536 1186 1570; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_212' title='bbox 346 1537 409 1569; x_wconf 90'>Any</span> <span class='ocrx_word' id='word_1_213' title='bbox 419 1536 571 1563; x_wconf 86'>additional</span> <span class='ocrx_word' id='word_1_214' title='bbox 582 1541 659 1564; x_wconf 85'>notes</span> <span class='ocrx_word' id='word_1_215' title='bbox 670 1537 766 1570; x_wconf 87'>played</span> <span class='ocrx_word' id='word_1_216' title='bbox 777 1537 830 1563; x_wconf 88'>will</span> <span class='ocrx_word' id='word_1_217' title='bbox 840 1537 874 1564; x_wconf 92'>be</span> <span class='ocrx_word' id='word_1_218' title='bbox 885 1537 976 1564; x_wconf 88'>added</span> <span class='ocrx_word' id='word_1_219' title='bbox 986 1537 1045 1564; x_wconf 89'>into</span> <span class='ocrx_word' id='word_1_220' title='bbox 1055 1537 1101 1564; x_wconf 89'>the</span> <span class='ocrx_word' id='word_1_221' title='bbox 1111 1537 1186 1564; x_wconf 82'>track</span>
</span>
<span class='ocr_line' id='line_1_26' title="bbox 347 1575 1052 1610; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_220' title='bbox 347 1591 381 1594; x_wconf 0'><strong>—</strong></span> <span class='ocrx_word' id='word_1_221' title='bbox 382 1575 495 1609; x_wconf 0'><strong>existing</strong></span> <span class='ocrx_word' id='word_1_222' title='bbox 505 1580 582 1603; x_wconf 96'><strong>notes</strong></span> <span class='ocrx_word' id='word_1_223' title='bbox 593 1584 637 1603; x_wconf 96'><strong>are</strong></span> <span class='ocrx_word' id='word_1_224' title='bbox 648 1580 696 1603; x_wconf 97'><strong>not</strong></span> <span class='ocrx_word' id='word_1_225' title='bbox 707 1576 800 1603; x_wconf 96'><strong>erased</strong></span> <span class='ocrx_word' id='word_1_226' title='bbox 811 1576 890 1603; x_wconf 96'><strong>while</strong></span> <span class='ocrx_word' id='word_1_227' title='bbox 900 1576 1052 1610; x_wconf 96'><strong>recording!</strong></span>
<span class='ocr_line' id='line_1_26' title="bbox 347 1575 1052 1610; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_222' title='bbox 347 1575 495 1609; x_wconf 86'>—existing</span> <span class='ocrx_word' id='word_1_223' title='bbox 505 1580 582 1603; x_wconf 89'>notes</span> <span class='ocrx_word' id='word_1_224' title='bbox 593 1584 637 1603; x_wconf 90'>are</span> <span class='ocrx_word' id='word_1_225' title='bbox 648 1580 696 1603; x_wconf 88'>not</span> <span class='ocrx_word' id='word_1_226' title='bbox 707 1576 800 1603; x_wconf 90'>erased</span> <span class='ocrx_word' id='word_1_227' title='bbox 811 1576 890 1603; x_wconf 87'>while</span> <span class='ocrx_word' id='word_1_228' title='bbox 900 1576 1052 1610; x_wconf 87'>recording!</span>
</span>
</p>
<p class='ocr_par' id='par_1_18' lang='eng' title="bbox 346 1616 1205 1965">
<span class='ocr_line' id='line_1_27' title="bbox 384 1616 1199 1648; baseline 0.001 -6; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_228' title='bbox 384 1616 471 1642; x_wconf 96'><strong>FAST</strong></span> <span class='ocrx_word' id='word_1_229' title='bbox 481 1616 671 1648; x_wconf 96'><strong>FORWARD,</strong></span> <span class='ocrx_word' id='word_1_230' title='bbox 684 1617 838 1643; x_wconf 95'><strong>REWIND,</strong></span> <span class='ocrx_word' id='word_1_231' title='bbox 839 1616 912 1648; x_wconf 95'><strong>and</strong></span> <span class='ocrx_word' id='word_1_232' title='bbox 924 1616 1045 1643; x_wconf 96'><strong>LOCATE</strong></span> <span class='ocrx_word' id='word_1_233' title='bbox 1046 1616 1199 1643; x_wconf 95'><strong>controls</strong></span>
<span class='ocr_line' id='line_1_27' title="bbox 384 1616 1199 1648; baseline 0.001 -6; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_229' title='bbox 384 1616 471 1642; x_wconf 88'>FAST</span> <span class='ocrx_word' id='word_1_230' title='bbox 481 1616 671 1648; x_wconf 88'>FORWARD,</span> <span class='ocrx_word' id='word_1_231' title='bbox 684 1617 844 1648; x_wconf 87'>REWIND,</span> <span class='ocrx_word' id='word_1_232' title='bbox 857 1616 912 1643; x_wconf 89'>and</span> <span class='ocrx_word' id='word_1_233' title='bbox 924 1616 1068 1643; x_wconf 78'>LOCATE</span> <span class='ocrx_word' id='word_1_234' title='bbox 1079 1616 1199 1643; x_wconf 87'>controls</span>
</span>
<span class='ocr_line' id='line_1_28' title="bbox 346 1655 1202 1689; baseline 0 -7; x_size 34; x_descenders 6; x_ascenders 9"><span class='ocrx_word' id='word_1_234' title='bbox 346 1663 409 1688; x_wconf 92'><strong>may</strong></span> <span class='ocrx_word' id='word_1_235' title='bbox 419 1655 453 1682; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_236' title='bbox 463 1655 530 1682; x_wconf 96'><strong>used</strong></span> <span class='ocrx_word' id='word_1_237' title='bbox 541 1659 569 1682; x_wconf 96'><strong>at</strong></span> <span class='ocrx_word' id='word_1_238' title='bbox 580 1663 632 1688; x_wconf 96'><strong>any</strong></span> <span class='ocrx_word' id='word_1_239' title='bbox 642 1655 707 1683; x_wconf 96'><strong>time</strong></span> <span class='ocrx_word' id='word_1_240' title='bbox 717 1659 746 1683; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_241' title='bbox 757 1655 867 1689; x_wconf 96'><strong>quickly</strong></span> <span class='ocrx_word' id='word_1_242' title='bbox 878 1664 968 1683; x_wconf 96'><strong>access</strong></span> <span class='ocrx_word' id='word_1_243' title='bbox 979 1664 1032 1689; x_wconf 96'><strong>any</strong></span> <span class='ocrx_word' id='word_1_244' title='bbox 1042 1655 1164 1683; x_wconf 96'><strong>location</strong></span> <span class='ocrx_word' id='word_1_245' title='bbox 1174 1655 1202 1682; x_wconf 96'><strong>in</strong></span>
<span class='ocr_line' id='line_1_28' title="bbox 346 1655 1202 1689; baseline 0 -7; x_size 34; x_descenders 6; x_ascenders 9"><span class='ocrx_word' id='word_1_235' title='bbox 346 1663 409 1688; x_wconf 89'>may</span> <span class='ocrx_word' id='word_1_236' title='bbox 419 1655 453 1682; x_wconf 94'>be</span> <span class='ocrx_word' id='word_1_237' title='bbox 463 1655 530 1682; x_wconf 90'>used</span> <span class='ocrx_word' id='word_1_238' title='bbox 541 1659 569 1682; x_wconf 90'>at</span> <span class='ocrx_word' id='word_1_239' title='bbox 580 1663 632 1688; x_wconf 86'>any</span> <span class='ocrx_word' id='word_1_240' title='bbox 642 1655 707 1683; x_wconf 88'>time</span> <span class='ocrx_word' id='word_1_241' title='bbox 717 1659 746 1683; x_wconf 88'>to</span> <span class='ocrx_word' id='word_1_242' title='bbox 757 1655 867 1689; x_wconf 88'>quickly</span> <span class='ocrx_word' id='word_1_243' title='bbox 878 1664 968 1683; x_wconf 87'>access</span> <span class='ocrx_word' id='word_1_244' title='bbox 979 1664 1032 1689; x_wconf 87'>any</span> <span class='ocrx_word' id='word_1_245' title='bbox 1042 1655 1164 1683; x_wconf 90'>location</span> <span class='ocrx_word' id='word_1_246' title='bbox 1174 1655 1202 1682; x_wconf 94'>in</span>
</span>
<span class='ocr_line' id='line_1_29' title="bbox 346 1694 1204 1728; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_246' title='bbox 346 1702 414 1727; x_wconf 96'><strong>your</strong></span> <span class='ocrx_word' id='word_1_247' title='bbox 424 1702 558 1727; x_wconf 96'><strong>sequence</strong></span> <span class='ocrx_word' id='word_1_248' title='bbox 570 1694 612 1721; x_wconf 93'><strong>for</strong></span> <span class='ocrx_word' id='word_1_249' title='bbox 623 1695 847 1728; x_wconf 91'><strong>spot-recording.</strong></span> <span class='ocrx_word' id='word_1_250' title='bbox 860 1696 897 1722; x_wconf 93'><strong>To</strong></span> <span class='ocrx_word' id='word_1_251' title='bbox 908 1695 1028 1722; x_wconf 93'><strong>overdub</strong></span> <span class='ocrx_word' id='word_1_252' title='bbox 1039 1703 1056 1722; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_253' title='bbox 1066 1703 1099 1722; x_wconf 96'><strong>new</strong></span> <span class='ocrx_word' id='word_1_254' title='bbox 1100 1699 1204 1728; x_wconf 96'><strong>part,</strong></span>
<span class='ocr_line' id='line_1_29' title="bbox 346 1694 1204 1728; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_247' title='bbox 346 1702 414 1727; x_wconf 88'>your</span> <span class='ocrx_word' id='word_1_248' title='bbox 424 1702 558 1727; x_wconf 87'>sequence</span> <span class='ocrx_word' id='word_1_249' title='bbox 570 1694 612 1721; x_wconf 84'>for</span> <span class='ocrx_word' id='word_1_250' title='bbox 623 1695 847 1728; x_wconf 84'>spotrecording.</span> <span class='ocrx_word' id='word_1_251' title='bbox 860 1696 897 1722; x_wconf 89'>To</span> <span class='ocrx_word' id='word_1_252' title='bbox 908 1695 1028 1722; x_wconf 82'>overdub</span> <span class='ocrx_word' id='word_1_253' title='bbox 1039 1703 1056 1722; x_wconf 91'>a</span> <span class='ocrx_word' id='word_1_254' title='bbox 1066 1703 1125 1722; x_wconf 89'>new</span> <span class='ocrx_word' id='word_1_255' title='bbox 1135 1699 1204 1728; x_wconf 88'>part,</span>
</span>
<span class='ocr_line' id='line_1_30' title="bbox 347 1733 1150 1768; baseline 0.001 -8; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_255' title='bbox 347 1733 426 1761; x_wconf 97'><strong>select</strong></span> <span class='ocrx_word' id='word_1_256' title='bbox 437 1741 453 1761; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_257' title='bbox 463 1733 589 1761; x_wconf 96'><strong>different</strong></span> <span class='ocrx_word' id='word_1_258' title='bbox 599 1734 674 1761; x_wconf 96'><strong>track</strong></span> <span class='ocrx_word' id='word_1_259' title='bbox 685 1734 741 1761; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_260' title='bbox 752 1738 818 1761; x_wconf 93'><strong>start</strong></span> <span class='ocrx_word' id='word_1_261' title='bbox 828 1734 1086 1768; x_wconf 91'><strong>recordingwhile</strong></span> <span class='ocrx_word' id='word_1_262' title='bbox 1096 1742 1150 1767; x_wconf 96'><strong>you</strong></span>
<span class='ocr_line' id='line_1_30' title="bbox 347 1733 1150 1768; baseline 0.001 -8; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_256' title='bbox 347 1733 426 1761; x_wconf 88'>select</span> <span class='ocrx_word' id='word_1_257' title='bbox 437 1741 453 1761; x_wconf 88'>a</span> <span class='ocrx_word' id='word_1_258' title='bbox 463 1733 589 1761; x_wconf 86'>different</span> <span class='ocrx_word' id='word_1_259' title='bbox 599 1734 674 1761; x_wconf 85'>track</span> <span class='ocrx_word' id='word_1_260' title='bbox 685 1734 741 1761; x_wconf 87'>and</span> <span class='ocrx_word' id='word_1_261' title='bbox 752 1738 818 1761; x_wconf 83'>start</span> <span class='ocrx_word' id='word_1_262' title='bbox 828 1734 1086 1768; x_wconf 63'>recording~while</span> <span class='ocrx_word' id='word_1_263' title='bbox 1096 1742 1150 1767; x_wconf 89'>you</span>
</span>
<span class='ocr_line' id='line_1_31' title="bbox 346 1773 1203 1808; baseline 0.001 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_263' title='bbox 346 1774 448 1806; x_wconf 96'><strong>record,</strong></span> <span class='ocrx_word' id='word_1_264' title='bbox 460 1774 506 1801; x_wconf 97'><strong>the</strong></span> <span class='ocrx_word' id='word_1_265' title='bbox 517 1773 577 1801; x_wconf 96'><strong>first</strong></span> <span class='ocrx_word' id='word_1_266' title='bbox 581 1774 662 1801; x_wconf 96'><strong>track</strong></span> <span class='ocrx_word' id='word_1_267' title='bbox 673 1774 726 1801; x_wconf 96'><strong>will</strong></span> <span class='ocrx_word' id='word_1_268' title='bbox 736 1774 799 1807; x_wconf 96'><strong>play</strong></span> <span class='ocrx_word' id='word_1_269' title='bbox 809 1774 836 1801; x_wconf 96'><strong>in</strong></span> <span class='ocrx_word' id='word_1_270' title='bbox 847 1774 949 1808; x_wconf 97'><strong>perfect</strong></span> <span class='ocrx_word' id='word_1_271' title='bbox 961 1782 1026 1808; x_wconf 96'><strong>sync</strong></span> <span class='ocrx_word' id='word_1_272' title='bbox 1037 1774 1137 1808; x_wconf 96'><strong>(unless</strong></span> <span class='ocrx_word' id='word_1_273' title='bbox 1148 1782 1203 1807; x_wconf 96'><strong>you</strong></span>
<span class='ocr_line' id='line_1_31' title="bbox 346 1773 1203 1808; baseline 0.001 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_264' title='bbox 346 1774 448 1806; x_wconf 86'>record,</span> <span class='ocrx_word' id='word_1_265' title='bbox 460 1774 506 1801; x_wconf 87'>the</span> <span class='ocrx_word' id='word_1_266' title='bbox 517 1773 662 1801; x_wconf 64'>firsttrack</span> <span class='ocrx_word' id='word_1_267' title='bbox 673 1774 726 1801; x_wconf 91'>will</span> <span class='ocrx_word' id='word_1_268' title='bbox 736 1774 799 1807; x_wconf 89'>play</span> <span class='ocrx_word' id='word_1_269' title='bbox 809 1774 836 1801; x_wconf 91'>in</span> <span class='ocrx_word' id='word_1_270' title='bbox 847 1774 949 1808; x_wconf 84'>perfect</span> <span class='ocrx_word' id='word_1_271' title='bbox 961 1782 1026 1808; x_wconf 87'>sync</span> <span class='ocrx_word' id='word_1_272' title='bbox 1037 1774 1137 1808; x_wconf 89'>(unless</span> <span class='ocrx_word' id='word_1_273' title='bbox 1148 1782 1203 1807; x_wconf 93'>you</span>
</span>
<span class='ocr_line' id='line_1_32' title="bbox 346 1813 1191 1847; baseline 0.002 -8; x_size 33; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_274' title='bbox 346 1813 431 1840; x_wconf 95'><strong>MUTE</strong></span> <span class='ocrx_word' id='word_1_275' title='bbox 431 1813 492 1845; x_wconf 95'><strong>it,</strong></span> <span class='ocrx_word' id='word_1_276' title='bbox 505 1821 537 1840; x_wconf 95'><strong>or</strong></span> <span class='ocrx_word' id='word_1_277' title='bbox 547 1813 642 1840; x_wconf 95'><strong>SOLO</strong></span> <span class='ocrx_word' id='word_1_278' title='bbox 653 1814 756 1841; x_wconf 95'><strong>another</strong></span> <span class='ocrx_word' id='word_1_279' title='bbox 757 1814 875 1847; x_wconf 94'><strong>track).</strong></span> <span class='ocrx_word' id='word_1_280' title='bbox 889 1814 920 1840; x_wconf 96'><strong>In</strong></span> <span class='ocrx_word' id='word_1_281' title='bbox 930 1813 984 1841; x_wconf 96'><strong>this</strong></span> <span class='ocrx_word' id='word_1_282' title='bbox 995 1822 1057 1847; x_wconf 96'><strong>way,</strong></span> <span class='ocrx_word' id='word_1_283' title='bbox 1069 1822 1106 1847; x_wconf 96'><strong>up</strong></span> <span class='ocrx_word' id='word_1_284' title='bbox 1117 1818 1146 1841; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_285' title='bbox 1158 1814 1191 1841; x_wconf 96'><strong>32</strong></span>
<span class='ocr_line' id='line_1_32' title="bbox 346 1813 1191 1847; baseline 0.002 -8; x_size 33; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_274' title='bbox 346 1813 454 1840; x_wconf 86'>MUTE</span> <span class='ocrx_word' id='word_1_275' title='bbox 464 1813 492 1845; x_wconf 88'>it,</span> <span class='ocrx_word' id='word_1_276' title='bbox 505 1821 537 1840; x_wconf 84'>or</span> <span class='ocrx_word' id='word_1_277' title='bbox 547 1813 642 1840; x_wconf 88'>SOLO</span> <span class='ocrx_word' id='word_1_278' title='bbox 653 1814 769 1841; x_wconf 87'>another</span> <span class='ocrx_word' id='word_1_279' title='bbox 779 1814 875 1847; x_wconf 86'>track).</span> <span class='ocrx_word' id='word_1_280' title='bbox 889 1814 920 1840; x_wconf 86'>In</span> <span class='ocrx_word' id='word_1_281' title='bbox 930 1813 984 1841; x_wconf 86'>this</span> <span class='ocrx_word' id='word_1_282' title='bbox 995 1822 1057 1847; x_wconf 87'>way,</span> <span class='ocrx_word' id='word_1_283' title='bbox 1069 1822 1106 1847; x_wconf 88'>up</span> <span class='ocrx_word' id='word_1_284' title='bbox 1117 1818 1146 1841; x_wconf 77'>to</span> <span class='ocrx_word' id='word_1_285' title='bbox 1158 1814 1191 1841; x_wconf 90'>32</span>
</span>
<span class='ocr_line' id='line_1_33' title="bbox 346 1852 1205 1885; baseline 0.001 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_286' title='bbox 346 1852 434 1879; x_wconf 96'><strong>tracks</strong></span> <span class='ocrx_word' id='word_1_287' title='bbox 445 1860 508 1885; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_288' title='bbox 518 1853 552 1879; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_289' title='bbox 562 1853 748 1880; x_wconf 96'><strong>overdubbed!</strong></span> <span class='ocrx_word' id='word_1_290' title='bbox 761 1853 808 1880; x_wconf 94'><strong>All</strong></span> <span class='ocrx_word' id='word_1_291' title='bbox 819 1854 892 1880; x_wconf 96'><strong>MIDI</strong></span> <span class='ocrx_word' id='word_1_292' title='bbox 895 1853 1011 1880; x_wconf 96'><strong>effects</strong></span> <span class='ocrx_word' id='word_1_293' title='bbox 1022 1861 1067 1880; x_wconf 96'><strong>are</strong></span> <span class='ocrx_word' id='word_1_294' title='bbox 1076 1853 1205 1880; x_wconf 96'><strong>recorded</strong></span>
<span class='ocr_line' id='line_1_33' title="bbox 346 1852 1205 1885; baseline 0.001 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_286' title='bbox 346 1852 434 1879; x_wconf 84'>tracks</span> <span class='ocrx_word' id='word_1_287' title='bbox 445 1860 508 1885; x_wconf 90'>may</span> <span class='ocrx_word' id='word_1_288' title='bbox 518 1853 552 1879; x_wconf 93'>be</span> <span class='ocrx_word' id='word_1_289' title='bbox 562 1853 748 1880; x_wconf 90'>overdubbed!</span> <span class='ocrx_word' id='word_1_290' title='bbox 761 1853 808 1880; x_wconf 92'>All</span> <span class='ocrx_word' id='word_1_291' title='bbox 819 1854 905 1880; x_wconf 81'>MIDI</span> <span class='ocrx_word' id='word_1_292' title='bbox 917 1853 1011 1880; x_wconf 81'>effects</span> <span class='ocrx_word' id='word_1_293' title='bbox 1022 1861 1067 1880; x_wconf 86'>are</span> <span class='ocrx_word' id='word_1_294' title='bbox 1076 1853 1205 1880; x_wconf 87'>recorded</span>
</span>
<span class='ocr_line' id='line_1_34' title="bbox 346 1891 1168 1926; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_295' title='bbox 346 1891 485 1925; x_wconf 96'><strong>including</strong></span> <span class='ocrx_word' id='word_1_296' title='bbox 495 1891 570 1925; x_wconf 96'><strong>pitch</strong></span> <span class='ocrx_word' id='word_1_297' title='bbox 580 1892 663 1924; x_wconf 96'><strong>bend,</strong></span> <span class='ocrx_word' id='word_1_298' title='bbox 675 1892 850 1920; x_wconf 96'><strong>modulation,</strong></span> <span class='ocrx_word' id='word_1_299' title='bbox 854 1892 991 1926; x_wconf 93'><strong>velocity,</strong></span> <span class='ocrx_word' id='word_1_300' title='bbox 1004 1892 1168 1924; x_wconf 92'><strong>aftertouch,</strong></span>
<span class='ocr_line' id='line_1_34' title="bbox 346 1891 1168 1926; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_295' title='bbox 346 1891 485 1925; x_wconf 84'>including</span> <span class='ocrx_word' id='word_1_296' title='bbox 495 1891 570 1925; x_wconf 87'>pitch</span> <span class='ocrx_word' id='word_1_297' title='bbox 580 1892 663 1924; x_wconf 84'>bend,</span> <span class='ocrx_word' id='word_1_298' title='bbox 675 1892 859 1924; x_wconf 86'>modulation,</span> <span class='ocrx_word' id='word_1_299' title='bbox 872 1892 991 1926; x_wconf 83'>velocity,</span> <span class='ocrx_word' id='word_1_300' title='bbox 1004 1892 1168 1924; x_wconf 85'>aftertouch,</span>
</span>
<span class='ocr_line' id='line_1_35' title="bbox 346 1931 895 1965; baseline 0.002 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_301' title='bbox 346 1931 448 1958; x_wconf 96'><strong>sustain</strong></span> <span class='ocrx_word' id='word_1_302' title='bbox 459 1931 549 1965; x_wconf 95'><strong>pedal,</strong></span> <span class='ocrx_word' id='word_1_303' title='bbox 561 1932 617 1959; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_304' title='bbox 628 1940 756 1965; x_wconf 96'><strong>program</strong></span> <span class='ocrx_word' id='word_1_305' title='bbox 766 1932 895 1965; x_wconf 96'><strong>changes!</strong></span>
<span class='ocr_line' id='line_1_35' title="bbox 346 1931 895 1965; baseline 0.002 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_301' title='bbox 346 1931 448 1958; x_wconf 88'>sustain</span> <span class='ocrx_word' id='word_1_302' title='bbox 459 1931 549 1965; x_wconf 88'>pedal,</span> <span class='ocrx_word' id='word_1_303' title='bbox 561 1932 617 1959; x_wconf 90'>and</span> <span class='ocrx_word' id='word_1_304' title='bbox 628 1940 756 1965; x_wconf 88'>program</span> <span class='ocrx_word' id='word_1_305' title='bbox 766 1932 895 1965; x_wconf 87'>changes!</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_14' title="bbox 346 1998 1212 2163">
<div class='ocr_carea' id='block_1_15' title="bbox 346 1998 1212 2163">
<p class='ocr_par' id='par_1_19' lang='eng' title="bbox 346 1998 479 2040">
<span class='ocr_line' id='line_1_36' title="bbox 346 1998 479 2040; baseline -0.008 -9; x_size 43; x_descenders 10; x_ascenders 11"><span class='ocrx_word' id='word_1_306' title='bbox 346 1998 479 2040; x_wconf 96'><strong>Editing</strong></span>
<span class='ocr_line' id='line_1_36' title="bbox 346 1998 479 2040; baseline -0.008 -9; x_size 43; x_descenders 10; x_ascenders 11"><span class='ocrx_word' id='word_1_306' title='bbox 346 1998 479 2040; x_wconf 87'>Editing</span>
</span>
</p>
<p class='ocr_par' id='par_1_20' lang='eng' title="bbox 346 2050 1212 2163">
<span class='ocr_line' id='line_1_37' title="bbox 383 2050 1186 2084; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_307' title='bbox 383 2050 419 2076; x_wconf 96'><strong>To</strong></span> <span class='ocrx_word' id='word_1_308' title='bbox 430 2057 503 2076; x_wconf 95'><strong>erase</strong></span> <span class='ocrx_word' id='word_1_309' title='bbox 514 2058 530 2077; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_310' title='bbox 540 2058 617 2077; x_wconf 96'><strong>wrong</strong></span> <span class='ocrx_word' id='word_1_311' title='bbox 618 2054 717 2083; x_wconf 96'><strong>note,</strong></span> <span class='ocrx_word' id='word_1_312' title='bbox 729 2050 829 2083; x_wconf 96'><strong>simply</strong></span> <span class='ocrx_word' id='word_1_313' title='bbox 839 2050 905 2077; x_wconf 96'><strong>hold</strong></span> <span class='ocrx_word' id='word_1_314' title='bbox 916 2051 1013 2077; x_wconf 96'><strong>ERASE</strong></span> <span class='ocrx_word' id='word_1_315' title='bbox 1015 2051 1083 2077; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_316' title='bbox 1085 2050 1186 2084; x_wconf 96'><strong>press</strong></span>
<span class='ocr_line' id='line_1_37' title="bbox 383 2050 1186 2084; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_307' title='bbox 383 2050 419 2076; x_wconf 89'>To</span> <span class='ocrx_word' id='word_1_308' title='bbox 430 2057 503 2076; x_wconf 87'>erase</span> <span class='ocrx_word' id='word_1_309' title='bbox 514 2058 530 2077; x_wconf 91'>a</span> <span class='ocrx_word' id='word_1_310' title='bbox 540 2058 634 2083; x_wconf 88'>wrong</span> <span class='ocrx_word' id='word_1_311' title='bbox 644 2054 717 2082; x_wconf 84'>note,</span> <span class='ocrx_word' id='word_1_312' title='bbox 729 2050 829 2083; x_wconf 89'>simply</span> <span class='ocrx_word' id='word_1_313' title='bbox 839 2050 905 2077; x_wconf 88'>hold</span> <span class='ocrx_word' id='word_1_314' title='bbox 916 2051 1037 2077; x_wconf 85'>ERASE</span> <span class='ocrx_word' id='word_1_315' title='bbox 1048 2050 1103 2077; x_wconf 89'>and</span> <span class='ocrx_word' id='word_1_316' title='bbox 1113 2059 1186 2084; x_wconf 89'>press</span>
</span>
<span class='ocr_line' id='line_1_38' title="bbox 346 2089 1212 2124; baseline 0.002 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_317' title='bbox 346 2089 391 2116; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_318' title='bbox 402 2094 465 2117; x_wconf 96'><strong>note</strong></span> <span class='ocrx_word' id='word_1_319' title='bbox 475 2094 504 2117; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_320' title='bbox 515 2090 549 2117; x_wconf 97'><strong>be</strong></span> <span class='ocrx_word' id='word_1_321' title='bbox 559 2090 652 2117; x_wconf 96'><strong>erased</strong></span> <span class='ocrx_word' id='word_1_322' title='bbox 661 2090 718 2123; x_wconf 96'><strong>just</strong></span> <span class='ocrx_word' id='word_1_323' title='bbox 729 2090 808 2117; x_wconf 96'><strong>before</strong></span> <span class='ocrx_word' id='word_1_324' title='bbox 808 2090 852 2117; x_wconf 96'><strong>it</strong></span> <span class='ocrx_word' id='word_1_325' title='bbox 862 2090 937 2124; x_wconf 96'><strong>plays</strong></span> <span class='ocrx_word' id='word_1_326' title='bbox 947 2090 975 2117; x_wconf 96'><strong>in</strong></span> <span class='ocrx_word' id='word_1_327' title='bbox 986 2090 1032 2118; x_wconf 93'><strong>the</strong></span> <span class='ocrx_word' id='word_1_328' title='bbox 1043 2098 1212 2124; x_wconf 88'><strong>sequence—</strong></span>
<span class='ocr_line' id='line_1_38' title="bbox 346 2089 1212 2124; baseline 0.002 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_317' title='bbox 346 2089 391 2116; x_wconf 86'>the</span> <span class='ocrx_word' id='word_1_318' title='bbox 402 2094 465 2117; x_wconf 86'>note</span> <span class='ocrx_word' id='word_1_319' title='bbox 475 2094 504 2117; x_wconf 86'>to</span> <span class='ocrx_word' id='word_1_320' title='bbox 515 2090 549 2117; x_wconf 93'>be</span> <span class='ocrx_word' id='word_1_321' title='bbox 559 2090 652 2117; x_wconf 89'>erased</span> <span class='ocrx_word' id='word_1_322' title='bbox 661 2090 718 2123; x_wconf 91'>just</span> <span class='ocrx_word' id='word_1_323' title='bbox 729 2090 822 2117; x_wconf 85'>before</span> <span class='ocrx_word' id='word_1_324' title='bbox 833 2090 852 2117; x_wconf 89'>it</span> <span class='ocrx_word' id='word_1_325' title='bbox 862 2090 937 2124; x_wconf 87'>plays</span> <span class='ocrx_word' id='word_1_326' title='bbox 947 2090 975 2117; x_wconf 92'>in</span> <span class='ocrx_word' id='word_1_327' title='bbox 986 2090 1032 2118; x_wconf 87'>the</span> <span class='ocrx_word' id='word_1_328' title='bbox 1043 2098 1212 2124; x_wconf 78'>sequence—</span>
</span>
<span class='ocr_line' id='line_1_39' title="bbox 346 2129 1134 2163; baseline 0.003 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_329' title='bbox 346 2129 406 2156; x_wconf 96'><strong>when</strong></span> <span class='ocrx_word' id='word_1_330' title='bbox 407 2129 531 2162; x_wconf 96'><strong>played</strong></span> <span class='ocrx_word' id='word_1_331' title='bbox 542 2129 621 2161; x_wconf 96'><strong>back,</strong></span> <span class='ocrx_word' id='word_1_332' title='bbox 633 2129 652 2156; x_wconf 96'><strong>it</strong></span> <span class='ocrx_word' id='word_1_333' title='bbox 663 2129 716 2156; x_wconf 96'><strong>will</strong></span> <span class='ocrx_word' id='word_1_334' title='bbox 726 2130 760 2157; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_335' title='bbox 771 2138 849 2163; x_wconf 96'><strong>gone.</strong></span> <span class='ocrx_word' id='word_1_336' title='bbox 861 2131 947 2157; x_wconf 96'><strong>Notes</strong></span> <span class='ocrx_word' id='word_1_337' title='bbox 958 2138 1021 2163; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_338' title='bbox 1031 2130 1089 2157; x_wconf 96'><strong>also</strong></span> <span class='ocrx_word' id='word_1_339' title='bbox 1100 2130 1134 2157; x_wconf 96'><strong>be</strong></span>
<span class='ocr_line' id='line_1_39' title="bbox 346 2129 1134 2163; baseline 0.003 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_329' title='bbox 346 2129 425 2156; x_wconf 92'>when</span> <span class='ocrx_word' id='word_1_330' title='bbox 435 2129 531 2162; x_wconf 91'>played</span> <span class='ocrx_word' id='word_1_331' title='bbox 542 2129 621 2161; x_wconf 82'>back,</span> <span class='ocrx_word' id='word_1_332' title='bbox 633 2129 652 2156; x_wconf 84'>it</span> <span class='ocrx_word' id='word_1_333' title='bbox 663 2129 716 2156; x_wconf 89'>will</span> <span class='ocrx_word' id='word_1_334' title='bbox 726 2130 760 2157; x_wconf 88'>be</span> <span class='ocrx_word' id='word_1_335' title='bbox 771 2138 849 2163; x_wconf 86'>gone.</span> <span class='ocrx_word' id='word_1_336' title='bbox 861 2131 947 2157; x_wconf 86'>Notes</span> <span class='ocrx_word' id='word_1_337' title='bbox 958 2138 1021 2163; x_wconf 88'>may</span> <span class='ocrx_word' id='word_1_338' title='bbox 1031 2130 1089 2157; x_wconf 87'>also</span> <span class='ocrx_word' id='word_1_339' title='bbox 1100 2130 1134 2157; x_wconf 91'>be</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_15' title="bbox 345 2168 1228 2242">
<div class='ocr_carea' id='block_1_16' title="bbox 345 2168 1228 2242">
<p class='ocr_par' id='par_1_21' lang='eng' title="bbox 345 2168 1228 2242">
<span class='ocr_line' id='line_1_40' title="bbox 346 2168 1220 2203; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_340' title='bbox 346 2168 445 2200; x_wconf 96'><strong>added,</strong></span> <span class='ocrx_word' id='word_1_341' title='bbox 457 2168 560 2200; x_wconf 96'><strong>erased,</strong></span> <span class='ocrx_word' id='word_1_342' title='bbox 572 2177 604 2196; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_343' title='bbox 614 2169 739 2202; x_wconf 96'><strong>changed</strong></span> <span class='ocrx_word' id='word_1_344' title='bbox 749 2169 829 2203; x_wconf 96'><strong>using</strong></span> <span class='ocrx_word' id='word_1_345' title='bbox 839 2169 885 2196; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_346' title='bbox 896 2170 1031 2196; x_wconf 96'><strong>SINGLE</strong></span> <span class='ocrx_word' id='word_1_347' title='bbox 1042 2170 1107 2196; x_wconf 91'><strong>STEP</strong></span> <span class='ocrx_word' id='word_1_348' title='bbox 1109 2169 1220 2196; x_wconf 91'><strong>func-</strong></span>
<span class='ocr_line' id='line_1_40' title="bbox 346 2168 1220 2203; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_340' title='bbox 346 2168 445 2200; x_wconf 86'>added,</span> <span class='ocrx_word' id='word_1_341' title='bbox 457 2168 560 2200; x_wconf 87'>erased,</span> <span class='ocrx_word' id='word_1_342' title='bbox 572 2177 604 2196; x_wconf 93'>or</span> <span class='ocrx_word' id='word_1_343' title='bbox 614 2169 739 2202; x_wconf 82'>changed</span> <span class='ocrx_word' id='word_1_344' title='bbox 749 2169 829 2203; x_wconf 86'>using</span> <span class='ocrx_word' id='word_1_345' title='bbox 839 2169 885 2196; x_wconf 85'>the</span> <span class='ocrx_word' id='word_1_346' title='bbox 896 2170 1031 2196; x_wconf 89'>SINGLE</span> <span class='ocrx_word' id='word_1_347' title='bbox 1042 2170 1131 2196; x_wconf 87'>STEP</span> <span class='ocrx_word' id='word_1_348' title='bbox 1143 2169 1220 2196; x_wconf 82'>func-</span>
</span>
<span class='ocr_line' id='line_1_41' title="bbox 345 2207 1228 2242; baseline 0.002 -8; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_349' title='bbox 345 2207 412 2234; x_wconf 96'><strong>tion.</strong></span> <span class='ocrx_word' id='word_1_350' title='bbox 424 2208 461 2235; x_wconf 93'><strong>To</strong></span> <span class='ocrx_word' id='word_1_351' title='bbox 472 2208 592 2235; x_wconf 91'><strong>overdub</strong></span> <span class='ocrx_word' id='word_1_352' title='bbox 603 2212 667 2235; x_wconf 96'><strong>notes</strong></span> <span class='ocrx_word' id='word_1_353' title='bbox 668 2212 718 2235; x_wconf 96'><strong>at</strong></span> <span class='ocrx_word' id='word_1_354' title='bbox 729 2208 841 2242; x_wconf 96'><strong>specific</strong></span> <span class='ocrx_word' id='word_1_355' title='bbox 851 2209 943 2242; x_wconf 97'><strong>points</strong></span> <span class='ocrx_word' id='word_1_356' title='bbox 955 2208 1049 2236; x_wconf 96'><strong>within</strong></span> <span class='ocrx_word' id='word_1_357' title='bbox 1060 2217 1076 2236; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_358' title='bbox 1086 2216 1228 2242; x_wconf 96'><strong>sequence,</strong></span>
<span class='ocr_line' id='line_1_41' title="bbox 345 2207 1228 2242; baseline 0.002 -8; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_349' title='bbox 345 2207 412 2234; x_wconf 87'>tion.</span> <span class='ocrx_word' id='word_1_350' title='bbox 424 2208 461 2235; x_wconf 88'>To</span> <span class='ocrx_word' id='word_1_351' title='bbox 472 2208 592 2235; x_wconf 88'>overdub</span> <span class='ocrx_word' id='word_1_352' title='bbox 603 2212 680 2235; x_wconf 84'>notes</span> <span class='ocrx_word' id='word_1_353' title='bbox 691 2212 718 2235; x_wconf 89'>at</span> <span class='ocrx_word' id='word_1_354' title='bbox 729 2208 841 2242; x_wconf 83'>specific</span> <span class='ocrx_word' id='word_1_355' title='bbox 851 2209 943 2242; x_wconf 89'>points</span> <span class='ocrx_word' id='word_1_356' title='bbox 955 2208 1049 2236; x_wconf 87'>within</span> <span class='ocrx_word' id='word_1_357' title='bbox 1060 2217 1076 2236; x_wconf 87'>a</span> <span class='ocrx_word' id='word_1_358' title='bbox 1086 2216 1228 2242; x_wconf 86'>sequence,</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_16' title="bbox 345 2293 705 2326">
<div class='ocr_carea' id='block_1_17' title="bbox 345 2293 705 2326">
<p class='ocr_par' id='par_1_22' lang='eng' title="bbox 345 2293 705 2326">
<span class='ocr_line' id='line_1_42' title="bbox 345 2293 705 2326; baseline 0.003 -1; x_size 38.38298; x_descenders 5.3829789; x_ascenders 10"><span class='ocrx_word' id='word_1_359' title='bbox 345 2293 541 2326; x_wconf 96'><strong>Additional</strong></span> <span class='ocrx_word' id='word_1_360' title='bbox 553 2293 705 2326; x_wconf 96'><strong>Features</strong></span>
<span class='ocr_line' id='line_1_42' title="bbox 345 2293 705 2326; baseline 0.003 -1; x_size 38.38298; x_descenders 5.3829789; x_ascenders 10"><span class='ocrx_word' id='word_1_359' title='bbox 345 2293 541 2326; x_wconf 86'>Additional</span> <span class='ocrx_word' id='word_1_360' title='bbox 553 2293 705 2326; x_wconf 83'>Features</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_17' title="bbox 1295 1289 2165 1593">
<div class='ocr_carea' id='block_1_18' title="bbox 1295 1289 2165 1593">
<p class='ocr_par' id='par_1_23' lang='eng' title="bbox 1296 1289 2165 1362">
<span class='ocr_line' id='line_1_43' title="bbox 1296 1289 2165 1322; baseline 0.001 -7; x_size 35.040108; x_descenders 6.9264708; x_ascenders 8.613636"><span class='ocrx_word' id='word_1_361' title='bbox 1296 1289 1394 1322; x_wconf 96'><strong>simply</strong></span> <span class='ocrx_word' id='word_1_362' title='bbox 1404 1297 1452 1316; x_wconf 96'><strong>use</strong></span> <span class='ocrx_word' id='word_1_363' title='bbox 1463 1290 1615 1321; x_wconf 96'><strong>LOCATE,</strong></span> <span class='ocrx_word' id='word_1_364' title='bbox 1628 1290 1716 1316; x_wconf 96'><strong>FAST</strong></span> <span class='ocrx_word' id='word_1_365' title='bbox 1726 1289 1910 1316; x_wconf 95'><strong>FORWARD,</strong></span> <span class='ocrx_word' id='word_1_366' title='bbox 1911 1297 1960 1321; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_367' title='bbox 1972 1290 2098 1316; x_wconf 95'><strong>REWIND</strong></span> <span class='ocrx_word' id='word_1_368' title='bbox 2100 1290 2165 1317; x_wconf 95'><strong>to</strong></span>
<span class='ocr_line' id='line_1_43' title="bbox 1296 1289 2165 1322; baseline 0.001 -7; x_size 35.040108; x_descenders 6.9264708; x_ascenders 8.613636"><span class='ocrx_word' id='word_1_361' title='bbox 1296 1289 1394 1322; x_wconf 91'>simply</span> <span class='ocrx_word' id='word_1_362' title='bbox 1404 1297 1452 1316; x_wconf 87'>use</span> <span class='ocrx_word' id='word_1_363' title='bbox 1463 1290 1615 1321; x_wconf 86'>LOCATE,</span> <span class='ocrx_word' id='word_1_364' title='bbox 1628 1290 1716 1316; x_wconf 88'>FAST</span> <span class='ocrx_word' id='word_1_365' title='bbox 1726 1289 1917 1321; x_wconf 86'>FORWARD,</span> <span class='ocrx_word' id='word_1_366' title='bbox 1929 1297 1960 1317; x_wconf 92'>or</span> <span class='ocrx_word' id='word_1_367' title='bbox 1972 1290 2126 1316; x_wconf 91'>REWIND</span> <span class='ocrx_word' id='word_1_368' title='bbox 2136 1294 2165 1317; x_wconf 82'>to</span>
</span>
<span class='ocr_line' id='line_1_44' title="bbox 1297 1328 2033 1362; baseline 0.001 -7; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_369' title='bbox 1297 1328 1356 1355; x_wconf 96'><strong>find</strong></span> <span class='ocrx_word' id='word_1_370' title='bbox 1366 1329 1412 1355; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_371' title='bbox 1423 1328 1527 1356; x_wconf 96'><strong>desired</strong></span> <span class='ocrx_word' id='word_1_372' title='bbox 1537 1329 1587 1356; x_wconf 96'><strong>bar</strong></span> <span class='ocrx_word' id='word_1_373' title='bbox 1598 1329 1720 1361; x_wconf 96'><strong>number,</strong></span> <span class='ocrx_word' id='word_1_374' title='bbox 1732 1329 1798 1356; x_wconf 97'><strong>then</strong></span> <span class='ocrx_word' id='word_1_375' title='bbox 1809 1333 1874 1356; x_wconf 96'><strong>start</strong></span> <span class='ocrx_word' id='word_1_376' title='bbox 1885 1329 2033 1362; x_wconf 96'><strong>recording.</strong></span>
<span class='ocr_line' id='line_1_44' title="bbox 1297 1328 2033 1362; baseline 0.001 -7; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_369' title='bbox 1297 1328 1356 1355; x_wconf 77'>find</span> <span class='ocrx_word' id='word_1_370' title='bbox 1366 1329 1412 1355; x_wconf 89'>the</span> <span class='ocrx_word' id='word_1_371' title='bbox 1423 1328 1527 1356; x_wconf 85'>desired</span> <span class='ocrx_word' id='word_1_372' title='bbox 1537 1329 1587 1356; x_wconf 88'>bar</span> <span class='ocrx_word' id='word_1_373' title='bbox 1598 1329 1720 1361; x_wconf 86'>number,</span> <span class='ocrx_word' id='word_1_374' title='bbox 1732 1329 1798 1356; x_wconf 78'>then</span> <span class='ocrx_word' id='word_1_375' title='bbox 1809 1333 1874 1356; x_wconf 87'>start</span> <span class='ocrx_word' id='word_1_376' title='bbox 1885 1329 2033 1362; x_wconf 85'>recording.</span>
</span>
</p>
<p class='ocr_par' id='par_1_24' lang='eng' title="bbox 1295 1368 2160 1593">
<span class='ocr_line' id='line_1_45' title="bbox 1332 1368 2160 1402; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_377' title='bbox 1332 1368 1391 1395; x_wconf 93'><strong>The</strong></span> <span class='ocrx_word' id='word_1_378' title='bbox 1402 1368 1626 1395; x_wconf 91'><strong>INSERT/COPY</strong></span> <span class='ocrx_word' id='word_1_379' title='bbox 1626 1368 1789 1395; x_wconf 96'><strong>function</strong></span> <span class='ocrx_word' id='word_1_380' title='bbox 1800 1368 1893 1395; x_wconf 96'><strong>allows</strong></span> <span class='ocrx_word' id='word_1_381' title='bbox 1904 1376 1958 1402; x_wconf 96'><strong>you</strong></span> <span class='ocrx_word' id='word_1_382' title='bbox 1968 1373 1997 1395; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_383' title='bbox 2008 1377 2087 1396; x_wconf 96'><strong>move</strong></span> <span class='ocrx_word' id='word_1_384' title='bbox 2097 1369 2160 1396; x_wconf 97'><strong>bars</strong></span>
<span class='ocr_line' id='line_1_45' title="bbox 1332 1368 2160 1402; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_377' title='bbox 1332 1368 1391 1395; x_wconf 90'>The</span> <span class='ocrx_word' id='word_1_378' title='bbox 1402 1368 1650 1395; x_wconf 86'>INSERT/COPY</span> <span class='ocrx_word' id='word_1_379' title='bbox 1662 1368 1789 1395; x_wconf 81'>function</span> <span class='ocrx_word' id='word_1_380' title='bbox 1800 1368 1893 1395; x_wconf 90'>allows</span> <span class='ocrx_word' id='word_1_381' title='bbox 1904 1376 1958 1402; x_wconf 91'>you</span> <span class='ocrx_word' id='word_1_382' title='bbox 1968 1373 1997 1395; x_wconf 91'>to</span> <span class='ocrx_word' id='word_1_383' title='bbox 2008 1377 2087 1396; x_wconf 91'>move</span> <span class='ocrx_word' id='word_1_384' title='bbox 2097 1369 2160 1396; x_wconf 89'>bars</span>
</span>
<span class='ocr_line' id='line_1_46' title="bbox 1297 1407 2151 1441; baseline 0.002 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_385' title='bbox 1297 1407 1369 1434; x_wconf 96'><strong>from</strong></span> <span class='ocrx_word' id='word_1_386' title='bbox 1380 1415 1433 1434; x_wconf 95'><strong>one</strong></span> <span class='ocrx_word' id='word_1_387' title='bbox 1443 1407 1565 1435; x_wconf 95'><strong>location</strong></span> <span class='ocrx_word' id='word_1_388' title='bbox 1576 1411 1605 1434; x_wconf 92'><strong>to</strong></span> <span class='ocrx_word' id='word_1_389' title='bbox 1616 1407 1796 1435; x_wconf 91'><strong>another—in</strong></span> <span class='ocrx_word' id='word_1_390' title='bbox 1806 1408 1852 1435; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_391' title='bbox 1863 1416 1937 1435; x_wconf 96'><strong>same</strong></span> <span class='ocrx_word' id='word_1_392' title='bbox 1948 1416 2067 1441; x_wconf 96'><strong>sequence</strong></span> <span class='ocrx_word' id='word_1_393' title='bbox 2068 1416 2125 1435; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_394' title='bbox 2135 1416 2151 1435; x_wconf 96'><strong>a</strong></span>
<span class='ocr_line' id='line_1_46' title="bbox 1297 1407 2151 1441; baseline 0.002 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_385' title='bbox 1297 1407 1369 1434; x_wconf 86'>from</span> <span class='ocrx_word' id='word_1_386' title='bbox 1380 1415 1433 1434; x_wconf 88'>one</span> <span class='ocrx_word' id='word_1_387' title='bbox 1443 1407 1565 1435; x_wconf 85'>location</span> <span class='ocrx_word' id='word_1_388' title='bbox 1576 1411 1605 1434; x_wconf 89'>to</span> <span class='ocrx_word' id='word_1_389' title='bbox 1616 1407 1796 1435; x_wconf 85'>another—in</span> <span class='ocrx_word' id='word_1_390' title='bbox 1806 1408 1852 1435; x_wconf 88'>the</span> <span class='ocrx_word' id='word_1_391' title='bbox 1863 1416 1937 1435; x_wconf 90'>same</span> <span class='ocrx_word' id='word_1_392' title='bbox 1948 1416 2083 1441; x_wconf 88'>sequence</span> <span class='ocrx_word' id='word_1_393' title='bbox 2093 1416 2125 1435; x_wconf 90'>or</span> <span class='ocrx_word' id='word_1_394' title='bbox 2135 1416 2151 1435; x_wconf 88'>a</span>
</span>
<span class='ocr_line' id='line_1_47' title="bbox 1296 1447 2160 1481; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_395' title='bbox 1296 1447 1421 1474; x_wconf 96'><strong>different</strong></span> <span class='ocrx_word' id='word_1_396' title='bbox 1431 1455 1491 1474; x_wconf 96'><strong>one.</strong></span> <span class='ocrx_word' id='word_1_397' title='bbox 1504 1448 1555 1474; x_wconf 96'><strong>For</strong></span> <span class='ocrx_word' id='word_1_398' title='bbox 1565 1448 1698 1481; x_wconf 95'><strong>example,</strong></span> <span class='ocrx_word' id='word_1_399' title='bbox 1710 1456 1764 1481; x_wconf 96'><strong>you</strong></span> <span class='ocrx_word' id='word_1_400' title='bbox 1775 1448 1863 1481; x_wconf 96'><strong>might</strong></span> <span class='ocrx_word' id='word_1_401' title='bbox 1873 1448 1955 1475; x_wconf 96'><strong>insert</strong></span> <span class='ocrx_word' id='word_1_402' title='bbox 1966 1456 1983 1475; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_403' title='bbox 1993 1456 2064 1481; x_wconf 96'><strong>copy</strong></span> <span class='ocrx_word' id='word_1_404' title='bbox 2074 1448 2106 1475; x_wconf 96'><strong>of</strong></span> <span class='ocrx_word' id='word_1_405' title='bbox 2115 1448 2160 1475; x_wconf 96'><strong>the</strong></span>
<span class='ocr_line' id='line_1_47' title="bbox 1296 1447 2160 1481; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_395' title='bbox 1296 1447 1421 1474; x_wconf 81'>different</span> <span class='ocrx_word' id='word_1_396' title='bbox 1431 1455 1491 1474; x_wconf 89'>one.</span> <span class='ocrx_word' id='word_1_397' title='bbox 1504 1448 1555 1474; x_wconf 87'>For</span> <span class='ocrx_word' id='word_1_398' title='bbox 1565 1448 1698 1481; x_wconf 84'>example,</span> <span class='ocrx_word' id='word_1_399' title='bbox 1710 1456 1764 1481; x_wconf 91'>you</span> <span class='ocrx_word' id='word_1_400' title='bbox 1775 1448 1863 1481; x_wconf 84'>might</span> <span class='ocrx_word' id='word_1_401' title='bbox 1873 1448 1955 1475; x_wconf 86'>insert</span> <span class='ocrx_word' id='word_1_402' title='bbox 1966 1456 1983 1475; x_wconf 92'>a</span> <span class='ocrx_word' id='word_1_403' title='bbox 1993 1456 2064 1481; x_wconf 88'>copy</span> <span class='ocrx_word' id='word_1_404' title='bbox 2074 1448 2106 1475; x_wconf 90'>of</span> <span class='ocrx_word' id='word_1_405' title='bbox 2115 1448 2160 1475; x_wconf 90'>the</span>
</span>
<span class='ocr_line' id='line_1_48' title="bbox 1297 1486 2087 1521; baseline 0 -7; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_406' title='bbox 1297 1486 1355 1514; x_wconf 96'><strong>first</strong></span> <span class='ocrx_word' id='word_1_407' title='bbox 1366 1495 1439 1514; x_wconf 96'><strong>verse</strong></span> <span class='ocrx_word' id='word_1_408' title='bbox 1449 1487 1571 1514; x_wconf 96'><strong>between</strong></span> <span class='ocrx_word' id='word_1_409' title='bbox 1582 1487 1628 1514; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_410' title='bbox 1638 1487 1740 1514; x_wconf 96'><strong>second</strong></span> <span class='ocrx_word' id='word_1_411' title='bbox 1751 1487 1838 1514; x_wconf 96'><strong>chorus</strong></span> <span class='ocrx_word' id='word_1_412' title='bbox 1841 1495 1899 1514; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_413' title='bbox 1901 1487 1975 1514; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_414' title='bbox 1985 1487 2087 1521; x_wconf 96'><strong>bridge.</strong></span>
<span class='ocr_line' id='line_1_48' title="bbox 1297 1486 2087 1521; baseline 0 -7; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_406' title='bbox 1297 1486 1355 1514; x_wconf 82'>first</span> <span class='ocrx_word' id='word_1_407' title='bbox 1366 1495 1439 1514; x_wconf 89'>verse</span> <span class='ocrx_word' id='word_1_408' title='bbox 1449 1487 1571 1514; x_wconf 89'>between</span> <span class='ocrx_word' id='word_1_409' title='bbox 1582 1487 1628 1514; x_wconf 88'>the</span> <span class='ocrx_word' id='word_1_410' title='bbox 1638 1487 1740 1514; x_wconf 87'>second</span> <span class='ocrx_word' id='word_1_411' title='bbox 1751 1487 1852 1514; x_wconf 83'>chorus</span> <span class='ocrx_word' id='word_1_412' title='bbox 1863 1487 1919 1514; x_wconf 90'>and</span> <span class='ocrx_word' id='word_1_413' title='bbox 1929 1487 1975 1514; x_wconf 88'>the</span> <span class='ocrx_word' id='word_1_414' title='bbox 1985 1487 2087 1521; x_wconf 85'>bridge.</span>
</span>
<span class='ocr_line' id='line_1_49' title="bbox 1296 1527 2047 1560; baseline 0.003 -8; x_size 32; x_descenders 6; x_ascenders 7"><span class='ocrx_word' id='word_1_415' title='bbox 1296 1527 1441 1553; x_wconf 95'><strong>DELETE</strong></span> <span class='ocrx_word' id='word_1_416' title='bbox 1453 1527 1527 1553; x_wconf 96'><strong>BARS</strong></span> <span class='ocrx_word' id='word_1_417' title='bbox 1529 1527 1681 1559; x_wconf 96'><strong>operates</strong></span> <span class='ocrx_word' id='word_1_418' title='bbox 1691 1527 1737 1553; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_419' title='bbox 1748 1535 1823 1554; x_wconf 96'><strong>same</strong></span> <span class='ocrx_word' id='word_1_420' title='bbox 1833 1535 1891 1560; x_wconf 96'><strong>way</strong></span> <span class='ocrx_word' id='word_1_421' title='bbox 1901 1531 1930 1554; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_422' title='bbox 1940 1535 2047 1554; x_wconf 96'><strong>remove</strong></span>
<span class='ocr_line' id='line_1_49' title="bbox 1296 1527 2047 1560; baseline 0.003 -8; x_size 32; x_descenders 6; x_ascenders 7"><span class='ocrx_word' id='word_1_415' title='bbox 1296 1527 1441 1553; x_wconf 88'>DELETE</span> <span class='ocrx_word' id='word_1_416' title='bbox 1453 1527 1546 1553; x_wconf 90'>BARS</span> <span class='ocrx_word' id='word_1_417' title='bbox 1557 1531 1681 1559; x_wconf 84'>operates</span> <span class='ocrx_word' id='word_1_418' title='bbox 1691 1527 1737 1553; x_wconf 86'>the</span> <span class='ocrx_word' id='word_1_419' title='bbox 1748 1535 1823 1554; x_wconf 90'>same</span> <span class='ocrx_word' id='word_1_420' title='bbox 1833 1535 1891 1560; x_wconf 93'>way</span> <span class='ocrx_word' id='word_1_421' title='bbox 1901 1531 1930 1554; x_wconf 91'>to</span> <span class='ocrx_word' id='word_1_422' title='bbox 1940 1535 2047 1554; x_wconf 90'>remove</span>
</span>
<span class='ocr_line' id='line_1_50' title="bbox 1295 1565 1577 1593; baseline 0.004 -1; x_size 34.748871; x_descenders 6.7488689; x_ascenders 9"><span class='ocrx_word' id='word_1_423' title='bbox 1295 1569 1422 1592; x_wconf 96'><strong>unwanted</strong></span> <span class='ocrx_word' id='word_1_424' title='bbox 1423 1565 1577 1593; x_wconf 95'><strong>sections,</strong></span>
<span class='ocr_line' id='line_1_50' title="bbox 1295 1565 1577 1593; baseline 0.004 -1; x_size 34.748871; x_descenders 6.7488689; x_ascenders 9"><span class='ocrx_word' id='word_1_423' title='bbox 1295 1565 1441 1592; x_wconf 88'>unwanted</span> <span class='ocrx_word' id='word_1_424' title='bbox 1452 1565 1577 1593; x_wconf 84'>sections.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_18' title="bbox 1295 1638 2215 1960">
<div class='ocr_carea' id='block_1_19' title="bbox 1295 1638 2215 1960">
<p class='ocr_par' id='par_1_25' lang='eng' title="bbox 1296 1638 1589 1680">
<span class='ocr_line' id='line_1_51' title="bbox 1296 1638 1589 1680; baseline 0 -9; x_size 42; x_descenders 9; x_ascenders 10"><span class='ocrx_word' id='word_1_425' title='bbox 1296 1638 1452 1680; x_wconf 96'><strong>Creating</strong></span> <span class='ocrx_word' id='word_1_426' title='bbox 1465 1648 1485 1671; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_427' title='bbox 1497 1639 1589 1680; x_wconf 96'><strong>Song</strong></span>
<span class='ocr_line' id='line_1_51' title="bbox 1296 1638 1589 1680; baseline 0 -9; x_size 42; x_descenders 9; x_ascenders 10"><span class='ocrx_word' id='word_1_425' title='bbox 1296 1638 1452 1680; x_wconf 86'>Creating</span> <span class='ocrx_word' id='word_1_426' title='bbox 1465 1648 1485 1671; x_wconf 85'>a</span> <span class='ocrx_word' id='word_1_427' title='bbox 1497 1639 1589 1680; x_wconf 87'>Song</span>
</span>
</p>
<p class='ocr_par' id='par_1_26' lang='eng' title="bbox 1295 1690 2215 1960">
<span class='ocr_line' id='line_1_52' title="bbox 1333 1690 2146 1723; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_428' title='bbox 1333 1690 1394 1717; x_wconf 96'><strong>One</strong></span> <span class='ocrx_word' id='word_1_429' title='bbox 1404 1698 1446 1717; x_wconf 96'><strong>way</strong></span> <span class='ocrx_word' id='word_1_430' title='bbox 1445 1694 1500 1723; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_431' title='bbox 1511 1694 1598 1717; x_wconf 96'><strong>create</strong></span> <span class='ocrx_word' id='word_1_432' title='bbox 1608 1698 1625 1717; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_433' title='bbox 1635 1698 1687 1717; x_wconf 95'><strong>song</strong></span> <span class='ocrx_word' id='word_1_434' title='bbox 1688 1690 1736 1723; x_wconf 95'><strong>is</strong></span> <span class='ocrx_word' id='word_1_435' title='bbox 1747 1694 1776 1717; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_436' title='bbox 1787 1690 1880 1717; x_wconf 96'><strong>record</strong></span> <span class='ocrx_word' id='word_1_437' title='bbox 1891 1690 1958 1717; x_wconf 96'><strong>each</strong></span> <span class='ocrx_word' id='word_1_438' title='bbox 1969 1690 2044 1717; x_wconf 97'><strong>track</strong></span> <span class='ocrx_word' id='word_1_439' title='bbox 2056 1690 2090 1717; x_wconf 96'><strong>all</strong></span> <span class='ocrx_word' id='word_1_440' title='bbox 2101 1690 2146 1717; x_wconf 96'><strong>the</strong></span>
<span class='ocr_line' id='line_1_52' title="bbox 1333 1690 2146 1723; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_428' title='bbox 1333 1690 1394 1717; x_wconf 88'>One</span> <span class='ocrx_word' id='word_1_429' title='bbox 1404 1698 1462 1723; x_wconf 93'>way</span> <span class='ocrx_word' id='word_1_430' title='bbox 1472 1694 1500 1717; x_wconf 89'>to</span> <span class='ocrx_word' id='word_1_431' title='bbox 1511 1694 1598 1717; x_wconf 88'>create</span> <span class='ocrx_word' id='word_1_432' title='bbox 1608 1698 1625 1717; x_wconf 88'>a</span> <span class='ocrx_word' id='word_1_433' title='bbox 1635 1698 1704 1723; x_wconf 83'>song</span> <span class='ocrx_word' id='word_1_434' title='bbox 1715 1690 1736 1717; x_wconf 90'>is</span> <span class='ocrx_word' id='word_1_435' title='bbox 1747 1694 1776 1717; x_wconf 89'>to</span> <span class='ocrx_word' id='word_1_436' title='bbox 1787 1690 1880 1717; x_wconf 86'>record</span> <span class='ocrx_word' id='word_1_437' title='bbox 1891 1690 1958 1717; x_wconf 89'>each</span> <span class='ocrx_word' id='word_1_438' title='bbox 1969 1690 2044 1717; x_wconf 87'>track</span> <span class='ocrx_word' id='word_1_439' title='bbox 2056 1690 2090 1717; x_wconf 89'>all</span> <span class='ocrx_word' id='word_1_440' title='bbox 2101 1690 2146 1717; x_wconf 88'>the</span>
</span>
<span class='ocr_line' id='line_1_53' title="bbox 1295 1729 2121 1762; baseline 0.001 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_441' title='bbox 1295 1737 1353 1762; x_wconf 96'><strong>way</strong></span> <span class='ocrx_word' id='word_1_442' title='bbox 1362 1729 1481 1762; x_wconf 96'><strong>through</strong></span> <span class='ocrx_word' id='word_1_443' title='bbox 1493 1729 1541 1762; x_wconf 95'><strong>(up</strong></span> <span class='ocrx_word' id='word_1_444' title='bbox 1552 1733 1581 1756; x_wconf 95'><strong>to</strong></span> <span class='ocrx_word' id='word_1_445' title='bbox 1592 1730 1644 1756; x_wconf 96'><strong>999</strong></span> <span class='ocrx_word' id='word_1_446' title='bbox 1654 1729 1738 1762; x_wconf 96'><strong>bars).</strong></span> <span class='ocrx_word' id='word_1_447' title='bbox 1751 1729 1878 1757; x_wconf 96'><strong>Another</strong></span> <span class='ocrx_word' id='word_1_448' title='bbox 1888 1737 1930 1757; x_wconf 96'><strong>way</strong></span> <span class='ocrx_word' id='word_1_449' title='bbox 1929 1729 1977 1762; x_wconf 96'><strong>is</strong></span> <span class='ocrx_word' id='word_1_450' title='bbox 1987 1733 2016 1757; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_451' title='bbox 2027 1729 2121 1757; x_wconf 96'><strong>record</strong></span>
<span class='ocr_line' id='line_1_53' title="bbox 1295 1729 2121 1762; baseline 0.001 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_441' title='bbox 1295 1737 1353 1762; x_wconf 87'>way</span> <span class='ocrx_word' id='word_1_442' title='bbox 1362 1729 1481 1762; x_wconf 83'>through</span> <span class='ocrx_word' id='word_1_443' title='bbox 1493 1729 1541 1762; x_wconf 90'>(up</span> <span class='ocrx_word' id='word_1_444' title='bbox 1552 1733 1581 1756; x_wconf 89'>to</span> <span class='ocrx_word' id='word_1_445' title='bbox 1592 1730 1644 1756; x_wconf 89'>999</span> <span class='ocrx_word' id='word_1_446' title='bbox 1654 1729 1738 1762; x_wconf 90'>bars).</span> <span class='ocrx_word' id='word_1_447' title='bbox 1751 1729 1878 1757; x_wconf 89'>Another</span> <span class='ocrx_word' id='word_1_448' title='bbox 1888 1737 1945 1762; x_wconf 89'>way</span> <span class='ocrx_word' id='word_1_449' title='bbox 1956 1729 1977 1757; x_wconf 90'>is</span> <span class='ocrx_word' id='word_1_450' title='bbox 1987 1733 2016 1757; x_wconf 89'>to</span> <span class='ocrx_word' id='word_1_451' title='bbox 2027 1729 2121 1757; x_wconf 86'>record</span>
</span>
<span class='ocr_line' id='line_1_54' title="bbox 1296 1768 2066 1802; baseline 0 -6; x_size 33; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_452' title='bbox 1296 1768 1362 1796; x_wconf 96'><strong>each</strong></span> <span class='ocrx_word' id='word_1_453' title='bbox 1373 1768 1448 1796; x_wconf 96'><strong>basic</strong></span> <span class='ocrx_word' id='word_1_454' title='bbox 1458 1768 1562 1796; x_wconf 96'><strong>section</strong></span> <span class='ocrx_word' id='word_1_455' title='bbox 1574 1769 1666 1802; x_wconf 96'><strong>(verse,</strong></span> <span class='ocrx_word' id='word_1_456' title='bbox 1679 1769 1779 1796; x_wconf 96'><strong>chorus,</strong></span> <span class='ocrx_word' id='word_1_457' title='bbox 1782 1769 1865 1802; x_wconf 96'><strong>etc.)</strong></span> <span class='ocrx_word' id='word_1_458' title='bbox 1876 1768 1904 1795; x_wconf 96'><strong>in</strong></span> <span class='ocrx_word' id='word_1_459' title='bbox 1914 1768 2066 1796; x_wconf 96'><strong>individual</strong></span>
<span class='ocr_line' id='line_1_54' title="bbox 1296 1768 2066 1802; baseline 0 -6; x_size 33; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_452' title='bbox 1296 1768 1362 1796; x_wconf 86'>each</span> <span class='ocrx_word' id='word_1_453' title='bbox 1373 1768 1448 1796; x_wconf 87'>basic</span> <span class='ocrx_word' id='word_1_454' title='bbox 1458 1768 1562 1796; x_wconf 83'>section</span> <span class='ocrx_word' id='word_1_455' title='bbox 1574 1769 1666 1802; x_wconf 89'>(verse,</span> <span class='ocrx_word' id='word_1_456' title='bbox 1679 1769 1788 1801; x_wconf 86'>chorus,</span> <span class='ocrx_word' id='word_1_457' title='bbox 1800 1769 1865 1802; x_wconf 83'>etc.)</span> <span class='ocrx_word' id='word_1_458' title='bbox 1876 1768 1904 1795; x_wconf 91'>in</span> <span class='ocrx_word' id='word_1_459' title='bbox 1914 1768 2066 1796; x_wconf 86'>individual</span>
</span>
<span class='ocr_line' id='line_1_55' title="bbox 1296 1808 2215 1841; baseline 0 -6; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_460' title='bbox 1296 1816 1451 1841; x_wconf 96'><strong>sequences,</strong></span> <span class='ocrx_word' id='word_1_461' title='bbox 1463 1808 1528 1835; x_wconf 96'><strong>then</strong></span> <span class='ocrx_word' id='word_1_462' title='bbox 1538 1816 1587 1835; x_wconf 96'><strong>use</strong></span> <span class='ocrx_word' id='word_1_463' title='bbox 1597 1808 1643 1835; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_464' title='bbox 1653 1809 1799 1835; x_wconf 96'><strong>CREATE</strong></span> <span class='ocrx_word' id='word_1_465' title='bbox 1810 1808 1883 1835; x_wconf 96'><strong>SONG</strong></span> <span class='ocrx_word' id='word_1_466' title='bbox 1885 1808 2050 1836; x_wconf 96'><strong>function</strong></span> <span class='ocrx_word' id='word_1_467' title='bbox 2060 1812 2089 1835; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_468' title='bbox 2103 1808 2215 1836; x_wconf 93'><strong>“chain”</strong></span>
<span class='ocr_line' id='line_1_55' title="bbox 1296 1808 2215 1841; baseline 0 -6; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_460' title='bbox 1296 1816 1451 1841; x_wconf 85'>sequences,</span> <span class='ocrx_word' id='word_1_461' title='bbox 1463 1808 1528 1835; x_wconf 86'>then</span> <span class='ocrx_word' id='word_1_462' title='bbox 1538 1816 1587 1835; x_wconf 90'>use</span> <span class='ocrx_word' id='word_1_463' title='bbox 1597 1808 1643 1835; x_wconf 89'>the</span> <span class='ocrx_word' id='word_1_464' title='bbox 1653 1809 1799 1835; x_wconf 89'>CREATE</span> <span class='ocrx_word' id='word_1_465' title='bbox 1810 1808 1911 1835; x_wconf 89'>SONG</span> <span class='ocrx_word' id='word_1_466' title='bbox 1923 1808 2050 1836; x_wconf 85'>function</span> <span class='ocrx_word' id='word_1_467' title='bbox 2060 1812 2089 1835; x_wconf 89'>to</span> <span class='ocrx_word' id='word_1_468' title='bbox 2103 1808 2215 1836; x_wconf 87'>“chain”</span>
</span>
<span class='ocr_line' id='line_1_56' title="bbox 1295 1847 2135 1881; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_469' title='bbox 1295 1848 1370 1874; x_wconf 96'><strong>them</strong></span> <span class='ocrx_word' id='word_1_470' title='bbox 1381 1848 1508 1881; x_wconf 95'><strong>together.</strong></span> <span class='ocrx_word' id='word_1_471' title='bbox 1521 1848 1667 1875; x_wconf 96'><strong>CREATE</strong></span> <span class='ocrx_word' id='word_1_472' title='bbox 1678 1848 1751 1875; x_wconf 96'><strong>SONG</strong></span> <span class='ocrx_word' id='word_1_473' title='bbox 1753 1847 1842 1874; x_wconf 96'><strong>will</strong></span> <span class='ocrx_word' id='word_1_474' title='bbox 1853 1848 1918 1875; x_wconf 96'><strong>then</strong></span> <span class='ocrx_word' id='word_1_475' title='bbox 1929 1848 2135 1881; x_wconf 96'><strong>automatically</strong></span>
<span class='ocr_line' id='line_1_56' title="bbox 1295 1847 2135 1881; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_469' title='bbox 1295 1848 1370 1874; x_wconf 91'>them</span> <span class='ocrx_word' id='word_1_470' title='bbox 1381 1848 1508 1881; x_wconf 83'>together.</span> <span class='ocrx_word' id='word_1_471' title='bbox 1521 1848 1667 1875; x_wconf 87'>CREATE</span> <span class='ocrx_word' id='word_1_472' title='bbox 1678 1848 1779 1875; x_wconf 91'>SONG</span> <span class='ocrx_word' id='word_1_473' title='bbox 1789 1847 1842 1874; x_wconf 92'>will</span> <span class='ocrx_word' id='word_1_474' title='bbox 1853 1848 1918 1875; x_wconf 86'>then</span> <span class='ocrx_word' id='word_1_475' title='bbox 1929 1848 2135 1881; x_wconf 81'>automatically</span>
</span>
<span class='ocr_line' id='line_1_57' title="bbox 1296 1887 2162 1920; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_476' title='bbox 1296 1895 1349 1920; x_wconf 96'><strong>copy</strong></span> <span class='ocrx_word' id='word_1_477' title='bbox 1349 1887 1412 1920; x_wconf 96'><strong>all</strong></span> <span class='ocrx_word' id='word_1_478' title='bbox 1422 1887 1468 1914; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_479' title='bbox 1478 1891 1552 1920; x_wconf 96'><strong>parts</strong></span> <span class='ocrx_word' id='word_1_480' title='bbox 1563 1887 1621 1914; x_wconf 95'><strong>into</strong></span> <span class='ocrx_word' id='word_1_481' title='bbox 1632 1895 1649 1914; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_482' title='bbox 1659 1895 1718 1914; x_wconf 96'><strong>new</strong></span> <span class='ocrx_word' id='word_1_483' title='bbox 1729 1895 1870 1920; x_wconf 96'><strong>sequence.</strong></span> <span class='ocrx_word' id='word_1_484' title='bbox 1884 1887 1911 1914; x_wconf 96'><strong>If</strong></span> <span class='ocrx_word' id='word_1_485' title='bbox 1919 1887 2033 1919; x_wconf 96'><strong>desired,</strong></span> <span class='ocrx_word' id='word_1_486' title='bbox 2045 1895 2099 1920; x_wconf 96'><strong>you</strong></span> <span class='ocrx_word' id='word_1_487' title='bbox 2110 1895 2162 1914; x_wconf 96'><strong>can</strong></span>
<span class='ocr_line' id='line_1_57' title="bbox 1296 1887 2162 1920; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_476' title='bbox 1296 1895 1366 1920; x_wconf 89'>copy</span> <span class='ocrx_word' id='word_1_477' title='bbox 1377 1887 1412 1914; x_wconf 88'>all</span> <span class='ocrx_word' id='word_1_478' title='bbox 1422 1887 1468 1914; x_wconf 85'>the</span> <span class='ocrx_word' id='word_1_479' title='bbox 1478 1891 1552 1920; x_wconf 86'>parts</span> <span class='ocrx_word' id='word_1_480' title='bbox 1563 1887 1621 1914; x_wconf 86'>into</span> <span class='ocrx_word' id='word_1_481' title='bbox 1632 1895 1649 1914; x_wconf 91'>a</span> <span class='ocrx_word' id='word_1_482' title='bbox 1659 1895 1718 1914; x_wconf 91'>new</span> <span class='ocrx_word' id='word_1_483' title='bbox 1729 1895 1870 1920; x_wconf 83'>sequence.</span> <span class='ocrx_word' id='word_1_484' title='bbox 1884 1887 1911 1914; x_wconf 84'>If</span> <span class='ocrx_word' id='word_1_485' title='bbox 1919 1887 2033 1919; x_wconf 89'>desired,</span> <span class='ocrx_word' id='word_1_486' title='bbox 2045 1895 2099 1920; x_wconf 92'>you</span> <span class='ocrx_word' id='word_1_487' title='bbox 2110 1895 2162 1914; x_wconf 85'>can</span>
</span>
<span class='ocr_line' id='line_1_58' title="bbox 1296 1926 2169 1960; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_488' title='bbox 1296 1934 1361 1953; x_wconf 96'><strong>even</strong></span> <span class='ocrx_word' id='word_1_489' title='bbox 1372 1930 1411 1953; x_wconf 96'><strong>set</strong></span> <span class='ocrx_word' id='word_1_490' title='bbox 1422 1926 1468 1953; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_491' title='bbox 1478 1926 1528 1953; x_wconf 96'><strong>last</strong></span> <span class='ocrx_word' id='word_1_492' title='bbox 1540 1926 1590 1953; x_wconf 96'><strong>few</strong></span> <span class='ocrx_word' id='word_1_493' title='bbox 1601 1927 1664 1953; x_wconf 96'><strong>bars</strong></span> <span class='ocrx_word' id='word_1_494' title='bbox 1675 1931 1704 1954; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_495' title='bbox 1715 1935 1795 1960; x_wconf 96'><strong>repeat</strong></span> <span class='ocrx_word' id='word_1_496' title='bbox 1795 1926 1955 1960; x_wconf 96'><strong>infinitely,</strong></span> <span class='ocrx_word' id='word_1_497' title='bbox 1968 1926 2011 1954; x_wconf 95'><strong>for</strong></span> <span class='ocrx_word' id='word_1_498' title='bbox 2022 1935 2038 1954; x_wconf 93'><strong>a</strong></span> <span class='ocrx_word' id='word_1_499' title='bbox 2049 1927 2169 1954; x_wconf 92'><strong>fadeout.</strong></span>
<span class='ocr_line' id='line_1_58' title="bbox 1296 1926 2169 1960; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_488' title='bbox 1296 1934 1361 1953; x_wconf 89'>even</span> <span class='ocrx_word' id='word_1_489' title='bbox 1372 1930 1411 1953; x_wconf 90'>set</span> <span class='ocrx_word' id='word_1_490' title='bbox 1422 1926 1468 1953; x_wconf 88'>the</span> <span class='ocrx_word' id='word_1_491' title='bbox 1478 1926 1528 1953; x_wconf 89'>last</span> <span class='ocrx_word' id='word_1_492' title='bbox 1540 1926 1590 1953; x_wconf 88'>few</span> <span class='ocrx_word' id='word_1_493' title='bbox 1601 1927 1664 1953; x_wconf 89'>bars</span> <span class='ocrx_word' id='word_1_494' title='bbox 1675 1931 1704 1954; x_wconf 85'>to</span> <span class='ocrx_word' id='word_1_495' title='bbox 1715 1931 1806 1960; x_wconf 89'>repeat</span> <span class='ocrx_word' id='word_1_496' title='bbox 1816 1926 1955 1960; x_wconf 84'>infinitely,</span> <span class='ocrx_word' id='word_1_497' title='bbox 1968 1926 2011 1954; x_wconf 86'>for</span> <span class='ocrx_word' id='word_1_498' title='bbox 2022 1935 2038 1954; x_wconf 92'>a</span> <span class='ocrx_word' id='word_1_499' title='bbox 2049 1927 2169 1954; x_wconf 83'>fadeout.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_19' title="bbox 1293 2000 2179 2242">
<div class='ocr_carea' id='block_1_20' title="bbox 1293 2000 2179 2242">
<p class='ocr_par' id='par_1_27' lang='eng' title="bbox 1294 2000 1948 2040">
<span class='ocr_line' id='line_1_59' title="bbox 1294 2000 1948 2040; baseline 0.002 -8; x_size 40; x_descenders 8; x_ascenders 10"><span class='ocrx_word' id='word_1_500' title='bbox 1294 2000 1532 2040; x_wconf 95'><strong>Composition</strong></span> <span class='ocrx_word' id='word_1_501' title='bbox 1544 2000 1699 2033; x_wconf 96'><strong>Without</strong></span> <span class='ocrx_word' id='word_1_502' title='bbox 1711 2000 1948 2040; x_wconf 96'><strong>Compromise</strong></span>
<span class='ocr_line' id='line_1_59' title="bbox 1294 2000 1948 2040; baseline 0.002 -8; x_size 40; x_descenders 8; x_ascenders 10"><span class='ocrx_word' id='word_1_500' title='bbox 1294 2000 1532 2040; x_wconf 84'>Composition</span> <span class='ocrx_word' id='word_1_501' title='bbox 1544 2000 1699 2033; x_wconf 85'>Without</span> <span class='ocrx_word' id='word_1_502' title='bbox 1711 2000 1948 2040; x_wconf 85'>Compromise</span>
</span>
</p>
<p class='ocr_par' id='par_1_28' lang='eng' title="bbox 1293 2051 2179 2242">
<span class='ocr_line' id='line_1_60' title="bbox 1331 2051 2179 2085; baseline 0 -7; x_size 34; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_503' title='bbox 1331 2051 1389 2078; x_wconf 96'><strong>The</strong></span> <span class='ocrx_word' id='word_1_504' title='bbox 1399 2051 1563 2085; x_wconf 96'><strong>technology</strong></span> <span class='ocrx_word' id='word_1_505' title='bbox 1573 2059 1627 2084; x_wconf 96'><strong>you</strong></span> <span class='ocrx_word' id='word_1_506' title='bbox 1638 2060 1686 2079; x_wconf 96'><strong>use</strong></span> <span class='ocrx_word' id='word_1_507' title='bbox 1697 2051 1797 2078; x_wconf 96'><strong>should</strong></span> <span class='ocrx_word' id='word_1_508' title='bbox 1808 2059 1887 2078; x_wconf 96'><strong>never</strong></span> <span class='ocrx_word' id='word_1_509' title='bbox 1897 2052 1932 2079; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_510' title='bbox 1942 2059 1973 2079; x_wconf 96'><strong>so</strong></span> <span class='ocrx_word' id='word_1_511' title='bbox 1984 2051 2110 2085; x_wconf 67'><strong>complex</strong></span> <span class='ocrx_word' id='word_1_512' title='bbox 2120 2052 2179 2078; x_wconf 96'><strong>that</strong></span>
<span class='ocr_line' id='line_1_60' title="bbox 1331 2051 2179 2085; baseline 0 -7; x_size 34; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_503' title='bbox 1331 2051 1389 2078; x_wconf 90'>The</span> <span class='ocrx_word' id='word_1_504' title='bbox 1399 2051 1563 2085; x_wconf 83'>technology</span> <span class='ocrx_word' id='word_1_505' title='bbox 1573 2059 1627 2084; x_wconf 92'>you</span> <span class='ocrx_word' id='word_1_506' title='bbox 1638 2060 1686 2079; x_wconf 86'>use</span> <span class='ocrx_word' id='word_1_507' title='bbox 1697 2051 1797 2078; x_wconf 89'>should</span> <span class='ocrx_word' id='word_1_508' title='bbox 1808 2059 1887 2078; x_wconf 87'>never</span> <span class='ocrx_word' id='word_1_509' title='bbox 1897 2052 1932 2079; x_wconf 91'>be</span> <span class='ocrx_word' id='word_1_510' title='bbox 1942 2059 1973 2079; x_wconf 89'>so</span> <span class='ocrx_word' id='word_1_511' title='bbox 1984 2051 2110 2085; x_wconf 85'>complex</span> <span class='ocrx_word' id='word_1_512' title='bbox 2120 2052 2179 2078; x_wconf 86'>that</span>
</span>
<span class='ocr_line' id='line_1_61' title="bbox 1294 2090 2157 2124; baseline 0 -6; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_513' title='bbox 1294 2090 1313 2118; x_wconf 96'><strong>it</strong></span> <span class='ocrx_word' id='word_1_514' title='bbox 1323 2091 1459 2118; x_wconf 96'><strong>interferes</strong></span> <span class='ocrx_word' id='word_1_515' title='bbox 1470 2091 1535 2118; x_wconf 96'><strong>with</strong></span> <span class='ocrx_word' id='word_1_516' title='bbox 1545 2091 1591 2118; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_517' title='bbox 1602 2091 1715 2118; x_wconf 96'><strong>creative</strong></span> <span class='ocrx_word' id='word_1_518' title='bbox 1725 2099 1841 2124; x_wconf 93'><strong>process.</strong></span> <span class='ocrx_word' id='word_1_519' title='bbox 1854 2091 1947 2118; x_wconf 92'><strong>Thats</strong></span> <span class='ocrx_word' id='word_1_520' title='bbox 1957 2091 2086 2124; x_wconf 96'><strong>precisely</strong></span> <span class='ocrx_word' id='word_1_521' title='bbox 2096 2091 2157 2124; x_wconf 96'><strong>why</strong></span>
<span class='ocr_line' id='line_1_61' title="bbox 1294 2090 2157 2124; baseline 0 -6; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_513' title='bbox 1294 2090 1313 2118; x_wconf 86'>it</span> <span class='ocrx_word' id='word_1_514' title='bbox 1323 2091 1459 2118; x_wconf 87'>interferes</span> <span class='ocrx_word' id='word_1_515' title='bbox 1470 2091 1535 2118; x_wconf 84'>with</span> <span class='ocrx_word' id='word_1_516' title='bbox 1545 2091 1591 2118; x_wconf 88'>the</span> <span class='ocrx_word' id='word_1_517' title='bbox 1602 2091 1715 2118; x_wconf 90'>creative</span> <span class='ocrx_word' id='word_1_518' title='bbox 1725 2099 1841 2124; x_wconf 83'>process.</span> <span class='ocrx_word' id='word_1_519' title='bbox 1854 2091 1947 2118; x_wconf 78'>Thats</span> <span class='ocrx_word' id='word_1_520' title='bbox 1957 2091 2086 2124; x_wconf 86'>precisely</span> <span class='ocrx_word' id='word_1_521' title='bbox 2096 2091 2157 2124; x_wconf 89'>why</span>
</span>
<span class='ocr_line' id='line_1_62' title="bbox 1293 2130 2156 2164; baseline 0 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_522' title='bbox 1293 2130 1339 2157; x_wconf 93'><strong>the</strong></span> <span class='ocrx_word' id='word_1_523' title='bbox 1350 2130 1562 2164; x_wconf 90'><strong>LinnSequencer</strong></span> <span class='ocrx_word' id='word_1_524' title='bbox 1564 2130 1607 2157; x_wconf 97'><strong>is</strong></span> <span class='ocrx_word' id='word_1_525' title='bbox 1619 2130 1747 2164; x_wconf 96'><strong>designed</strong></span> <span class='ocrx_word' id='word_1_526' title='bbox 1758 2134 1787 2157; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_527' title='bbox 1798 2130 1834 2157; x_wconf 96'><strong>let</strong></span> <span class='ocrx_word' id='word_1_528' title='bbox 1844 2138 1899 2163; x_wconf 96'><strong>you</strong></span> <span class='ocrx_word' id='word_1_529' title='bbox 1910 2138 2051 2164; x_wconf 96'><strong>compose,</strong></span> <span class='ocrx_word' id='word_1_530' title='bbox 2063 2130 2156 2157; x_wconf 96'><strong>record</strong></span>
<span class='ocr_line' id='line_1_62' title="bbox 1293 2130 2156 2164; baseline 0 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_522' title='bbox 1293 2130 1339 2157; x_wconf 90'>the</span> <span class='ocrx_word' id='word_1_523' title='bbox 1350 2130 1576 2164; x_wconf 80'>LinnSequencer</span> <span class='ocrx_word' id='word_1_524' title='bbox 1586 2130 1607 2157; x_wconf 89'>is</span> <span class='ocrx_word' id='word_1_525' title='bbox 1619 2130 1747 2164; x_wconf 87'>designed</span> <span class='ocrx_word' id='word_1_526' title='bbox 1758 2134 1787 2157; x_wconf 87'>to</span> <span class='ocrx_word' id='word_1_527' title='bbox 1798 2130 1834 2157; x_wconf 89'>let</span> <span class='ocrx_word' id='word_1_528' title='bbox 1844 2138 1899 2163; x_wconf 93'>you</span> <span class='ocrx_word' id='word_1_529' title='bbox 1910 2138 2051 2164; x_wconf 88'>compose,</span> <span class='ocrx_word' id='word_1_530' title='bbox 2063 2130 2156 2157; x_wconf 87'>record</span>
</span>
<span class='ocr_line' id='line_1_63' title="bbox 1294 2169 2145 2203; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_531' title='bbox 1294 2178 1330 2197; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_532' title='bbox 1331 2169 1414 2197; x_wconf 96'><strong>edit</strong></span> <span class='ocrx_word' id='word_1_533' title='bbox 1425 2170 1503 2197; x_wconf 96'><strong>while</strong></span> <span class='ocrx_word' id='word_1_534' title='bbox 1514 2170 1643 2203; x_wconf 96'><strong>devoting</strong></span> <span class='ocrx_word' id='word_1_535' title='bbox 1653 2178 1721 2203; x_wconf 96'><strong>your</strong></span> <span class='ocrx_word' id='word_1_536' title='bbox 1731 2170 1882 2197; x_wconf 96'><strong>undivided</strong></span> <span class='ocrx_word' id='word_1_537' title='bbox 1893 2170 2027 2197; x_wconf 96'><strong>attention</strong></span> <span class='ocrx_word' id='word_1_538' title='bbox 2037 2174 2067 2197; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_539' title='bbox 2077 2178 2145 2203; x_wconf 96'><strong>your</strong></span>
<span class='ocr_line' id='line_1_63' title="bbox 1294 2169 2145 2203; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_531' title='bbox 1294 2170 1349 2197; x_wconf 90'>and</span> <span class='ocrx_word' id='word_1_532' title='bbox 1360 2169 1414 2197; x_wconf 83'>edit</span> <span class='ocrx_word' id='word_1_533' title='bbox 1425 2170 1503 2197; x_wconf 89'>while</span> <span class='ocrx_word' id='word_1_534' title='bbox 1514 2170 1643 2203; x_wconf 90'>devoting</span> <span class='ocrx_word' id='word_1_535' title='bbox 1653 2178 1721 2203; x_wconf 92'>your</span> <span class='ocrx_word' id='word_1_536' title='bbox 1731 2170 1882 2197; x_wconf 88'>undivided</span> <span class='ocrx_word' id='word_1_537' title='bbox 1893 2170 2027 2197; x_wconf 86'>attention</span> <span class='ocrx_word' id='word_1_538' title='bbox 2037 2174 2067 2197; x_wconf 91'>to</span> <span class='ocrx_word' id='word_1_539' title='bbox 2077 2178 2145 2203; x_wconf 90'>your</span>
</span>
<span class='ocr_line' id='line_1_64' title="bbox 1294 2209 2126 2242; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_540' title='bbox 1294 2209 1388 2236; x_wconf 95'><strong>music.</strong></span> <span class='ocrx_word' id='word_1_541' title='bbox 1402 2209 1451 2236; x_wconf 96'><strong>See</strong></span> <span class='ocrx_word' id='word_1_542' title='bbox 1460 2217 1529 2242; x_wconf 96'><strong>your</strong></span> <span class='ocrx_word' id='word_1_543' title='bbox 1540 2209 1611 2236; x_wconf 96'><strong>Linn</strong></span> <span class='ocrx_word' id='word_1_544' title='bbox 1621 2209 1712 2236; x_wconf 95'><strong>dealer</strong></span> <span class='ocrx_word' id='word_1_545' title='bbox 1722 2209 1806 2242; x_wconf 95'><strong>today</strong></span> <span class='ocrx_word' id='word_1_546' title='bbox 1817 2209 1859 2236; x_wconf 95'><strong>for</strong></span> <span class='ocrx_word' id='word_1_547' title='bbox 1870 2217 1887 2236; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_548' title='bbox 1897 2209 2126 2236; x_wconf 96'><strong>demonstration!</strong></span>
<span class='ocr_line' id='line_1_64' title="bbox 1294 2209 2126 2242; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_540' title='bbox 1294 2209 1388 2236; x_wconf 88'>music.</span> <span class='ocrx_word' id='word_1_541' title='bbox 1402 2209 1451 2236; x_wconf 89'>See</span> <span class='ocrx_word' id='word_1_542' title='bbox 1460 2217 1529 2242; x_wconf 92'>your</span> <span class='ocrx_word' id='word_1_543' title='bbox 1540 2209 1611 2236; x_wconf 87'>Linn</span> <span class='ocrx_word' id='word_1_544' title='bbox 1621 2209 1712 2236; x_wconf 86'>dealer</span> <span class='ocrx_word' id='word_1_545' title='bbox 1722 2209 1806 2242; x_wconf 85'>today</span> <span class='ocrx_word' id='word_1_546' title='bbox 1817 2209 1859 2236; x_wconf 87'>for</span> <span class='ocrx_word' id='word_1_547' title='bbox 1870 2217 1887 2236; x_wconf 88'>a</span> <span class='ocrx_word' id='word_1_548' title='bbox 1897 2209 2126 2236; x_wconf 76'>demonstration!</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_20' title="bbox 347 2343 2171 2378">
<div class='ocr_carea' id='block_1_21' title="bbox 347 2343 2171 2378">
<p class='ocr_par' id='par_1_29' lang='eng' title="bbox 347 2343 2171 2378">
<span class='ocr_line' id='line_1_65' title="bbox 347 2343 2171 2378; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_549' title='bbox 347 2350 361 2363; x_wconf 58'><strong>*</strong></span> <span class='ocrx_word' id='word_1_550' title='bbox 373 2343 483 2377; x_wconf 96'><strong>Simple,</strong></span> <span class='ocrx_word' id='word_1_551' title='bbox 495 2352 559 2377; x_wconf 96'><strong>easy</strong></span> <span class='ocrx_word' id='word_1_552' title='bbox 569 2348 598 2371; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_553' title='bbox 609 2344 683 2371; x_wconf 93'><strong>learn</strong></span> <span class='ocrx_word' id='word_1_554' title='bbox 694 2344 922 2378; x_wconf 91'><strong>operation—the</strong></span> <span class='ocrx_word' id='word_1_555' title='bbox 934 2345 967 2372; x_wconf 96'><strong>32</strong></span> <span class='ocrx_word' id='word_1_556' title='bbox 978 2345 1116 2372; x_wconf 96'><strong>character</strong></span> <span class='ocrx_word' id='word_1_557' title='bbox 1126 2345 1200 2372; x_wconf 96'><strong>LCD</strong></span> <span class='ocrx_word' id='word_1_558' title='bbox 1211 2345 1316 2378; x_wconf 96'><strong>display</strong></span> <span class='ocrx_word' id='word_1_559' title='bbox 1326 2345 1424 2378; x_wconf 97'><strong>clearly</strong></span> <span class='ocrx_word' id='word_1_560' title='bbox 1434 2345 1528 2378; x_wconf 96'><strong>guides</strong></span> <span class='ocrx_word' id='word_1_561' title='bbox 1539 2353 1594 2378; x_wconf 97'><strong>you</strong></span> <span class='ocrx_word' id='word_1_562' title='bbox 1604 2345 1705 2378; x_wconf 96'><strong>through</strong></span> <span class='ocrx_word' id='word_1_563' title='bbox 1706 2344 1770 2371; x_wconf 96'><strong>all</strong></span> <span class='ocrx_word' id='word_1_564' title='bbox 1781 2344 1947 2377; x_wconf 96'><strong>operations.</strong></span> <span class='ocrx_word' id='word_1_565' title='bbox 1961 2344 1989 2371; x_wconf 96'><strong>If</strong></span> <span class='ocrx_word' id='word_1_566' title='bbox 1997 2344 2112 2376; x_wconf 96'><strong>needed,</strong></span> <span class='ocrx_word' id='word_1_567' title='bbox 2125 2345 2171 2371; x_wconf 96'><strong>the</strong></span>
<span class='ocr_line' id='line_1_65' title="bbox 347 2343 2171 2378; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_549' title='bbox 347 2350 361 2363; x_wconf 69'><strong>0</strong></span> <span class='ocrx_word' id='word_1_550' title='bbox 373 2343 483 2377; x_wconf 83'>Simple,</span> <span class='ocrx_word' id='word_1_551' title='bbox 495 2352 559 2377; x_wconf 89'>easy</span> <span class='ocrx_word' id='word_1_552' title='bbox 569 2348 598 2371; x_wconf 91'>to</span> <span class='ocrx_word' id='word_1_553' title='bbox 609 2344 683 2371; x_wconf 89'>learn</span> <span class='ocrx_word' id='word_1_554' title='bbox 694 2344 922 2378; x_wconf 80'>operation—the</span> <span class='ocrx_word' id='word_1_555' title='bbox 934 2345 967 2372; x_wconf 88'>32</span> <span class='ocrx_word' id='word_1_556' title='bbox 978 2345 1116 2372; x_wconf 86'>character</span> <span class='ocrx_word' id='word_1_557' title='bbox 1126 2345 1200 2372; x_wconf 92'>LCD</span> <span class='ocrx_word' id='word_1_558' title='bbox 1211 2345 1316 2378; x_wconf 90'>display</span> <span class='ocrx_word' id='word_1_559' title='bbox 1326 2345 1424 2378; x_wconf 88'>clearly</span> <span class='ocrx_word' id='word_1_560' title='bbox 1434 2345 1528 2378; x_wconf 86'>guides</span> <span class='ocrx_word' id='word_1_561' title='bbox 1539 2353 1594 2378; x_wconf 91'>you</span> <span class='ocrx_word' id='word_1_562' title='bbox 1604 2345 1724 2378; x_wconf 87'>through</span> <span class='ocrx_word' id='word_1_563' title='bbox 1735 2344 1770 2371; x_wconf 88'>all</span> <span class='ocrx_word' id='word_1_564' title='bbox 1781 2344 1947 2377; x_wconf 86'>operations.</span> <span class='ocrx_word' id='word_1_565' title='bbox 1961 2344 1989 2371; x_wconf 88'>If</span> <span class='ocrx_word' id='word_1_566' title='bbox 1997 2344 2112 2376; x_wconf 88'>needed,</span> <span class='ocrx_word' id='word_1_567' title='bbox 2125 2345 2171 2371; x_wconf 88'>the</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_21' title="bbox 373 2381 1083 2415">
<div class='ocr_carea' id='block_1_22' title="bbox 373 2381 1083 2415">
<p class='ocr_par' id='par_1_30' lang='eng' title="bbox 373 2381 1083 2415">
<span class='ocr_line' id='line_1_66' title="bbox 373 2381 1083 2415; baseline 0.003 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_568' title='bbox 373 2381 448 2407; x_wconf 96'><strong>HELP</strong></span> <span class='ocrx_word' id='word_1_569' title='bbox 450 2381 583 2408; x_wconf 96'><strong>button</strong></span> <span class='ocrx_word' id='word_1_570' title='bbox 594 2381 711 2415; x_wconf 96'><strong>displays</strong></span> <span class='ocrx_word' id='word_1_571' title='bbox 722 2382 875 2409; x_wconf 96'><strong>additional</strong></span> <span class='ocrx_word' id='word_1_572' title='bbox 886 2382 1083 2415; x_wconf 96'><strong>explanations.</strong></span>
<span class='ocr_line' id='line_1_66' title="bbox 373 2381 1083 2415; baseline 0.003 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_568' title='bbox 373 2381 472 2407; x_wconf 85'>HELP</span> <span class='ocrx_word' id='word_1_569' title='bbox 483 2381 583 2408; x_wconf 85'>button</span> <span class='ocrx_word' id='word_1_570' title='bbox 594 2381 711 2415; x_wconf 87'>displays</span> <span class='ocrx_word' id='word_1_571' title='bbox 722 2382 875 2409; x_wconf 89'>additional</span> <span class='ocrx_word' id='word_1_572' title='bbox 886 2382 1083 2415; x_wconf 87'>explanations.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_22' title="bbox 347 2427 2145 2507">
<div class='ocr_carea' id='block_1_23' title="bbox 347 2427 2145 2507">
<p class='ocr_par' id='par_1_31' lang='eng' title="bbox 347 2427 2145 2507">
<span class='ocr_line' id='line_1_67' title="bbox 347 2427 1468 2461; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_573' title='bbox 347 2432 361 2446; x_wconf 70'><strong>*</strong></span> <span class='ocrx_word' id='word_1_574' title='bbox 373 2427 612 2454; x_wconf 91'><strong>Non-destructive</strong></span> <span class='ocrx_word' id='word_1_575' title='bbox 622 2427 914 2461; x_wconf 89'><strong>recording—existing</strong></span> <span class='ocrx_word' id='word_1_576' title='bbox 924 2432 1002 2455; x_wconf 96'><strong>notes</strong></span> <span class='ocrx_word' id='word_1_577' title='bbox 1013 2436 1057 2455; x_wconf 96'><strong>are</strong></span> <span class='ocrx_word' id='word_1_578' title='bbox 1068 2432 1116 2455; x_wconf 96'><strong>not</strong></span> <span class='ocrx_word' id='word_1_579' title='bbox 1127 2428 1220 2455; x_wconf 96'><strong>erased</strong></span> <span class='ocrx_word' id='word_1_580' title='bbox 1231 2428 1309 2455; x_wconf 96'><strong>while</strong></span> <span class='ocrx_word' id='word_1_581' title='bbox 1319 2428 1468 2461; x_wconf 92'><strong>recording.</strong></span>
<span class='ocr_line' id='line_1_67' title="bbox 347 2427 1468 2461; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_573' title='bbox 347 2432 361 2446; x_wconf 69'><strong>0</strong></span> <span class='ocrx_word' id='word_1_574' title='bbox 373 2427 612 2454; x_wconf 88'>Non-destructive</span> <span class='ocrx_word' id='word_1_575' title='bbox 622 2427 914 2461; x_wconf 85'>recording—existing</span> <span class='ocrx_word' id='word_1_576' title='bbox 924 2432 1002 2455; x_wconf 90'>notes</span> <span class='ocrx_word' id='word_1_577' title='bbox 1013 2436 1057 2455; x_wconf 88'>are</span> <span class='ocrx_word' id='word_1_578' title='bbox 1068 2432 1116 2455; x_wconf 84'>not</span> <span class='ocrx_word' id='word_1_579' title='bbox 1127 2428 1220 2455; x_wconf 87'>erased</span> <span class='ocrx_word' id='word_1_580' title='bbox 1231 2428 1309 2455; x_wconf 91'>while</span> <span class='ocrx_word' id='word_1_581' title='bbox 1319 2428 1468 2461; x_wconf 87'>recording.</span>
</span>
<span class='ocr_line' id='line_1_68' title="bbox 347 2473 2145 2507; baseline 0.001 -8; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_582' title='bbox 347 2478 361 2492; x_wconf 70'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_583' title='bbox 372 2473 433 2500; x_wconf 93'><strong>Two</strong></span> <span class='ocrx_word' id='word_1_584' title='bbox 444 2473 689 2500; x_wconf 90'><strong>FOOTSWITCH</strong></span> <span class='ocrx_word' id='word_1_585' title='bbox 701 2474 818 2500; x_wconf 95'><strong>INPUTS</strong></span> <span class='ocrx_word' id='word_1_586' title='bbox 819 2474 894 2501; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_587' title='bbox 893 2473 939 2507; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_588' title='bbox 941 2473 1091 2507; x_wconf 96'><strong>assigned</strong></span> <span class='ocrx_word' id='word_1_589' title='bbox 1101 2478 1130 2501; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_590' title='bbox 1141 2474 1271 2507; x_wconf 96'><strong>remotely</strong></span> <span class='ocrx_word' id='word_1_591' title='bbox 1281 2473 1387 2501; x_wconf 96'><strong>control</strong></span> <span class='ocrx_word' id='word_1_592' title='bbox 1398 2482 1481 2507; x_wconf 96'><strong>many</strong></span> <span class='ocrx_word' id='word_1_593' title='bbox 1491 2473 1523 2501; x_wconf 96'><strong>of</strong></span> <span class='ocrx_word' id='word_1_594' title='bbox 1531 2474 1578 2501; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_595' title='bbox 1588 2473 1750 2506; x_wconf 96'><strong>commonly</strong></span> <span class='ocrx_word' id='word_1_596' title='bbox 1760 2473 1827 2500; x_wconf 96'><strong>used</strong></span> <span class='ocrx_word' id='word_1_597' title='bbox 1840 2473 1991 2505; x_wconf 96'><strong>functions,</strong></span> <span class='ocrx_word' id='word_1_598' title='bbox 2003 2473 2145 2507; x_wconf 96'><strong>including</strong></span>
<span class='ocr_line' id='line_1_68' title="bbox 347 2473 2145 2507; baseline 0.001 -8; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_582' title='bbox 347 2478 361 2492; x_wconf 71'><strong>0</strong></span> <span class='ocrx_word' id='word_1_583' title='bbox 372 2473 433 2500; x_wconf 90'>Two</span> <span class='ocrx_word' id='word_1_584' title='bbox 444 2473 689 2500; x_wconf 89'>FOOTSWITCH</span> <span class='ocrx_word' id='word_1_585' title='bbox 701 2474 837 2501; x_wconf 79'>INPUTS</span> <span class='ocrx_word' id='word_1_586' title='bbox 848 2481 910 2507; x_wconf 89'>may</span> <span class='ocrx_word' id='word_1_587' title='bbox 921 2473 955 2500; x_wconf 91'>be</span> <span class='ocrx_word' id='word_1_588' title='bbox 966 2473 1091 2507; x_wconf 85'>assigned</span> <span class='ocrx_word' id='word_1_589' title='bbox 1101 2478 1130 2501; x_wconf 81'>to</span> <span class='ocrx_word' id='word_1_590' title='bbox 1141 2474 1271 2507; x_wconf 84'>remotely</span> <span class='ocrx_word' id='word_1_591' title='bbox 1281 2473 1387 2501; x_wconf 86'>control</span> <span class='ocrx_word' id='word_1_592' title='bbox 1398 2482 1481 2507; x_wconf 86'>many</span> <span class='ocrx_word' id='word_1_593' title='bbox 1491 2473 1523 2501; x_wconf 90'>of</span> <span class='ocrx_word' id='word_1_594' title='bbox 1531 2474 1578 2501; x_wconf 89'>the</span> <span class='ocrx_word' id='word_1_595' title='bbox 1588 2473 1750 2506; x_wconf 82'>commonly</span> <span class='ocrx_word' id='word_1_596' title='bbox 1760 2473 1827 2500; x_wconf 88'>used</span> <span class='ocrx_word' id='word_1_597' title='bbox 1840 2473 1991 2505; x_wconf 77'>functions,</span> <span class='ocrx_word' id='word_1_598' title='bbox 2003 2473 2145 2507; x_wconf 84'>including</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_23' title="bbox 372 2510 1090 2543">
<div class='ocr_carea' id='block_1_24' title="bbox 372 2510 1090 2543">
<p class='ocr_par' id='par_1_32' lang='eng' title="bbox 372 2510 1090 2543">
<span class='ocr_line' id='line_1_69' title="bbox 372 2510 1090 2543; baseline 0.001 -6; x_size 35.625; x_descenders 8.90625; x_ascenders 8.90625"><span class='ocrx_word' id='word_1_599' title='bbox 372 2510 500 2542; x_wconf 96'><strong>ERASE,</strong></span> <span class='ocrx_word' id='word_1_600' title='bbox 513 2511 660 2542; x_wconf 92'><strong>REPEAT,</strong></span> <span class='ocrx_word' id='word_1_601' title='bbox 673 2511 883 2543; x_wconf 89'><strong>PLAY/STOP,</strong></span> <span class='ocrx_word' id='word_1_602' title='bbox 896 2519 927 2538; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_603' title='bbox 939 2511 1090 2538; x_wconf 96'><strong>LOCATE.</strong></span>
<span class='ocr_line' id='line_1_69' title="bbox 372 2510 1090 2543; baseline 0.001 -6; x_size 35.625; x_descenders 8.90625; x_ascenders 8.90625"><span class='ocrx_word' id='word_1_599' title='bbox 372 2510 500 2542; x_wconf 88'>ERASE,</span> <span class='ocrx_word' id='word_1_600' title='bbox 513 2511 660 2542; x_wconf 86'>REPEAT,</span> <span class='ocrx_word' id='word_1_601' title='bbox 673 2511 883 2543; x_wconf 80'>PLAY/STOP,</span> <span class='ocrx_word' id='word_1_602' title='bbox 896 2519 927 2538; x_wconf 90'>or</span> <span class='ocrx_word' id='word_1_603' title='bbox 939 2511 1090 2538; x_wconf 83'>LOCATE.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_24' title="bbox 347 2556 1768 2590">
<div class='ocr_carea' id='block_1_25' title="bbox 347 2556 1768 2590">
<p class='ocr_par' id='par_1_33' lang='eng' title="bbox 347 2556 1768 2590">
<span class='ocr_line' id='line_1_70' title="bbox 347 2556 1768 2590; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_604' title='bbox 347 2561 361 2575; x_wconf 86'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_605' title='bbox 372 2556 433 2583; x_wconf 85'><strong>Iwo</strong></span> <span class='ocrx_word' id='word_1_606' title='bbox 443 2556 612 2583; x_wconf 96'><strong>TRIGGER</strong></span> <span class='ocrx_word' id='word_1_607' title='bbox 623 2556 778 2584; x_wconf 96'><strong>OUTPUTS</strong></span> <span class='ocrx_word' id='word_1_608' title='bbox 780 2557 871 2590; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_609' title='bbox 881 2557 915 2584; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_610' title='bbox 925 2557 1119 2590; x_wconf 96'><strong>programmed</strong></span> <span class='ocrx_word' id='word_1_611' title='bbox 1129 2561 1158 2584; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_612' title='bbox 1169 2561 1270 2590; x_wconf 96'><strong>output</strong></span> <span class='ocrx_word' id='word_1_613' title='bbox 1281 2557 1370 2590; x_wconf 96'><strong>pulses</strong></span> <span class='ocrx_word' id='word_1_614' title='bbox 1381 2561 1409 2584; x_wconf 96'><strong>at</strong></span> <span class='ocrx_word' id='word_1_615' title='bbox 1419 2565 1472 2590; x_wconf 96'><strong>any</strong></span> <span class='ocrx_word' id='word_1_616' title='bbox 1483 2557 1598 2584; x_wconf 96'><strong>selected</strong></span> <span class='ocrx_word' id='word_1_617' title='bbox 1608 2561 1673 2584; x_wconf 97'><strong>note</strong></span> <span class='ocrx_word' id='word_1_618' title='bbox 1683 2556 1768 2583; x_wconf 96'><strong>value.</strong></span>
<span class='ocr_line' id='line_1_70' title="bbox 347 2556 1768 2590; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_604' title='bbox 347 2561 361 2575; x_wconf 71'><strong>0</strong></span> <span class='ocrx_word' id='word_1_605' title='bbox 372 2556 433 2583; x_wconf 91'>Two</span> <span class='ocrx_word' id='word_1_606' title='bbox 443 2556 612 2583; x_wconf 83'>TRIGGER</span> <span class='ocrx_word' id='word_1_607' title='bbox 623 2556 797 2584; x_wconf 84'>OUTPUTS</span> <span class='ocrx_word' id='word_1_608' title='bbox 808 2565 871 2590; x_wconf 89'>may</span> <span class='ocrx_word' id='word_1_609' title='bbox 881 2557 915 2584; x_wconf 91'>be</span> <span class='ocrx_word' id='word_1_610' title='bbox 925 2557 1119 2590; x_wconf 84'>programmed</span> <span class='ocrx_word' id='word_1_611' title='bbox 1129 2561 1158 2584; x_wconf 93'>to</span> <span class='ocrx_word' id='word_1_612' title='bbox 1169 2561 1270 2590; x_wconf 87'>output</span> <span class='ocrx_word' id='word_1_613' title='bbox 1281 2557 1370 2590; x_wconf 88'>pulses</span> <span class='ocrx_word' id='word_1_614' title='bbox 1381 2561 1409 2584; x_wconf 92'>at</span> <span class='ocrx_word' id='word_1_615' title='bbox 1419 2565 1472 2590; x_wconf 90'>any</span> <span class='ocrx_word' id='word_1_616' title='bbox 1483 2557 1598 2584; x_wconf 86'>selected</span> <span class='ocrx_word' id='word_1_617' title='bbox 1608 2561 1673 2584; x_wconf 89'>note</span> <span class='ocrx_word' id='word_1_618' title='bbox 1683 2556 1768 2583; x_wconf 89'>value.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_25' title="bbox 347 2601 1226 2635">
<div class='ocr_carea' id='block_1_26' title="bbox 347 2601 1226 2635">
<p class='ocr_par' id='par_1_34' lang='eng' title="bbox 347 2601 1226 2635">
<span class='ocr_line' id='line_1_71' title="bbox 347 2601 1226 2635; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_619' title='bbox 347 2607 361 2620; x_wconf 58'><strong>©</strong></span> <span class='ocrx_word' id='word_1_620' title='bbox 372 2601 434 2628; x_wconf 96'><strong>Will</strong></span> <span class='ocrx_word' id='word_1_621' title='bbox 445 2609 510 2634; x_wconf 96'><strong>sync</strong></span> <span class='ocrx_word' id='word_1_622' title='bbox 521 2605 549 2628; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_623' title='bbox 561 2602 690 2629; x_wconf 93'><strong>standard</strong></span> <span class='ocrx_word' id='word_1_624' title='bbox 701 2602 864 2629; x_wconf 91'><strong>LinnDrum</strong></span> <span class='ocrx_word' id='word_1_625' title='bbox 875 2610 907 2629; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_626' title='bbox 918 2602 989 2629; x_wconf 96'><strong>Linn</strong></span> <span class='ocrx_word' id='word_1_627' title='bbox 1000 2603 1069 2629; x_wconf 95'><strong>9000</strong></span> <span class='ocrx_word' id='word_1_628' title='bbox 1080 2610 1129 2635; x_wconf 96'><strong>sync</strong></span> <span class='ocrx_word' id='word_1_629' title='bbox 1131 2607 1226 2630; x_wconf 96'><strong>tone.</strong></span>
<span class='ocr_line' id='line_1_71' title="bbox 347 2601 1226 2635; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_619' title='bbox 347 2607 361 2620; x_wconf 65'><strong>0</strong></span> <span class='ocrx_word' id='word_1_620' title='bbox 372 2601 434 2628; x_wconf 88'>Will</span> <span class='ocrx_word' id='word_1_621' title='bbox 445 2609 510 2634; x_wconf 89'>sync</span> <span class='ocrx_word' id='word_1_622' title='bbox 521 2605 549 2628; x_wconf 84'>to</span> <span class='ocrx_word' id='word_1_623' title='bbox 561 2602 690 2629; x_wconf 88'>standard</span> <span class='ocrx_word' id='word_1_624' title='bbox 701 2602 864 2629; x_wconf 86'>LinnDrum</span> <span class='ocrx_word' id='word_1_625' title='bbox 875 2610 907 2629; x_wconf 91'>or</span> <span class='ocrx_word' id='word_1_626' title='bbox 918 2602 989 2629; x_wconf 89'>Linn</span> <span class='ocrx_word' id='word_1_627' title='bbox 1000 2603 1069 2629; x_wconf 90'>9000</span> <span class='ocrx_word' id='word_1_628' title='bbox 1080 2610 1145 2635; x_wconf 87'>sync</span> <span class='ocrx_word' id='word_1_629' title='bbox 1155 2607 1226 2630; x_wconf 89'>tone.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_26' title="bbox 347 2648 2100 2727">
<div class='ocr_carea' id='block_1_27' title="bbox 347 2648 2100 2727">
<p class='ocr_par' id='par_1_35' lang='eng' title="bbox 347 2648 2100 2727">
<span class='ocr_line' id='line_1_72' title="bbox 347 2648 1664 2682; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_630' title='bbox 347 2654 360 2667; x_wconf 45'><strong>©</strong></span> <span class='ocrx_word' id='word_1_631' title='bbox 372 2648 483 2675; x_wconf 95'><strong>Utilizes</strong></span> <span class='ocrx_word' id='word_1_632' title='bbox 493 2648 564 2680; x_wconf 96'><strong>ultra</strong></span> <span class='ocrx_word' id='word_1_633' title='bbox 573 2648 744 2682; x_wconf 96'><strong>high-speed,</strong></span> <span class='ocrx_word' id='word_1_634' title='bbox 757 2649 772 2676; x_wconf 95'><strong>8</strong></span> <span class='ocrx_word' id='word_1_635' title='bbox 783 2649 862 2675; x_wconf 94'><strong>MHz</strong></span> <span class='ocrx_word' id='word_1_636' title='bbox 873 2649 954 2676; x_wconf 96'><strong>80186</strong></span> <span class='ocrx_word' id='word_1_637' title='bbox 965 2649 994 2676; x_wconf 96'><strong>16</strong></span> <span class='ocrx_word' id='word_1_638' title='bbox 1004 2648 1043 2676; x_wconf 96'><strong>bit</strong></span> <span class='ocrx_word' id='word_1_639' title='bbox 1054 2653 1197 2682; x_wconf 96'><strong>computer</strong></span> <span class='ocrx_word' id='word_1_640' title='bbox 1208 2649 1350 2682; x_wconf 96'><strong>internally</strong></span> <span class='ocrx_word' id='word_1_641' title='bbox 1361 2649 1403 2676; x_wconf 96'><strong>for</strong></span> <span class='ocrx_word' id='word_1_642' title='bbox 1414 2649 1502 2676; x_wconf 96'><strong>FAST</strong></span> <span class='ocrx_word' id='word_1_643' title='bbox 1512 2648 1664 2682; x_wconf 96'><strong>operation.</strong></span>
<span class='ocr_line' id='line_1_72' title="bbox 347 2648 1664 2682; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_630' title='bbox 347 2654 360 2667; x_wconf 75'>&#39;</span> <span class='ocrx_word' id='word_1_631' title='bbox 372 2648 483 2675; x_wconf 89'>Utilizes</span> <span class='ocrx_word' id='word_1_632' title='bbox 493 2648 564 2680; x_wconf 75'>ultra</span> <span class='ocrx_word' id='word_1_633' title='bbox 573 2648 744 2682; x_wconf 86'>highspeed,</span> <span class='ocrx_word' id='word_1_634' title='bbox 757 2649 772 2676; x_wconf 91'>8</span> <span class='ocrx_word' id='word_1_635' title='bbox 783 2649 862 2675; x_wconf 89'>MHz</span> <span class='ocrx_word' id='word_1_636' title='bbox 873 2649 954 2676; x_wconf 88'>80186</span> <span class='ocrx_word' id='word_1_637' title='bbox 965 2649 994 2676; x_wconf 91'>16</span> <span class='ocrx_word' id='word_1_638' title='bbox 1004 2648 1043 2676; x_wconf 90'>bit</span> <span class='ocrx_word' id='word_1_639' title='bbox 1054 2653 1197 2682; x_wconf 88'>computer</span> <span class='ocrx_word' id='word_1_640' title='bbox 1208 2649 1350 2682; x_wconf 90'>internally</span> <span class='ocrx_word' id='word_1_641' title='bbox 1361 2649 1403 2676; x_wconf 87'>for</span> <span class='ocrx_word' id='word_1_642' title='bbox 1414 2649 1502 2676; x_wconf 87'>FAST</span> <span class='ocrx_word' id='word_1_643' title='bbox 1512 2648 1664 2682; x_wconf 81'>operation.</span>
</span>
<span class='ocr_line' id='line_1_73' title="bbox 347 2694 2100 2727; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_644' title='bbox 347 2699 361 2713; x_wconf 31'><strong>*</strong></span> <span class='ocrx_word' id='word_1_645' title='bbox 372 2694 476 2720; x_wconf 96'><strong>TEMPO</strong></span> <span class='ocrx_word' id='word_1_646' title='bbox 478 2694 562 2721; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_647' title='bbox 561 2694 606 2727; x_wconf 95'><strong>be</strong></span> <span class='ocrx_word' id='word_1_648' title='bbox 608 2694 764 2727; x_wconf 95'><strong>specified</strong></span> <span class='ocrx_word' id='word_1_649' title='bbox 774 2694 802 2721; x_wconf 93'><strong>in</strong></span> <span class='ocrx_word' id='word_1_650' title='bbox 814 2695 1172 2722; x_wconf 91'><strong>BEATS-PER-MINUTE</strong></span> <span class='ocrx_word' id='word_1_651' title='bbox 1183 2703 1215 2722; x_wconf 93'><strong>or</strong></span> <span class='ocrx_word' id='word_1_652' title='bbox 1225 2695 1547 2722; x_wconf 91'><strong>FRAMES-PER-BEAT</strong></span> <span class='ocrx_word' id='word_1_653' title='bbox 1543 2695 1605 2721; x_wconf 96'><strong>at</strong></span> <span class='ocrx_word' id='word_1_654' title='bbox 1616 2695 1659 2726; x_wconf 96'><strong>24,</strong></span> <span class='ocrx_word' id='word_1_655' title='bbox 1672 2695 1716 2726; x_wconf 96'><strong>25,</strong></span> <span class='ocrx_word' id='word_1_656' title='bbox 1728 2702 1760 2721; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_657' title='bbox 1772 2695 1806 2721; x_wconf 96'><strong>30</strong></span> <span class='ocrx_word' id='word_1_658' title='bbox 1817 2694 1917 2721; x_wconf 96'><strong>frames</strong></span> <span class='ocrx_word' id='word_1_659' title='bbox 1928 2702 1976 2727; x_wconf 96'><strong>per</strong></span> <span class='ocrx_word' id='word_1_660' title='bbox 1987 2694 2100 2726; x_wconf 96'><strong>second,</strong></span>
<span class='ocr_line' id='line_1_73' title="bbox 347 2694 2100 2727; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_644' title='bbox 347 2699 361 2713; x_wconf 70'><strong>0</strong></span> <span class='ocrx_word' id='word_1_645' title='bbox 372 2694 504 2721; x_wconf 88'>TEMPO</span> <span class='ocrx_word' id='word_1_646' title='bbox 515 2702 578 2727; x_wconf 92'>may</span> <span class='ocrx_word' id='word_1_647' title='bbox 589 2694 623 2721; x_wconf 90'>be</span> <span class='ocrx_word' id='word_1_648' title='bbox 633 2694 764 2727; x_wconf 87'>specified</span> <span class='ocrx_word' id='word_1_649' title='bbox 774 2694 802 2721; x_wconf 89'>in</span> <span class='ocrx_word' id='word_1_650' title='bbox 814 2695 1172 2722; x_wconf 84'>BEATS-PERMINUTE</span> <span class='ocrx_word' id='word_1_651' title='bbox 1183 2703 1215 2722; x_wconf 93'>or</span> <span class='ocrx_word' id='word_1_652' title='bbox 1225 2695 1567 2722; x_wconf 84'>FRAMES-PERBEAT</span> <span class='ocrx_word' id='word_1_653' title='bbox 1577 2698 1605 2721; x_wconf 89'>at</span> <span class='ocrx_word' id='word_1_654' title='bbox 1616 2695 1659 2726; x_wconf 91'>24,</span> <span class='ocrx_word' id='word_1_655' title='bbox 1672 2695 1716 2726; x_wconf 88'>25,</span> <span class='ocrx_word' id='word_1_656' title='bbox 1728 2702 1760 2721; x_wconf 90'>or</span> <span class='ocrx_word' id='word_1_657' title='bbox 1772 2695 1806 2721; x_wconf 88'>30</span> <span class='ocrx_word' id='word_1_658' title='bbox 1817 2694 1917 2721; x_wconf 86'>frames</span> <span class='ocrx_word' id='word_1_659' title='bbox 1928 2702 1976 2727; x_wconf 89'>per</span> <span class='ocrx_word' id='word_1_660' title='bbox 1987 2694 2100 2726; x_wconf 87'>second,</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_27' title="bbox 373 2731 652 2765">
<div class='ocr_carea' id='block_1_28' title="bbox 373 2731 652 2765">
<p class='ocr_par' id='par_1_36' lang='eng' title="bbox 373 2731 652 2765">
<span class='ocr_line' id='line_1_74' title="bbox 373 2731 652 2765; baseline 0 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_661' title='bbox 373 2731 449 2764; x_wconf 96'><strong>(even</strong></span> <span class='ocrx_word' id='word_1_662' title='bbox 460 2731 529 2765; x_wconf 95'><strong>drop</strong></span> <span class='ocrx_word' id='word_1_663' title='bbox 541 2731 652 2764; x_wconf 95'><strong>frame!)</strong></span>
<span class='ocr_line' id='line_1_74' title="bbox 373 2731 652 2765; baseline 0 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_661' title='bbox 373 2731 449 2764; x_wconf 87'>(even</span> <span class='ocrx_word' id='word_1_662' title='bbox 460 2731 529 2765; x_wconf 88'>drop</span> <span class='ocrx_word' id='word_1_663' title='bbox 541 2731 652 2764; x_wconf 81'>frame!)</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_28' title="bbox 347 2777 2174 2811">
<div class='ocr_carea' id='block_1_29' title="bbox 347 2777 2174 2811">
<p class='ocr_par' id='par_1_37' lang='eng' title="bbox 347 2777 2174 2811">
<span class='ocr_line' id='line_1_75' title="bbox 347 2777 2174 2811; baseline 0.001 -8; x_size 33; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_664' title='bbox 347 2782 360 2796; x_wconf 81'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_665' title='bbox 372 2777 476 2803; x_wconf 94'><strong>TEMPO</strong></span> <span class='ocrx_word' id='word_1_666' title='bbox 478 2777 562 2804; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_667' title='bbox 561 2777 622 2810; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_668' title='bbox 633 2778 741 2804; x_wconf 95'><strong>entered</strong></span> <span class='ocrx_word' id='word_1_669' title='bbox 751 2777 934 2811; x_wconf 96'><strong>numerically,</strong></span> <span class='ocrx_word' id='word_1_670' title='bbox 946 2777 1101 2811; x_wconf 95'><strong>adjustable</strong></span> <span class='ocrx_word' id='word_1_671' title='bbox 1111 2777 1139 2804; x_wconf 95'><strong>in</strong></span> <span class='ocrx_word' id='word_1_672' title='bbox 1149 2778 1239 2805; x_wconf 96'><strong>tenths</strong></span> <span class='ocrx_word' id='word_1_673' title='bbox 1250 2778 1282 2805; x_wconf 96'><strong>of</strong></span> <span class='ocrx_word' id='word_1_674' title='bbox 1290 2786 1307 2805; x_wconf 91'><strong>a</strong></span> <span class='ocrx_word' id='word_1_675' title='bbox 1317 2777 1567 2805; x_wconf 91'><strong>Beat-Per-Minute</strong></span> <span class='ocrx_word' id='word_1_676' title='bbox 1577 2777 1748 2809; x_wconf 96'><strong>increments,</strong></span> <span class='ocrx_word' id='word_1_677' title='bbox 1760 2785 1792 2804; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_678' title='bbox 1803 2777 1839 2810; x_wconf 96'><strong>by</strong></span> <span class='ocrx_word' id='word_1_679' title='bbox 1849 2777 1964 2811; x_wconf 96'><strong>tapping</strong></span> <span class='ocrx_word' id='word_1_680' title='bbox 1975 2781 2086 2810; x_wconf 96'><strong>quarter</strong></span> <span class='ocrx_word' id='word_1_681' title='bbox 2097 2781 2174 2804; x_wconf 96'><strong>notes</strong></span>
<span class='ocr_line' id='line_1_75' title="bbox 347 2777 2174 2811; baseline 0.001 -8; x_size 33; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_664' title='bbox 347 2782 360 2796; x_wconf 72'><strong>0</strong></span> <span class='ocrx_word' id='word_1_665' title='bbox 372 2777 504 2804; x_wconf 82'>TEMPO</span> <span class='ocrx_word' id='word_1_666' title='bbox 515 2785 578 2810; x_wconf 91'>may</span> <span class='ocrx_word' id='word_1_667' title='bbox 588 2777 622 2804; x_wconf 92'>be</span> <span class='ocrx_word' id='word_1_668' title='bbox 633 2778 741 2804; x_wconf 84'>entered</span> <span class='ocrx_word' id='word_1_669' title='bbox 751 2777 934 2811; x_wconf 80'>numerically,</span> <span class='ocrx_word' id='word_1_670' title='bbox 946 2777 1101 2811; x_wconf 85'>adjustable</span> <span class='ocrx_word' id='word_1_671' title='bbox 1111 2777 1139 2804; x_wconf 92'>in</span> <span class='ocrx_word' id='word_1_672' title='bbox 1149 2778 1239 2805; x_wconf 88'>tenths</span> <span class='ocrx_word' id='word_1_673' title='bbox 1250 2778 1282 2805; x_wconf 85'>of</span> <span class='ocrx_word' id='word_1_674' title='bbox 1290 2786 1307 2805; x_wconf 94'>a</span> <span class='ocrx_word' id='word_1_675' title='bbox 1317 2777 1567 2805; x_wconf 85'>Beat-Per-Minute</span> <span class='ocrx_word' id='word_1_676' title='bbox 1577 2777 1748 2809; x_wconf 85'>increments,</span> <span class='ocrx_word' id='word_1_677' title='bbox 1760 2785 1792 2804; x_wconf 87'>or</span> <span class='ocrx_word' id='word_1_678' title='bbox 1803 2777 1839 2810; x_wconf 94'>by</span> <span class='ocrx_word' id='word_1_679' title='bbox 1849 2777 1964 2811; x_wconf 84'>tapping</span> <span class='ocrx_word' id='word_1_680' title='bbox 1975 2781 2086 2810; x_wconf 85'>quarter</span> <span class='ocrx_word' id='word_1_681' title='bbox 2097 2781 2174 2804; x_wconf 85'>notes</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_29' title="bbox 372 2815 808 2842">
<div class='ocr_carea' id='block_1_30' title="bbox 372 2815 808 2842">
<p class='ocr_par' id='par_1_38' lang='eng' title="bbox 372 2815 808 2842">
<span class='ocr_line' id='line_1_76' title="bbox 372 2815 808 2842; baseline 0.002 -1; x_size 32.351353; x_descenders 5.3513513; x_ascenders 9"><span class='ocrx_word' id='word_1_682' title='bbox 372 2822 410 2841; x_wconf 96'><strong>on</strong></span> <span class='ocrx_word' id='word_1_683' title='bbox 420 2815 466 2842; x_wconf 95'><strong>the</strong></span> <span class='ocrx_word' id='word_1_684' title='bbox 476 2815 545 2841; x_wconf 95'><strong>TAP</strong></span> <span class='ocrx_word' id='word_1_685' title='bbox 556 2816 660 2842; x_wconf 95'><strong>TEMPO</strong></span> <span class='ocrx_word' id='word_1_686' title='bbox 662 2815 808 2842; x_wconf 96'><strong>button.</strong></span>
<span class='ocr_line' id='line_1_76' title="bbox 372 2815 808 2842; baseline 0.002 -1; x_size 32.351353; x_descenders 5.3513513; x_ascenders 9"><span class='ocrx_word' id='word_1_682' title='bbox 372 2822 410 2841; x_wconf 93'>on</span> <span class='ocrx_word' id='word_1_683' title='bbox 420 2815 466 2842; x_wconf 86'>the</span> <span class='ocrx_word' id='word_1_684' title='bbox 476 2815 545 2841; x_wconf 91'>TAP</span> <span class='ocrx_word' id='word_1_685' title='bbox 556 2815 689 2842; x_wconf 85'>TEMPO</span> <span class='ocrx_word' id='word_1_686' title='bbox 699 2815 808 2842; x_wconf 83'>button.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_30' title="bbox 347 2861 1792 2940">
<div class='ocr_carea' id='block_1_31' title="bbox 347 2861 1792 2940">
<p class='ocr_par' id='par_1_39' lang='eng' title="bbox 347 2861 1792 2940">
<span class='ocr_line' id='line_1_77' title="bbox 347 2861 1792 2895; baseline 0.001 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_687' title='bbox 347 2866 360 2880; x_wconf 43'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_688' title='bbox 372 2861 504 2887; x_wconf 96'><strong>TEMPO</strong></span> <span class='ocrx_word' id='word_1_689' title='bbox 515 2861 677 2888; x_wconf 96'><strong>CHANGES</strong></span> <span class='ocrx_word' id='word_1_690' title='bbox 679 2861 771 2894; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_691' title='bbox 781 2861 815 2888; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_692' title='bbox 825 2869 1000 2894; x_wconf 96'><strong>programmed</strong></span> <span class='ocrx_word' id='word_1_693' title='bbox 1001 2861 1087 2888; x_wconf 96'><strong>into</strong></span> <span class='ocrx_word' id='word_1_694' title='bbox 1099 2869 1115 2888; x_wconf 95'><strong>a</strong></span> <span class='ocrx_word' id='word_1_695' title='bbox 1126 2870 1268 2895; x_wconf 96'><strong>sequence,</strong></span> <span class='ocrx_word' id='word_1_696' title='bbox 1280 2861 1344 2888; x_wconf 96'><strong>with</strong></span> <span class='ocrx_word' id='word_1_697' title='bbox 1356 2866 1448 2888; x_wconf 95'><strong>smooth</strong></span> <span class='ocrx_word' id='word_1_698' title='bbox 1450 2861 1635 2888; x_wconf 96'><strong>transitions</strong></span> <span class='ocrx_word' id='word_1_699' title='bbox 1646 2861 1670 2887; x_wconf 96'><strong>if</strong></span> <span class='ocrx_word' id='word_1_700' title='bbox 1679 2861 1792 2888; x_wconf 87'><strong>desired.</strong></span>
<span class='ocr_line' id='line_1_77' title="bbox 347 2861 1792 2895; baseline 0.001 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_687' title='bbox 347 2866 360 2880; x_wconf 68'><strong>0</strong></span> <span class='ocrx_word' id='word_1_688' title='bbox 372 2861 504 2887; x_wconf 87'>TEMPO</span> <span class='ocrx_word' id='word_1_689' title='bbox 515 2861 696 2888; x_wconf 86'>CHANGES</span> <span class='ocrx_word' id='word_1_690' title='bbox 707 2869 771 2894; x_wconf 92'>may</span> <span class='ocrx_word' id='word_1_691' title='bbox 781 2861 815 2888; x_wconf 92'>be</span> <span class='ocrx_word' id='word_1_692' title='bbox 825 2861 1019 2894; x_wconf 85'>programmed</span> <span class='ocrx_word' id='word_1_693' title='bbox 1030 2861 1087 2888; x_wconf 88'>into</span> <span class='ocrx_word' id='word_1_694' title='bbox 1099 2869 1115 2888; x_wconf 87'>a</span> <span class='ocrx_word' id='word_1_695' title='bbox 1126 2870 1268 2895; x_wconf 87'>sequence,</span> <span class='ocrx_word' id='word_1_696' title='bbox 1280 2861 1344 2888; x_wconf 89'>with</span> <span class='ocrx_word' id='word_1_697' title='bbox 1356 2862 1467 2888; x_wconf 88'>smooth</span> <span class='ocrx_word' id='word_1_698' title='bbox 1478 2861 1635 2888; x_wconf 85'>transitions</span> <span class='ocrx_word' id='word_1_699' title='bbox 1646 2861 1670 2887; x_wconf 90'>if</span> <span class='ocrx_word' id='word_1_700' title='bbox 1679 2861 1792 2888; x_wconf 89'>desired.</span>
</span>
<span class='ocr_line' id='line_1_78' title="bbox 347 2906 1507 2940; baseline 0.002 -8; x_size 33; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_701' title='bbox 347 2911 360 2925; x_wconf 69'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_702' title='bbox 371 2906 434 2938; x_wconf 96'><strong>Any</strong></span> <span class='ocrx_word' id='word_1_703' title='bbox 444 2906 539 2932; x_wconf 96'><strong>TIME</strong></span> <span class='ocrx_word' id='word_1_704' title='bbox 550 2906 739 2933; x_wconf 96'><strong>SIGNATURE</strong></span> <span class='ocrx_word' id='word_1_705' title='bbox 740 2907 820 2933; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_706' title='bbox 819 2907 880 2939; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_707' title='bbox 891 2907 968 2938; x_wconf 96'><strong>used,</strong></span> <span class='ocrx_word' id='word_1_708' title='bbox 980 2907 1036 2934; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_709' title='bbox 1046 2915 1109 2940; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_710' title='bbox 1120 2907 1154 2934; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_711' title='bbox 1164 2907 1288 2940; x_wconf 96'><strong>changed</strong></span> <span class='ocrx_word' id='word_1_712' title='bbox 1299 2907 1393 2934; x_wconf 95'><strong>within</strong></span> <span class='ocrx_word' id='word_1_713' title='bbox 1404 2915 1420 2934; x_wconf 95'><strong>a</strong></span> <span class='ocrx_word' id='word_1_714' title='bbox 1431 2915 1507 2940; x_wconf 96'><strong>song.</strong></span>
<span class='ocr_line' id='line_1_78' title="bbox 347 2906 1507 2940; baseline 0.002 -8; x_size 33; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_701' title='bbox 347 2911 360 2925; x_wconf 74'><strong><em>°</em></strong></span> <span class='ocrx_word' id='word_1_702' title='bbox 371 2906 434 2938; x_wconf 92'>Any</span> <span class='ocrx_word' id='word_1_703' title='bbox 444 2906 539 2932; x_wconf 85'>TIME</span> <span class='ocrx_word' id='word_1_704' title='bbox 550 2906 763 2933; x_wconf 88'>SIGNATURE</span> <span class='ocrx_word' id='word_1_705' title='bbox 773 2915 836 2939; x_wconf 88'>may</span> <span class='ocrx_word' id='word_1_706' title='bbox 846 2907 880 2933; x_wconf 91'>be</span> <span class='ocrx_word' id='word_1_707' title='bbox 891 2907 968 2938; x_wconf 89'>used,</span> <span class='ocrx_word' id='word_1_708' title='bbox 980 2907 1036 2934; x_wconf 89'>and</span> <span class='ocrx_word' id='word_1_709' title='bbox 1046 2915 1109 2940; x_wconf 91'>may</span> <span class='ocrx_word' id='word_1_710' title='bbox 1120 2907 1154 2934; x_wconf 90'>be</span> <span class='ocrx_word' id='word_1_711' title='bbox 1164 2907 1288 2940; x_wconf 84'>changed</span> <span class='ocrx_word' id='word_1_712' title='bbox 1299 2907 1393 2934; x_wconf 83'>within</span> <span class='ocrx_word' id='word_1_713' title='bbox 1404 2915 1420 2934; x_wconf 89'>a</span> <span class='ocrx_word' id='word_1_714' title='bbox 1431 2915 1507 2940; x_wconf 87'>song.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_31' title="bbox 1540 2970 1878 3140">
<div class='ocr_carea' id='block_1_32' title="bbox 1540 2970 1878 3140">
<p class='ocr_par' id='par_1_40' lang='eng' title="bbox 1540 2970 1878 3140">
<span class='ocr_line' id='line_1_79' title="bbox 1540 2970 1800 3089; baseline 0 -14; x_size 100.5; x_descenders 16.5; x_ascenders 28.499998"><span class='ocrx_word' id='word_1_715' title='bbox 1540 2970 1800 3089; x_wconf 92'><strong>linn</strong></span>
<span class='ocr_line' id='line_1_79' title="bbox 1540 2970 1800 3089; baseline 0 -14; x_size 100.5; x_descenders 16.5; x_ascenders 28.499998"><span class='ocrx_word' id='word_1_715' title='bbox 1540 2970 1800 3089; x_wconf 74'>E1111</span>
</span>
<span class='ocr_line' id='line_1_80' title="bbox 1554 3108 1878 3140; baseline 0 -5; x_size 32; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_716' title='bbox 1554 3108 1624 3135; x_wconf 96'><strong>Linn</strong></span> <span class='ocrx_word' id='word_1_717' title='bbox 1635 3108 1808 3140; x_wconf 96'><strong>Electronics,</strong></span> <span class='ocrx_word' id='word_1_718' title='bbox 1822 3109 1878 3136; x_wconf 95'><strong>Inc.</strong></span>
<span class='ocr_line' id='line_1_80' title="bbox 1554 3108 1878 3140; baseline 0 -5; x_size 32; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_716' title='bbox 1554 3108 1624 3135; x_wconf 91'>Linn</span> <span class='ocrx_word' id='word_1_717' title='bbox 1635 3108 1808 3140; x_wconf 87'>Electronics,</span> <span class='ocrx_word' id='word_1_718' title='bbox 1822 3109 1878 3136; x_wconf 84'>Inc.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_32' title="bbox 1554 3150 2188 3226">
<div class='ocr_carea' id='block_1_33' title="bbox 1554 3150 2188 3226">
<p class='ocr_par' id='par_1_41' lang='eng' title="bbox 1554 3150 2188 3226">
<span class='ocr_line' id='line_1_81' title="bbox 1557 3150 2163 3182; baseline 0 -5; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_719' title='bbox 1557 3150 1638 3177; x_wconf 95'><strong>18720</strong></span> <span class='ocrx_word' id='word_1_720' title='bbox 1648 3150 1761 3177; x_wconf 96'><strong>Oxnard</strong></span> <span class='ocrx_word' id='word_1_721' title='bbox 1772 3150 1866 3182; x_wconf 96'><strong>Street,</strong></span> <span class='ocrx_word' id='word_1_722' title='bbox 1878 3150 2006 3182; x_wconf 96'><strong>Tarzana,</strong></span> <span class='ocrx_word' id='word_1_723' title='bbox 2019 3150 2071 3177; x_wconf 95'><strong>CA</strong></span> <span class='ocrx_word' id='word_1_724' title='bbox 2082 3150 2163 3177; x_wconf 96'><strong>91356</strong></span>
<span class='ocr_line' id='line_1_81' title="bbox 1557 3150 2163 3182; baseline 0 -5; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_719' title='bbox 1557 3150 1638 3177; x_wconf 88'>18720</span> <span class='ocrx_word' id='word_1_720' title='bbox 1648 3150 1761 3177; x_wconf 89'>Oxnard</span> <span class='ocrx_word' id='word_1_721' title='bbox 1772 3150 1866 3182; x_wconf 81'>Street,</span> <span class='ocrx_word' id='word_1_722' title='bbox 1878 3150 2006 3182; x_wconf 86'>Tarzana,</span> <span class='ocrx_word' id='word_1_723' title='bbox 2019 3150 2071 3177; x_wconf 93'>CA</span> <span class='ocrx_word' id='word_1_724' title='bbox 2082 3150 2163 3177; x_wconf 88'>91356</span>
</span>
<span class='ocr_line' id='line_1_82' title="bbox 1554 3192 2188 3226; baseline 0 -7; x_size 33.5; x_descenders 5.5; x_ascenders 8.5"><span class='ocrx_word' id='word_1_725' title='bbox 1554 3193 1622 3226; x_wconf 96'><strong>(818)</strong></span> <span class='ocrx_word' id='word_1_726' title='bbox 1633 3193 1755 3219; x_wconf 95'><strong>708-8131</strong></span> <span class='ocrx_word' id='word_1_727' title='bbox 1765 3193 1888 3219; x_wconf 95'><strong>TELEX</strong></span> <span class='ocrx_word' id='word_1_728' title='bbox 1899 3192 2022 3219; x_wconf 95'><strong>#298949</strong></span> <span class='ocrx_word' id='word_1_729' title='bbox 2033 3193 2125 3219; x_wconf 95'><strong>LINN</strong></span> <span class='ocrx_word' id='word_1_730' title='bbox 2135 3193 2188 3219; x_wconf 96'><strong>UR</strong></span>
<span class='ocr_line' id='line_1_82' title="bbox 1554 3192 2188 3226; baseline 0 -7; x_size 33.5; x_descenders 5.5; x_ascenders 8.5"><span class='ocrx_word' id='word_1_725' title='bbox 1554 3193 1622 3226; x_wconf 89'>(818)</span> <span class='ocrx_word' id='word_1_726' title='bbox 1633 3193 1755 3219; x_wconf 60'>7088131</span> <span class='ocrx_word' id='word_1_727' title='bbox 1765 3193 1788 3219; x_wconf 91'>T</span> <span class='ocrx_word' id='word_1_728' title='bbox 1789 3193 1888 3219; x_wconf 87'>ELEX</span> <span class='ocrx_word' id='word_1_729' title='bbox 1899 3192 2022 3219; x_wconf 82'>#298949</span> <span class='ocrx_word' id='word_1_730' title='bbox 2033 3193 2125 3219; x_wconf 88'>LINN</span> <span class='ocrx_word' id='word_1_731' title='bbox 2135 3193 2188 3219; x_wconf 89'>UR</span>
</span>
</p>
</div>
@@ -1 +1 @@
Tesseract Open Source OCR Engine v4.0.0-beta.1 with Leptonica
Tesseract Open Source OCR Engine v3.05.01 with Leptonica
@@ -1,51 +1,51 @@
The LinnSequencer
32 Track MIDI Sequence Recorder
The LinnSequencer is a state-of-the-art composition and performance tool for the professional musician. It is
The LinnSequencer is a stateofthe-art composition and performance tool for the professional musician. It is
extremely powerful, yet amazingly simple to learn and use. Its many remarkable features include:
¢ Operation is similar to multi-track tape recorder with PLAY, STOP, RECORD, FAST
0 Operation is similar to multitrack tape recorder with PLAY, STOP, RECORD, FAST
FORWARD, REWIND, and LOCATE controls.
e Each of the 100 sequences contains 32 simultaneous, polyphonic tracks. Each track may
0 Each of the 100 sequences contains 32 simultaneous, polyphonic tracks. Each track may
be assigned to one of 16 MIDI channels. Simultaneously plays up to 16 polyphonic
synthesizers!
synthesizers !
¢ Ultra-fast 3%” disk drive stores complex songs in seconds and holds over 110,000 notes
0 Ultrafast 3 1/2 ” disk drive stores complex songs in seconds and holds over 110,000 notes
per disk!
¢ One or all tracks may be TRANSPOSED at the touch of a key.
e Exclusive real-time ERASE function makes editing FAST.
* Exclusive REPEAT function automatically repeats any held notes at a pre-selected
0 One or all tracks may be TRANSPOSED at the touch of a key.
0 Exclusive realtime ERASE function makes editing FAST.
0 Exclusive REPEAT function automatically repeats any held notes at a pre-selected
rhythmic value.
¢ TIMING CORRECTION works during playback and operates without chopping notes.
0 TIMING CORRECTION works during playback and operates without chopping notes.
¢ Optional SMPTE time code synchronization.
0 Optional SMPTE time code synchronization.
© Optional remote control.
0 Optional remote control.
Recording a Sequence
Recording 3 Sequence
To record a sequence, simply press RECORD and PLAY,
then play your MIDI keyboard in time to the Sequencers
click track. When the sequence loops back around to bar 1,
you ll hear what you played—only all timing errors will be
youll hear what you played—only all timing errors will be
corrected! (Timing correction may be adjusted or defeated).
Any additional notes played will be added into the track
existing notes are not erased while recording!
—existing notes are not erased while recording!
FAST FORWARD, REWIND, and LOCATE controls
may be used at any time to quickly access any location in
your sequence for spot-recording. To overdub a new part,
select a different track and start recordingwhile you
record, the first track will play in perfect sync (unless you
your sequence for spotrecording. To overdub a new part,
select a different track and start recording~while you
record, the rsttrack will play in perfect sync (unless you
MUTE it, or SOLO another track). In this way, up to 32
tracks may be overdubbed! All MIDI effects are recorded
including pitch bend, modulation, velocity, aftertouch,
@@ -58,7 +58,7 @@ the note to be erased just before it plays in the sequence—
when played back, it will be gone. Notes may also be
added, erased, or changed using the SINGLE STEP func-
tion. To overdub notes at specific points within a sequence,
tion. To overdub notes at specic points within a sequence,
Additional Features
@@ -70,7 +70,7 @@ from one location to another—in the same sequence or a
different one. For example, you might insert a copy of the
first verse between the second chorus and the bridge.
DELETE BARS operates the same way to remove
unwanted sections,
unwanted sections.
Creating a Song
@@ -90,34 +90,34 @@ the LinnSequencer is designed to let you compose, record
and edit while devoting your undivided attention to your
music. See your Linn dealer today for a demonstration!
* Simple, easy to learn operation—the 32 character LCD display clearly guides you through all operations. If needed, the
0 Simple, easy to learn operation—the 32 character LCD display clearly guides you through all operations. If needed, the
HELP button displays additional explanations.
* Non-destructive recording—existing notes are not erased while recording.
¢ Two FOOTSWITCH INPUTS may be assigned to remotely control many of the commonly used functions, including
0 Non-destructive recording—existing notes are not erased while recording.
0 Two FOOTSWITCH INPUTS may be assigned to remotely control many of the commonly used functions, including
ERASE, REPEAT, PLAY/STOP, or LOCATE.
¢ Iwo TRIGGER OUTPUTS may be programmed to output pulses at any selected note value.
0 Two TRIGGER OUTPUTS may be programmed to output pulses at any selected note value.
© Will sync to standard LinnDrum or Linn 9000 sync tone.
0 Will sync to standard LinnDrum or Linn 9000 sync tone.
© Utilizes ultra high-speed, 8 MHz 80186 16 bit computer internally for FAST operation.
* TEMPO may be specified in BEATS-PER-MINUTE or FRAMES-PER-BEAT at 24, 25, or 30 frames per second,
' Utilizes ultra highspeed, 8 MHz 80186 16 bit computer internally for FAST operation.
0 TEMPO may be specified in BEATS-PERMINUTE or FRAMES-PERBEAT at 24, 25, or 30 frames per second,
(even drop frame!)
¢ TEMPO may be entered numerically, adjustable in tenths of a Beat-Per-Minute increments, or by tapping quarter notes
0 TEMPO may be entered numerically, adjustable in tenths of a Beat-Per-Minute increments, or by tapping quarter notes
on the TAP TEMPO button.
¢ TEMPO CHANGES may be programmed into a sequence, with smooth transitions if desired.
¢ Any TIME SIGNATURE may be used, and may be changed within a song.
0 TEMPO CHANGES may be programmed into a sequence, with smooth transitions if desired.
° Any TIME SIGNATURE may be used, and may be changed within a song.
linn
E1111
Linn Electronics, Inc.
18720 Oxnard Street, Tarzana, CA 91356
(818) 708-8131 TELEX #298949 LINN UR
(818) 7088131 T ELEX #298949 LINN UR
@@ -0,0 +1 @@
Tesseract Open Source OCR Engine v3.05.01 with Leptonica
@@ -0,0 +1,123 @@
The LinnSequencer
32 Track MIDI Sequence Recorder
The LinnSequencer is a state—of—the-art composition and performance tool for the professional musician. It is
extremely powerful, yet amazingly simple to learn and use. Its many remarkable features include:
0 Operation is similar to multi—track tape recorder with PLAY, STOP, RECORD, FAST
FORWARD, REWIND, and LOCATE controls.
0 Each of the 100 sequences contains 32 simultaneous, polyphonic tracks. Each track may
be assigned to one of 16 MIDI channels. Simultaneously plays up to 16 polyphonic
synthesizers !
0 Ultra—fast 3 1/2 ” disk drive stores complex songs in seconds and holds over 110,000 notes
per disk!
0 One or all tracks may be TRANSPOSED at the touch of a key.
0 Exclusive real—time ERASE function makes editing FAST.
0 Exclusive REPEAT function automatically repeats any held notes at a pre-selected
rhythmic value.
0 TIMING CORRECTION works during playback and operates without chopping notes.
0 Optional SMPTE time code synchronization.
0 Optional remote control.
Recording 3 Sequence
To record a sequence, simply press RECORD and PLAY,
then play your MIDI keyboard in time to the Sequencers
click track. When the sequence loops back around to bar 1,
youll hear what you played—only all timing errors will be
corrected! (Timing correction may be adjusted or defeated).
Any additional notes played will be added into the track
—existing notes are not erased while recording!
FAST FORWARD, REWIND, and LOCATE controls
may be used at any time to quickly access any location in
your sequence for spot—recording. To overdub a new part,
select a different track and start recording~while you
record, the firsttrack will play in perfect sync (unless you
MUTE it, or SOLO another track). In this way, up to 32
tracks may be overdubbed! All MIDI effects are recorded
including pitch bend, modulation, velocity, aftertouch,
sustain pedal, and program changes!
Editing
To erase a wrong note, simply hold ERASE and press
the note to be erased just before it plays in the sequence—
when played back, it will be gone. Notes may also be
added, erased, or changed using the SINGLE STEP func-
tion. To overdub notes at specific points within a sequence,
Additional Features
simply use LOCATE, FAST FORWARD, or REWIND to
find the desired bar number, then start recording.
The INSERT/COPY function allows you to move bars
from one location to another—in the same sequence or a
different one. For example, you might insert a copy of the
first verse between the second chorus and the bridge.
DELETE BARS operates the same way to remove
unwanted sections.
Creating a Song
One way to create a song is to record each track all the
way through (up to 999 bars). Another way is to record
each basic section (verse, chorus, etc.) in individual
sequences, then use the CREATE SONG function to “chain”
them together. CREATE SONG will then automatically
copy all the parts into a new sequence. If desired, you can
even set the last few bars to repeat infinitely, for a fadeout.
Composition Without Compromise
The technology you use should never be so complex that
it interferes with the creative process. Thats precisely why
the LinnSequencer is designed to let you compose, record
and edit while devoting your undivided attention to your
music. See your Linn dealer today for a demonstration!
0 Simple, easy to learn operation—the 32 character LCD display clearly guides you through all operations. If needed, the
HELP button displays additional explanations.
0 Non-destructive recording—existing notes are not erased while recording.
0 Two FOOTSWITCH INPUTS may be assigned to remotely control many of the commonly used functions, including
ERASE, REPEAT, PLAY/STOP, or LOCATE.
0 Two TRIGGER OUTPUTS may be programmed to output pulses at any selected note value.
0 Will sync to standard LinnDrum or Linn 9000 sync tone.
' Utilizes ultra high—speed, 8 MHz 80186 16 bit computer internally for FAST operation.
0 TEMPO may be specified in BEATS-PER—MINUTE or FRAMES-PER—BEAT at 24, 25, or 30 frames per second,
(even drop frame!)
0 TEMPO may be entered numerically, adjustable in tenths of a Beat-Per-Minute increments, or by tapping quarter notes
on the TAP TEMPO button.
0 TEMPO CHANGES may be programmed into a sequence, with smooth transitions if desired.
° Any TIME SIGNATURE may be used, and may be changed within a song.
E1111
Linn Electronics, Inc.
18720 Oxnard Street, Tarzana, CA 91356
(818) 7088131 T ELEX #298949 LINN UR
@@ -5,328 +5,328 @@
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name='ocr-system' content='tesseract 4.0.0-beta.1' />
<meta name='ocr-system' content='tesseract 3.05.01' />
<meta name='ocr-capabilities' content='ocr_page ocr_carea ocr_par ocr_line ocrx_word'/>
</head>
<body>
<div class='ocr_page' id='page_1' title='image "/var/folders/37/78_114p552q16vv6vmgm5kr00000gn/T/com.github.ocrmypdf.im0i09rj/000003.ocr.png"; bbox 0 0 2550 3300; ppageno 0'>
<div class='ocr_page' id='page_1' title='image "/var/folders/37/78_114p552q16vv6vmgm5kr00000gn/T/com.github.ocrmypdf.wahjk6fa/000003.ocr.png"; bbox 0 0 2550 3300; ppageno 0'>
<div class='ocr_carea' id='block_1_1' title="bbox 582 131 1968 303">
<p class='ocr_par' id='par_1_1' lang='eng' title="bbox 582 131 1968 303">
<span class='ocr_line' id='line_1_1' title="bbox 882 131 1657 217; baseline 0.001 -17; x_size 85; x_descenders 16; x_ascenders 19"><span class='ocrx_word' id='word_1_1' title='bbox 882 132 1036 202; x_wconf 93'><strong>The</strong></span> <span class='ocrx_word' id='word_1_2' title='bbox 1061 131 1657 217; x_wconf 91'><strong>LinnSequencer</strong></span>
<span class='ocr_line' id='line_1_1' title="bbox 882 131 1657 217; baseline 0.001 -17; x_size 85; x_descenders 16; x_ascenders 19"><span class='ocrx_word' id='word_1_1' title='bbox 882 132 1036 202; x_wconf 86'>The</span> <span class='ocrx_word' id='word_1_2' title='bbox 1061 131 1657 217; x_wconf 84'>LinnSequencer</span>
</span>
<span class='ocr_line' id='line_1_2' title="bbox 582 215 1968 303; baseline 0 -17; x_size 87; x_descenders 16; x_ascenders 21"><span class='ocrx_word' id='word_1_3' title='bbox 582 215 674 286; x_wconf 96'><strong>32</strong></span> <span class='ocrx_word' id='word_1_4' title='bbox 697 218 923 288; x_wconf 95'><strong>Track</strong></span> <span class='ocrx_word' id='word_1_5' title='bbox 948 218 1181 287; x_wconf 96'><strong>MIDI</strong></span> <span class='ocrx_word' id='word_1_6' title='bbox 1208 217 1575 303; x_wconf 96'><strong>Sequence</strong></span> <span class='ocrx_word' id='word_1_7' title='bbox 1600 218 1968 288; x_wconf 96'><strong>Recorder</strong></span>
<span class='ocr_line' id='line_1_2' title="bbox 582 215 1968 303; baseline 0 -17; x_size 87; x_descenders 16; x_ascenders 21"><span class='ocrx_word' id='word_1_3' title='bbox 582 215 674 286; x_wconf 90'>32</span> <span class='ocrx_word' id='word_1_4' title='bbox 697 218 923 288; x_wconf 84'>Track</span> <span class='ocrx_word' id='word_1_5' title='bbox 948 218 1181 287; x_wconf 94'><strong>MIDI</strong></span> <span class='ocrx_word' id='word_1_6' title='bbox 1208 217 1575 303; x_wconf 89'>Sequence</span> <span class='ocrx_word' id='word_1_7' title='bbox 1600 218 1968 288; x_wconf 83'>Recorder</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_2' title="bbox 347 380 2188 574">
<p class='ocr_par' id='par_1_2' lang='eng' title="bbox 347 380 2188 423">
<span class='ocr_line' id='line_1_3' title="bbox 347 380 2188 423; baseline -0.001 -12; x_size 38; x_descenders 8; x_ascenders 10"><span class='ocrx_word' id='word_1_8' title='bbox 347 380 412 410; x_wconf 93'><strong>The</strong></span> <span class='ocrx_word' id='word_1_9' title='bbox 424 380 661 417; x_wconf 92'><strong>LinnSequencer</strong></span> <span class='ocrx_word' id='word_1_10' title='bbox 663 380 712 411; x_wconf 96'><strong>is</strong></span> <span class='ocrx_word' id='word_1_11' title='bbox 724 390 743 411; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_12' title='bbox 754 381 1005 423; x_wconf 96'><strong>state-of-the-art</strong></span> <span class='ocrx_word' id='word_1_13' title='bbox 1017 380 1226 418; x_wconf 96'><strong>composition</strong></span> <span class='ocrx_word' id='word_1_14' title='bbox 1238 381 1299 411; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_15' title='bbox 1311 380 1507 418; x_wconf 96'><strong>performance</strong></span> <span class='ocrx_word' id='word_1_16' title='bbox 1509 385 1591 411; x_wconf 96'><strong>tool</strong></span> <span class='ocrx_word' id='word_1_17' title='bbox 1593 380 1663 411; x_wconf 97'><strong>for</strong></span> <span class='ocrx_word' id='word_1_18' title='bbox 1674 381 1725 410; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_19' title='bbox 1737 380 1940 417; x_wconf 95'><strong>professional</strong></span> <span class='ocrx_word' id='word_1_20' title='bbox 1952 380 2103 411; x_wconf 96'><strong>musician.</strong></span> <span class='ocrx_word' id='word_1_21' title='bbox 2106 381 2152 410; x_wconf 96'><strong>It</strong></span> <span class='ocrx_word' id='word_1_22' title='bbox 2164 380 2188 410; x_wconf 96'><strong>is</strong></span>
<span class='ocr_line' id='line_1_3' title="bbox 347 380 2188 423; baseline -0.001 -12; x_size 38; x_descenders 8; x_ascenders 10"><span class='ocrx_word' id='word_1_8' title='bbox 347 380 412 410; x_wconf 86'>The</span> <span class='ocrx_word' id='word_1_9' title='bbox 424 380 676 417; x_wconf 85'>LinnSequencer</span> <span class='ocrx_word' id='word_1_10' title='bbox 688 380 712 411; x_wconf 87'>is</span> <span class='ocrx_word' id='word_1_11' title='bbox 724 390 743 411; x_wconf 90'>a</span> <span class='ocrx_word' id='word_1_12' title='bbox 754 381 1005 423; x_wconf 79'>stateofthe-art</span> <span class='ocrx_word' id='word_1_13' title='bbox 1017 380 1226 418; x_wconf 86'>composition</span> <span class='ocrx_word' id='word_1_14' title='bbox 1238 381 1299 411; x_wconf 88'>and</span> <span class='ocrx_word' id='word_1_15' title='bbox 1311 380 1525 418; x_wconf 85'>performance</span> <span class='ocrx_word' id='word_1_16' title='bbox 1536 380 1602 411; x_wconf 85'>tool</span> <span class='ocrx_word' id='word_1_17' title='bbox 1615 380 1663 411; x_wconf 82'>for</span> <span class='ocrx_word' id='word_1_18' title='bbox 1674 381 1725 410; x_wconf 94'>the</span> <span class='ocrx_word' id='word_1_19' title='bbox 1737 380 1940 417; x_wconf 85'>professional</span> <span class='ocrx_word' id='word_1_20' title='bbox 1952 380 2112 411; x_wconf 87'>musician.</span> <span class='ocrx_word' id='word_1_21' title='bbox 2127 381 2152 410; x_wconf 90'>It</span> <span class='ocrx_word' id='word_1_22' title='bbox 2164 380 2188 410; x_wconf 90'>is</span>
</span>
</p>
<p class='ocr_par' id='par_1_3' lang='eng' title="bbox 347 430 1988 468">
<span class='ocr_line' id='line_1_4' title="bbox 347 430 1988 468; baseline 0 -8; x_size 37; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_23' title='bbox 347 430 507 467; x_wconf 96'><strong>extremely</strong></span> <span class='ocrx_word' id='word_1_24' title='bbox 518 430 677 467; x_wconf 96'><strong>powerful,</strong></span> <span class='ocrx_word' id='word_1_25' title='bbox 691 435 739 467; x_wconf 96'><strong>yet</strong></span> <span class='ocrx_word' id='word_1_26' title='bbox 752 430 924 468; x_wconf 96'><strong>amazingly</strong></span> <span class='ocrx_word' id='word_1_27' title='bbox 936 430 1044 468; x_wconf 96'><strong>simple</strong></span> <span class='ocrx_word' id='word_1_28' title='bbox 1055 435 1087 461; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_29' title='bbox 1099 431 1183 461; x_wconf 96'><strong>learn</strong></span> <span class='ocrx_word' id='word_1_30' title='bbox 1195 431 1257 461; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_31' title='bbox 1269 440 1329 461; x_wconf 95'><strong>use.</strong></span> <span class='ocrx_word' id='word_1_32' title='bbox 1344 431 1393 461; x_wconf 96'><strong>Its</strong></span> <span class='ocrx_word' id='word_1_33' title='bbox 1406 440 1499 467; x_wconf 96'><strong>many</strong></span> <span class='ocrx_word' id='word_1_34' title='bbox 1510 430 1701 461; x_wconf 96'><strong>remarkable</strong></span> <span class='ocrx_word' id='word_1_35' title='bbox 1714 430 1843 460; x_wconf 96'><strong>features</strong></span> <span class='ocrx_word' id='word_1_36' title='bbox 1856 430 1988 461; x_wconf 96'><strong>include:</strong></span>
<span class='ocr_line' id='line_1_4' title="bbox 347 430 1988 468; baseline 0 -8; x_size 37; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_23' title='bbox 347 430 507 467; x_wconf 86'>extremely</span> <span class='ocrx_word' id='word_1_24' title='bbox 518 430 677 467; x_wconf 84'>powerful,</span> <span class='ocrx_word' id='word_1_25' title='bbox 691 435 739 467; x_wconf 91'>yet</span> <span class='ocrx_word' id='word_1_26' title='bbox 752 430 924 468; x_wconf 87'>amazingly</span> <span class='ocrx_word' id='word_1_27' title='bbox 936 430 1044 468; x_wconf 85'>simple</span> <span class='ocrx_word' id='word_1_28' title='bbox 1055 435 1087 461; x_wconf 87'>to</span> <span class='ocrx_word' id='word_1_29' title='bbox 1099 431 1183 461; x_wconf 88'>learn</span> <span class='ocrx_word' id='word_1_30' title='bbox 1195 431 1257 461; x_wconf 90'>and</span> <span class='ocrx_word' id='word_1_31' title='bbox 1269 440 1329 461; x_wconf 89'>use.</span> <span class='ocrx_word' id='word_1_32' title='bbox 1344 431 1393 461; x_wconf 87'>Its</span> <span class='ocrx_word' id='word_1_33' title='bbox 1406 440 1499 467; x_wconf 91'>many</span> <span class='ocrx_word' id='word_1_34' title='bbox 1510 430 1701 461; x_wconf 88'>remarkable</span> <span class='ocrx_word' id='word_1_35' title='bbox 1714 430 1843 460; x_wconf 85'>features</span> <span class='ocrx_word' id='word_1_36' title='bbox 1856 430 1988 461; x_wconf 87'>include:</span>
</span>
</p>
<p class='ocr_par' id='par_1_4' lang='eng' title="bbox 350 482 2093 574">
<span class='ocr_line' id='line_1_5' title="bbox 350 482 2093 527; baseline 0 -9; x_size 43; x_descenders 7; x_ascenders 11"><span class='ocrx_word' id='word_1_37' title='bbox 350 490 368 508; x_wconf 73'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_38' title='bbox 383 482 585 526; x_wconf 95'><strong>Operation</strong></span> <span class='ocrx_word' id='word_1_39' title='bbox 598 482 627 518; x_wconf 96'><strong>is</strong></span> <span class='ocrx_word' id='word_1_40' title='bbox 641 482 776 518; x_wconf 96'><strong>similar</strong></span> <span class='ocrx_word' id='word_1_41' title='bbox 789 488 829 518; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_42' title='bbox 843 482 1062 519; x_wconf 96'><strong>multi-track</strong></span> <span class='ocrx_word' id='word_1_43' title='bbox 1076 488 1160 527; x_wconf 96'><strong>tape</strong></span> <span class='ocrx_word' id='word_1_44' title='bbox 1173 483 1336 519; x_wconf 96'><strong>recorder</strong></span> <span class='ocrx_word' id='word_1_45' title='bbox 1350 482 1436 518; x_wconf 96'><strong>with</strong></span> <span class='ocrx_word' id='word_1_46' title='bbox 1451 483 1580 525; x_wconf 95'><strong>PLAY,</strong></span> <span class='ocrx_word' id='word_1_47' title='bbox 1598 483 1724 525; x_wconf 96'><strong>STOP,</strong></span> <span class='ocrx_word' id='word_1_48' title='bbox 1741 483 1957 525; x_wconf 96'><strong>RECORD,</strong></span> <span class='ocrx_word' id='word_1_49' title='bbox 1974 483 2093 518; x_wconf 96'><strong>FAST</strong></span>
<span class='ocr_line' id='line_1_5' title="bbox 350 482 2093 527; baseline 0 -9; x_size 43; x_descenders 7; x_ascenders 11"><span class='ocrx_word' id='word_1_37' title='bbox 350 490 368 508; x_wconf 68'><strong>0</strong></span> <span class='ocrx_word' id='word_1_38' title='bbox 383 482 585 526; x_wconf 88'>Operation</span> <span class='ocrx_word' id='word_1_39' title='bbox 598 482 627 518; x_wconf 89'>is</span> <span class='ocrx_word' id='word_1_40' title='bbox 641 482 776 518; x_wconf 88'>similar</span> <span class='ocrx_word' id='word_1_41' title='bbox 789 488 829 518; x_wconf 88'>to</span> <span class='ocrx_word' id='word_1_42' title='bbox 843 482 1062 519; x_wconf 86'>multitrack</span> <span class='ocrx_word' id='word_1_43' title='bbox 1076 488 1160 527; x_wconf 92'>tape</span> <span class='ocrx_word' id='word_1_44' title='bbox 1173 483 1336 519; x_wconf 88'>recorder</span> <span class='ocrx_word' id='word_1_45' title='bbox 1350 482 1436 518; x_wconf 87'>with</span> <span class='ocrx_word' id='word_1_46' title='bbox 1451 483 1580 525; x_wconf 90'>PLAY,</span> <span class='ocrx_word' id='word_1_47' title='bbox 1598 483 1724 525; x_wconf 90'>STOP,</span> <span class='ocrx_word' id='word_1_48' title='bbox 1741 483 1957 525; x_wconf 89'>RECORD,</span> <span class='ocrx_word' id='word_1_49' title='bbox 1974 483 2093 518; x_wconf 88'>FAST</span>
</span>
<span class='ocr_line' id='line_1_6' title="bbox 383 532 1345 574; baseline 0.001 -7; x_size 43; x_descenders 7; x_ascenders 11"><span class='ocrx_word' id='word_1_50' title='bbox 383 532 635 574; x_wconf 96'><strong>FORWARD,</strong></span> <span class='ocrx_word' id='word_1_51' title='bbox 652 532 865 574; x_wconf 95'><strong>REWIND,</strong></span> <span class='ocrx_word' id='word_1_52' title='bbox 882 532 956 568; x_wconf 95'><strong>and</strong></span> <span class='ocrx_word' id='word_1_53' title='bbox 971 532 1131 568; x_wconf 95'><strong>LOCATE</strong></span> <span class='ocrx_word' id='word_1_54' title='bbox 1132 532 1345 568; x_wconf 95'><strong>controls.</strong></span>
<span class='ocr_line' id='line_1_6' title="bbox 383 532 1345 574; baseline 0.001 -7; x_size 43; x_descenders 7; x_ascenders 11"><span class='ocrx_word' id='word_1_50' title='bbox 383 532 635 574; x_wconf 88'>FORWARD,</span> <span class='ocrx_word' id='word_1_51' title='bbox 652 532 865 574; x_wconf 89'>REWIND,</span> <span class='ocrx_word' id='word_1_52' title='bbox 882 532 956 568; x_wconf 91'>and</span> <span class='ocrx_word' id='word_1_53' title='bbox 971 532 1163 568; x_wconf 90'>LOCATE</span> <span class='ocrx_word' id='word_1_54' title='bbox 1177 532 1345 568; x_wconf 87'>controls.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_3' title="bbox 349 589 2136 685">
<p class='ocr_par' id='par_1_5' lang='eng' title="bbox 349 589 2136 685">
<span class='ocr_line' id='line_1_7' title="bbox 349 589 2136 634; baseline 0.001 -9; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_55' title='bbox 349 597 368 615; x_wconf 59'><strong>e</strong></span> <span class='ocrx_word' id='word_1_56' title='bbox 383 590 482 625; x_wconf 96'><strong>Each</strong></span> <span class='ocrx_word' id='word_1_57' title='bbox 496 589 539 625; x_wconf 96'><strong>of</strong></span> <span class='ocrx_word' id='word_1_58' title='bbox 549 590 611 626; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_59' title='bbox 625 590 686 625; x_wconf 96'><strong>100</strong></span> <span class='ocrx_word' id='word_1_60' title='bbox 700 601 895 634; x_wconf 96'><strong>sequences</strong></span> <span class='ocrx_word' id='word_1_61' title='bbox 909 590 1075 626; x_wconf 96'><strong>contains</strong></span> <span class='ocrx_word' id='word_1_62' title='bbox 1090 591 1135 626; x_wconf 96'><strong>32</strong></span> <span class='ocrx_word' id='word_1_63' title='bbox 1149 590 1418 633; x_wconf 96'><strong>simultaneous,</strong></span> <span class='ocrx_word' id='word_1_64' title='bbox 1435 590 1661 634; x_wconf 96'><strong>polyphonic</strong></span> <span class='ocrx_word' id='word_1_65' title='bbox 1674 590 1802 626; x_wconf 96'><strong>tracks.</strong></span> <span class='ocrx_word' id='word_1_66' title='bbox 1819 590 1921 626; x_wconf 96'><strong>Each</strong></span> <span class='ocrx_word' id='word_1_67' title='bbox 1934 590 2035 626; x_wconf 96'><strong>track</strong></span> <span class='ocrx_word' id='word_1_68' title='bbox 2050 600 2136 634; x_wconf 96'><strong>may</strong></span>
<span class='ocr_line' id='line_1_7' title="bbox 349 589 2136 634; baseline 0.001 -9; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_55' title='bbox 349 597 368 615; x_wconf 67'><strong>0</strong></span> <span class='ocrx_word' id='word_1_56' title='bbox 383 590 482 625; x_wconf 90'>Each</span> <span class='ocrx_word' id='word_1_57' title='bbox 496 589 539 625; x_wconf 87'>of</span> <span class='ocrx_word' id='word_1_58' title='bbox 549 590 611 626; x_wconf 92'>the</span> <span class='ocrx_word' id='word_1_59' title='bbox 625 590 686 625; x_wconf 91'>100</span> <span class='ocrx_word' id='word_1_60' title='bbox 700 601 895 634; x_wconf 89'>sequences</span> <span class='ocrx_word' id='word_1_61' title='bbox 909 590 1075 626; x_wconf 88'>contains</span> <span class='ocrx_word' id='word_1_62' title='bbox 1090 591 1135 626; x_wconf 89'>32</span> <span class='ocrx_word' id='word_1_63' title='bbox 1149 590 1418 633; x_wconf 87'>simultaneous,</span> <span class='ocrx_word' id='word_1_64' title='bbox 1435 590 1661 634; x_wconf 89'>polyphonic</span> <span class='ocrx_word' id='word_1_65' title='bbox 1674 590 1802 626; x_wconf 85'>tracks.</span> <span class='ocrx_word' id='word_1_66' title='bbox 1819 590 1921 626; x_wconf 89'>Each</span> <span class='ocrx_word' id='word_1_67' title='bbox 1934 590 2035 626; x_wconf 88'>track</span> <span class='ocrx_word' id='word_1_68' title='bbox 2050 600 2136 634; x_wconf 89'>may</span>
</span>
<span class='ocr_line' id='line_1_8' title="bbox 383 639 2022 685; baseline 0.001 -10; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_69' title='bbox 383 639 428 675; x_wconf 95'><strong>be</strong></span> <span class='ocrx_word' id='word_1_70' title='bbox 442 639 607 684; x_wconf 95'><strong>assigned</strong></span> <span class='ocrx_word' id='word_1_71' title='bbox 621 645 659 676; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_72' title='bbox 674 650 745 676; x_wconf 96'><strong>one</strong></span> <span class='ocrx_word' id='word_1_73' title='bbox 759 640 801 676; x_wconf 96'><strong>of</strong></span> <span class='ocrx_word' id='word_1_74' title='bbox 813 641 851 676; x_wconf 96'><strong>16</strong></span> <span class='ocrx_word' id='word_1_75' title='bbox 864 641 980 675; x_wconf 96'><strong>MIDI</strong></span> <span class='ocrx_word' id='word_1_76' title='bbox 996 640 1176 676; x_wconf 95'><strong>channels.</strong></span> <span class='ocrx_word' id='word_1_77' title='bbox 1194 640 1498 684; x_wconf 96'><strong>Simultaneously</strong></span> <span class='ocrx_word' id='word_1_78' title='bbox 1510 640 1609 685; x_wconf 96'><strong>plays</strong></span> <span class='ocrx_word' id='word_1_79' title='bbox 1624 651 1674 684; x_wconf 96'><strong>up</strong></span> <span class='ocrx_word' id='word_1_80' title='bbox 1688 645 1727 676; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_81' title='bbox 1742 641 1780 676; x_wconf 96'><strong>16</strong></span> <span class='ocrx_word' id='word_1_82' title='bbox 1794 640 2022 684; x_wconf 96'><strong>polyphonic</strong></span>
<span class='ocr_line' id='line_1_8' title="bbox 383 639 2022 685; baseline 0.001 -10; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_69' title='bbox 383 639 428 675; x_wconf 95'>be</span> <span class='ocrx_word' id='word_1_70' title='bbox 442 639 607 684; x_wconf 88'>assigned</span> <span class='ocrx_word' id='word_1_71' title='bbox 621 645 659 676; x_wconf 92'>to</span> <span class='ocrx_word' id='word_1_72' title='bbox 674 650 745 676; x_wconf 91'>one</span> <span class='ocrx_word' id='word_1_73' title='bbox 759 640 801 676; x_wconf 84'>of</span> <span class='ocrx_word' id='word_1_74' title='bbox 813 641 851 676; x_wconf 92'>16</span> <span class='ocrx_word' id='word_1_75' title='bbox 864 641 980 675; x_wconf 90'>MIDI</span> <span class='ocrx_word' id='word_1_76' title='bbox 996 640 1176 676; x_wconf 88'>channels.</span> <span class='ocrx_word' id='word_1_77' title='bbox 1194 640 1498 684; x_wconf 90'>Simultaneously</span> <span class='ocrx_word' id='word_1_78' title='bbox 1510 640 1609 685; x_wconf 90'>plays</span> <span class='ocrx_word' id='word_1_79' title='bbox 1624 651 1674 684; x_wconf 91'>up</span> <span class='ocrx_word' id='word_1_80' title='bbox 1688 645 1727 676; x_wconf 90'>to</span> <span class='ocrx_word' id='word_1_81' title='bbox 1742 641 1780 676; x_wconf 94'>16</span> <span class='ocrx_word' id='word_1_82' title='bbox 1794 640 2022 684; x_wconf 87'>polyphonic</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_4' title="bbox 384 689 632 734">
<p class='ocr_par' id='par_1_6' lang='eng' title="bbox 384 689 632 734">
<span class='ocr_line' id='line_1_9' title="bbox 384 689 632 734; baseline 0.004 -9; x_size 46; x_descenders 9; x_ascenders 12"><span class='ocrx_word' id='word_1_83' title='bbox 384 689 632 734; x_wconf 96'><strong>synthesizers!</strong></span>
<span class='ocr_line' id='line_1_9' title="bbox 384 689 632 734; baseline 0.004 -9; x_size 46; x_descenders 9; x_ascenders 12"><span class='ocrx_word' id='word_1_83' title='bbox 384 689 618 734; x_wconf 84'>synthesizers</span> <span class='ocrx_word' id='word_1_84' title='bbox 625 690 632 726; x_wconf 85'><strong>!</strong></span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_5' title="bbox 349 748 2117 793">
<p class='ocr_par' id='par_1_7' lang='eng' title="bbox 349 748 2117 793">
<span class='ocr_line' id='line_1_10' title="bbox 349 748 2117 793; baseline 0 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_84' title='bbox 349 755 367 774; x_wconf 58'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_85' title='bbox 383 748 573 784; x_wconf 91'><strong>Ultra-fast</strong></span> <span class='ocrx_word' id='word_1_86' title='bbox 588 749 677 784; x_wconf 22'><strong>3%”</strong></span> <span class='ocrx_word' id='word_1_87' title='bbox 694 748 775 784; x_wconf 96'><strong>disk</strong></span> <span class='ocrx_word' id='word_1_88' title='bbox 790 748 887 784; x_wconf 96'><strong>drive</strong></span> <span class='ocrx_word' id='word_1_89' title='bbox 901 754 1012 785; x_wconf 96'><strong>stores</strong></span> <span class='ocrx_word' id='word_1_90' title='bbox 1027 748 1194 793; x_wconf 96'><strong>complex</strong></span> <span class='ocrx_word' id='word_1_91' title='bbox 1208 760 1316 793; x_wconf 96'><strong>songs</strong></span> <span class='ocrx_word' id='word_1_92' title='bbox 1330 748 1368 784; x_wconf 96'><strong>in</strong></span> <span class='ocrx_word' id='word_1_93' title='bbox 1382 748 1535 785; x_wconf 96'><strong>seconds</strong></span> <span class='ocrx_word' id='word_1_94' title='bbox 1550 748 1624 784; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_95' title='bbox 1638 748 1728 784; x_wconf 96'><strong>holds</strong></span> <span class='ocrx_word' id='word_1_96' title='bbox 1730 759 1844 784; x_wconf 96'><strong>over</strong></span> <span class='ocrx_word' id='word_1_97' title='bbox 1859 749 2000 791; x_wconf 96'><strong>110,000</strong></span> <span class='ocrx_word' id='word_1_98' title='bbox 2013 753 2117 784; x_wconf 96'><strong>notes</strong></span>
<span class='ocr_line' id='line_1_10' title="bbox 349 748 2117 793; baseline 0 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_85' title='bbox 349 755 367 774; x_wconf 66'><strong>0</strong></span> <span class='ocrx_word' id='word_1_86' title='bbox 383 748 573 784; x_wconf 87'>Ultrafast</span> <span class='ocrx_word' id='word_1_87' title='bbox 588 749 606 784; x_wconf 90'>3</span> <span class='ocrx_word' id='word_1_88' title='bbox 616 749 652 784; x_wconf 86'>1/2</span> <span class='ocrx_word' id='word_1_89' title='bbox 663 749 677 764; x_wconf 87'><em>”</em></span> <span class='ocrx_word' id='word_1_90' title='bbox 694 748 775 784; x_wconf 91'>disk</span> <span class='ocrx_word' id='word_1_91' title='bbox 790 748 887 784; x_wconf 89'>drive</span> <span class='ocrx_word' id='word_1_92' title='bbox 901 754 1012 785; x_wconf 85'>stores</span> <span class='ocrx_word' id='word_1_93' title='bbox 1027 748 1194 793; x_wconf 87'>complex</span> <span class='ocrx_word' id='word_1_94' title='bbox 1208 760 1316 793; x_wconf 87'>songs</span> <span class='ocrx_word' id='word_1_95' title='bbox 1330 748 1368 784; x_wconf 87'>in</span> <span class='ocrx_word' id='word_1_96' title='bbox 1382 748 1535 785; x_wconf 87'>seconds</span> <span class='ocrx_word' id='word_1_97' title='bbox 1550 748 1624 784; x_wconf 89'>and</span> <span class='ocrx_word' id='word_1_98' title='bbox 1638 748 1746 784; x_wconf 87'>holds</span> <span class='ocrx_word' id='word_1_99' title='bbox 1761 759 1844 784; x_wconf 85'>over</span> <span class='ocrx_word' id='word_1_100' title='bbox 1859 749 2000 791; x_wconf 88'>110,000</span> <span class='ocrx_word' id='word_1_101' title='bbox 2013 753 2117 784; x_wconf 89'>notes</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_6' title="bbox 383 797 554 842">
<p class='ocr_par' id='par_1_8' lang='eng' title="bbox 383 797 554 842">
<span class='ocr_line' id='line_1_11' title="bbox 383 797 554 842; baseline 0 -8; x_size 45; x_descenders 8; x_ascenders 12"><span class='ocrx_word' id='word_1_99' title='bbox 383 808 446 842; x_wconf 96'><strong>per</strong></span> <span class='ocrx_word' id='word_1_100' title='bbox 459 797 554 834; x_wconf 96'><strong>disk!</strong></span>
<span class='ocr_line' id='line_1_11' title="bbox 383 797 554 842; baseline 0 -8; x_size 45; x_descenders 8; x_ascenders 12"><span class='ocrx_word' id='word_1_102' title='bbox 383 808 446 842; x_wconf 82'>per</span> <span class='ocrx_word' id='word_1_103' title='bbox 459 797 554 834; x_wconf 86'>disk!</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_7' title="bbox 349 855 2030 1016">
<p class='ocr_par' id='par_1_9' lang='eng' title="bbox 349 855 2030 1016">
<span class='ocr_line' id='line_1_12' title="bbox 350 855 1638 900; baseline 0.001 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_101' title='bbox 350 863 367 881; x_wconf 45'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_102' title='bbox 383 856 444 891; x_wconf 95'><strong>One</strong></span> <span class='ocrx_word' id='word_1_103' title='bbox 445 866 502 891; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_104' title='bbox 503 855 580 891; x_wconf 96'><strong>all</strong></span> <span class='ocrx_word' id='word_1_105' title='bbox 594 856 712 892; x_wconf 95'><strong>tracks</strong></span> <span class='ocrx_word' id='word_1_106' title='bbox 726 867 811 900; x_wconf 95'><strong>may</strong></span> <span class='ocrx_word' id='word_1_107' title='bbox 823 856 869 892; x_wconf 81'><strong>be</strong></span> <span class='ocrx_word' id='word_1_108' title='bbox 882 856 1175 892; x_wconf 96'><strong>TRANSPOSED</strong></span> <span class='ocrx_word' id='word_1_109' title='bbox 1178 857 1264 892; x_wconf 96'><strong>at</strong></span> <span class='ocrx_word' id='word_1_110' title='bbox 1277 856 1338 892; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_111' title='bbox 1351 856 1463 892; x_wconf 96'><strong>touch</strong></span> <span class='ocrx_word' id='word_1_112' title='bbox 1477 867 1501 892; x_wconf 96'><strong>of</strong></span> <span class='ocrx_word' id='word_1_113' title='bbox 1502 856 1554 892; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_114' title='bbox 1568 856 1638 900; x_wconf 96'><strong>key.</strong></span>
<span class='ocr_line' id='line_1_12' title="bbox 350 855 1638 900; baseline 0.001 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_104' title='bbox 350 863 367 881; x_wconf 71'><strong>0</strong></span> <span class='ocrx_word' id='word_1_105' title='bbox 383 856 464 891; x_wconf 90'>One</span> <span class='ocrx_word' id='word_1_106' title='bbox 478 866 520 891; x_wconf 87'>or</span> <span class='ocrx_word' id='word_1_107' title='bbox 534 855 580 891; x_wconf 88'>all</span> <span class='ocrx_word' id='word_1_108' title='bbox 594 856 712 892; x_wconf 89'>tracks</span> <span class='ocrx_word' id='word_1_109' title='bbox 726 867 811 900; x_wconf 90'>may</span> <span class='ocrx_word' id='word_1_110' title='bbox 823 856 869 892; x_wconf 88'>be</span> <span class='ocrx_word' id='word_1_111' title='bbox 882 856 1212 892; x_wconf 90'>TRANSPOSED</span> <span class='ocrx_word' id='word_1_112' title='bbox 1227 861 1264 892; x_wconf 90'>at</span> <span class='ocrx_word' id='word_1_113' title='bbox 1277 856 1338 892; x_wconf 85'>the</span> <span class='ocrx_word' id='word_1_114' title='bbox 1351 856 1463 892; x_wconf 90'>touch</span> <span class='ocrx_word' id='word_1_115' title='bbox 1477 856 1520 892; x_wconf 89'>of</span> <span class='ocrx_word' id='word_1_116' title='bbox 1531 867 1554 892; x_wconf 90'>a</span> <span class='ocrx_word' id='word_1_117' title='bbox 1568 856 1638 900; x_wconf 89'>key.</span>
</span>
<span class='ocr_line' id='line_1_13' title="bbox 350 913 1535 958; baseline 0.001 -9; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_115' title='bbox 350 921 367 939; x_wconf 45'><strong>e</strong></span> <span class='ocrx_word' id='word_1_116' title='bbox 383 913 568 950; x_wconf 96'><strong>Exclusive</strong></span> <span class='ocrx_word' id='word_1_117' title='bbox 581 913 756 950; x_wconf 96'><strong>real-time</strong></span> <span class='ocrx_word' id='word_1_118' title='bbox 769 914 929 950; x_wconf 96'><strong>ERASE</strong></span> <span class='ocrx_word' id='word_1_119' title='bbox 944 914 1114 950; x_wconf 96'><strong>function</strong></span> <span class='ocrx_word' id='word_1_120' title='bbox 1128 914 1251 950; x_wconf 96'><strong>makes</strong></span> <span class='ocrx_word' id='word_1_121' title='bbox 1266 914 1400 958; x_wconf 96'><strong>editing</strong></span> <span class='ocrx_word' id='word_1_122' title='bbox 1414 915 1535 950; x_wconf 95'><strong>FAST.</strong></span>
<span class='ocr_line' id='line_1_13' title="bbox 350 913 1535 958; baseline 0.001 -9; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_118' title='bbox 350 921 367 939; x_wconf 70'><strong>0</strong></span> <span class='ocrx_word' id='word_1_119' title='bbox 383 913 568 950; x_wconf 84'>Exclusive</span> <span class='ocrx_word' id='word_1_120' title='bbox 581 913 756 950; x_wconf 87'>realtime</span> <span class='ocrx_word' id='word_1_121' title='bbox 769 914 929 950; x_wconf 91'>ERASE</span> <span class='ocrx_word' id='word_1_122' title='bbox 944 914 1114 950; x_wconf 87'>function</span> <span class='ocrx_word' id='word_1_123' title='bbox 1128 914 1251 950; x_wconf 88'>makes</span> <span class='ocrx_word' id='word_1_124' title='bbox 1266 914 1400 958; x_wconf 87'>editing</span> <span class='ocrx_word' id='word_1_125' title='bbox 1414 915 1535 950; x_wconf 91'>FAST.</span>
</span>
<span class='ocr_line' id='line_1_14' title="bbox 349 971 2030 1016; baseline 0.001 -10; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_123' title='bbox 349 979 367 997; x_wconf 0'><strong>*</strong></span> <span class='ocrx_word' id='word_1_124' title='bbox 382 971 568 1007; x_wconf 95'><strong>Exclusive</strong></span> <span class='ocrx_word' id='word_1_125' title='bbox 582 972 773 1007; x_wconf 96'><strong>REPEAT</strong></span> <span class='ocrx_word' id='word_1_126' title='bbox 787 972 958 1008; x_wconf 96'><strong>function</strong></span> <span class='ocrx_word' id='word_1_127' title='bbox 971 972 1245 1016; x_wconf 95'><strong>automatically</strong></span> <span class='ocrx_word' id='word_1_128' title='bbox 1258 977 1396 1016; x_wconf 96'><strong>repeats</strong></span> <span class='ocrx_word' id='word_1_129' title='bbox 1410 983 1481 1016; x_wconf 96'><strong>any</strong></span> <span class='ocrx_word' id='word_1_130' title='bbox 1493 972 1578 1008; x_wconf 96'><strong>held</strong></span> <span class='ocrx_word' id='word_1_131' title='bbox 1592 977 1694 1008; x_wconf 96'><strong>notes</strong></span> <span class='ocrx_word' id='word_1_132' title='bbox 1709 977 1746 1008; x_wconf 96'><strong>at</strong></span> <span class='ocrx_word' id='word_1_133' title='bbox 1760 982 1783 1008; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_134' title='bbox 1796 972 2030 1016; x_wconf 96'><strong>pre-selected</strong></span>
<span class='ocr_line' id='line_1_14' title="bbox 349 971 2030 1016; baseline 0.001 -10; x_size 44; x_descenders 8; x_ascenders 11"><span class='ocrx_word' id='word_1_126' title='bbox 349 979 367 997; x_wconf 67'><strong>0</strong></span> <span class='ocrx_word' id='word_1_127' title='bbox 382 971 568 1007; x_wconf 83'>Exclusive</span> <span class='ocrx_word' id='word_1_128' title='bbox 582 972 773 1007; x_wconf 87'>REPEAT</span> <span class='ocrx_word' id='word_1_129' title='bbox 787 972 958 1008; x_wconf 86'>function</span> <span class='ocrx_word' id='word_1_130' title='bbox 971 972 1245 1016; x_wconf 89'>automatically</span> <span class='ocrx_word' id='word_1_131' title='bbox 1258 977 1396 1016; x_wconf 90'>repeats</span> <span class='ocrx_word' id='word_1_132' title='bbox 1410 983 1481 1016; x_wconf 88'>any</span> <span class='ocrx_word' id='word_1_133' title='bbox 1493 972 1578 1008; x_wconf 91'>held</span> <span class='ocrx_word' id='word_1_134' title='bbox 1592 977 1694 1008; x_wconf 91'>notes</span> <span class='ocrx_word' id='word_1_135' title='bbox 1709 977 1746 1008; x_wconf 85'>at</span> <span class='ocrx_word' id='word_1_136' title='bbox 1760 982 1783 1008; x_wconf 89'>a</span> <span class='ocrx_word' id='word_1_137' title='bbox 1796 972 2030 1016; x_wconf 87'>pre-selected</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_8' title="bbox 382 1021 689 1065">
<p class='ocr_par' id='par_1_10' lang='eng' title="bbox 382 1021 689 1065">
<span class='ocr_line' id='line_1_15' title="bbox 382 1021 689 1065; baseline 0.003 -8; x_size 45; x_descenders 8; x_ascenders 12"><span class='ocrx_word' id='word_1_135' title='bbox 382 1021 564 1065; x_wconf 96'><strong>rhythmic</strong></span> <span class='ocrx_word' id='word_1_136' title='bbox 577 1021 689 1058; x_wconf 96'><strong>value.</strong></span>
<span class='ocr_line' id='line_1_15' title="bbox 382 1021 689 1065; baseline 0.003 -8; x_size 45; x_descenders 8; x_ascenders 12"><span class='ocrx_word' id='word_1_138' title='bbox 382 1021 564 1065; x_wconf 87'>rhythmic</span> <span class='ocrx_word' id='word_1_139' title='bbox 577 1021 689 1058; x_wconf 86'>value.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_9' title="bbox 349 1080 2174 1125">
<p class='ocr_par' id='par_1_11' lang='eng' title="bbox 349 1080 2174 1125">
<span class='ocr_line' id='line_1_16' title="bbox 349 1080 2174 1125; baseline 0.001 -11; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_137' title='bbox 349 1087 367 1105; x_wconf 80'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_138' title='bbox 382 1080 567 1115; x_wconf 95'><strong>TIMING</strong></span> <span class='ocrx_word' id='word_1_139' title='bbox 582 1080 870 1116; x_wconf 95'><strong>CORRECTION</strong></span> <span class='ocrx_word' id='word_1_140' title='bbox 872 1080 1041 1116; x_wconf 96'><strong>works</strong></span> <span class='ocrx_word' id='word_1_141' title='bbox 1056 1080 1186 1124; x_wconf 96'><strong>during</strong></span> <span class='ocrx_word' id='word_1_142' title='bbox 1199 1080 1378 1124; x_wconf 96'><strong>playback</strong></span> <span class='ocrx_word' id='word_1_143' title='bbox 1392 1080 1466 1116; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_144' title='bbox 1480 1085 1644 1124; x_wconf 96'><strong>operates</strong></span> <span class='ocrx_word' id='word_1_145' title='bbox 1658 1080 1814 1116; x_wconf 96'><strong>without</strong></span> <span class='ocrx_word' id='word_1_146' title='bbox 1831 1080 2044 1125; x_wconf 95'><strong>chopping</strong></span> <span class='ocrx_word' id='word_1_147' title='bbox 2061 1085 2174 1116; x_wconf 96'><strong>notes.</strong></span>
<span class='ocr_line' id='line_1_16' title="bbox 349 1080 2174 1125; baseline 0.001 -11; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_140' title='bbox 349 1087 367 1105; x_wconf 73'><strong>0</strong></span> <span class='ocrx_word' id='word_1_141' title='bbox 382 1080 567 1115; x_wconf 87'>TIMING</span> <span class='ocrx_word' id='word_1_142' title='bbox 582 1080 908 1116; x_wconf 90'>CORRECTION</span> <span class='ocrx_word' id='word_1_143' title='bbox 921 1080 1041 1116; x_wconf 90'>works</span> <span class='ocrx_word' id='word_1_144' title='bbox 1056 1080 1186 1124; x_wconf 86'>during</span> <span class='ocrx_word' id='word_1_145' title='bbox 1199 1080 1378 1124; x_wconf 89'>playback</span> <span class='ocrx_word' id='word_1_146' title='bbox 1392 1080 1466 1116; x_wconf 90'>and</span> <span class='ocrx_word' id='word_1_147' title='bbox 1480 1085 1644 1124; x_wconf 87'>operates</span> <span class='ocrx_word' id='word_1_148' title='bbox 1658 1080 1814 1116; x_wconf 91'>without</span> <span class='ocrx_word' id='word_1_149' title='bbox 1831 1080 2044 1125; x_wconf 87'>chopping</span> <span class='ocrx_word' id='word_1_150' title='bbox 2061 1085 2174 1116; x_wconf 88'>notes.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_10' title="bbox 349 1137 1287 1182">
<p class='ocr_par' id='par_1_12' lang='eng' title="bbox 349 1137 1287 1182">
<span class='ocr_line' id='line_1_17' title="bbox 349 1137 1287 1182; baseline 0.001 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_148' title='bbox 349 1145 367 1163; x_wconf 80'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_149' title='bbox 382 1137 560 1182; x_wconf 95'><strong>Optional</strong></span> <span class='ocrx_word' id='word_1_150' title='bbox 575 1138 708 1174; x_wconf 96'><strong>SMPTE</strong></span> <span class='ocrx_word' id='word_1_151' title='bbox 709 1138 839 1174; x_wconf 96'><strong>time</strong></span> <span class='ocrx_word' id='word_1_152' title='bbox 853 1138 945 1174; x_wconf 95'><strong>code</strong></span> <span class='ocrx_word' id='word_1_153' title='bbox 959 1138 1287 1182; x_wconf 96'><strong>synchronization.</strong></span>
<span class='ocr_line' id='line_1_17' title="bbox 349 1137 1287 1182; baseline 0.001 -9; x_size 45; x_descenders 9; x_ascenders 11"><span class='ocrx_word' id='word_1_151' title='bbox 349 1145 367 1163; x_wconf 73'><strong>0</strong></span> <span class='ocrx_word' id='word_1_152' title='bbox 382 1137 560 1182; x_wconf 85'>Optional</span> <span class='ocrx_word' id='word_1_153' title='bbox 575 1138 739 1174; x_wconf 89'>SMPTE</span> <span class='ocrx_word' id='word_1_154' title='bbox 752 1138 839 1174; x_wconf 89'>time</span> <span class='ocrx_word' id='word_1_155' title='bbox 853 1138 945 1174; x_wconf 89'>code</span> <span class='ocrx_word' id='word_1_156' title='bbox 959 1138 1287 1182; x_wconf 88'>synchronization.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_11' title="bbox 349 1195 874 1240">
<p class='ocr_par' id='par_1_13' lang='eng' title="bbox 349 1195 874 1240">
<span class='ocr_line' id='line_1_18' title="bbox 349 1195 874 1240; baseline 0 -8; x_size 45; x_descenders 8; x_ascenders 12"><span class='ocrx_word' id='word_1_154' title='bbox 349 1203 367 1222; x_wconf 74'><strong>©</strong></span> <span class='ocrx_word' id='word_1_155' title='bbox 382 1195 560 1240; x_wconf 96'><strong>Optional</strong></span> <span class='ocrx_word' id='word_1_156' title='bbox 573 1201 709 1233; x_wconf 96'><strong>remote</strong></span> <span class='ocrx_word' id='word_1_157' title='bbox 723 1196 874 1233; x_wconf 95'><strong>control.</strong></span>
<span class='ocr_line' id='line_1_18' title="bbox 349 1195 874 1240; baseline 0 -8; x_size 45; x_descenders 8; x_ascenders 12"><span class='ocrx_word' id='word_1_157' title='bbox 349 1203 367 1222; x_wconf 70'><strong>0</strong></span> <span class='ocrx_word' id='word_1_158' title='bbox 382 1195 560 1240; x_wconf 87'>Optional</span> <span class='ocrx_word' id='word_1_159' title='bbox 573 1201 709 1233; x_wconf 86'>remote</span> <span class='ocrx_word' id='word_1_160' title='bbox 723 1196 874 1233; x_wconf 87'>control.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_12' title="bbox 346 1288 1239 1491">
<p class='ocr_par' id='par_1_14' lang='eng' title="bbox 346 1288 749 1329">
<span class='ocr_line' id='line_1_19' title="bbox 346 1288 749 1329; baseline 0.002 -9; x_size 42; x_descenders 9; x_ascenders 10"><span class='ocrx_word' id='word_1_158' title='bbox 346 1288 535 1329; x_wconf 95'><strong>Recording</strong></span> <span class='ocrx_word' id='word_1_159' title='bbox 547 1298 567 1321; x_wconf 95'><strong>a</strong></span> <span class='ocrx_word' id='word_1_160' title='bbox 579 1288 749 1328; x_wconf 96'><strong>Sequence</strong></span>
<span class='ocr_line' id='line_1_19' title="bbox 346 1288 749 1329; baseline 0.002 -9; x_size 42; x_descenders 9; x_ascenders 10"><span class='ocrx_word' id='word_1_161' title='bbox 346 1288 535 1329; x_wconf 82'>Recording</span> <span class='ocrx_word' id='word_1_162' title='bbox 547 1298 567 1321; x_wconf 73'>3</span> <span class='ocrx_word' id='word_1_163' title='bbox 579 1288 749 1328; x_wconf 86'>Sequence</span>
</span>
</p>
<p class='ocr_par' id='par_1_15' lang='eng' title="bbox 346 1339 1239 1491">
<span class='ocr_line' id='line_1_20' title="bbox 383 1339 1239 1373; baseline 0 -7; x_size 33; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_161' title='bbox 383 1340 420 1366; x_wconf 95'><strong>To</strong></span> <span class='ocrx_word' id='word_1_162' title='bbox 430 1339 524 1366; x_wconf 96'><strong>record</strong></span> <span class='ocrx_word' id='word_1_163' title='bbox 535 1347 551 1366; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_164' title='bbox 562 1347 704 1373; x_wconf 96'><strong>sequence,</strong></span> <span class='ocrx_word' id='word_1_165' title='bbox 716 1340 815 1373; x_wconf 96'><strong>simply</strong></span> <span class='ocrx_word' id='word_1_166' title='bbox 825 1348 898 1373; x_wconf 95'><strong>press</strong></span> <span class='ocrx_word' id='word_1_167' title='bbox 910 1340 1065 1367; x_wconf 96'><strong>RECORD</strong></span> <span class='ocrx_word' id='word_1_168' title='bbox 1075 1340 1131 1367; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_169' title='bbox 1142 1341 1239 1372; x_wconf 96'><strong>PLAY,</strong></span>
<span class='ocr_line' id='line_1_20' title="bbox 383 1339 1239 1373; baseline 0 -7; x_size 33; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_164' title='bbox 383 1340 420 1366; x_wconf 87'>To</span> <span class='ocrx_word' id='word_1_165' title='bbox 430 1339 524 1366; x_wconf 85'>record</span> <span class='ocrx_word' id='word_1_166' title='bbox 535 1347 551 1366; x_wconf 87'>a</span> <span class='ocrx_word' id='word_1_167' title='bbox 562 1347 704 1373; x_wconf 80'>sequence,</span> <span class='ocrx_word' id='word_1_168' title='bbox 716 1340 815 1373; x_wconf 91'>simply</span> <span class='ocrx_word' id='word_1_169' title='bbox 825 1348 898 1373; x_wconf 88'>press</span> <span class='ocrx_word' id='word_1_170' title='bbox 910 1340 1065 1367; x_wconf 90'>RECORD</span> <span class='ocrx_word' id='word_1_171' title='bbox 1075 1340 1131 1367; x_wconf 87'>and</span> <span class='ocrx_word' id='word_1_172' title='bbox 1142 1341 1239 1372; x_wconf 87'>PLAY,</span>
</span>
<span class='ocr_line' id='line_1_21' title="bbox 346 1378 1205 1412; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_170' title='bbox 346 1379 411 1406; x_wconf 96'><strong>then</strong></span> <span class='ocrx_word' id='word_1_171' title='bbox 422 1378 483 1412; x_wconf 96'><strong>play</strong></span> <span class='ocrx_word' id='word_1_172' title='bbox 493 1387 562 1412; x_wconf 96'><strong>your</strong></span> <span class='ocrx_word' id='word_1_173' title='bbox 572 1379 646 1405; x_wconf 96'><strong>MIDI</strong></span> <span class='ocrx_word' id='word_1_174' title='bbox 649 1379 792 1412; x_wconf 96'><strong>keyboard</strong></span> <span class='ocrx_word' id='word_1_175' title='bbox 792 1379 848 1406; x_wconf 95'><strong>in</strong></span> <span class='ocrx_word' id='word_1_176' title='bbox 858 1379 923 1406; x_wconf 95'><strong>time</strong></span> <span class='ocrx_word' id='word_1_177' title='bbox 934 1384 963 1406; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_178' title='bbox 974 1379 1019 1406; x_wconf 93'><strong>the</strong></span> <span class='ocrx_word' id='word_1_179' title='bbox 1030 1379 1205 1412; x_wconf 92'><strong>Sequencers</strong></span>
<span class='ocr_line' id='line_1_21' title="bbox 346 1378 1205 1412; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_173' title='bbox 346 1379 411 1406; x_wconf 91'>then</span> <span class='ocrx_word' id='word_1_174' title='bbox 422 1378 483 1412; x_wconf 89'>play</span> <span class='ocrx_word' id='word_1_175' title='bbox 493 1387 562 1412; x_wconf 87'>your</span> <span class='ocrx_word' id='word_1_176' title='bbox 572 1379 659 1405; x_wconf 89'>MIDI</span> <span class='ocrx_word' id='word_1_177' title='bbox 671 1379 810 1412; x_wconf 86'>keyboard</span> <span class='ocrx_word' id='word_1_178' title='bbox 821 1379 848 1406; x_wconf 90'>in</span> <span class='ocrx_word' id='word_1_179' title='bbox 858 1379 923 1406; x_wconf 90'>time</span> <span class='ocrx_word' id='word_1_180' title='bbox 934 1384 963 1406; x_wconf 90'>to</span> <span class='ocrx_word' id='word_1_181' title='bbox 974 1379 1019 1406; x_wconf 92'>the</span> <span class='ocrx_word' id='word_1_182' title='bbox 1030 1379 1205 1412; x_wconf 88'>Sequencers</span>
</span>
<span class='ocr_line' id='line_1_22' title="bbox 347 1417 1232 1452; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_180' title='bbox 347 1417 414 1445; x_wconf 96'><strong>click</strong></span> <span class='ocrx_word' id='word_1_181' title='bbox 425 1418 506 1445; x_wconf 91'><strong>track.</strong></span> <span class='ocrx_word' id='word_1_182' title='bbox 519 1418 609 1445; x_wconf 96'><strong>When</strong></span> <span class='ocrx_word' id='word_1_183' title='bbox 620 1419 665 1445; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_184' title='bbox 676 1426 810 1452; x_wconf 96'><strong>sequence</strong></span> <span class='ocrx_word' id='word_1_185' title='bbox 821 1419 901 1452; x_wconf 96'><strong>loops</strong></span> <span class='ocrx_word' id='word_1_186' title='bbox 912 1419 983 1446; x_wconf 96'><strong>back</strong></span> <span class='ocrx_word' id='word_1_187' title='bbox 995 1427 1082 1446; x_wconf 96'><strong>around</strong></span> <span class='ocrx_word' id='word_1_188' title='bbox 1084 1419 1141 1446; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_189' title='bbox 1152 1419 1189 1446; x_wconf 96'><strong>bar</strong></span> <span class='ocrx_word' id='word_1_190' title='bbox 1189 1419 1232 1450; x_wconf 74'><strong>1,</strong></span>
<span class='ocr_line' id='line_1_22' title="bbox 347 1417 1232 1452; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_183' title='bbox 347 1417 414 1445; x_wconf 86'>click</span> <span class='ocrx_word' id='word_1_184' title='bbox 425 1418 506 1445; x_wconf 84'>track.</span> <span class='ocrx_word' id='word_1_185' title='bbox 519 1418 609 1445; x_wconf 85'>When</span> <span class='ocrx_word' id='word_1_186' title='bbox 620 1419 665 1445; x_wconf 89'>the</span> <span class='ocrx_word' id='word_1_187' title='bbox 676 1426 810 1452; x_wconf 86'>sequence</span> <span class='ocrx_word' id='word_1_188' title='bbox 821 1419 901 1452; x_wconf 88'>loops</span> <span class='ocrx_word' id='word_1_189' title='bbox 912 1419 983 1446; x_wconf 86'>back</span> <span class='ocrx_word' id='word_1_190' title='bbox 995 1419 1101 1446; x_wconf 90'>around</span> <span class='ocrx_word' id='word_1_191' title='bbox 1112 1423 1141 1446; x_wconf 91'>to</span> <span class='ocrx_word' id='word_1_192' title='bbox 1152 1419 1201 1446; x_wconf 87'>bar</span> <span class='ocrx_word' id='word_1_193' title='bbox 1213 1419 1232 1450; x_wconf 88'>1,</span>
</span>
<span class='ocr_line' id='line_1_23' title="bbox 346 1457 1223 1491; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_191' title='bbox 346 1465 400 1490; x_wconf 14'><strong>you</strong></span> <span class='ocrx_word' id='word_1_192' title='bbox 404 1457 430 1484; x_wconf 14'><strong>ll</strong></span> <span class='ocrx_word' id='word_1_193' title='bbox 441 1457 506 1485; x_wconf 96'><strong>hear</strong></span> <span class='ocrx_word' id='word_1_194' title='bbox 517 1458 590 1485; x_wconf 96'><strong>what</strong></span> <span class='ocrx_word' id='word_1_195' title='bbox 600 1466 654 1491; x_wconf 93'><strong>you</strong></span> <span class='ocrx_word' id='word_1_196' title='bbox 666 1458 865 1491; x_wconf 91'><strong>played—only</strong></span> <span class='ocrx_word' id='word_1_197' title='bbox 876 1458 910 1485; x_wconf 96'><strong>all</strong></span> <span class='ocrx_word' id='word_1_198' title='bbox 921 1458 1018 1491; x_wconf 96'><strong>timing</strong></span> <span class='ocrx_word' id='word_1_199' title='bbox 1029 1466 1115 1485; x_wconf 96'><strong>errors</strong></span> <span class='ocrx_word' id='word_1_200' title='bbox 1126 1458 1179 1485; x_wconf 95'><strong>will</strong></span> <span class='ocrx_word' id='word_1_201' title='bbox 1189 1458 1223 1485; x_wconf 96'><strong>be</strong></span>
<span class='ocr_line' id='line_1_23' title="bbox 346 1457 1223 1491; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_194' title='bbox 346 1457 430 1490; x_wconf 84'>youll</span> <span class='ocrx_word' id='word_1_195' title='bbox 441 1457 506 1485; x_wconf 93'>hear</span> <span class='ocrx_word' id='word_1_196' title='bbox 517 1458 590 1485; x_wconf 79'>what</span> <span class='ocrx_word' id='word_1_197' title='bbox 600 1466 654 1491; x_wconf 88'>you</span> <span class='ocrx_word' id='word_1_198' title='bbox 666 1458 865 1491; x_wconf 77'>played—only</span> <span class='ocrx_word' id='word_1_199' title='bbox 876 1458 910 1485; x_wconf 90'>all</span> <span class='ocrx_word' id='word_1_200' title='bbox 921 1458 1018 1491; x_wconf 84'>timing</span> <span class='ocrx_word' id='word_1_201' title='bbox 1029 1466 1115 1485; x_wconf 84'>errors</span> <span class='ocrx_word' id='word_1_202' title='bbox 1126 1458 1179 1485; x_wconf 91'>will</span> <span class='ocrx_word' id='word_1_203' title='bbox 1189 1458 1223 1485; x_wconf 91'>be</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_13' title="bbox 346 1497 1245 1531">
<p class='ocr_par' id='par_1_16' lang='eng' title="bbox 346 1497 1245 1531">
<span class='ocr_line' id='line_1_24' title="bbox 346 1497 1245 1531; baseline 0.001 -7; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_202' title='bbox 346 1497 494 1524; x_wconf 96'><strong>corrected!</strong></span> <span class='ocrx_word' id='word_1_203' title='bbox 508 1497 628 1530; x_wconf 96'><strong>(Timing</strong></span> <span class='ocrx_word' id='word_1_204' title='bbox 638 1497 791 1525; x_wconf 95'><strong>correction</strong></span> <span class='ocrx_word' id='word_1_205' title='bbox 802 1506 864 1531; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_206' title='bbox 875 1498 909 1525; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_207' title='bbox 920 1497 1047 1531; x_wconf 96'><strong>adjusted</strong></span> <span class='ocrx_word' id='word_1_208' title='bbox 1058 1505 1089 1525; x_wconf 97'><strong>or</strong></span> <span class='ocrx_word' id='word_1_209' title='bbox 1099 1497 1245 1531; x_wconf 96'><strong>defeated).</strong></span>
<span class='ocr_line' id='line_1_24' title="bbox 346 1497 1245 1531; baseline 0.001 -7; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_204' title='bbox 346 1497 494 1524; x_wconf 86'>corrected!</span> <span class='ocrx_word' id='word_1_205' title='bbox 508 1497 628 1530; x_wconf 85'>(Timing</span> <span class='ocrx_word' id='word_1_206' title='bbox 638 1497 791 1525; x_wconf 82'>correction</span> <span class='ocrx_word' id='word_1_207' title='bbox 802 1506 864 1531; x_wconf 88'>may</span> <span class='ocrx_word' id='word_1_208' title='bbox 875 1498 909 1525; x_wconf 91'>be</span> <span class='ocrx_word' id='word_1_209' title='bbox 920 1497 1047 1531; x_wconf 81'>adjusted</span> <span class='ocrx_word' id='word_1_210' title='bbox 1058 1505 1089 1525; x_wconf 92'>or</span> <span class='ocrx_word' id='word_1_211' title='bbox 1099 1497 1245 1531; x_wconf 87'>defeated).</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_14' title="bbox 346 1536 1205 1965">
<p class='ocr_par' id='par_1_17' lang='eng' title="bbox 346 1536 1186 1610">
<span class='ocr_line' id='line_1_25' title="bbox 346 1536 1186 1570; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_210' title='bbox 346 1537 409 1569; x_wconf 94'><strong>Any</strong></span> <span class='ocrx_word' id='word_1_211' title='bbox 419 1536 571 1563; x_wconf 96'><strong>additional</strong></span> <span class='ocrx_word' id='word_1_212' title='bbox 582 1541 659 1564; x_wconf 96'><strong>notes</strong></span> <span class='ocrx_word' id='word_1_213' title='bbox 670 1537 766 1570; x_wconf 96'><strong>played</strong></span> <span class='ocrx_word' id='word_1_214' title='bbox 777 1537 830 1563; x_wconf 96'><strong>will</strong></span> <span class='ocrx_word' id='word_1_215' title='bbox 840 1537 874 1564; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_216' title='bbox 885 1537 976 1564; x_wconf 96'><strong>added</strong></span> <span class='ocrx_word' id='word_1_217' title='bbox 986 1537 1045 1564; x_wconf 96'><strong>into</strong></span> <span class='ocrx_word' id='word_1_218' title='bbox 1055 1537 1101 1564; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_219' title='bbox 1111 1537 1186 1564; x_wconf 96'><strong>track</strong></span>
<span class='ocr_line' id='line_1_25' title="bbox 346 1536 1186 1570; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_212' title='bbox 346 1537 409 1569; x_wconf 90'>Any</span> <span class='ocrx_word' id='word_1_213' title='bbox 419 1536 571 1563; x_wconf 86'>additional</span> <span class='ocrx_word' id='word_1_214' title='bbox 582 1541 659 1564; x_wconf 85'>notes</span> <span class='ocrx_word' id='word_1_215' title='bbox 670 1537 766 1570; x_wconf 87'>played</span> <span class='ocrx_word' id='word_1_216' title='bbox 777 1537 830 1563; x_wconf 88'>will</span> <span class='ocrx_word' id='word_1_217' title='bbox 840 1537 874 1564; x_wconf 92'>be</span> <span class='ocrx_word' id='word_1_218' title='bbox 885 1537 976 1564; x_wconf 88'>added</span> <span class='ocrx_word' id='word_1_219' title='bbox 986 1537 1045 1564; x_wconf 89'>into</span> <span class='ocrx_word' id='word_1_220' title='bbox 1055 1537 1101 1564; x_wconf 89'>the</span> <span class='ocrx_word' id='word_1_221' title='bbox 1111 1537 1186 1564; x_wconf 82'>track</span>
</span>
<span class='ocr_line' id='line_1_26' title="bbox 347 1575 1052 1610; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_220' title='bbox 347 1591 381 1594; x_wconf 0'><strong>—</strong></span> <span class='ocrx_word' id='word_1_221' title='bbox 382 1575 495 1609; x_wconf 0'><strong>existing</strong></span> <span class='ocrx_word' id='word_1_222' title='bbox 505 1580 582 1603; x_wconf 96'><strong>notes</strong></span> <span class='ocrx_word' id='word_1_223' title='bbox 593 1584 637 1603; x_wconf 96'><strong>are</strong></span> <span class='ocrx_word' id='word_1_224' title='bbox 648 1580 696 1603; x_wconf 97'><strong>not</strong></span> <span class='ocrx_word' id='word_1_225' title='bbox 707 1576 800 1603; x_wconf 96'><strong>erased</strong></span> <span class='ocrx_word' id='word_1_226' title='bbox 811 1576 890 1603; x_wconf 96'><strong>while</strong></span> <span class='ocrx_word' id='word_1_227' title='bbox 900 1576 1052 1610; x_wconf 96'><strong>recording!</strong></span>
<span class='ocr_line' id='line_1_26' title="bbox 347 1575 1052 1610; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_222' title='bbox 347 1575 495 1609; x_wconf 86'>—existing</span> <span class='ocrx_word' id='word_1_223' title='bbox 505 1580 582 1603; x_wconf 89'>notes</span> <span class='ocrx_word' id='word_1_224' title='bbox 593 1584 637 1603; x_wconf 90'>are</span> <span class='ocrx_word' id='word_1_225' title='bbox 648 1580 696 1603; x_wconf 88'>not</span> <span class='ocrx_word' id='word_1_226' title='bbox 707 1576 800 1603; x_wconf 90'>erased</span> <span class='ocrx_word' id='word_1_227' title='bbox 811 1576 890 1603; x_wconf 87'>while</span> <span class='ocrx_word' id='word_1_228' title='bbox 900 1576 1052 1610; x_wconf 87'>recording!</span>
</span>
</p>
<p class='ocr_par' id='par_1_18' lang='eng' title="bbox 346 1616 1205 1965">
<span class='ocr_line' id='line_1_27' title="bbox 384 1616 1199 1648; baseline 0.001 -6; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_228' title='bbox 384 1616 471 1642; x_wconf 96'><strong>FAST</strong></span> <span class='ocrx_word' id='word_1_229' title='bbox 481 1616 671 1648; x_wconf 96'><strong>FORWARD,</strong></span> <span class='ocrx_word' id='word_1_230' title='bbox 684 1617 838 1643; x_wconf 95'><strong>REWIND,</strong></span> <span class='ocrx_word' id='word_1_231' title='bbox 839 1616 912 1648; x_wconf 95'><strong>and</strong></span> <span class='ocrx_word' id='word_1_232' title='bbox 924 1616 1045 1643; x_wconf 96'><strong>LOCATE</strong></span> <span class='ocrx_word' id='word_1_233' title='bbox 1046 1616 1199 1643; x_wconf 95'><strong>controls</strong></span>
<span class='ocr_line' id='line_1_27' title="bbox 384 1616 1199 1648; baseline 0.001 -6; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_229' title='bbox 384 1616 471 1642; x_wconf 88'>FAST</span> <span class='ocrx_word' id='word_1_230' title='bbox 481 1616 671 1648; x_wconf 88'>FORWARD,</span> <span class='ocrx_word' id='word_1_231' title='bbox 684 1617 844 1648; x_wconf 87'>REWIND,</span> <span class='ocrx_word' id='word_1_232' title='bbox 857 1616 912 1643; x_wconf 89'>and</span> <span class='ocrx_word' id='word_1_233' title='bbox 924 1616 1068 1643; x_wconf 78'>LOCATE</span> <span class='ocrx_word' id='word_1_234' title='bbox 1079 1616 1199 1643; x_wconf 87'>controls</span>
</span>
<span class='ocr_line' id='line_1_28' title="bbox 346 1655 1202 1689; baseline 0 -7; x_size 34; x_descenders 6; x_ascenders 9"><span class='ocrx_word' id='word_1_234' title='bbox 346 1663 409 1688; x_wconf 92'><strong>may</strong></span> <span class='ocrx_word' id='word_1_235' title='bbox 419 1655 453 1682; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_236' title='bbox 463 1655 530 1682; x_wconf 96'><strong>used</strong></span> <span class='ocrx_word' id='word_1_237' title='bbox 541 1659 569 1682; x_wconf 96'><strong>at</strong></span> <span class='ocrx_word' id='word_1_238' title='bbox 580 1663 632 1688; x_wconf 96'><strong>any</strong></span> <span class='ocrx_word' id='word_1_239' title='bbox 642 1655 707 1683; x_wconf 96'><strong>time</strong></span> <span class='ocrx_word' id='word_1_240' title='bbox 717 1659 746 1683; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_241' title='bbox 757 1655 867 1689; x_wconf 96'><strong>quickly</strong></span> <span class='ocrx_word' id='word_1_242' title='bbox 878 1664 968 1683; x_wconf 96'><strong>access</strong></span> <span class='ocrx_word' id='word_1_243' title='bbox 979 1664 1032 1689; x_wconf 96'><strong>any</strong></span> <span class='ocrx_word' id='word_1_244' title='bbox 1042 1655 1164 1683; x_wconf 96'><strong>location</strong></span> <span class='ocrx_word' id='word_1_245' title='bbox 1174 1655 1202 1682; x_wconf 96'><strong>in</strong></span>
<span class='ocr_line' id='line_1_28' title="bbox 346 1655 1202 1689; baseline 0 -7; x_size 34; x_descenders 6; x_ascenders 9"><span class='ocrx_word' id='word_1_235' title='bbox 346 1663 409 1688; x_wconf 89'>may</span> <span class='ocrx_word' id='word_1_236' title='bbox 419 1655 453 1682; x_wconf 94'>be</span> <span class='ocrx_word' id='word_1_237' title='bbox 463 1655 530 1682; x_wconf 90'>used</span> <span class='ocrx_word' id='word_1_238' title='bbox 541 1659 569 1682; x_wconf 90'>at</span> <span class='ocrx_word' id='word_1_239' title='bbox 580 1663 632 1688; x_wconf 86'>any</span> <span class='ocrx_word' id='word_1_240' title='bbox 642 1655 707 1683; x_wconf 88'>time</span> <span class='ocrx_word' id='word_1_241' title='bbox 717 1659 746 1683; x_wconf 88'>to</span> <span class='ocrx_word' id='word_1_242' title='bbox 757 1655 867 1689; x_wconf 88'>quickly</span> <span class='ocrx_word' id='word_1_243' title='bbox 878 1664 968 1683; x_wconf 87'>access</span> <span class='ocrx_word' id='word_1_244' title='bbox 979 1664 1032 1689; x_wconf 87'>any</span> <span class='ocrx_word' id='word_1_245' title='bbox 1042 1655 1164 1683; x_wconf 90'>location</span> <span class='ocrx_word' id='word_1_246' title='bbox 1174 1655 1202 1682; x_wconf 94'>in</span>
</span>
<span class='ocr_line' id='line_1_29' title="bbox 346 1694 1204 1728; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_246' title='bbox 346 1702 414 1727; x_wconf 96'><strong>your</strong></span> <span class='ocrx_word' id='word_1_247' title='bbox 424 1702 558 1727; x_wconf 96'><strong>sequence</strong></span> <span class='ocrx_word' id='word_1_248' title='bbox 570 1694 612 1721; x_wconf 93'><strong>for</strong></span> <span class='ocrx_word' id='word_1_249' title='bbox 623 1695 847 1728; x_wconf 91'><strong>spot-recording.</strong></span> <span class='ocrx_word' id='word_1_250' title='bbox 860 1696 897 1722; x_wconf 93'><strong>To</strong></span> <span class='ocrx_word' id='word_1_251' title='bbox 908 1695 1028 1722; x_wconf 93'><strong>overdub</strong></span> <span class='ocrx_word' id='word_1_252' title='bbox 1039 1703 1056 1722; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_253' title='bbox 1066 1703 1099 1722; x_wconf 96'><strong>new</strong></span> <span class='ocrx_word' id='word_1_254' title='bbox 1100 1699 1204 1728; x_wconf 96'><strong>part,</strong></span>
<span class='ocr_line' id='line_1_29' title="bbox 346 1694 1204 1728; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_247' title='bbox 346 1702 414 1727; x_wconf 88'>your</span> <span class='ocrx_word' id='word_1_248' title='bbox 424 1702 558 1727; x_wconf 87'>sequence</span> <span class='ocrx_word' id='word_1_249' title='bbox 570 1694 612 1721; x_wconf 84'>for</span> <span class='ocrx_word' id='word_1_250' title='bbox 623 1695 847 1728; x_wconf 84'>spotrecording.</span> <span class='ocrx_word' id='word_1_251' title='bbox 860 1696 897 1722; x_wconf 89'>To</span> <span class='ocrx_word' id='word_1_252' title='bbox 908 1695 1028 1722; x_wconf 82'>overdub</span> <span class='ocrx_word' id='word_1_253' title='bbox 1039 1703 1056 1722; x_wconf 91'>a</span> <span class='ocrx_word' id='word_1_254' title='bbox 1066 1703 1125 1722; x_wconf 89'>new</span> <span class='ocrx_word' id='word_1_255' title='bbox 1135 1699 1204 1728; x_wconf 88'>part,</span>
</span>
<span class='ocr_line' id='line_1_30' title="bbox 347 1733 1150 1768; baseline 0.001 -8; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_255' title='bbox 347 1733 426 1761; x_wconf 97'><strong>select</strong></span> <span class='ocrx_word' id='word_1_256' title='bbox 437 1741 453 1761; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_257' title='bbox 463 1733 589 1761; x_wconf 96'><strong>different</strong></span> <span class='ocrx_word' id='word_1_258' title='bbox 599 1734 674 1761; x_wconf 96'><strong>track</strong></span> <span class='ocrx_word' id='word_1_259' title='bbox 685 1734 741 1761; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_260' title='bbox 752 1738 818 1761; x_wconf 93'><strong>start</strong></span> <span class='ocrx_word' id='word_1_261' title='bbox 828 1734 1086 1768; x_wconf 91'><strong>recordingwhile</strong></span> <span class='ocrx_word' id='word_1_262' title='bbox 1096 1742 1150 1767; x_wconf 96'><strong>you</strong></span>
<span class='ocr_line' id='line_1_30' title="bbox 347 1733 1150 1768; baseline 0.001 -8; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_256' title='bbox 347 1733 426 1761; x_wconf 88'>select</span> <span class='ocrx_word' id='word_1_257' title='bbox 437 1741 453 1761; x_wconf 88'>a</span> <span class='ocrx_word' id='word_1_258' title='bbox 463 1733 589 1761; x_wconf 86'>different</span> <span class='ocrx_word' id='word_1_259' title='bbox 599 1734 674 1761; x_wconf 85'>track</span> <span class='ocrx_word' id='word_1_260' title='bbox 685 1734 741 1761; x_wconf 87'>and</span> <span class='ocrx_word' id='word_1_261' title='bbox 752 1738 818 1761; x_wconf 83'>start</span> <span class='ocrx_word' id='word_1_262' title='bbox 828 1734 1086 1768; x_wconf 63'>recording~while</span> <span class='ocrx_word' id='word_1_263' title='bbox 1096 1742 1150 1767; x_wconf 89'>you</span>
</span>
<span class='ocr_line' id='line_1_31' title="bbox 346 1773 1203 1808; baseline 0.001 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_263' title='bbox 346 1774 448 1806; x_wconf 96'><strong>record,</strong></span> <span class='ocrx_word' id='word_1_264' title='bbox 460 1774 506 1801; x_wconf 97'><strong>the</strong></span> <span class='ocrx_word' id='word_1_265' title='bbox 517 1773 577 1801; x_wconf 96'><strong>first</strong></span> <span class='ocrx_word' id='word_1_266' title='bbox 581 1774 662 1801; x_wconf 96'><strong>track</strong></span> <span class='ocrx_word' id='word_1_267' title='bbox 673 1774 726 1801; x_wconf 96'><strong>will</strong></span> <span class='ocrx_word' id='word_1_268' title='bbox 736 1774 799 1807; x_wconf 96'><strong>play</strong></span> <span class='ocrx_word' id='word_1_269' title='bbox 809 1774 836 1801; x_wconf 96'><strong>in</strong></span> <span class='ocrx_word' id='word_1_270' title='bbox 847 1774 949 1808; x_wconf 97'><strong>perfect</strong></span> <span class='ocrx_word' id='word_1_271' title='bbox 961 1782 1026 1808; x_wconf 96'><strong>sync</strong></span> <span class='ocrx_word' id='word_1_272' title='bbox 1037 1774 1137 1808; x_wconf 96'><strong>(unless</strong></span> <span class='ocrx_word' id='word_1_273' title='bbox 1148 1782 1203 1807; x_wconf 96'><strong>you</strong></span>
<span class='ocr_line' id='line_1_31' title="bbox 346 1773 1203 1808; baseline 0.001 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_264' title='bbox 346 1774 448 1806; x_wconf 86'>record,</span> <span class='ocrx_word' id='word_1_265' title='bbox 460 1774 506 1801; x_wconf 87'>the</span> <span class='ocrx_word' id='word_1_266' title='bbox 517 1773 662 1801; x_wconf 64'>firsttrack</span> <span class='ocrx_word' id='word_1_267' title='bbox 673 1774 726 1801; x_wconf 91'>will</span> <span class='ocrx_word' id='word_1_268' title='bbox 736 1774 799 1807; x_wconf 89'>play</span> <span class='ocrx_word' id='word_1_269' title='bbox 809 1774 836 1801; x_wconf 91'>in</span> <span class='ocrx_word' id='word_1_270' title='bbox 847 1774 949 1808; x_wconf 84'>perfect</span> <span class='ocrx_word' id='word_1_271' title='bbox 961 1782 1026 1808; x_wconf 87'>sync</span> <span class='ocrx_word' id='word_1_272' title='bbox 1037 1774 1137 1808; x_wconf 89'>(unless</span> <span class='ocrx_word' id='word_1_273' title='bbox 1148 1782 1203 1807; x_wconf 93'>you</span>
</span>
<span class='ocr_line' id='line_1_32' title="bbox 346 1813 1191 1847; baseline 0.002 -8; x_size 33; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_274' title='bbox 346 1813 431 1840; x_wconf 95'><strong>MUTE</strong></span> <span class='ocrx_word' id='word_1_275' title='bbox 431 1813 492 1845; x_wconf 95'><strong>it,</strong></span> <span class='ocrx_word' id='word_1_276' title='bbox 505 1821 537 1840; x_wconf 95'><strong>or</strong></span> <span class='ocrx_word' id='word_1_277' title='bbox 547 1813 642 1840; x_wconf 95'><strong>SOLO</strong></span> <span class='ocrx_word' id='word_1_278' title='bbox 653 1814 756 1841; x_wconf 95'><strong>another</strong></span> <span class='ocrx_word' id='word_1_279' title='bbox 757 1814 875 1847; x_wconf 94'><strong>track).</strong></span> <span class='ocrx_word' id='word_1_280' title='bbox 889 1814 920 1840; x_wconf 96'><strong>In</strong></span> <span class='ocrx_word' id='word_1_281' title='bbox 930 1813 984 1841; x_wconf 96'><strong>this</strong></span> <span class='ocrx_word' id='word_1_282' title='bbox 995 1822 1057 1847; x_wconf 96'><strong>way,</strong></span> <span class='ocrx_word' id='word_1_283' title='bbox 1069 1822 1106 1847; x_wconf 96'><strong>up</strong></span> <span class='ocrx_word' id='word_1_284' title='bbox 1117 1818 1146 1841; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_285' title='bbox 1158 1814 1191 1841; x_wconf 96'><strong>32</strong></span>
<span class='ocr_line' id='line_1_32' title="bbox 346 1813 1191 1847; baseline 0.002 -8; x_size 33; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_274' title='bbox 346 1813 454 1840; x_wconf 86'>MUTE</span> <span class='ocrx_word' id='word_1_275' title='bbox 464 1813 492 1845; x_wconf 88'>it,</span> <span class='ocrx_word' id='word_1_276' title='bbox 505 1821 537 1840; x_wconf 84'>or</span> <span class='ocrx_word' id='word_1_277' title='bbox 547 1813 642 1840; x_wconf 88'>SOLO</span> <span class='ocrx_word' id='word_1_278' title='bbox 653 1814 769 1841; x_wconf 87'>another</span> <span class='ocrx_word' id='word_1_279' title='bbox 779 1814 875 1847; x_wconf 86'>track).</span> <span class='ocrx_word' id='word_1_280' title='bbox 889 1814 920 1840; x_wconf 86'>In</span> <span class='ocrx_word' id='word_1_281' title='bbox 930 1813 984 1841; x_wconf 86'>this</span> <span class='ocrx_word' id='word_1_282' title='bbox 995 1822 1057 1847; x_wconf 87'>way,</span> <span class='ocrx_word' id='word_1_283' title='bbox 1069 1822 1106 1847; x_wconf 88'>up</span> <span class='ocrx_word' id='word_1_284' title='bbox 1117 1818 1146 1841; x_wconf 77'>to</span> <span class='ocrx_word' id='word_1_285' title='bbox 1158 1814 1191 1841; x_wconf 90'>32</span>
</span>
<span class='ocr_line' id='line_1_33' title="bbox 346 1852 1205 1885; baseline 0.001 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_286' title='bbox 346 1852 434 1879; x_wconf 96'><strong>tracks</strong></span> <span class='ocrx_word' id='word_1_287' title='bbox 445 1860 508 1885; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_288' title='bbox 518 1853 552 1879; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_289' title='bbox 562 1853 748 1880; x_wconf 96'><strong>overdubbed!</strong></span> <span class='ocrx_word' id='word_1_290' title='bbox 761 1853 808 1880; x_wconf 94'><strong>All</strong></span> <span class='ocrx_word' id='word_1_291' title='bbox 819 1854 892 1880; x_wconf 96'><strong>MIDI</strong></span> <span class='ocrx_word' id='word_1_292' title='bbox 895 1853 1011 1880; x_wconf 96'><strong>effects</strong></span> <span class='ocrx_word' id='word_1_293' title='bbox 1022 1861 1067 1880; x_wconf 96'><strong>are</strong></span> <span class='ocrx_word' id='word_1_294' title='bbox 1076 1853 1205 1880; x_wconf 96'><strong>recorded</strong></span>
<span class='ocr_line' id='line_1_33' title="bbox 346 1852 1205 1885; baseline 0.001 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_286' title='bbox 346 1852 434 1879; x_wconf 84'>tracks</span> <span class='ocrx_word' id='word_1_287' title='bbox 445 1860 508 1885; x_wconf 90'>may</span> <span class='ocrx_word' id='word_1_288' title='bbox 518 1853 552 1879; x_wconf 93'>be</span> <span class='ocrx_word' id='word_1_289' title='bbox 562 1853 748 1880; x_wconf 90'>overdubbed!</span> <span class='ocrx_word' id='word_1_290' title='bbox 761 1853 808 1880; x_wconf 92'>All</span> <span class='ocrx_word' id='word_1_291' title='bbox 819 1854 905 1880; x_wconf 81'>MIDI</span> <span class='ocrx_word' id='word_1_292' title='bbox 917 1853 1011 1880; x_wconf 81'>effects</span> <span class='ocrx_word' id='word_1_293' title='bbox 1022 1861 1067 1880; x_wconf 86'>are</span> <span class='ocrx_word' id='word_1_294' title='bbox 1076 1853 1205 1880; x_wconf 87'>recorded</span>
</span>
<span class='ocr_line' id='line_1_34' title="bbox 346 1891 1168 1926; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_295' title='bbox 346 1891 485 1925; x_wconf 96'><strong>including</strong></span> <span class='ocrx_word' id='word_1_296' title='bbox 495 1891 570 1925; x_wconf 96'><strong>pitch</strong></span> <span class='ocrx_word' id='word_1_297' title='bbox 580 1892 663 1924; x_wconf 96'><strong>bend,</strong></span> <span class='ocrx_word' id='word_1_298' title='bbox 675 1892 850 1920; x_wconf 96'><strong>modulation,</strong></span> <span class='ocrx_word' id='word_1_299' title='bbox 854 1892 991 1926; x_wconf 93'><strong>velocity,</strong></span> <span class='ocrx_word' id='word_1_300' title='bbox 1004 1892 1168 1924; x_wconf 92'><strong>aftertouch,</strong></span>
<span class='ocr_line' id='line_1_34' title="bbox 346 1891 1168 1926; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_295' title='bbox 346 1891 485 1925; x_wconf 84'>including</span> <span class='ocrx_word' id='word_1_296' title='bbox 495 1891 570 1925; x_wconf 87'>pitch</span> <span class='ocrx_word' id='word_1_297' title='bbox 580 1892 663 1924; x_wconf 84'>bend,</span> <span class='ocrx_word' id='word_1_298' title='bbox 675 1892 859 1924; x_wconf 86'>modulation,</span> <span class='ocrx_word' id='word_1_299' title='bbox 872 1892 991 1926; x_wconf 83'>velocity,</span> <span class='ocrx_word' id='word_1_300' title='bbox 1004 1892 1168 1924; x_wconf 85'>aftertouch,</span>
</span>
<span class='ocr_line' id='line_1_35' title="bbox 346 1931 895 1965; baseline 0.002 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_301' title='bbox 346 1931 448 1958; x_wconf 96'><strong>sustain</strong></span> <span class='ocrx_word' id='word_1_302' title='bbox 459 1931 549 1965; x_wconf 95'><strong>pedal,</strong></span> <span class='ocrx_word' id='word_1_303' title='bbox 561 1932 617 1959; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_304' title='bbox 628 1940 756 1965; x_wconf 96'><strong>program</strong></span> <span class='ocrx_word' id='word_1_305' title='bbox 766 1932 895 1965; x_wconf 96'><strong>changes!</strong></span>
<span class='ocr_line' id='line_1_35' title="bbox 346 1931 895 1965; baseline 0.002 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_301' title='bbox 346 1931 448 1958; x_wconf 88'>sustain</span> <span class='ocrx_word' id='word_1_302' title='bbox 459 1931 549 1965; x_wconf 88'>pedal,</span> <span class='ocrx_word' id='word_1_303' title='bbox 561 1932 617 1959; x_wconf 90'>and</span> <span class='ocrx_word' id='word_1_304' title='bbox 628 1940 756 1965; x_wconf 88'>program</span> <span class='ocrx_word' id='word_1_305' title='bbox 766 1932 895 1965; x_wconf 87'>changes!</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_15' title="bbox 346 1998 1212 2163">
<p class='ocr_par' id='par_1_19' lang='eng' title="bbox 346 1998 479 2040">
<span class='ocr_line' id='line_1_36' title="bbox 346 1998 479 2040; baseline -0.008 -9; x_size 43; x_descenders 10; x_ascenders 11"><span class='ocrx_word' id='word_1_306' title='bbox 346 1998 479 2040; x_wconf 96'><strong>Editing</strong></span>
<span class='ocr_line' id='line_1_36' title="bbox 346 1998 479 2040; baseline -0.008 -9; x_size 43; x_descenders 10; x_ascenders 11"><span class='ocrx_word' id='word_1_306' title='bbox 346 1998 479 2040; x_wconf 87'>Editing</span>
</span>
</p>
<p class='ocr_par' id='par_1_20' lang='eng' title="bbox 346 2050 1212 2163">
<span class='ocr_line' id='line_1_37' title="bbox 383 2050 1186 2084; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_307' title='bbox 383 2050 419 2076; x_wconf 96'><strong>To</strong></span> <span class='ocrx_word' id='word_1_308' title='bbox 430 2057 503 2076; x_wconf 95'><strong>erase</strong></span> <span class='ocrx_word' id='word_1_309' title='bbox 514 2058 530 2077; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_310' title='bbox 540 2058 617 2077; x_wconf 96'><strong>wrong</strong></span> <span class='ocrx_word' id='word_1_311' title='bbox 618 2054 717 2083; x_wconf 96'><strong>note,</strong></span> <span class='ocrx_word' id='word_1_312' title='bbox 729 2050 829 2083; x_wconf 96'><strong>simply</strong></span> <span class='ocrx_word' id='word_1_313' title='bbox 839 2050 905 2077; x_wconf 96'><strong>hold</strong></span> <span class='ocrx_word' id='word_1_314' title='bbox 916 2051 1013 2077; x_wconf 96'><strong>ERASE</strong></span> <span class='ocrx_word' id='word_1_315' title='bbox 1015 2051 1083 2077; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_316' title='bbox 1085 2050 1186 2084; x_wconf 96'><strong>press</strong></span>
<span class='ocr_line' id='line_1_37' title="bbox 383 2050 1186 2084; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_307' title='bbox 383 2050 419 2076; x_wconf 89'>To</span> <span class='ocrx_word' id='word_1_308' title='bbox 430 2057 503 2076; x_wconf 87'>erase</span> <span class='ocrx_word' id='word_1_309' title='bbox 514 2058 530 2077; x_wconf 91'>a</span> <span class='ocrx_word' id='word_1_310' title='bbox 540 2058 634 2083; x_wconf 88'>wrong</span> <span class='ocrx_word' id='word_1_311' title='bbox 644 2054 717 2082; x_wconf 84'>note,</span> <span class='ocrx_word' id='word_1_312' title='bbox 729 2050 829 2083; x_wconf 89'>simply</span> <span class='ocrx_word' id='word_1_313' title='bbox 839 2050 905 2077; x_wconf 88'>hold</span> <span class='ocrx_word' id='word_1_314' title='bbox 916 2051 1037 2077; x_wconf 85'>ERASE</span> <span class='ocrx_word' id='word_1_315' title='bbox 1048 2050 1103 2077; x_wconf 89'>and</span> <span class='ocrx_word' id='word_1_316' title='bbox 1113 2059 1186 2084; x_wconf 89'>press</span>
</span>
<span class='ocr_line' id='line_1_38' title="bbox 346 2089 1212 2124; baseline 0.002 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_317' title='bbox 346 2089 391 2116; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_318' title='bbox 402 2094 465 2117; x_wconf 96'><strong>note</strong></span> <span class='ocrx_word' id='word_1_319' title='bbox 475 2094 504 2117; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_320' title='bbox 515 2090 549 2117; x_wconf 97'><strong>be</strong></span> <span class='ocrx_word' id='word_1_321' title='bbox 559 2090 652 2117; x_wconf 96'><strong>erased</strong></span> <span class='ocrx_word' id='word_1_322' title='bbox 661 2090 718 2123; x_wconf 96'><strong>just</strong></span> <span class='ocrx_word' id='word_1_323' title='bbox 729 2090 808 2117; x_wconf 96'><strong>before</strong></span> <span class='ocrx_word' id='word_1_324' title='bbox 808 2090 852 2117; x_wconf 96'><strong>it</strong></span> <span class='ocrx_word' id='word_1_325' title='bbox 862 2090 937 2124; x_wconf 96'><strong>plays</strong></span> <span class='ocrx_word' id='word_1_326' title='bbox 947 2090 975 2117; x_wconf 96'><strong>in</strong></span> <span class='ocrx_word' id='word_1_327' title='bbox 986 2090 1032 2118; x_wconf 93'><strong>the</strong></span> <span class='ocrx_word' id='word_1_328' title='bbox 1043 2098 1212 2124; x_wconf 88'><strong>sequence—</strong></span>
<span class='ocr_line' id='line_1_38' title="bbox 346 2089 1212 2124; baseline 0.002 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_317' title='bbox 346 2089 391 2116; x_wconf 86'>the</span> <span class='ocrx_word' id='word_1_318' title='bbox 402 2094 465 2117; x_wconf 86'>note</span> <span class='ocrx_word' id='word_1_319' title='bbox 475 2094 504 2117; x_wconf 86'>to</span> <span class='ocrx_word' id='word_1_320' title='bbox 515 2090 549 2117; x_wconf 93'>be</span> <span class='ocrx_word' id='word_1_321' title='bbox 559 2090 652 2117; x_wconf 89'>erased</span> <span class='ocrx_word' id='word_1_322' title='bbox 661 2090 718 2123; x_wconf 91'>just</span> <span class='ocrx_word' id='word_1_323' title='bbox 729 2090 822 2117; x_wconf 85'>before</span> <span class='ocrx_word' id='word_1_324' title='bbox 833 2090 852 2117; x_wconf 89'>it</span> <span class='ocrx_word' id='word_1_325' title='bbox 862 2090 937 2124; x_wconf 87'>plays</span> <span class='ocrx_word' id='word_1_326' title='bbox 947 2090 975 2117; x_wconf 92'>in</span> <span class='ocrx_word' id='word_1_327' title='bbox 986 2090 1032 2118; x_wconf 87'>the</span> <span class='ocrx_word' id='word_1_328' title='bbox 1043 2098 1212 2124; x_wconf 78'>sequence—</span>
</span>
<span class='ocr_line' id='line_1_39' title="bbox 346 2129 1134 2163; baseline 0.003 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_329' title='bbox 346 2129 406 2156; x_wconf 96'><strong>when</strong></span> <span class='ocrx_word' id='word_1_330' title='bbox 407 2129 531 2162; x_wconf 96'><strong>played</strong></span> <span class='ocrx_word' id='word_1_331' title='bbox 542 2129 621 2161; x_wconf 96'><strong>back,</strong></span> <span class='ocrx_word' id='word_1_332' title='bbox 633 2129 652 2156; x_wconf 96'><strong>it</strong></span> <span class='ocrx_word' id='word_1_333' title='bbox 663 2129 716 2156; x_wconf 96'><strong>will</strong></span> <span class='ocrx_word' id='word_1_334' title='bbox 726 2130 760 2157; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_335' title='bbox 771 2138 849 2163; x_wconf 96'><strong>gone.</strong></span> <span class='ocrx_word' id='word_1_336' title='bbox 861 2131 947 2157; x_wconf 96'><strong>Notes</strong></span> <span class='ocrx_word' id='word_1_337' title='bbox 958 2138 1021 2163; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_338' title='bbox 1031 2130 1089 2157; x_wconf 96'><strong>also</strong></span> <span class='ocrx_word' id='word_1_339' title='bbox 1100 2130 1134 2157; x_wconf 96'><strong>be</strong></span>
<span class='ocr_line' id='line_1_39' title="bbox 346 2129 1134 2163; baseline 0.003 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_329' title='bbox 346 2129 425 2156; x_wconf 92'>when</span> <span class='ocrx_word' id='word_1_330' title='bbox 435 2129 531 2162; x_wconf 91'>played</span> <span class='ocrx_word' id='word_1_331' title='bbox 542 2129 621 2161; x_wconf 82'>back,</span> <span class='ocrx_word' id='word_1_332' title='bbox 633 2129 652 2156; x_wconf 84'>it</span> <span class='ocrx_word' id='word_1_333' title='bbox 663 2129 716 2156; x_wconf 89'>will</span> <span class='ocrx_word' id='word_1_334' title='bbox 726 2130 760 2157; x_wconf 88'>be</span> <span class='ocrx_word' id='word_1_335' title='bbox 771 2138 849 2163; x_wconf 86'>gone.</span> <span class='ocrx_word' id='word_1_336' title='bbox 861 2131 947 2157; x_wconf 86'>Notes</span> <span class='ocrx_word' id='word_1_337' title='bbox 958 2138 1021 2163; x_wconf 88'>may</span> <span class='ocrx_word' id='word_1_338' title='bbox 1031 2130 1089 2157; x_wconf 87'>also</span> <span class='ocrx_word' id='word_1_339' title='bbox 1100 2130 1134 2157; x_wconf 91'>be</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_16' title="bbox 345 2168 1228 2242">
<p class='ocr_par' id='par_1_21' lang='eng' title="bbox 345 2168 1228 2242">
<span class='ocr_line' id='line_1_40' title="bbox 346 2168 1220 2203; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_340' title='bbox 346 2168 445 2200; x_wconf 96'><strong>added,</strong></span> <span class='ocrx_word' id='word_1_341' title='bbox 457 2168 560 2200; x_wconf 96'><strong>erased,</strong></span> <span class='ocrx_word' id='word_1_342' title='bbox 572 2177 604 2196; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_343' title='bbox 614 2169 739 2202; x_wconf 96'><strong>changed</strong></span> <span class='ocrx_word' id='word_1_344' title='bbox 749 2169 829 2203; x_wconf 96'><strong>using</strong></span> <span class='ocrx_word' id='word_1_345' title='bbox 839 2169 885 2196; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_346' title='bbox 896 2170 1031 2196; x_wconf 96'><strong>SINGLE</strong></span> <span class='ocrx_word' id='word_1_347' title='bbox 1042 2170 1107 2196; x_wconf 91'><strong>STEP</strong></span> <span class='ocrx_word' id='word_1_348' title='bbox 1109 2169 1220 2196; x_wconf 91'><strong>func-</strong></span>
<span class='ocr_line' id='line_1_40' title="bbox 346 2168 1220 2203; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_340' title='bbox 346 2168 445 2200; x_wconf 86'>added,</span> <span class='ocrx_word' id='word_1_341' title='bbox 457 2168 560 2200; x_wconf 87'>erased,</span> <span class='ocrx_word' id='word_1_342' title='bbox 572 2177 604 2196; x_wconf 93'>or</span> <span class='ocrx_word' id='word_1_343' title='bbox 614 2169 739 2202; x_wconf 82'>changed</span> <span class='ocrx_word' id='word_1_344' title='bbox 749 2169 829 2203; x_wconf 86'>using</span> <span class='ocrx_word' id='word_1_345' title='bbox 839 2169 885 2196; x_wconf 85'>the</span> <span class='ocrx_word' id='word_1_346' title='bbox 896 2170 1031 2196; x_wconf 89'>SINGLE</span> <span class='ocrx_word' id='word_1_347' title='bbox 1042 2170 1131 2196; x_wconf 87'>STEP</span> <span class='ocrx_word' id='word_1_348' title='bbox 1143 2169 1220 2196; x_wconf 82'>func-</span>
</span>
<span class='ocr_line' id='line_1_41' title="bbox 345 2207 1228 2242; baseline 0.002 -8; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_349' title='bbox 345 2207 412 2234; x_wconf 96'><strong>tion.</strong></span> <span class='ocrx_word' id='word_1_350' title='bbox 424 2208 461 2235; x_wconf 93'><strong>To</strong></span> <span class='ocrx_word' id='word_1_351' title='bbox 472 2208 592 2235; x_wconf 91'><strong>overdub</strong></span> <span class='ocrx_word' id='word_1_352' title='bbox 603 2212 667 2235; x_wconf 96'><strong>notes</strong></span> <span class='ocrx_word' id='word_1_353' title='bbox 668 2212 718 2235; x_wconf 96'><strong>at</strong></span> <span class='ocrx_word' id='word_1_354' title='bbox 729 2208 841 2242; x_wconf 96'><strong>specific</strong></span> <span class='ocrx_word' id='word_1_355' title='bbox 851 2209 943 2242; x_wconf 97'><strong>points</strong></span> <span class='ocrx_word' id='word_1_356' title='bbox 955 2208 1049 2236; x_wconf 96'><strong>within</strong></span> <span class='ocrx_word' id='word_1_357' title='bbox 1060 2217 1076 2236; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_358' title='bbox 1086 2216 1228 2242; x_wconf 96'><strong>sequence,</strong></span>
<span class='ocr_line' id='line_1_41' title="bbox 345 2207 1228 2242; baseline 0.002 -8; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_349' title='bbox 345 2207 412 2234; x_wconf 87'>tion.</span> <span class='ocrx_word' id='word_1_350' title='bbox 424 2208 461 2235; x_wconf 88'>To</span> <span class='ocrx_word' id='word_1_351' title='bbox 472 2208 592 2235; x_wconf 88'>overdub</span> <span class='ocrx_word' id='word_1_352' title='bbox 603 2212 680 2235; x_wconf 84'>notes</span> <span class='ocrx_word' id='word_1_353' title='bbox 691 2212 718 2235; x_wconf 89'>at</span> <span class='ocrx_word' id='word_1_354' title='bbox 729 2208 841 2242; x_wconf 83'>specific</span> <span class='ocrx_word' id='word_1_355' title='bbox 851 2209 943 2242; x_wconf 89'>points</span> <span class='ocrx_word' id='word_1_356' title='bbox 955 2208 1049 2236; x_wconf 87'>within</span> <span class='ocrx_word' id='word_1_357' title='bbox 1060 2217 1076 2236; x_wconf 87'>a</span> <span class='ocrx_word' id='word_1_358' title='bbox 1086 2216 1228 2242; x_wconf 86'>sequence,</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_17' title="bbox 345 2293 705 2326">
<p class='ocr_par' id='par_1_22' lang='eng' title="bbox 345 2293 705 2326">
<span class='ocr_line' id='line_1_42' title="bbox 345 2293 705 2326; baseline 0.003 -1; x_size 38.38298; x_descenders 5.3829789; x_ascenders 10"><span class='ocrx_word' id='word_1_359' title='bbox 345 2293 541 2326; x_wconf 96'><strong>Additional</strong></span> <span class='ocrx_word' id='word_1_360' title='bbox 553 2293 705 2326; x_wconf 96'><strong>Features</strong></span>
<span class='ocr_line' id='line_1_42' title="bbox 345 2293 705 2326; baseline 0.003 -1; x_size 38.38298; x_descenders 5.3829789; x_ascenders 10"><span class='ocrx_word' id='word_1_359' title='bbox 345 2293 541 2326; x_wconf 86'>Additional</span> <span class='ocrx_word' id='word_1_360' title='bbox 553 2293 705 2326; x_wconf 83'>Features</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_18' title="bbox 1295 1289 2165 1593">
<p class='ocr_par' id='par_1_23' lang='eng' title="bbox 1296 1289 2165 1362">
<span class='ocr_line' id='line_1_43' title="bbox 1296 1289 2165 1322; baseline 0.001 -7; x_size 35.040108; x_descenders 6.9264708; x_ascenders 8.613636"><span class='ocrx_word' id='word_1_361' title='bbox 1296 1289 1394 1322; x_wconf 96'><strong>simply</strong></span> <span class='ocrx_word' id='word_1_362' title='bbox 1404 1297 1452 1316; x_wconf 96'><strong>use</strong></span> <span class='ocrx_word' id='word_1_363' title='bbox 1463 1290 1615 1321; x_wconf 96'><strong>LOCATE,</strong></span> <span class='ocrx_word' id='word_1_364' title='bbox 1628 1290 1716 1316; x_wconf 96'><strong>FAST</strong></span> <span class='ocrx_word' id='word_1_365' title='bbox 1726 1289 1910 1316; x_wconf 95'><strong>FORWARD,</strong></span> <span class='ocrx_word' id='word_1_366' title='bbox 1911 1297 1960 1321; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_367' title='bbox 1972 1290 2098 1316; x_wconf 95'><strong>REWIND</strong></span> <span class='ocrx_word' id='word_1_368' title='bbox 2100 1290 2165 1317; x_wconf 95'><strong>to</strong></span>
<span class='ocr_line' id='line_1_43' title="bbox 1296 1289 2165 1322; baseline 0.001 -7; x_size 35.040108; x_descenders 6.9264708; x_ascenders 8.613636"><span class='ocrx_word' id='word_1_361' title='bbox 1296 1289 1394 1322; x_wconf 91'>simply</span> <span class='ocrx_word' id='word_1_362' title='bbox 1404 1297 1452 1316; x_wconf 87'>use</span> <span class='ocrx_word' id='word_1_363' title='bbox 1463 1290 1615 1321; x_wconf 86'>LOCATE,</span> <span class='ocrx_word' id='word_1_364' title='bbox 1628 1290 1716 1316; x_wconf 88'>FAST</span> <span class='ocrx_word' id='word_1_365' title='bbox 1726 1289 1917 1321; x_wconf 86'>FORWARD,</span> <span class='ocrx_word' id='word_1_366' title='bbox 1929 1297 1960 1317; x_wconf 92'>or</span> <span class='ocrx_word' id='word_1_367' title='bbox 1972 1290 2126 1316; x_wconf 91'>REWIND</span> <span class='ocrx_word' id='word_1_368' title='bbox 2136 1294 2165 1317; x_wconf 82'>to</span>
</span>
<span class='ocr_line' id='line_1_44' title="bbox 1297 1328 2033 1362; baseline 0.001 -7; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_369' title='bbox 1297 1328 1356 1355; x_wconf 96'><strong>find</strong></span> <span class='ocrx_word' id='word_1_370' title='bbox 1366 1329 1412 1355; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_371' title='bbox 1423 1328 1527 1356; x_wconf 96'><strong>desired</strong></span> <span class='ocrx_word' id='word_1_372' title='bbox 1537 1329 1587 1356; x_wconf 96'><strong>bar</strong></span> <span class='ocrx_word' id='word_1_373' title='bbox 1598 1329 1720 1361; x_wconf 96'><strong>number,</strong></span> <span class='ocrx_word' id='word_1_374' title='bbox 1732 1329 1798 1356; x_wconf 97'><strong>then</strong></span> <span class='ocrx_word' id='word_1_375' title='bbox 1809 1333 1874 1356; x_wconf 96'><strong>start</strong></span> <span class='ocrx_word' id='word_1_376' title='bbox 1885 1329 2033 1362; x_wconf 96'><strong>recording.</strong></span>
<span class='ocr_line' id='line_1_44' title="bbox 1297 1328 2033 1362; baseline 0.001 -7; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_369' title='bbox 1297 1328 1356 1355; x_wconf 77'>find</span> <span class='ocrx_word' id='word_1_370' title='bbox 1366 1329 1412 1355; x_wconf 89'>the</span> <span class='ocrx_word' id='word_1_371' title='bbox 1423 1328 1527 1356; x_wconf 85'>desired</span> <span class='ocrx_word' id='word_1_372' title='bbox 1537 1329 1587 1356; x_wconf 88'>bar</span> <span class='ocrx_word' id='word_1_373' title='bbox 1598 1329 1720 1361; x_wconf 86'>number,</span> <span class='ocrx_word' id='word_1_374' title='bbox 1732 1329 1798 1356; x_wconf 78'>then</span> <span class='ocrx_word' id='word_1_375' title='bbox 1809 1333 1874 1356; x_wconf 87'>start</span> <span class='ocrx_word' id='word_1_376' title='bbox 1885 1329 2033 1362; x_wconf 85'>recording.</span>
</span>
</p>
<p class='ocr_par' id='par_1_24' lang='eng' title="bbox 1295 1368 2160 1593">
<span class='ocr_line' id='line_1_45' title="bbox 1332 1368 2160 1402; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_377' title='bbox 1332 1368 1391 1395; x_wconf 93'><strong>The</strong></span> <span class='ocrx_word' id='word_1_378' title='bbox 1402 1368 1626 1395; x_wconf 91'><strong>INSERT/COPY</strong></span> <span class='ocrx_word' id='word_1_379' title='bbox 1626 1368 1789 1395; x_wconf 96'><strong>function</strong></span> <span class='ocrx_word' id='word_1_380' title='bbox 1800 1368 1893 1395; x_wconf 96'><strong>allows</strong></span> <span class='ocrx_word' id='word_1_381' title='bbox 1904 1376 1958 1402; x_wconf 96'><strong>you</strong></span> <span class='ocrx_word' id='word_1_382' title='bbox 1968 1373 1997 1395; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_383' title='bbox 2008 1377 2087 1396; x_wconf 96'><strong>move</strong></span> <span class='ocrx_word' id='word_1_384' title='bbox 2097 1369 2160 1396; x_wconf 97'><strong>bars</strong></span>
<span class='ocr_line' id='line_1_45' title="bbox 1332 1368 2160 1402; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_377' title='bbox 1332 1368 1391 1395; x_wconf 90'>The</span> <span class='ocrx_word' id='word_1_378' title='bbox 1402 1368 1650 1395; x_wconf 86'>INSERT/COPY</span> <span class='ocrx_word' id='word_1_379' title='bbox 1662 1368 1789 1395; x_wconf 81'>function</span> <span class='ocrx_word' id='word_1_380' title='bbox 1800 1368 1893 1395; x_wconf 90'>allows</span> <span class='ocrx_word' id='word_1_381' title='bbox 1904 1376 1958 1402; x_wconf 91'>you</span> <span class='ocrx_word' id='word_1_382' title='bbox 1968 1373 1997 1395; x_wconf 91'>to</span> <span class='ocrx_word' id='word_1_383' title='bbox 2008 1377 2087 1396; x_wconf 91'>move</span> <span class='ocrx_word' id='word_1_384' title='bbox 2097 1369 2160 1396; x_wconf 89'>bars</span>
</span>
<span class='ocr_line' id='line_1_46' title="bbox 1297 1407 2151 1441; baseline 0.002 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_385' title='bbox 1297 1407 1369 1434; x_wconf 96'><strong>from</strong></span> <span class='ocrx_word' id='word_1_386' title='bbox 1380 1415 1433 1434; x_wconf 95'><strong>one</strong></span> <span class='ocrx_word' id='word_1_387' title='bbox 1443 1407 1565 1435; x_wconf 95'><strong>location</strong></span> <span class='ocrx_word' id='word_1_388' title='bbox 1576 1411 1605 1434; x_wconf 92'><strong>to</strong></span> <span class='ocrx_word' id='word_1_389' title='bbox 1616 1407 1796 1435; x_wconf 91'><strong>another—in</strong></span> <span class='ocrx_word' id='word_1_390' title='bbox 1806 1408 1852 1435; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_391' title='bbox 1863 1416 1937 1435; x_wconf 96'><strong>same</strong></span> <span class='ocrx_word' id='word_1_392' title='bbox 1948 1416 2067 1441; x_wconf 96'><strong>sequence</strong></span> <span class='ocrx_word' id='word_1_393' title='bbox 2068 1416 2125 1435; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_394' title='bbox 2135 1416 2151 1435; x_wconf 96'><strong>a</strong></span>
<span class='ocr_line' id='line_1_46' title="bbox 1297 1407 2151 1441; baseline 0.002 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_385' title='bbox 1297 1407 1369 1434; x_wconf 86'>from</span> <span class='ocrx_word' id='word_1_386' title='bbox 1380 1415 1433 1434; x_wconf 88'>one</span> <span class='ocrx_word' id='word_1_387' title='bbox 1443 1407 1565 1435; x_wconf 85'>location</span> <span class='ocrx_word' id='word_1_388' title='bbox 1576 1411 1605 1434; x_wconf 89'>to</span> <span class='ocrx_word' id='word_1_389' title='bbox 1616 1407 1796 1435; x_wconf 85'>another—in</span> <span class='ocrx_word' id='word_1_390' title='bbox 1806 1408 1852 1435; x_wconf 88'>the</span> <span class='ocrx_word' id='word_1_391' title='bbox 1863 1416 1937 1435; x_wconf 90'>same</span> <span class='ocrx_word' id='word_1_392' title='bbox 1948 1416 2083 1441; x_wconf 88'>sequence</span> <span class='ocrx_word' id='word_1_393' title='bbox 2093 1416 2125 1435; x_wconf 90'>or</span> <span class='ocrx_word' id='word_1_394' title='bbox 2135 1416 2151 1435; x_wconf 88'>a</span>
</span>
<span class='ocr_line' id='line_1_47' title="bbox 1296 1447 2160 1481; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_395' title='bbox 1296 1447 1421 1474; x_wconf 96'><strong>different</strong></span> <span class='ocrx_word' id='word_1_396' title='bbox 1431 1455 1491 1474; x_wconf 96'><strong>one.</strong></span> <span class='ocrx_word' id='word_1_397' title='bbox 1504 1448 1555 1474; x_wconf 96'><strong>For</strong></span> <span class='ocrx_word' id='word_1_398' title='bbox 1565 1448 1698 1481; x_wconf 95'><strong>example,</strong></span> <span class='ocrx_word' id='word_1_399' title='bbox 1710 1456 1764 1481; x_wconf 96'><strong>you</strong></span> <span class='ocrx_word' id='word_1_400' title='bbox 1775 1448 1863 1481; x_wconf 96'><strong>might</strong></span> <span class='ocrx_word' id='word_1_401' title='bbox 1873 1448 1955 1475; x_wconf 96'><strong>insert</strong></span> <span class='ocrx_word' id='word_1_402' title='bbox 1966 1456 1983 1475; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_403' title='bbox 1993 1456 2064 1481; x_wconf 96'><strong>copy</strong></span> <span class='ocrx_word' id='word_1_404' title='bbox 2074 1448 2106 1475; x_wconf 96'><strong>of</strong></span> <span class='ocrx_word' id='word_1_405' title='bbox 2115 1448 2160 1475; x_wconf 96'><strong>the</strong></span>
<span class='ocr_line' id='line_1_47' title="bbox 1296 1447 2160 1481; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_395' title='bbox 1296 1447 1421 1474; x_wconf 81'>different</span> <span class='ocrx_word' id='word_1_396' title='bbox 1431 1455 1491 1474; x_wconf 89'>one.</span> <span class='ocrx_word' id='word_1_397' title='bbox 1504 1448 1555 1474; x_wconf 87'>For</span> <span class='ocrx_word' id='word_1_398' title='bbox 1565 1448 1698 1481; x_wconf 84'>example,</span> <span class='ocrx_word' id='word_1_399' title='bbox 1710 1456 1764 1481; x_wconf 91'>you</span> <span class='ocrx_word' id='word_1_400' title='bbox 1775 1448 1863 1481; x_wconf 84'>might</span> <span class='ocrx_word' id='word_1_401' title='bbox 1873 1448 1955 1475; x_wconf 86'>insert</span> <span class='ocrx_word' id='word_1_402' title='bbox 1966 1456 1983 1475; x_wconf 92'>a</span> <span class='ocrx_word' id='word_1_403' title='bbox 1993 1456 2064 1481; x_wconf 88'>copy</span> <span class='ocrx_word' id='word_1_404' title='bbox 2074 1448 2106 1475; x_wconf 90'>of</span> <span class='ocrx_word' id='word_1_405' title='bbox 2115 1448 2160 1475; x_wconf 90'>the</span>
</span>
<span class='ocr_line' id='line_1_48' title="bbox 1297 1486 2087 1521; baseline 0 -7; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_406' title='bbox 1297 1486 1355 1514; x_wconf 96'><strong>first</strong></span> <span class='ocrx_word' id='word_1_407' title='bbox 1366 1495 1439 1514; x_wconf 96'><strong>verse</strong></span> <span class='ocrx_word' id='word_1_408' title='bbox 1449 1487 1571 1514; x_wconf 96'><strong>between</strong></span> <span class='ocrx_word' id='word_1_409' title='bbox 1582 1487 1628 1514; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_410' title='bbox 1638 1487 1740 1514; x_wconf 96'><strong>second</strong></span> <span class='ocrx_word' id='word_1_411' title='bbox 1751 1487 1838 1514; x_wconf 96'><strong>chorus</strong></span> <span class='ocrx_word' id='word_1_412' title='bbox 1841 1495 1899 1514; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_413' title='bbox 1901 1487 1975 1514; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_414' title='bbox 1985 1487 2087 1521; x_wconf 96'><strong>bridge.</strong></span>
<span class='ocr_line' id='line_1_48' title="bbox 1297 1486 2087 1521; baseline 0 -7; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_406' title='bbox 1297 1486 1355 1514; x_wconf 82'>first</span> <span class='ocrx_word' id='word_1_407' title='bbox 1366 1495 1439 1514; x_wconf 89'>verse</span> <span class='ocrx_word' id='word_1_408' title='bbox 1449 1487 1571 1514; x_wconf 89'>between</span> <span class='ocrx_word' id='word_1_409' title='bbox 1582 1487 1628 1514; x_wconf 88'>the</span> <span class='ocrx_word' id='word_1_410' title='bbox 1638 1487 1740 1514; x_wconf 87'>second</span> <span class='ocrx_word' id='word_1_411' title='bbox 1751 1487 1852 1514; x_wconf 83'>chorus</span> <span class='ocrx_word' id='word_1_412' title='bbox 1863 1487 1919 1514; x_wconf 90'>and</span> <span class='ocrx_word' id='word_1_413' title='bbox 1929 1487 1975 1514; x_wconf 88'>the</span> <span class='ocrx_word' id='word_1_414' title='bbox 1985 1487 2087 1521; x_wconf 85'>bridge.</span>
</span>
<span class='ocr_line' id='line_1_49' title="bbox 1296 1527 2047 1560; baseline 0.003 -8; x_size 32; x_descenders 6; x_ascenders 7"><span class='ocrx_word' id='word_1_415' title='bbox 1296 1527 1441 1553; x_wconf 95'><strong>DELETE</strong></span> <span class='ocrx_word' id='word_1_416' title='bbox 1453 1527 1527 1553; x_wconf 96'><strong>BARS</strong></span> <span class='ocrx_word' id='word_1_417' title='bbox 1529 1527 1681 1559; x_wconf 96'><strong>operates</strong></span> <span class='ocrx_word' id='word_1_418' title='bbox 1691 1527 1737 1553; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_419' title='bbox 1748 1535 1823 1554; x_wconf 96'><strong>same</strong></span> <span class='ocrx_word' id='word_1_420' title='bbox 1833 1535 1891 1560; x_wconf 96'><strong>way</strong></span> <span class='ocrx_word' id='word_1_421' title='bbox 1901 1531 1930 1554; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_422' title='bbox 1940 1535 2047 1554; x_wconf 96'><strong>remove</strong></span>
<span class='ocr_line' id='line_1_49' title="bbox 1296 1527 2047 1560; baseline 0.003 -8; x_size 32; x_descenders 6; x_ascenders 7"><span class='ocrx_word' id='word_1_415' title='bbox 1296 1527 1441 1553; x_wconf 88'>DELETE</span> <span class='ocrx_word' id='word_1_416' title='bbox 1453 1527 1546 1553; x_wconf 90'>BARS</span> <span class='ocrx_word' id='word_1_417' title='bbox 1557 1531 1681 1559; x_wconf 84'>operates</span> <span class='ocrx_word' id='word_1_418' title='bbox 1691 1527 1737 1553; x_wconf 86'>the</span> <span class='ocrx_word' id='word_1_419' title='bbox 1748 1535 1823 1554; x_wconf 90'>same</span> <span class='ocrx_word' id='word_1_420' title='bbox 1833 1535 1891 1560; x_wconf 93'>way</span> <span class='ocrx_word' id='word_1_421' title='bbox 1901 1531 1930 1554; x_wconf 91'>to</span> <span class='ocrx_word' id='word_1_422' title='bbox 1940 1535 2047 1554; x_wconf 90'>remove</span>
</span>
<span class='ocr_line' id='line_1_50' title="bbox 1295 1565 1577 1593; baseline 0.004 -1; x_size 34.748871; x_descenders 6.7488689; x_ascenders 9"><span class='ocrx_word' id='word_1_423' title='bbox 1295 1569 1422 1592; x_wconf 96'><strong>unwanted</strong></span> <span class='ocrx_word' id='word_1_424' title='bbox 1423 1565 1577 1593; x_wconf 95'><strong>sections,</strong></span>
<span class='ocr_line' id='line_1_50' title="bbox 1295 1565 1577 1593; baseline 0.004 -1; x_size 34.748871; x_descenders 6.7488689; x_ascenders 9"><span class='ocrx_word' id='word_1_423' title='bbox 1295 1565 1441 1592; x_wconf 88'>unwanted</span> <span class='ocrx_word' id='word_1_424' title='bbox 1452 1565 1577 1593; x_wconf 84'>sections.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_19' title="bbox 1295 1638 2215 1960">
<p class='ocr_par' id='par_1_25' lang='eng' title="bbox 1296 1638 1589 1680">
<span class='ocr_line' id='line_1_51' title="bbox 1296 1638 1589 1680; baseline 0 -9; x_size 42; x_descenders 9; x_ascenders 10"><span class='ocrx_word' id='word_1_425' title='bbox 1296 1638 1452 1680; x_wconf 96'><strong>Creating</strong></span> <span class='ocrx_word' id='word_1_426' title='bbox 1465 1648 1485 1671; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_427' title='bbox 1497 1639 1589 1680; x_wconf 96'><strong>Song</strong></span>
<span class='ocr_line' id='line_1_51' title="bbox 1296 1638 1589 1680; baseline 0 -9; x_size 42; x_descenders 9; x_ascenders 10"><span class='ocrx_word' id='word_1_425' title='bbox 1296 1638 1452 1680; x_wconf 86'>Creating</span> <span class='ocrx_word' id='word_1_426' title='bbox 1465 1648 1485 1671; x_wconf 85'>a</span> <span class='ocrx_word' id='word_1_427' title='bbox 1497 1639 1589 1680; x_wconf 87'>Song</span>
</span>
</p>
<p class='ocr_par' id='par_1_26' lang='eng' title="bbox 1295 1690 2215 1960">
<span class='ocr_line' id='line_1_52' title="bbox 1333 1690 2146 1723; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_428' title='bbox 1333 1690 1394 1717; x_wconf 96'><strong>One</strong></span> <span class='ocrx_word' id='word_1_429' title='bbox 1404 1698 1446 1717; x_wconf 96'><strong>way</strong></span> <span class='ocrx_word' id='word_1_430' title='bbox 1445 1694 1500 1723; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_431' title='bbox 1511 1694 1598 1717; x_wconf 96'><strong>create</strong></span> <span class='ocrx_word' id='word_1_432' title='bbox 1608 1698 1625 1717; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_433' title='bbox 1635 1698 1687 1717; x_wconf 95'><strong>song</strong></span> <span class='ocrx_word' id='word_1_434' title='bbox 1688 1690 1736 1723; x_wconf 95'><strong>is</strong></span> <span class='ocrx_word' id='word_1_435' title='bbox 1747 1694 1776 1717; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_436' title='bbox 1787 1690 1880 1717; x_wconf 96'><strong>record</strong></span> <span class='ocrx_word' id='word_1_437' title='bbox 1891 1690 1958 1717; x_wconf 96'><strong>each</strong></span> <span class='ocrx_word' id='word_1_438' title='bbox 1969 1690 2044 1717; x_wconf 97'><strong>track</strong></span> <span class='ocrx_word' id='word_1_439' title='bbox 2056 1690 2090 1717; x_wconf 96'><strong>all</strong></span> <span class='ocrx_word' id='word_1_440' title='bbox 2101 1690 2146 1717; x_wconf 96'><strong>the</strong></span>
<span class='ocr_line' id='line_1_52' title="bbox 1333 1690 2146 1723; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_428' title='bbox 1333 1690 1394 1717; x_wconf 88'>One</span> <span class='ocrx_word' id='word_1_429' title='bbox 1404 1698 1462 1723; x_wconf 93'>way</span> <span class='ocrx_word' id='word_1_430' title='bbox 1472 1694 1500 1717; x_wconf 89'>to</span> <span class='ocrx_word' id='word_1_431' title='bbox 1511 1694 1598 1717; x_wconf 88'>create</span> <span class='ocrx_word' id='word_1_432' title='bbox 1608 1698 1625 1717; x_wconf 88'>a</span> <span class='ocrx_word' id='word_1_433' title='bbox 1635 1698 1704 1723; x_wconf 83'>song</span> <span class='ocrx_word' id='word_1_434' title='bbox 1715 1690 1736 1717; x_wconf 90'>is</span> <span class='ocrx_word' id='word_1_435' title='bbox 1747 1694 1776 1717; x_wconf 89'>to</span> <span class='ocrx_word' id='word_1_436' title='bbox 1787 1690 1880 1717; x_wconf 86'>record</span> <span class='ocrx_word' id='word_1_437' title='bbox 1891 1690 1958 1717; x_wconf 89'>each</span> <span class='ocrx_word' id='word_1_438' title='bbox 1969 1690 2044 1717; x_wconf 87'>track</span> <span class='ocrx_word' id='word_1_439' title='bbox 2056 1690 2090 1717; x_wconf 89'>all</span> <span class='ocrx_word' id='word_1_440' title='bbox 2101 1690 2146 1717; x_wconf 88'>the</span>
</span>
<span class='ocr_line' id='line_1_53' title="bbox 1295 1729 2121 1762; baseline 0.001 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_441' title='bbox 1295 1737 1353 1762; x_wconf 96'><strong>way</strong></span> <span class='ocrx_word' id='word_1_442' title='bbox 1362 1729 1481 1762; x_wconf 96'><strong>through</strong></span> <span class='ocrx_word' id='word_1_443' title='bbox 1493 1729 1541 1762; x_wconf 95'><strong>(up</strong></span> <span class='ocrx_word' id='word_1_444' title='bbox 1552 1733 1581 1756; x_wconf 95'><strong>to</strong></span> <span class='ocrx_word' id='word_1_445' title='bbox 1592 1730 1644 1756; x_wconf 96'><strong>999</strong></span> <span class='ocrx_word' id='word_1_446' title='bbox 1654 1729 1738 1762; x_wconf 96'><strong>bars).</strong></span> <span class='ocrx_word' id='word_1_447' title='bbox 1751 1729 1878 1757; x_wconf 96'><strong>Another</strong></span> <span class='ocrx_word' id='word_1_448' title='bbox 1888 1737 1930 1757; x_wconf 96'><strong>way</strong></span> <span class='ocrx_word' id='word_1_449' title='bbox 1929 1729 1977 1762; x_wconf 96'><strong>is</strong></span> <span class='ocrx_word' id='word_1_450' title='bbox 1987 1733 2016 1757; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_451' title='bbox 2027 1729 2121 1757; x_wconf 96'><strong>record</strong></span>
<span class='ocr_line' id='line_1_53' title="bbox 1295 1729 2121 1762; baseline 0.001 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_441' title='bbox 1295 1737 1353 1762; x_wconf 87'>way</span> <span class='ocrx_word' id='word_1_442' title='bbox 1362 1729 1481 1762; x_wconf 83'>through</span> <span class='ocrx_word' id='word_1_443' title='bbox 1493 1729 1541 1762; x_wconf 90'>(up</span> <span class='ocrx_word' id='word_1_444' title='bbox 1552 1733 1581 1756; x_wconf 89'>to</span> <span class='ocrx_word' id='word_1_445' title='bbox 1592 1730 1644 1756; x_wconf 89'>999</span> <span class='ocrx_word' id='word_1_446' title='bbox 1654 1729 1738 1762; x_wconf 90'>bars).</span> <span class='ocrx_word' id='word_1_447' title='bbox 1751 1729 1878 1757; x_wconf 89'>Another</span> <span class='ocrx_word' id='word_1_448' title='bbox 1888 1737 1945 1762; x_wconf 89'>way</span> <span class='ocrx_word' id='word_1_449' title='bbox 1956 1729 1977 1757; x_wconf 90'>is</span> <span class='ocrx_word' id='word_1_450' title='bbox 1987 1733 2016 1757; x_wconf 89'>to</span> <span class='ocrx_word' id='word_1_451' title='bbox 2027 1729 2121 1757; x_wconf 86'>record</span>
</span>
<span class='ocr_line' id='line_1_54' title="bbox 1296 1768 2066 1802; baseline 0 -6; x_size 33; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_452' title='bbox 1296 1768 1362 1796; x_wconf 96'><strong>each</strong></span> <span class='ocrx_word' id='word_1_453' title='bbox 1373 1768 1448 1796; x_wconf 96'><strong>basic</strong></span> <span class='ocrx_word' id='word_1_454' title='bbox 1458 1768 1562 1796; x_wconf 96'><strong>section</strong></span> <span class='ocrx_word' id='word_1_455' title='bbox 1574 1769 1666 1802; x_wconf 96'><strong>(verse,</strong></span> <span class='ocrx_word' id='word_1_456' title='bbox 1679 1769 1779 1796; x_wconf 96'><strong>chorus,</strong></span> <span class='ocrx_word' id='word_1_457' title='bbox 1782 1769 1865 1802; x_wconf 96'><strong>etc.)</strong></span> <span class='ocrx_word' id='word_1_458' title='bbox 1876 1768 1904 1795; x_wconf 96'><strong>in</strong></span> <span class='ocrx_word' id='word_1_459' title='bbox 1914 1768 2066 1796; x_wconf 96'><strong>individual</strong></span>
<span class='ocr_line' id='line_1_54' title="bbox 1296 1768 2066 1802; baseline 0 -6; x_size 33; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_452' title='bbox 1296 1768 1362 1796; x_wconf 86'>each</span> <span class='ocrx_word' id='word_1_453' title='bbox 1373 1768 1448 1796; x_wconf 87'>basic</span> <span class='ocrx_word' id='word_1_454' title='bbox 1458 1768 1562 1796; x_wconf 83'>section</span> <span class='ocrx_word' id='word_1_455' title='bbox 1574 1769 1666 1802; x_wconf 89'>(verse,</span> <span class='ocrx_word' id='word_1_456' title='bbox 1679 1769 1788 1801; x_wconf 86'>chorus,</span> <span class='ocrx_word' id='word_1_457' title='bbox 1800 1769 1865 1802; x_wconf 83'>etc.)</span> <span class='ocrx_word' id='word_1_458' title='bbox 1876 1768 1904 1795; x_wconf 91'>in</span> <span class='ocrx_word' id='word_1_459' title='bbox 1914 1768 2066 1796; x_wconf 86'>individual</span>
</span>
<span class='ocr_line' id='line_1_55' title="bbox 1296 1808 2215 1841; baseline 0 -6; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_460' title='bbox 1296 1816 1451 1841; x_wconf 96'><strong>sequences,</strong></span> <span class='ocrx_word' id='word_1_461' title='bbox 1463 1808 1528 1835; x_wconf 96'><strong>then</strong></span> <span class='ocrx_word' id='word_1_462' title='bbox 1538 1816 1587 1835; x_wconf 96'><strong>use</strong></span> <span class='ocrx_word' id='word_1_463' title='bbox 1597 1808 1643 1835; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_464' title='bbox 1653 1809 1799 1835; x_wconf 96'><strong>CREATE</strong></span> <span class='ocrx_word' id='word_1_465' title='bbox 1810 1808 1883 1835; x_wconf 96'><strong>SONG</strong></span> <span class='ocrx_word' id='word_1_466' title='bbox 1885 1808 2050 1836; x_wconf 96'><strong>function</strong></span> <span class='ocrx_word' id='word_1_467' title='bbox 2060 1812 2089 1835; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_468' title='bbox 2103 1808 2215 1836; x_wconf 93'><strong>“chain”</strong></span>
<span class='ocr_line' id='line_1_55' title="bbox 1296 1808 2215 1841; baseline 0 -6; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_460' title='bbox 1296 1816 1451 1841; x_wconf 85'>sequences,</span> <span class='ocrx_word' id='word_1_461' title='bbox 1463 1808 1528 1835; x_wconf 86'>then</span> <span class='ocrx_word' id='word_1_462' title='bbox 1538 1816 1587 1835; x_wconf 90'>use</span> <span class='ocrx_word' id='word_1_463' title='bbox 1597 1808 1643 1835; x_wconf 89'>the</span> <span class='ocrx_word' id='word_1_464' title='bbox 1653 1809 1799 1835; x_wconf 89'>CREATE</span> <span class='ocrx_word' id='word_1_465' title='bbox 1810 1808 1911 1835; x_wconf 89'>SONG</span> <span class='ocrx_word' id='word_1_466' title='bbox 1923 1808 2050 1836; x_wconf 85'>function</span> <span class='ocrx_word' id='word_1_467' title='bbox 2060 1812 2089 1835; x_wconf 89'>to</span> <span class='ocrx_word' id='word_1_468' title='bbox 2103 1808 2215 1836; x_wconf 87'>“chain”</span>
</span>
<span class='ocr_line' id='line_1_56' title="bbox 1295 1847 2135 1881; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_469' title='bbox 1295 1848 1370 1874; x_wconf 96'><strong>them</strong></span> <span class='ocrx_word' id='word_1_470' title='bbox 1381 1848 1508 1881; x_wconf 95'><strong>together.</strong></span> <span class='ocrx_word' id='word_1_471' title='bbox 1521 1848 1667 1875; x_wconf 96'><strong>CREATE</strong></span> <span class='ocrx_word' id='word_1_472' title='bbox 1678 1848 1751 1875; x_wconf 96'><strong>SONG</strong></span> <span class='ocrx_word' id='word_1_473' title='bbox 1753 1847 1842 1874; x_wconf 96'><strong>will</strong></span> <span class='ocrx_word' id='word_1_474' title='bbox 1853 1848 1918 1875; x_wconf 96'><strong>then</strong></span> <span class='ocrx_word' id='word_1_475' title='bbox 1929 1848 2135 1881; x_wconf 96'><strong>automatically</strong></span>
<span class='ocr_line' id='line_1_56' title="bbox 1295 1847 2135 1881; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_469' title='bbox 1295 1848 1370 1874; x_wconf 91'>them</span> <span class='ocrx_word' id='word_1_470' title='bbox 1381 1848 1508 1881; x_wconf 83'>together.</span> <span class='ocrx_word' id='word_1_471' title='bbox 1521 1848 1667 1875; x_wconf 87'>CREATE</span> <span class='ocrx_word' id='word_1_472' title='bbox 1678 1848 1779 1875; x_wconf 91'>SONG</span> <span class='ocrx_word' id='word_1_473' title='bbox 1789 1847 1842 1874; x_wconf 92'>will</span> <span class='ocrx_word' id='word_1_474' title='bbox 1853 1848 1918 1875; x_wconf 86'>then</span> <span class='ocrx_word' id='word_1_475' title='bbox 1929 1848 2135 1881; x_wconf 81'>automatically</span>
</span>
<span class='ocr_line' id='line_1_57' title="bbox 1296 1887 2162 1920; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_476' title='bbox 1296 1895 1349 1920; x_wconf 96'><strong>copy</strong></span> <span class='ocrx_word' id='word_1_477' title='bbox 1349 1887 1412 1920; x_wconf 96'><strong>all</strong></span> <span class='ocrx_word' id='word_1_478' title='bbox 1422 1887 1468 1914; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_479' title='bbox 1478 1891 1552 1920; x_wconf 96'><strong>parts</strong></span> <span class='ocrx_word' id='word_1_480' title='bbox 1563 1887 1621 1914; x_wconf 95'><strong>into</strong></span> <span class='ocrx_word' id='word_1_481' title='bbox 1632 1895 1649 1914; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_482' title='bbox 1659 1895 1718 1914; x_wconf 96'><strong>new</strong></span> <span class='ocrx_word' id='word_1_483' title='bbox 1729 1895 1870 1920; x_wconf 96'><strong>sequence.</strong></span> <span class='ocrx_word' id='word_1_484' title='bbox 1884 1887 1911 1914; x_wconf 96'><strong>If</strong></span> <span class='ocrx_word' id='word_1_485' title='bbox 1919 1887 2033 1919; x_wconf 96'><strong>desired,</strong></span> <span class='ocrx_word' id='word_1_486' title='bbox 2045 1895 2099 1920; x_wconf 96'><strong>you</strong></span> <span class='ocrx_word' id='word_1_487' title='bbox 2110 1895 2162 1914; x_wconf 96'><strong>can</strong></span>
<span class='ocr_line' id='line_1_57' title="bbox 1296 1887 2162 1920; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_476' title='bbox 1296 1895 1366 1920; x_wconf 89'>copy</span> <span class='ocrx_word' id='word_1_477' title='bbox 1377 1887 1412 1914; x_wconf 88'>all</span> <span class='ocrx_word' id='word_1_478' title='bbox 1422 1887 1468 1914; x_wconf 85'>the</span> <span class='ocrx_word' id='word_1_479' title='bbox 1478 1891 1552 1920; x_wconf 86'>parts</span> <span class='ocrx_word' id='word_1_480' title='bbox 1563 1887 1621 1914; x_wconf 86'>into</span> <span class='ocrx_word' id='word_1_481' title='bbox 1632 1895 1649 1914; x_wconf 91'>a</span> <span class='ocrx_word' id='word_1_482' title='bbox 1659 1895 1718 1914; x_wconf 91'>new</span> <span class='ocrx_word' id='word_1_483' title='bbox 1729 1895 1870 1920; x_wconf 83'>sequence.</span> <span class='ocrx_word' id='word_1_484' title='bbox 1884 1887 1911 1914; x_wconf 84'>If</span> <span class='ocrx_word' id='word_1_485' title='bbox 1919 1887 2033 1919; x_wconf 89'>desired,</span> <span class='ocrx_word' id='word_1_486' title='bbox 2045 1895 2099 1920; x_wconf 92'>you</span> <span class='ocrx_word' id='word_1_487' title='bbox 2110 1895 2162 1914; x_wconf 85'>can</span>
</span>
<span class='ocr_line' id='line_1_58' title="bbox 1296 1926 2169 1960; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_488' title='bbox 1296 1934 1361 1953; x_wconf 96'><strong>even</strong></span> <span class='ocrx_word' id='word_1_489' title='bbox 1372 1930 1411 1953; x_wconf 96'><strong>set</strong></span> <span class='ocrx_word' id='word_1_490' title='bbox 1422 1926 1468 1953; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_491' title='bbox 1478 1926 1528 1953; x_wconf 96'><strong>last</strong></span> <span class='ocrx_word' id='word_1_492' title='bbox 1540 1926 1590 1953; x_wconf 96'><strong>few</strong></span> <span class='ocrx_word' id='word_1_493' title='bbox 1601 1927 1664 1953; x_wconf 96'><strong>bars</strong></span> <span class='ocrx_word' id='word_1_494' title='bbox 1675 1931 1704 1954; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_495' title='bbox 1715 1935 1795 1960; x_wconf 96'><strong>repeat</strong></span> <span class='ocrx_word' id='word_1_496' title='bbox 1795 1926 1955 1960; x_wconf 96'><strong>infinitely,</strong></span> <span class='ocrx_word' id='word_1_497' title='bbox 1968 1926 2011 1954; x_wconf 95'><strong>for</strong></span> <span class='ocrx_word' id='word_1_498' title='bbox 2022 1935 2038 1954; x_wconf 93'><strong>a</strong></span> <span class='ocrx_word' id='word_1_499' title='bbox 2049 1927 2169 1954; x_wconf 92'><strong>fadeout.</strong></span>
<span class='ocr_line' id='line_1_58' title="bbox 1296 1926 2169 1960; baseline 0.001 -7; x_size 34; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_488' title='bbox 1296 1934 1361 1953; x_wconf 89'>even</span> <span class='ocrx_word' id='word_1_489' title='bbox 1372 1930 1411 1953; x_wconf 90'>set</span> <span class='ocrx_word' id='word_1_490' title='bbox 1422 1926 1468 1953; x_wconf 88'>the</span> <span class='ocrx_word' id='word_1_491' title='bbox 1478 1926 1528 1953; x_wconf 89'>last</span> <span class='ocrx_word' id='word_1_492' title='bbox 1540 1926 1590 1953; x_wconf 88'>few</span> <span class='ocrx_word' id='word_1_493' title='bbox 1601 1927 1664 1953; x_wconf 89'>bars</span> <span class='ocrx_word' id='word_1_494' title='bbox 1675 1931 1704 1954; x_wconf 85'>to</span> <span class='ocrx_word' id='word_1_495' title='bbox 1715 1931 1806 1960; x_wconf 89'>repeat</span> <span class='ocrx_word' id='word_1_496' title='bbox 1816 1926 1955 1960; x_wconf 84'>infinitely,</span> <span class='ocrx_word' id='word_1_497' title='bbox 1968 1926 2011 1954; x_wconf 86'>for</span> <span class='ocrx_word' id='word_1_498' title='bbox 2022 1935 2038 1954; x_wconf 92'>a</span> <span class='ocrx_word' id='word_1_499' title='bbox 2049 1927 2169 1954; x_wconf 83'>fadeout.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_20' title="bbox 1293 2000 2179 2242">
<p class='ocr_par' id='par_1_27' lang='eng' title="bbox 1294 2000 1948 2040">
<span class='ocr_line' id='line_1_59' title="bbox 1294 2000 1948 2040; baseline 0.002 -8; x_size 40; x_descenders 8; x_ascenders 10"><span class='ocrx_word' id='word_1_500' title='bbox 1294 2000 1532 2040; x_wconf 95'><strong>Composition</strong></span> <span class='ocrx_word' id='word_1_501' title='bbox 1544 2000 1699 2033; x_wconf 96'><strong>Without</strong></span> <span class='ocrx_word' id='word_1_502' title='bbox 1711 2000 1948 2040; x_wconf 96'><strong>Compromise</strong></span>
<span class='ocr_line' id='line_1_59' title="bbox 1294 2000 1948 2040; baseline 0.002 -8; x_size 40; x_descenders 8; x_ascenders 10"><span class='ocrx_word' id='word_1_500' title='bbox 1294 2000 1532 2040; x_wconf 84'>Composition</span> <span class='ocrx_word' id='word_1_501' title='bbox 1544 2000 1699 2033; x_wconf 85'>Without</span> <span class='ocrx_word' id='word_1_502' title='bbox 1711 2000 1948 2040; x_wconf 85'>Compromise</span>
</span>
</p>
<p class='ocr_par' id='par_1_28' lang='eng' title="bbox 1293 2051 2179 2242">
<span class='ocr_line' id='line_1_60' title="bbox 1331 2051 2179 2085; baseline 0 -7; x_size 34; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_503' title='bbox 1331 2051 1389 2078; x_wconf 96'><strong>The</strong></span> <span class='ocrx_word' id='word_1_504' title='bbox 1399 2051 1563 2085; x_wconf 96'><strong>technology</strong></span> <span class='ocrx_word' id='word_1_505' title='bbox 1573 2059 1627 2084; x_wconf 96'><strong>you</strong></span> <span class='ocrx_word' id='word_1_506' title='bbox 1638 2060 1686 2079; x_wconf 96'><strong>use</strong></span> <span class='ocrx_word' id='word_1_507' title='bbox 1697 2051 1797 2078; x_wconf 96'><strong>should</strong></span> <span class='ocrx_word' id='word_1_508' title='bbox 1808 2059 1887 2078; x_wconf 96'><strong>never</strong></span> <span class='ocrx_word' id='word_1_509' title='bbox 1897 2052 1932 2079; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_510' title='bbox 1942 2059 1973 2079; x_wconf 96'><strong>so</strong></span> <span class='ocrx_word' id='word_1_511' title='bbox 1984 2051 2110 2085; x_wconf 67'><strong>complex</strong></span> <span class='ocrx_word' id='word_1_512' title='bbox 2120 2052 2179 2078; x_wconf 96'><strong>that</strong></span>
<span class='ocr_line' id='line_1_60' title="bbox 1331 2051 2179 2085; baseline 0 -7; x_size 34; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_503' title='bbox 1331 2051 1389 2078; x_wconf 90'>The</span> <span class='ocrx_word' id='word_1_504' title='bbox 1399 2051 1563 2085; x_wconf 83'>technology</span> <span class='ocrx_word' id='word_1_505' title='bbox 1573 2059 1627 2084; x_wconf 92'>you</span> <span class='ocrx_word' id='word_1_506' title='bbox 1638 2060 1686 2079; x_wconf 86'>use</span> <span class='ocrx_word' id='word_1_507' title='bbox 1697 2051 1797 2078; x_wconf 89'>should</span> <span class='ocrx_word' id='word_1_508' title='bbox 1808 2059 1887 2078; x_wconf 87'>never</span> <span class='ocrx_word' id='word_1_509' title='bbox 1897 2052 1932 2079; x_wconf 91'>be</span> <span class='ocrx_word' id='word_1_510' title='bbox 1942 2059 1973 2079; x_wconf 89'>so</span> <span class='ocrx_word' id='word_1_511' title='bbox 1984 2051 2110 2085; x_wconf 85'>complex</span> <span class='ocrx_word' id='word_1_512' title='bbox 2120 2052 2179 2078; x_wconf 86'>that</span>
</span>
<span class='ocr_line' id='line_1_61' title="bbox 1294 2090 2157 2124; baseline 0 -6; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_513' title='bbox 1294 2090 1313 2118; x_wconf 96'><strong>it</strong></span> <span class='ocrx_word' id='word_1_514' title='bbox 1323 2091 1459 2118; x_wconf 96'><strong>interferes</strong></span> <span class='ocrx_word' id='word_1_515' title='bbox 1470 2091 1535 2118; x_wconf 96'><strong>with</strong></span> <span class='ocrx_word' id='word_1_516' title='bbox 1545 2091 1591 2118; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_517' title='bbox 1602 2091 1715 2118; x_wconf 96'><strong>creative</strong></span> <span class='ocrx_word' id='word_1_518' title='bbox 1725 2099 1841 2124; x_wconf 93'><strong>process.</strong></span> <span class='ocrx_word' id='word_1_519' title='bbox 1854 2091 1947 2118; x_wconf 92'><strong>Thats</strong></span> <span class='ocrx_word' id='word_1_520' title='bbox 1957 2091 2086 2124; x_wconf 96'><strong>precisely</strong></span> <span class='ocrx_word' id='word_1_521' title='bbox 2096 2091 2157 2124; x_wconf 96'><strong>why</strong></span>
<span class='ocr_line' id='line_1_61' title="bbox 1294 2090 2157 2124; baseline 0 -6; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_513' title='bbox 1294 2090 1313 2118; x_wconf 86'>it</span> <span class='ocrx_word' id='word_1_514' title='bbox 1323 2091 1459 2118; x_wconf 87'>interferes</span> <span class='ocrx_word' id='word_1_515' title='bbox 1470 2091 1535 2118; x_wconf 84'>with</span> <span class='ocrx_word' id='word_1_516' title='bbox 1545 2091 1591 2118; x_wconf 88'>the</span> <span class='ocrx_word' id='word_1_517' title='bbox 1602 2091 1715 2118; x_wconf 90'>creative</span> <span class='ocrx_word' id='word_1_518' title='bbox 1725 2099 1841 2124; x_wconf 83'>process.</span> <span class='ocrx_word' id='word_1_519' title='bbox 1854 2091 1947 2118; x_wconf 78'>Thats</span> <span class='ocrx_word' id='word_1_520' title='bbox 1957 2091 2086 2124; x_wconf 86'>precisely</span> <span class='ocrx_word' id='word_1_521' title='bbox 2096 2091 2157 2124; x_wconf 89'>why</span>
</span>
<span class='ocr_line' id='line_1_62' title="bbox 1293 2130 2156 2164; baseline 0 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_522' title='bbox 1293 2130 1339 2157; x_wconf 93'><strong>the</strong></span> <span class='ocrx_word' id='word_1_523' title='bbox 1350 2130 1562 2164; x_wconf 90'><strong>LinnSequencer</strong></span> <span class='ocrx_word' id='word_1_524' title='bbox 1564 2130 1607 2157; x_wconf 97'><strong>is</strong></span> <span class='ocrx_word' id='word_1_525' title='bbox 1619 2130 1747 2164; x_wconf 96'><strong>designed</strong></span> <span class='ocrx_word' id='word_1_526' title='bbox 1758 2134 1787 2157; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_527' title='bbox 1798 2130 1834 2157; x_wconf 96'><strong>let</strong></span> <span class='ocrx_word' id='word_1_528' title='bbox 1844 2138 1899 2163; x_wconf 96'><strong>you</strong></span> <span class='ocrx_word' id='word_1_529' title='bbox 1910 2138 2051 2164; x_wconf 96'><strong>compose,</strong></span> <span class='ocrx_word' id='word_1_530' title='bbox 2063 2130 2156 2157; x_wconf 96'><strong>record</strong></span>
<span class='ocr_line' id='line_1_62' title="bbox 1293 2130 2156 2164; baseline 0 -7; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_522' title='bbox 1293 2130 1339 2157; x_wconf 90'>the</span> <span class='ocrx_word' id='word_1_523' title='bbox 1350 2130 1576 2164; x_wconf 80'>LinnSequencer</span> <span class='ocrx_word' id='word_1_524' title='bbox 1586 2130 1607 2157; x_wconf 89'>is</span> <span class='ocrx_word' id='word_1_525' title='bbox 1619 2130 1747 2164; x_wconf 87'>designed</span> <span class='ocrx_word' id='word_1_526' title='bbox 1758 2134 1787 2157; x_wconf 87'>to</span> <span class='ocrx_word' id='word_1_527' title='bbox 1798 2130 1834 2157; x_wconf 89'>let</span> <span class='ocrx_word' id='word_1_528' title='bbox 1844 2138 1899 2163; x_wconf 93'>you</span> <span class='ocrx_word' id='word_1_529' title='bbox 1910 2138 2051 2164; x_wconf 88'>compose,</span> <span class='ocrx_word' id='word_1_530' title='bbox 2063 2130 2156 2157; x_wconf 87'>record</span>
</span>
<span class='ocr_line' id='line_1_63' title="bbox 1294 2169 2145 2203; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_531' title='bbox 1294 2178 1330 2197; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_532' title='bbox 1331 2169 1414 2197; x_wconf 96'><strong>edit</strong></span> <span class='ocrx_word' id='word_1_533' title='bbox 1425 2170 1503 2197; x_wconf 96'><strong>while</strong></span> <span class='ocrx_word' id='word_1_534' title='bbox 1514 2170 1643 2203; x_wconf 96'><strong>devoting</strong></span> <span class='ocrx_word' id='word_1_535' title='bbox 1653 2178 1721 2203; x_wconf 96'><strong>your</strong></span> <span class='ocrx_word' id='word_1_536' title='bbox 1731 2170 1882 2197; x_wconf 96'><strong>undivided</strong></span> <span class='ocrx_word' id='word_1_537' title='bbox 1893 2170 2027 2197; x_wconf 96'><strong>attention</strong></span> <span class='ocrx_word' id='word_1_538' title='bbox 2037 2174 2067 2197; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_539' title='bbox 2077 2178 2145 2203; x_wconf 96'><strong>your</strong></span>
<span class='ocr_line' id='line_1_63' title="bbox 1294 2169 2145 2203; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_531' title='bbox 1294 2170 1349 2197; x_wconf 90'>and</span> <span class='ocrx_word' id='word_1_532' title='bbox 1360 2169 1414 2197; x_wconf 83'>edit</span> <span class='ocrx_word' id='word_1_533' title='bbox 1425 2170 1503 2197; x_wconf 89'>while</span> <span class='ocrx_word' id='word_1_534' title='bbox 1514 2170 1643 2203; x_wconf 90'>devoting</span> <span class='ocrx_word' id='word_1_535' title='bbox 1653 2178 1721 2203; x_wconf 92'>your</span> <span class='ocrx_word' id='word_1_536' title='bbox 1731 2170 1882 2197; x_wconf 88'>undivided</span> <span class='ocrx_word' id='word_1_537' title='bbox 1893 2170 2027 2197; x_wconf 86'>attention</span> <span class='ocrx_word' id='word_1_538' title='bbox 2037 2174 2067 2197; x_wconf 91'>to</span> <span class='ocrx_word' id='word_1_539' title='bbox 2077 2178 2145 2203; x_wconf 90'>your</span>
</span>
<span class='ocr_line' id='line_1_64' title="bbox 1294 2209 2126 2242; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_540' title='bbox 1294 2209 1388 2236; x_wconf 95'><strong>music.</strong></span> <span class='ocrx_word' id='word_1_541' title='bbox 1402 2209 1451 2236; x_wconf 96'><strong>See</strong></span> <span class='ocrx_word' id='word_1_542' title='bbox 1460 2217 1529 2242; x_wconf 96'><strong>your</strong></span> <span class='ocrx_word' id='word_1_543' title='bbox 1540 2209 1611 2236; x_wconf 96'><strong>Linn</strong></span> <span class='ocrx_word' id='word_1_544' title='bbox 1621 2209 1712 2236; x_wconf 95'><strong>dealer</strong></span> <span class='ocrx_word' id='word_1_545' title='bbox 1722 2209 1806 2242; x_wconf 95'><strong>today</strong></span> <span class='ocrx_word' id='word_1_546' title='bbox 1817 2209 1859 2236; x_wconf 95'><strong>for</strong></span> <span class='ocrx_word' id='word_1_547' title='bbox 1870 2217 1887 2236; x_wconf 96'><strong>a</strong></span> <span class='ocrx_word' id='word_1_548' title='bbox 1897 2209 2126 2236; x_wconf 96'><strong>demonstration!</strong></span>
<span class='ocr_line' id='line_1_64' title="bbox 1294 2209 2126 2242; baseline 0 -6; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_540' title='bbox 1294 2209 1388 2236; x_wconf 88'>music.</span> <span class='ocrx_word' id='word_1_541' title='bbox 1402 2209 1451 2236; x_wconf 89'>See</span> <span class='ocrx_word' id='word_1_542' title='bbox 1460 2217 1529 2242; x_wconf 92'>your</span> <span class='ocrx_word' id='word_1_543' title='bbox 1540 2209 1611 2236; x_wconf 87'>Linn</span> <span class='ocrx_word' id='word_1_544' title='bbox 1621 2209 1712 2236; x_wconf 86'>dealer</span> <span class='ocrx_word' id='word_1_545' title='bbox 1722 2209 1806 2242; x_wconf 85'>today</span> <span class='ocrx_word' id='word_1_546' title='bbox 1817 2209 1859 2236; x_wconf 87'>for</span> <span class='ocrx_word' id='word_1_547' title='bbox 1870 2217 1887 2236; x_wconf 88'>a</span> <span class='ocrx_word' id='word_1_548' title='bbox 1897 2209 2126 2236; x_wconf 76'>demonstration!</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_21' title="bbox 347 2343 2171 2378">
<p class='ocr_par' id='par_1_29' lang='eng' title="bbox 347 2343 2171 2378">
<span class='ocr_line' id='line_1_65' title="bbox 347 2343 2171 2378; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_549' title='bbox 347 2350 361 2363; x_wconf 58'><strong>*</strong></span> <span class='ocrx_word' id='word_1_550' title='bbox 373 2343 483 2377; x_wconf 96'><strong>Simple,</strong></span> <span class='ocrx_word' id='word_1_551' title='bbox 495 2352 559 2377; x_wconf 96'><strong>easy</strong></span> <span class='ocrx_word' id='word_1_552' title='bbox 569 2348 598 2371; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_553' title='bbox 609 2344 683 2371; x_wconf 93'><strong>learn</strong></span> <span class='ocrx_word' id='word_1_554' title='bbox 694 2344 922 2378; x_wconf 91'><strong>operation—the</strong></span> <span class='ocrx_word' id='word_1_555' title='bbox 934 2345 967 2372; x_wconf 96'><strong>32</strong></span> <span class='ocrx_word' id='word_1_556' title='bbox 978 2345 1116 2372; x_wconf 96'><strong>character</strong></span> <span class='ocrx_word' id='word_1_557' title='bbox 1126 2345 1200 2372; x_wconf 96'><strong>LCD</strong></span> <span class='ocrx_word' id='word_1_558' title='bbox 1211 2345 1316 2378; x_wconf 96'><strong>display</strong></span> <span class='ocrx_word' id='word_1_559' title='bbox 1326 2345 1424 2378; x_wconf 97'><strong>clearly</strong></span> <span class='ocrx_word' id='word_1_560' title='bbox 1434 2345 1528 2378; x_wconf 96'><strong>guides</strong></span> <span class='ocrx_word' id='word_1_561' title='bbox 1539 2353 1594 2378; x_wconf 97'><strong>you</strong></span> <span class='ocrx_word' id='word_1_562' title='bbox 1604 2345 1705 2378; x_wconf 96'><strong>through</strong></span> <span class='ocrx_word' id='word_1_563' title='bbox 1706 2344 1770 2371; x_wconf 96'><strong>all</strong></span> <span class='ocrx_word' id='word_1_564' title='bbox 1781 2344 1947 2377; x_wconf 96'><strong>operations.</strong></span> <span class='ocrx_word' id='word_1_565' title='bbox 1961 2344 1989 2371; x_wconf 96'><strong>If</strong></span> <span class='ocrx_word' id='word_1_566' title='bbox 1997 2344 2112 2376; x_wconf 96'><strong>needed,</strong></span> <span class='ocrx_word' id='word_1_567' title='bbox 2125 2345 2171 2371; x_wconf 96'><strong>the</strong></span>
<span class='ocr_line' id='line_1_65' title="bbox 347 2343 2171 2378; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_549' title='bbox 347 2350 361 2363; x_wconf 69'><strong>0</strong></span> <span class='ocrx_word' id='word_1_550' title='bbox 373 2343 483 2377; x_wconf 83'>Simple,</span> <span class='ocrx_word' id='word_1_551' title='bbox 495 2352 559 2377; x_wconf 89'>easy</span> <span class='ocrx_word' id='word_1_552' title='bbox 569 2348 598 2371; x_wconf 91'>to</span> <span class='ocrx_word' id='word_1_553' title='bbox 609 2344 683 2371; x_wconf 89'>learn</span> <span class='ocrx_word' id='word_1_554' title='bbox 694 2344 922 2378; x_wconf 80'>operation—the</span> <span class='ocrx_word' id='word_1_555' title='bbox 934 2345 967 2372; x_wconf 88'>32</span> <span class='ocrx_word' id='word_1_556' title='bbox 978 2345 1116 2372; x_wconf 86'>character</span> <span class='ocrx_word' id='word_1_557' title='bbox 1126 2345 1200 2372; x_wconf 92'>LCD</span> <span class='ocrx_word' id='word_1_558' title='bbox 1211 2345 1316 2378; x_wconf 90'>display</span> <span class='ocrx_word' id='word_1_559' title='bbox 1326 2345 1424 2378; x_wconf 88'>clearly</span> <span class='ocrx_word' id='word_1_560' title='bbox 1434 2345 1528 2378; x_wconf 86'>guides</span> <span class='ocrx_word' id='word_1_561' title='bbox 1539 2353 1594 2378; x_wconf 91'>you</span> <span class='ocrx_word' id='word_1_562' title='bbox 1604 2345 1724 2378; x_wconf 87'>through</span> <span class='ocrx_word' id='word_1_563' title='bbox 1735 2344 1770 2371; x_wconf 88'>all</span> <span class='ocrx_word' id='word_1_564' title='bbox 1781 2344 1947 2377; x_wconf 86'>operations.</span> <span class='ocrx_word' id='word_1_565' title='bbox 1961 2344 1989 2371; x_wconf 88'>If</span> <span class='ocrx_word' id='word_1_566' title='bbox 1997 2344 2112 2376; x_wconf 88'>needed,</span> <span class='ocrx_word' id='word_1_567' title='bbox 2125 2345 2171 2371; x_wconf 88'>the</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_22' title="bbox 373 2381 1083 2415">
<p class='ocr_par' id='par_1_30' lang='eng' title="bbox 373 2381 1083 2415">
<span class='ocr_line' id='line_1_66' title="bbox 373 2381 1083 2415; baseline 0.003 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_568' title='bbox 373 2381 448 2407; x_wconf 96'><strong>HELP</strong></span> <span class='ocrx_word' id='word_1_569' title='bbox 450 2381 583 2408; x_wconf 96'><strong>button</strong></span> <span class='ocrx_word' id='word_1_570' title='bbox 594 2381 711 2415; x_wconf 96'><strong>displays</strong></span> <span class='ocrx_word' id='word_1_571' title='bbox 722 2382 875 2409; x_wconf 96'><strong>additional</strong></span> <span class='ocrx_word' id='word_1_572' title='bbox 886 2382 1083 2415; x_wconf 96'><strong>explanations.</strong></span>
<span class='ocr_line' id='line_1_66' title="bbox 373 2381 1083 2415; baseline 0.003 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_568' title='bbox 373 2381 472 2407; x_wconf 85'>HELP</span> <span class='ocrx_word' id='word_1_569' title='bbox 483 2381 583 2408; x_wconf 85'>button</span> <span class='ocrx_word' id='word_1_570' title='bbox 594 2381 711 2415; x_wconf 87'>displays</span> <span class='ocrx_word' id='word_1_571' title='bbox 722 2382 875 2409; x_wconf 89'>additional</span> <span class='ocrx_word' id='word_1_572' title='bbox 886 2382 1083 2415; x_wconf 87'>explanations.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_23' title="bbox 347 2427 2145 2507">
<p class='ocr_par' id='par_1_31' lang='eng' title="bbox 347 2427 2145 2507">
<span class='ocr_line' id='line_1_67' title="bbox 347 2427 1468 2461; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_573' title='bbox 347 2432 361 2446; x_wconf 70'><strong>*</strong></span> <span class='ocrx_word' id='word_1_574' title='bbox 373 2427 612 2454; x_wconf 91'><strong>Non-destructive</strong></span> <span class='ocrx_word' id='word_1_575' title='bbox 622 2427 914 2461; x_wconf 89'><strong>recording—existing</strong></span> <span class='ocrx_word' id='word_1_576' title='bbox 924 2432 1002 2455; x_wconf 96'><strong>notes</strong></span> <span class='ocrx_word' id='word_1_577' title='bbox 1013 2436 1057 2455; x_wconf 96'><strong>are</strong></span> <span class='ocrx_word' id='word_1_578' title='bbox 1068 2432 1116 2455; x_wconf 96'><strong>not</strong></span> <span class='ocrx_word' id='word_1_579' title='bbox 1127 2428 1220 2455; x_wconf 96'><strong>erased</strong></span> <span class='ocrx_word' id='word_1_580' title='bbox 1231 2428 1309 2455; x_wconf 96'><strong>while</strong></span> <span class='ocrx_word' id='word_1_581' title='bbox 1319 2428 1468 2461; x_wconf 92'><strong>recording.</strong></span>
<span class='ocr_line' id='line_1_67' title="bbox 347 2427 1468 2461; baseline 0.002 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_573' title='bbox 347 2432 361 2446; x_wconf 69'><strong>0</strong></span> <span class='ocrx_word' id='word_1_574' title='bbox 373 2427 612 2454; x_wconf 88'>Non-destructive</span> <span class='ocrx_word' id='word_1_575' title='bbox 622 2427 914 2461; x_wconf 85'>recording—existing</span> <span class='ocrx_word' id='word_1_576' title='bbox 924 2432 1002 2455; x_wconf 90'>notes</span> <span class='ocrx_word' id='word_1_577' title='bbox 1013 2436 1057 2455; x_wconf 88'>are</span> <span class='ocrx_word' id='word_1_578' title='bbox 1068 2432 1116 2455; x_wconf 84'>not</span> <span class='ocrx_word' id='word_1_579' title='bbox 1127 2428 1220 2455; x_wconf 87'>erased</span> <span class='ocrx_word' id='word_1_580' title='bbox 1231 2428 1309 2455; x_wconf 91'>while</span> <span class='ocrx_word' id='word_1_581' title='bbox 1319 2428 1468 2461; x_wconf 87'>recording.</span>
</span>
<span class='ocr_line' id='line_1_68' title="bbox 347 2473 2145 2507; baseline 0.001 -8; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_582' title='bbox 347 2478 361 2492; x_wconf 70'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_583' title='bbox 372 2473 433 2500; x_wconf 93'><strong>Two</strong></span> <span class='ocrx_word' id='word_1_584' title='bbox 444 2473 689 2500; x_wconf 90'><strong>FOOTSWITCH</strong></span> <span class='ocrx_word' id='word_1_585' title='bbox 701 2474 818 2500; x_wconf 95'><strong>INPUTS</strong></span> <span class='ocrx_word' id='word_1_586' title='bbox 819 2474 894 2501; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_587' title='bbox 893 2473 939 2507; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_588' title='bbox 941 2473 1091 2507; x_wconf 96'><strong>assigned</strong></span> <span class='ocrx_word' id='word_1_589' title='bbox 1101 2478 1130 2501; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_590' title='bbox 1141 2474 1271 2507; x_wconf 96'><strong>remotely</strong></span> <span class='ocrx_word' id='word_1_591' title='bbox 1281 2473 1387 2501; x_wconf 96'><strong>control</strong></span> <span class='ocrx_word' id='word_1_592' title='bbox 1398 2482 1481 2507; x_wconf 96'><strong>many</strong></span> <span class='ocrx_word' id='word_1_593' title='bbox 1491 2473 1523 2501; x_wconf 96'><strong>of</strong></span> <span class='ocrx_word' id='word_1_594' title='bbox 1531 2474 1578 2501; x_wconf 96'><strong>the</strong></span> <span class='ocrx_word' id='word_1_595' title='bbox 1588 2473 1750 2506; x_wconf 96'><strong>commonly</strong></span> <span class='ocrx_word' id='word_1_596' title='bbox 1760 2473 1827 2500; x_wconf 96'><strong>used</strong></span> <span class='ocrx_word' id='word_1_597' title='bbox 1840 2473 1991 2505; x_wconf 96'><strong>functions,</strong></span> <span class='ocrx_word' id='word_1_598' title='bbox 2003 2473 2145 2507; x_wconf 96'><strong>including</strong></span>
<span class='ocr_line' id='line_1_68' title="bbox 347 2473 2145 2507; baseline 0.001 -8; x_size 35; x_descenders 7; x_ascenders 9"><span class='ocrx_word' id='word_1_582' title='bbox 347 2478 361 2492; x_wconf 71'><strong>0</strong></span> <span class='ocrx_word' id='word_1_583' title='bbox 372 2473 433 2500; x_wconf 90'>Two</span> <span class='ocrx_word' id='word_1_584' title='bbox 444 2473 689 2500; x_wconf 89'>FOOTSWITCH</span> <span class='ocrx_word' id='word_1_585' title='bbox 701 2474 837 2501; x_wconf 79'>INPUTS</span> <span class='ocrx_word' id='word_1_586' title='bbox 848 2481 910 2507; x_wconf 89'>may</span> <span class='ocrx_word' id='word_1_587' title='bbox 921 2473 955 2500; x_wconf 91'>be</span> <span class='ocrx_word' id='word_1_588' title='bbox 966 2473 1091 2507; x_wconf 85'>assigned</span> <span class='ocrx_word' id='word_1_589' title='bbox 1101 2478 1130 2501; x_wconf 81'>to</span> <span class='ocrx_word' id='word_1_590' title='bbox 1141 2474 1271 2507; x_wconf 84'>remotely</span> <span class='ocrx_word' id='word_1_591' title='bbox 1281 2473 1387 2501; x_wconf 86'>control</span> <span class='ocrx_word' id='word_1_592' title='bbox 1398 2482 1481 2507; x_wconf 86'>many</span> <span class='ocrx_word' id='word_1_593' title='bbox 1491 2473 1523 2501; x_wconf 90'>of</span> <span class='ocrx_word' id='word_1_594' title='bbox 1531 2474 1578 2501; x_wconf 89'>the</span> <span class='ocrx_word' id='word_1_595' title='bbox 1588 2473 1750 2506; x_wconf 82'>commonly</span> <span class='ocrx_word' id='word_1_596' title='bbox 1760 2473 1827 2500; x_wconf 88'>used</span> <span class='ocrx_word' id='word_1_597' title='bbox 1840 2473 1991 2505; x_wconf 77'>functions,</span> <span class='ocrx_word' id='word_1_598' title='bbox 2003 2473 2145 2507; x_wconf 84'>including</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_24' title="bbox 372 2510 1090 2543">
<p class='ocr_par' id='par_1_32' lang='eng' title="bbox 372 2510 1090 2543">
<span class='ocr_line' id='line_1_69' title="bbox 372 2510 1090 2543; baseline 0.001 -6; x_size 35.625; x_descenders 8.90625; x_ascenders 8.90625"><span class='ocrx_word' id='word_1_599' title='bbox 372 2510 500 2542; x_wconf 96'><strong>ERASE,</strong></span> <span class='ocrx_word' id='word_1_600' title='bbox 513 2511 660 2542; x_wconf 92'><strong>REPEAT,</strong></span> <span class='ocrx_word' id='word_1_601' title='bbox 673 2511 883 2543; x_wconf 89'><strong>PLAY/STOP,</strong></span> <span class='ocrx_word' id='word_1_602' title='bbox 896 2519 927 2538; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_603' title='bbox 939 2511 1090 2538; x_wconf 96'><strong>LOCATE.</strong></span>
<span class='ocr_line' id='line_1_69' title="bbox 372 2510 1090 2543; baseline 0.001 -6; x_size 35.625; x_descenders 8.90625; x_ascenders 8.90625"><span class='ocrx_word' id='word_1_599' title='bbox 372 2510 500 2542; x_wconf 88'>ERASE,</span> <span class='ocrx_word' id='word_1_600' title='bbox 513 2511 660 2542; x_wconf 86'>REPEAT,</span> <span class='ocrx_word' id='word_1_601' title='bbox 673 2511 883 2543; x_wconf 80'>PLAY/STOP,</span> <span class='ocrx_word' id='word_1_602' title='bbox 896 2519 927 2538; x_wconf 90'>or</span> <span class='ocrx_word' id='word_1_603' title='bbox 939 2511 1090 2538; x_wconf 83'>LOCATE.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_25' title="bbox 347 2556 1768 2590">
<p class='ocr_par' id='par_1_33' lang='eng' title="bbox 347 2556 1768 2590">
<span class='ocr_line' id='line_1_70' title="bbox 347 2556 1768 2590; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_604' title='bbox 347 2561 361 2575; x_wconf 86'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_605' title='bbox 372 2556 433 2583; x_wconf 85'><strong>Iwo</strong></span> <span class='ocrx_word' id='word_1_606' title='bbox 443 2556 612 2583; x_wconf 96'><strong>TRIGGER</strong></span> <span class='ocrx_word' id='word_1_607' title='bbox 623 2556 778 2584; x_wconf 96'><strong>OUTPUTS</strong></span> <span class='ocrx_word' id='word_1_608' title='bbox 780 2557 871 2590; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_609' title='bbox 881 2557 915 2584; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_610' title='bbox 925 2557 1119 2590; x_wconf 96'><strong>programmed</strong></span> <span class='ocrx_word' id='word_1_611' title='bbox 1129 2561 1158 2584; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_612' title='bbox 1169 2561 1270 2590; x_wconf 96'><strong>output</strong></span> <span class='ocrx_word' id='word_1_613' title='bbox 1281 2557 1370 2590; x_wconf 96'><strong>pulses</strong></span> <span class='ocrx_word' id='word_1_614' title='bbox 1381 2561 1409 2584; x_wconf 96'><strong>at</strong></span> <span class='ocrx_word' id='word_1_615' title='bbox 1419 2565 1472 2590; x_wconf 96'><strong>any</strong></span> <span class='ocrx_word' id='word_1_616' title='bbox 1483 2557 1598 2584; x_wconf 96'><strong>selected</strong></span> <span class='ocrx_word' id='word_1_617' title='bbox 1608 2561 1673 2584; x_wconf 97'><strong>note</strong></span> <span class='ocrx_word' id='word_1_618' title='bbox 1683 2556 1768 2583; x_wconf 96'><strong>value.</strong></span>
<span class='ocr_line' id='line_1_70' title="bbox 347 2556 1768 2590; baseline 0.001 -8; x_size 34; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_604' title='bbox 347 2561 361 2575; x_wconf 71'><strong>0</strong></span> <span class='ocrx_word' id='word_1_605' title='bbox 372 2556 433 2583; x_wconf 91'>Two</span> <span class='ocrx_word' id='word_1_606' title='bbox 443 2556 612 2583; x_wconf 83'>TRIGGER</span> <span class='ocrx_word' id='word_1_607' title='bbox 623 2556 797 2584; x_wconf 84'>OUTPUTS</span> <span class='ocrx_word' id='word_1_608' title='bbox 808 2565 871 2590; x_wconf 89'>may</span> <span class='ocrx_word' id='word_1_609' title='bbox 881 2557 915 2584; x_wconf 91'>be</span> <span class='ocrx_word' id='word_1_610' title='bbox 925 2557 1119 2590; x_wconf 84'>programmed</span> <span class='ocrx_word' id='word_1_611' title='bbox 1129 2561 1158 2584; x_wconf 93'>to</span> <span class='ocrx_word' id='word_1_612' title='bbox 1169 2561 1270 2590; x_wconf 87'>output</span> <span class='ocrx_word' id='word_1_613' title='bbox 1281 2557 1370 2590; x_wconf 88'>pulses</span> <span class='ocrx_word' id='word_1_614' title='bbox 1381 2561 1409 2584; x_wconf 92'>at</span> <span class='ocrx_word' id='word_1_615' title='bbox 1419 2565 1472 2590; x_wconf 90'>any</span> <span class='ocrx_word' id='word_1_616' title='bbox 1483 2557 1598 2584; x_wconf 86'>selected</span> <span class='ocrx_word' id='word_1_617' title='bbox 1608 2561 1673 2584; x_wconf 89'>note</span> <span class='ocrx_word' id='word_1_618' title='bbox 1683 2556 1768 2583; x_wconf 89'>value.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_26' title="bbox 347 2601 1226 2635">
<p class='ocr_par' id='par_1_34' lang='eng' title="bbox 347 2601 1226 2635">
<span class='ocr_line' id='line_1_71' title="bbox 347 2601 1226 2635; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_619' title='bbox 347 2607 361 2620; x_wconf 58'><strong>©</strong></span> <span class='ocrx_word' id='word_1_620' title='bbox 372 2601 434 2628; x_wconf 96'><strong>Will</strong></span> <span class='ocrx_word' id='word_1_621' title='bbox 445 2609 510 2634; x_wconf 96'><strong>sync</strong></span> <span class='ocrx_word' id='word_1_622' title='bbox 521 2605 549 2628; x_wconf 96'><strong>to</strong></span> <span class='ocrx_word' id='word_1_623' title='bbox 561 2602 690 2629; x_wconf 93'><strong>standard</strong></span> <span class='ocrx_word' id='word_1_624' title='bbox 701 2602 864 2629; x_wconf 91'><strong>LinnDrum</strong></span> <span class='ocrx_word' id='word_1_625' title='bbox 875 2610 907 2629; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_626' title='bbox 918 2602 989 2629; x_wconf 96'><strong>Linn</strong></span> <span class='ocrx_word' id='word_1_627' title='bbox 1000 2603 1069 2629; x_wconf 95'><strong>9000</strong></span> <span class='ocrx_word' id='word_1_628' title='bbox 1080 2610 1129 2635; x_wconf 96'><strong>sync</strong></span> <span class='ocrx_word' id='word_1_629' title='bbox 1131 2607 1226 2630; x_wconf 96'><strong>tone.</strong></span>
<span class='ocr_line' id='line_1_71' title="bbox 347 2601 1226 2635; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_619' title='bbox 347 2607 361 2620; x_wconf 65'><strong>0</strong></span> <span class='ocrx_word' id='word_1_620' title='bbox 372 2601 434 2628; x_wconf 88'>Will</span> <span class='ocrx_word' id='word_1_621' title='bbox 445 2609 510 2634; x_wconf 89'>sync</span> <span class='ocrx_word' id='word_1_622' title='bbox 521 2605 549 2628; x_wconf 84'>to</span> <span class='ocrx_word' id='word_1_623' title='bbox 561 2602 690 2629; x_wconf 88'>standard</span> <span class='ocrx_word' id='word_1_624' title='bbox 701 2602 864 2629; x_wconf 86'>LinnDrum</span> <span class='ocrx_word' id='word_1_625' title='bbox 875 2610 907 2629; x_wconf 91'>or</span> <span class='ocrx_word' id='word_1_626' title='bbox 918 2602 989 2629; x_wconf 89'>Linn</span> <span class='ocrx_word' id='word_1_627' title='bbox 1000 2603 1069 2629; x_wconf 90'>9000</span> <span class='ocrx_word' id='word_1_628' title='bbox 1080 2610 1145 2635; x_wconf 87'>sync</span> <span class='ocrx_word' id='word_1_629' title='bbox 1155 2607 1226 2630; x_wconf 89'>tone.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_27' title="bbox 347 2648 2100 2727">
<p class='ocr_par' id='par_1_35' lang='eng' title="bbox 347 2648 2100 2727">
<span class='ocr_line' id='line_1_72' title="bbox 347 2648 1664 2682; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_630' title='bbox 347 2654 360 2667; x_wconf 45'><strong>©</strong></span> <span class='ocrx_word' id='word_1_631' title='bbox 372 2648 483 2675; x_wconf 95'><strong>Utilizes</strong></span> <span class='ocrx_word' id='word_1_632' title='bbox 493 2648 564 2680; x_wconf 96'><strong>ultra</strong></span> <span class='ocrx_word' id='word_1_633' title='bbox 573 2648 744 2682; x_wconf 96'><strong>high-speed,</strong></span> <span class='ocrx_word' id='word_1_634' title='bbox 757 2649 772 2676; x_wconf 95'><strong>8</strong></span> <span class='ocrx_word' id='word_1_635' title='bbox 783 2649 862 2675; x_wconf 94'><strong>MHz</strong></span> <span class='ocrx_word' id='word_1_636' title='bbox 873 2649 954 2676; x_wconf 96'><strong>80186</strong></span> <span class='ocrx_word' id='word_1_637' title='bbox 965 2649 994 2676; x_wconf 96'><strong>16</strong></span> <span class='ocrx_word' id='word_1_638' title='bbox 1004 2648 1043 2676; x_wconf 96'><strong>bit</strong></span> <span class='ocrx_word' id='word_1_639' title='bbox 1054 2653 1197 2682; x_wconf 96'><strong>computer</strong></span> <span class='ocrx_word' id='word_1_640' title='bbox 1208 2649 1350 2682; x_wconf 96'><strong>internally</strong></span> <span class='ocrx_word' id='word_1_641' title='bbox 1361 2649 1403 2676; x_wconf 96'><strong>for</strong></span> <span class='ocrx_word' id='word_1_642' title='bbox 1414 2649 1502 2676; x_wconf 96'><strong>FAST</strong></span> <span class='ocrx_word' id='word_1_643' title='bbox 1512 2648 1664 2682; x_wconf 96'><strong>operation.</strong></span>
<span class='ocr_line' id='line_1_72' title="bbox 347 2648 1664 2682; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_630' title='bbox 347 2654 360 2667; x_wconf 75'>&#39;</span> <span class='ocrx_word' id='word_1_631' title='bbox 372 2648 483 2675; x_wconf 89'>Utilizes</span> <span class='ocrx_word' id='word_1_632' title='bbox 493 2648 564 2680; x_wconf 75'>ultra</span> <span class='ocrx_word' id='word_1_633' title='bbox 573 2648 744 2682; x_wconf 86'>highspeed,</span> <span class='ocrx_word' id='word_1_634' title='bbox 757 2649 772 2676; x_wconf 91'>8</span> <span class='ocrx_word' id='word_1_635' title='bbox 783 2649 862 2675; x_wconf 89'>MHz</span> <span class='ocrx_word' id='word_1_636' title='bbox 873 2649 954 2676; x_wconf 88'>80186</span> <span class='ocrx_word' id='word_1_637' title='bbox 965 2649 994 2676; x_wconf 91'>16</span> <span class='ocrx_word' id='word_1_638' title='bbox 1004 2648 1043 2676; x_wconf 90'>bit</span> <span class='ocrx_word' id='word_1_639' title='bbox 1054 2653 1197 2682; x_wconf 88'>computer</span> <span class='ocrx_word' id='word_1_640' title='bbox 1208 2649 1350 2682; x_wconf 90'>internally</span> <span class='ocrx_word' id='word_1_641' title='bbox 1361 2649 1403 2676; x_wconf 87'>for</span> <span class='ocrx_word' id='word_1_642' title='bbox 1414 2649 1502 2676; x_wconf 87'>FAST</span> <span class='ocrx_word' id='word_1_643' title='bbox 1512 2648 1664 2682; x_wconf 81'>operation.</span>
</span>
<span class='ocr_line' id='line_1_73' title="bbox 347 2694 2100 2727; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_644' title='bbox 347 2699 361 2713; x_wconf 31'><strong>*</strong></span> <span class='ocrx_word' id='word_1_645' title='bbox 372 2694 476 2720; x_wconf 96'><strong>TEMPO</strong></span> <span class='ocrx_word' id='word_1_646' title='bbox 478 2694 562 2721; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_647' title='bbox 561 2694 606 2727; x_wconf 95'><strong>be</strong></span> <span class='ocrx_word' id='word_1_648' title='bbox 608 2694 764 2727; x_wconf 95'><strong>specified</strong></span> <span class='ocrx_word' id='word_1_649' title='bbox 774 2694 802 2721; x_wconf 93'><strong>in</strong></span> <span class='ocrx_word' id='word_1_650' title='bbox 814 2695 1172 2722; x_wconf 91'><strong>BEATS-PER-MINUTE</strong></span> <span class='ocrx_word' id='word_1_651' title='bbox 1183 2703 1215 2722; x_wconf 93'><strong>or</strong></span> <span class='ocrx_word' id='word_1_652' title='bbox 1225 2695 1547 2722; x_wconf 91'><strong>FRAMES-PER-BEAT</strong></span> <span class='ocrx_word' id='word_1_653' title='bbox 1543 2695 1605 2721; x_wconf 96'><strong>at</strong></span> <span class='ocrx_word' id='word_1_654' title='bbox 1616 2695 1659 2726; x_wconf 96'><strong>24,</strong></span> <span class='ocrx_word' id='word_1_655' title='bbox 1672 2695 1716 2726; x_wconf 96'><strong>25,</strong></span> <span class='ocrx_word' id='word_1_656' title='bbox 1728 2702 1760 2721; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_657' title='bbox 1772 2695 1806 2721; x_wconf 96'><strong>30</strong></span> <span class='ocrx_word' id='word_1_658' title='bbox 1817 2694 1917 2721; x_wconf 96'><strong>frames</strong></span> <span class='ocrx_word' id='word_1_659' title='bbox 1928 2702 1976 2727; x_wconf 96'><strong>per</strong></span> <span class='ocrx_word' id='word_1_660' title='bbox 1987 2694 2100 2726; x_wconf 96'><strong>second,</strong></span>
<span class='ocr_line' id='line_1_73' title="bbox 347 2694 2100 2727; baseline 0.001 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_644' title='bbox 347 2699 361 2713; x_wconf 70'><strong>0</strong></span> <span class='ocrx_word' id='word_1_645' title='bbox 372 2694 504 2721; x_wconf 88'>TEMPO</span> <span class='ocrx_word' id='word_1_646' title='bbox 515 2702 578 2727; x_wconf 92'>may</span> <span class='ocrx_word' id='word_1_647' title='bbox 589 2694 623 2721; x_wconf 90'>be</span> <span class='ocrx_word' id='word_1_648' title='bbox 633 2694 764 2727; x_wconf 87'>specified</span> <span class='ocrx_word' id='word_1_649' title='bbox 774 2694 802 2721; x_wconf 89'>in</span> <span class='ocrx_word' id='word_1_650' title='bbox 814 2695 1172 2722; x_wconf 84'>BEATS-PERMINUTE</span> <span class='ocrx_word' id='word_1_651' title='bbox 1183 2703 1215 2722; x_wconf 93'>or</span> <span class='ocrx_word' id='word_1_652' title='bbox 1225 2695 1567 2722; x_wconf 84'>FRAMES-PERBEAT</span> <span class='ocrx_word' id='word_1_653' title='bbox 1577 2698 1605 2721; x_wconf 89'>at</span> <span class='ocrx_word' id='word_1_654' title='bbox 1616 2695 1659 2726; x_wconf 91'>24,</span> <span class='ocrx_word' id='word_1_655' title='bbox 1672 2695 1716 2726; x_wconf 88'>25,</span> <span class='ocrx_word' id='word_1_656' title='bbox 1728 2702 1760 2721; x_wconf 90'>or</span> <span class='ocrx_word' id='word_1_657' title='bbox 1772 2695 1806 2721; x_wconf 88'>30</span> <span class='ocrx_word' id='word_1_658' title='bbox 1817 2694 1917 2721; x_wconf 86'>frames</span> <span class='ocrx_word' id='word_1_659' title='bbox 1928 2702 1976 2727; x_wconf 89'>per</span> <span class='ocrx_word' id='word_1_660' title='bbox 1987 2694 2100 2726; x_wconf 87'>second,</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_28' title="bbox 373 2731 652 2765">
<p class='ocr_par' id='par_1_36' lang='eng' title="bbox 373 2731 652 2765">
<span class='ocr_line' id='line_1_74' title="bbox 373 2731 652 2765; baseline 0 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_661' title='bbox 373 2731 449 2764; x_wconf 96'><strong>(even</strong></span> <span class='ocrx_word' id='word_1_662' title='bbox 460 2731 529 2765; x_wconf 95'><strong>drop</strong></span> <span class='ocrx_word' id='word_1_663' title='bbox 541 2731 652 2764; x_wconf 95'><strong>frame!)</strong></span>
<span class='ocr_line' id='line_1_74' title="bbox 373 2731 652 2765; baseline 0 -7; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_661' title='bbox 373 2731 449 2764; x_wconf 87'>(even</span> <span class='ocrx_word' id='word_1_662' title='bbox 460 2731 529 2765; x_wconf 88'>drop</span> <span class='ocrx_word' id='word_1_663' title='bbox 541 2731 652 2764; x_wconf 81'>frame!)</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_29' title="bbox 347 2777 2174 2811">
<p class='ocr_par' id='par_1_37' lang='eng' title="bbox 347 2777 2174 2811">
<span class='ocr_line' id='line_1_75' title="bbox 347 2777 2174 2811; baseline 0.001 -8; x_size 33; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_664' title='bbox 347 2782 360 2796; x_wconf 81'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_665' title='bbox 372 2777 476 2803; x_wconf 94'><strong>TEMPO</strong></span> <span class='ocrx_word' id='word_1_666' title='bbox 478 2777 562 2804; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_667' title='bbox 561 2777 622 2810; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_668' title='bbox 633 2778 741 2804; x_wconf 95'><strong>entered</strong></span> <span class='ocrx_word' id='word_1_669' title='bbox 751 2777 934 2811; x_wconf 96'><strong>numerically,</strong></span> <span class='ocrx_word' id='word_1_670' title='bbox 946 2777 1101 2811; x_wconf 95'><strong>adjustable</strong></span> <span class='ocrx_word' id='word_1_671' title='bbox 1111 2777 1139 2804; x_wconf 95'><strong>in</strong></span> <span class='ocrx_word' id='word_1_672' title='bbox 1149 2778 1239 2805; x_wconf 96'><strong>tenths</strong></span> <span class='ocrx_word' id='word_1_673' title='bbox 1250 2778 1282 2805; x_wconf 96'><strong>of</strong></span> <span class='ocrx_word' id='word_1_674' title='bbox 1290 2786 1307 2805; x_wconf 91'><strong>a</strong></span> <span class='ocrx_word' id='word_1_675' title='bbox 1317 2777 1567 2805; x_wconf 91'><strong>Beat-Per-Minute</strong></span> <span class='ocrx_word' id='word_1_676' title='bbox 1577 2777 1748 2809; x_wconf 96'><strong>increments,</strong></span> <span class='ocrx_word' id='word_1_677' title='bbox 1760 2785 1792 2804; x_wconf 96'><strong>or</strong></span> <span class='ocrx_word' id='word_1_678' title='bbox 1803 2777 1839 2810; x_wconf 96'><strong>by</strong></span> <span class='ocrx_word' id='word_1_679' title='bbox 1849 2777 1964 2811; x_wconf 96'><strong>tapping</strong></span> <span class='ocrx_word' id='word_1_680' title='bbox 1975 2781 2086 2810; x_wconf 96'><strong>quarter</strong></span> <span class='ocrx_word' id='word_1_681' title='bbox 2097 2781 2174 2804; x_wconf 96'><strong>notes</strong></span>
<span class='ocr_line' id='line_1_75' title="bbox 347 2777 2174 2811; baseline 0.001 -8; x_size 33; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_664' title='bbox 347 2782 360 2796; x_wconf 72'><strong>0</strong></span> <span class='ocrx_word' id='word_1_665' title='bbox 372 2777 504 2804; x_wconf 82'>TEMPO</span> <span class='ocrx_word' id='word_1_666' title='bbox 515 2785 578 2810; x_wconf 91'>may</span> <span class='ocrx_word' id='word_1_667' title='bbox 588 2777 622 2804; x_wconf 92'>be</span> <span class='ocrx_word' id='word_1_668' title='bbox 633 2778 741 2804; x_wconf 84'>entered</span> <span class='ocrx_word' id='word_1_669' title='bbox 751 2777 934 2811; x_wconf 80'>numerically,</span> <span class='ocrx_word' id='word_1_670' title='bbox 946 2777 1101 2811; x_wconf 85'>adjustable</span> <span class='ocrx_word' id='word_1_671' title='bbox 1111 2777 1139 2804; x_wconf 92'>in</span> <span class='ocrx_word' id='word_1_672' title='bbox 1149 2778 1239 2805; x_wconf 88'>tenths</span> <span class='ocrx_word' id='word_1_673' title='bbox 1250 2778 1282 2805; x_wconf 85'>of</span> <span class='ocrx_word' id='word_1_674' title='bbox 1290 2786 1307 2805; x_wconf 94'>a</span> <span class='ocrx_word' id='word_1_675' title='bbox 1317 2777 1567 2805; x_wconf 85'>Beat-Per-Minute</span> <span class='ocrx_word' id='word_1_676' title='bbox 1577 2777 1748 2809; x_wconf 85'>increments,</span> <span class='ocrx_word' id='word_1_677' title='bbox 1760 2785 1792 2804; x_wconf 87'>or</span> <span class='ocrx_word' id='word_1_678' title='bbox 1803 2777 1839 2810; x_wconf 94'>by</span> <span class='ocrx_word' id='word_1_679' title='bbox 1849 2777 1964 2811; x_wconf 84'>tapping</span> <span class='ocrx_word' id='word_1_680' title='bbox 1975 2781 2086 2810; x_wconf 85'>quarter</span> <span class='ocrx_word' id='word_1_681' title='bbox 2097 2781 2174 2804; x_wconf 85'>notes</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_30' title="bbox 372 2815 808 2842">
<p class='ocr_par' id='par_1_38' lang='eng' title="bbox 372 2815 808 2842">
<span class='ocr_line' id='line_1_76' title="bbox 372 2815 808 2842; baseline 0.002 -1; x_size 32.351353; x_descenders 5.3513513; x_ascenders 9"><span class='ocrx_word' id='word_1_682' title='bbox 372 2822 410 2841; x_wconf 96'><strong>on</strong></span> <span class='ocrx_word' id='word_1_683' title='bbox 420 2815 466 2842; x_wconf 95'><strong>the</strong></span> <span class='ocrx_word' id='word_1_684' title='bbox 476 2815 545 2841; x_wconf 95'><strong>TAP</strong></span> <span class='ocrx_word' id='word_1_685' title='bbox 556 2816 660 2842; x_wconf 95'><strong>TEMPO</strong></span> <span class='ocrx_word' id='word_1_686' title='bbox 662 2815 808 2842; x_wconf 96'><strong>button.</strong></span>
<span class='ocr_line' id='line_1_76' title="bbox 372 2815 808 2842; baseline 0.002 -1; x_size 32.351353; x_descenders 5.3513513; x_ascenders 9"><span class='ocrx_word' id='word_1_682' title='bbox 372 2822 410 2841; x_wconf 93'>on</span> <span class='ocrx_word' id='word_1_683' title='bbox 420 2815 466 2842; x_wconf 86'>the</span> <span class='ocrx_word' id='word_1_684' title='bbox 476 2815 545 2841; x_wconf 91'>TAP</span> <span class='ocrx_word' id='word_1_685' title='bbox 556 2815 689 2842; x_wconf 85'>TEMPO</span> <span class='ocrx_word' id='word_1_686' title='bbox 699 2815 808 2842; x_wconf 83'>button.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_31' title="bbox 347 2861 1792 2940">
<p class='ocr_par' id='par_1_39' lang='eng' title="bbox 347 2861 1792 2940">
<span class='ocr_line' id='line_1_77' title="bbox 347 2861 1792 2895; baseline 0.001 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_687' title='bbox 347 2866 360 2880; x_wconf 43'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_688' title='bbox 372 2861 504 2887; x_wconf 96'><strong>TEMPO</strong></span> <span class='ocrx_word' id='word_1_689' title='bbox 515 2861 677 2888; x_wconf 96'><strong>CHANGES</strong></span> <span class='ocrx_word' id='word_1_690' title='bbox 679 2861 771 2894; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_691' title='bbox 781 2861 815 2888; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_692' title='bbox 825 2869 1000 2894; x_wconf 96'><strong>programmed</strong></span> <span class='ocrx_word' id='word_1_693' title='bbox 1001 2861 1087 2888; x_wconf 96'><strong>into</strong></span> <span class='ocrx_word' id='word_1_694' title='bbox 1099 2869 1115 2888; x_wconf 95'><strong>a</strong></span> <span class='ocrx_word' id='word_1_695' title='bbox 1126 2870 1268 2895; x_wconf 96'><strong>sequence,</strong></span> <span class='ocrx_word' id='word_1_696' title='bbox 1280 2861 1344 2888; x_wconf 96'><strong>with</strong></span> <span class='ocrx_word' id='word_1_697' title='bbox 1356 2866 1448 2888; x_wconf 95'><strong>smooth</strong></span> <span class='ocrx_word' id='word_1_698' title='bbox 1450 2861 1635 2888; x_wconf 96'><strong>transitions</strong></span> <span class='ocrx_word' id='word_1_699' title='bbox 1646 2861 1670 2887; x_wconf 96'><strong>if</strong></span> <span class='ocrx_word' id='word_1_700' title='bbox 1679 2861 1792 2888; x_wconf 87'><strong>desired.</strong></span>
<span class='ocr_line' id='line_1_77' title="bbox 347 2861 1792 2895; baseline 0.001 -8; x_size 33; x_descenders 6; x_ascenders 8"><span class='ocrx_word' id='word_1_687' title='bbox 347 2866 360 2880; x_wconf 68'><strong>0</strong></span> <span class='ocrx_word' id='word_1_688' title='bbox 372 2861 504 2887; x_wconf 87'>TEMPO</span> <span class='ocrx_word' id='word_1_689' title='bbox 515 2861 696 2888; x_wconf 86'>CHANGES</span> <span class='ocrx_word' id='word_1_690' title='bbox 707 2869 771 2894; x_wconf 92'>may</span> <span class='ocrx_word' id='word_1_691' title='bbox 781 2861 815 2888; x_wconf 92'>be</span> <span class='ocrx_word' id='word_1_692' title='bbox 825 2861 1019 2894; x_wconf 85'>programmed</span> <span class='ocrx_word' id='word_1_693' title='bbox 1030 2861 1087 2888; x_wconf 88'>into</span> <span class='ocrx_word' id='word_1_694' title='bbox 1099 2869 1115 2888; x_wconf 87'>a</span> <span class='ocrx_word' id='word_1_695' title='bbox 1126 2870 1268 2895; x_wconf 87'>sequence,</span> <span class='ocrx_word' id='word_1_696' title='bbox 1280 2861 1344 2888; x_wconf 89'>with</span> <span class='ocrx_word' id='word_1_697' title='bbox 1356 2862 1467 2888; x_wconf 88'>smooth</span> <span class='ocrx_word' id='word_1_698' title='bbox 1478 2861 1635 2888; x_wconf 85'>transitions</span> <span class='ocrx_word' id='word_1_699' title='bbox 1646 2861 1670 2887; x_wconf 90'>if</span> <span class='ocrx_word' id='word_1_700' title='bbox 1679 2861 1792 2888; x_wconf 89'>desired.</span>
</span>
<span class='ocr_line' id='line_1_78' title="bbox 347 2906 1507 2940; baseline 0.002 -8; x_size 33; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_701' title='bbox 347 2911 360 2925; x_wconf 69'><strong>¢</strong></span> <span class='ocrx_word' id='word_1_702' title='bbox 371 2906 434 2938; x_wconf 96'><strong>Any</strong></span> <span class='ocrx_word' id='word_1_703' title='bbox 444 2906 539 2932; x_wconf 96'><strong>TIME</strong></span> <span class='ocrx_word' id='word_1_704' title='bbox 550 2906 739 2933; x_wconf 96'><strong>SIGNATURE</strong></span> <span class='ocrx_word' id='word_1_705' title='bbox 740 2907 820 2933; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_706' title='bbox 819 2907 880 2939; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_707' title='bbox 891 2907 968 2938; x_wconf 96'><strong>used,</strong></span> <span class='ocrx_word' id='word_1_708' title='bbox 980 2907 1036 2934; x_wconf 96'><strong>and</strong></span> <span class='ocrx_word' id='word_1_709' title='bbox 1046 2915 1109 2940; x_wconf 96'><strong>may</strong></span> <span class='ocrx_word' id='word_1_710' title='bbox 1120 2907 1154 2934; x_wconf 96'><strong>be</strong></span> <span class='ocrx_word' id='word_1_711' title='bbox 1164 2907 1288 2940; x_wconf 96'><strong>changed</strong></span> <span class='ocrx_word' id='word_1_712' title='bbox 1299 2907 1393 2934; x_wconf 95'><strong>within</strong></span> <span class='ocrx_word' id='word_1_713' title='bbox 1404 2915 1420 2934; x_wconf 95'><strong>a</strong></span> <span class='ocrx_word' id='word_1_714' title='bbox 1431 2915 1507 2940; x_wconf 96'><strong>song.</strong></span>
<span class='ocr_line' id='line_1_78' title="bbox 347 2906 1507 2940; baseline 0.002 -8; x_size 33; x_descenders 7; x_ascenders 8"><span class='ocrx_word' id='word_1_701' title='bbox 347 2911 360 2925; x_wconf 74'><strong><em>°</em></strong></span> <span class='ocrx_word' id='word_1_702' title='bbox 371 2906 434 2938; x_wconf 92'>Any</span> <span class='ocrx_word' id='word_1_703' title='bbox 444 2906 539 2932; x_wconf 85'>TIME</span> <span class='ocrx_word' id='word_1_704' title='bbox 550 2906 763 2933; x_wconf 88'>SIGNATURE</span> <span class='ocrx_word' id='word_1_705' title='bbox 773 2915 836 2939; x_wconf 88'>may</span> <span class='ocrx_word' id='word_1_706' title='bbox 846 2907 880 2933; x_wconf 91'>be</span> <span class='ocrx_word' id='word_1_707' title='bbox 891 2907 968 2938; x_wconf 89'>used,</span> <span class='ocrx_word' id='word_1_708' title='bbox 980 2907 1036 2934; x_wconf 89'>and</span> <span class='ocrx_word' id='word_1_709' title='bbox 1046 2915 1109 2940; x_wconf 91'>may</span> <span class='ocrx_word' id='word_1_710' title='bbox 1120 2907 1154 2934; x_wconf 90'>be</span> <span class='ocrx_word' id='word_1_711' title='bbox 1164 2907 1288 2940; x_wconf 84'>changed</span> <span class='ocrx_word' id='word_1_712' title='bbox 1299 2907 1393 2934; x_wconf 83'>within</span> <span class='ocrx_word' id='word_1_713' title='bbox 1404 2915 1420 2934; x_wconf 89'>a</span> <span class='ocrx_word' id='word_1_714' title='bbox 1431 2915 1507 2940; x_wconf 87'>song.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_32' title="bbox 1540 2970 1878 3140">
<p class='ocr_par' id='par_1_40' lang='eng' title="bbox 1540 2970 1878 3140">
<span class='ocr_line' id='line_1_79' title="bbox 1540 2970 1800 3089; baseline 0 -14; x_size 100.5; x_descenders 16.5; x_ascenders 28.499998"><span class='ocrx_word' id='word_1_715' title='bbox 1540 2970 1800 3089; x_wconf 92'><strong>linn</strong></span>
<span class='ocr_line' id='line_1_79' title="bbox 1540 2970 1800 3089; baseline 0 -14; x_size 100.5; x_descenders 16.5; x_ascenders 28.499998"><span class='ocrx_word' id='word_1_715' title='bbox 1540 2970 1800 3089; x_wconf 74'>E1111</span>
</span>
<span class='ocr_line' id='line_1_80' title="bbox 1554 3108 1878 3140; baseline 0 -5; x_size 32; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_716' title='bbox 1554 3108 1624 3135; x_wconf 96'><strong>Linn</strong></span> <span class='ocrx_word' id='word_1_717' title='bbox 1635 3108 1808 3140; x_wconf 96'><strong>Electronics,</strong></span> <span class='ocrx_word' id='word_1_718' title='bbox 1822 3109 1878 3136; x_wconf 95'><strong>Inc.</strong></span>
<span class='ocr_line' id='line_1_80' title="bbox 1554 3108 1878 3140; baseline 0 -5; x_size 32; x_descenders 5; x_ascenders 9"><span class='ocrx_word' id='word_1_716' title='bbox 1554 3108 1624 3135; x_wconf 91'>Linn</span> <span class='ocrx_word' id='word_1_717' title='bbox 1635 3108 1808 3140; x_wconf 87'>Electronics,</span> <span class='ocrx_word' id='word_1_718' title='bbox 1822 3109 1878 3136; x_wconf 84'>Inc.</span>
</span>
</p>
</div>
<div class='ocr_carea' id='block_1_33' title="bbox 1554 3150 2188 3226">
<p class='ocr_par' id='par_1_41' lang='eng' title="bbox 1554 3150 2188 3226">
<span class='ocr_line' id='line_1_81' title="bbox 1557 3150 2163 3182; baseline 0 -5; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_719' title='bbox 1557 3150 1638 3177; x_wconf 95'><strong>18720</strong></span> <span class='ocrx_word' id='word_1_720' title='bbox 1648 3150 1761 3177; x_wconf 96'><strong>Oxnard</strong></span> <span class='ocrx_word' id='word_1_721' title='bbox 1772 3150 1866 3182; x_wconf 96'><strong>Street,</strong></span> <span class='ocrx_word' id='word_1_722' title='bbox 1878 3150 2006 3182; x_wconf 96'><strong>Tarzana,</strong></span> <span class='ocrx_word' id='word_1_723' title='bbox 2019 3150 2071 3177; x_wconf 95'><strong>CA</strong></span> <span class='ocrx_word' id='word_1_724' title='bbox 2082 3150 2163 3177; x_wconf 96'><strong>91356</strong></span>
<span class='ocr_line' id='line_1_81' title="bbox 1557 3150 2163 3182; baseline 0 -5; x_size 32; x_descenders 5; x_ascenders 8"><span class='ocrx_word' id='word_1_719' title='bbox 1557 3150 1638 3177; x_wconf 88'>18720</span> <span class='ocrx_word' id='word_1_720' title='bbox 1648 3150 1761 3177; x_wconf 89'>Oxnard</span> <span class='ocrx_word' id='word_1_721' title='bbox 1772 3150 1866 3182; x_wconf 81'>Street,</span> <span class='ocrx_word' id='word_1_722' title='bbox 1878 3150 2006 3182; x_wconf 86'>Tarzana,</span> <span class='ocrx_word' id='word_1_723' title='bbox 2019 3150 2071 3177; x_wconf 93'>CA</span> <span class='ocrx_word' id='word_1_724' title='bbox 2082 3150 2163 3177; x_wconf 88'>91356</span>
</span>
<span class='ocr_line' id='line_1_82' title="bbox 1554 3192 2188 3226; baseline 0 -7; x_size 33.5; x_descenders 5.5; x_ascenders 8.5"><span class='ocrx_word' id='word_1_725' title='bbox 1554 3193 1622 3226; x_wconf 96'><strong>(818)</strong></span> <span class='ocrx_word' id='word_1_726' title='bbox 1633 3193 1755 3219; x_wconf 95'><strong>708-8131</strong></span> <span class='ocrx_word' id='word_1_727' title='bbox 1765 3193 1888 3219; x_wconf 95'><strong>TELEX</strong></span> <span class='ocrx_word' id='word_1_728' title='bbox 1899 3192 2022 3219; x_wconf 95'><strong>#298949</strong></span> <span class='ocrx_word' id='word_1_729' title='bbox 2033 3193 2125 3219; x_wconf 95'><strong>LINN</strong></span> <span class='ocrx_word' id='word_1_730' title='bbox 2135 3193 2188 3219; x_wconf 96'><strong>UR</strong></span>
<span class='ocr_line' id='line_1_82' title="bbox 1554 3192 2188 3226; baseline 0 -7; x_size 33.5; x_descenders 5.5; x_ascenders 8.5"><span class='ocrx_word' id='word_1_725' title='bbox 1554 3193 1622 3226; x_wconf 89'>(818)</span> <span class='ocrx_word' id='word_1_726' title='bbox 1633 3193 1755 3219; x_wconf 60'>7088131</span> <span class='ocrx_word' id='word_1_727' title='bbox 1765 3193 1788 3219; x_wconf 91'>T</span> <span class='ocrx_word' id='word_1_728' title='bbox 1789 3193 1888 3219; x_wconf 87'>ELEX</span> <span class='ocrx_word' id='word_1_729' title='bbox 1899 3192 2022 3219; x_wconf 82'>#298949</span> <span class='ocrx_word' id='word_1_730' title='bbox 2033 3193 2125 3219; x_wconf 88'>LINN</span> <span class='ocrx_word' id='word_1_731' title='bbox 2135 3193 2188 3219; x_wconf 89'>UR</span>
</span>
</p>
</div>
@@ -1 +1 @@
Tesseract Open Source OCR Engine v4.0.0-beta.1 with Leptonica
Tesseract Open Source OCR Engine v3.05.01 with Leptonica
@@ -1,51 +1,51 @@
The LinnSequencer
32 Track MIDI Sequence Recorder
The LinnSequencer is a state-of-the-art composition and performance tool for the professional musician. It is
The LinnSequencer is a stateofthe-art composition and performance tool for the professional musician. It is
extremely powerful, yet amazingly simple to learn and use. Its many remarkable features include:
¢ Operation is similar to multi-track tape recorder with PLAY, STOP, RECORD, FAST
0 Operation is similar to multitrack tape recorder with PLAY, STOP, RECORD, FAST
FORWARD, REWIND, and LOCATE controls.
e Each of the 100 sequences contains 32 simultaneous, polyphonic tracks. Each track may
0 Each of the 100 sequences contains 32 simultaneous, polyphonic tracks. Each track may
be assigned to one of 16 MIDI channels. Simultaneously plays up to 16 polyphonic
synthesizers!
synthesizers !
¢ Ultra-fast 3%” disk drive stores complex songs in seconds and holds over 110,000 notes
0 Ultrafast 3 1/2 ” disk drive stores complex songs in seconds and holds over 110,000 notes
per disk!
¢ One or all tracks may be TRANSPOSED at the touch of a key.
e Exclusive real-time ERASE function makes editing FAST.
* Exclusive REPEAT function automatically repeats any held notes at a pre-selected
0 One or all tracks may be TRANSPOSED at the touch of a key.
0 Exclusive realtime ERASE function makes editing FAST.
0 Exclusive REPEAT function automatically repeats any held notes at a pre-selected
rhythmic value.
¢ TIMING CORRECTION works during playback and operates without chopping notes.
0 TIMING CORRECTION works during playback and operates without chopping notes.
¢ Optional SMPTE time code synchronization.
0 Optional SMPTE time code synchronization.
© Optional remote control.
0 Optional remote control.
Recording a Sequence
Recording 3 Sequence
To record a sequence, simply press RECORD and PLAY,
then play your MIDI keyboard in time to the Sequencers
click track. When the sequence loops back around to bar 1,
you ll hear what you played—only all timing errors will be
youll hear what you played—only all timing errors will be
corrected! (Timing correction may be adjusted or defeated).
Any additional notes played will be added into the track
existing notes are not erased while recording!
—existing notes are not erased while recording!
FAST FORWARD, REWIND, and LOCATE controls
may be used at any time to quickly access any location in
your sequence for spot-recording. To overdub a new part,
select a different track and start recordingwhile you
record, the first track will play in perfect sync (unless you
your sequence for spotrecording. To overdub a new part,
select a different track and start recording~while you
record, the rsttrack will play in perfect sync (unless you
MUTE it, or SOLO another track). In this way, up to 32
tracks may be overdubbed! All MIDI effects are recorded
including pitch bend, modulation, velocity, aftertouch,
@@ -58,7 +58,7 @@ the note to be erased just before it plays in the sequence—
when played back, it will be gone. Notes may also be
added, erased, or changed using the SINGLE STEP func-
tion. To overdub notes at specific points within a sequence,
tion. To overdub notes at specic points within a sequence,
Additional Features
@@ -70,7 +70,7 @@ from one location to another—in the same sequence or a
different one. For example, you might insert a copy of the
first verse between the second chorus and the bridge.
DELETE BARS operates the same way to remove
unwanted sections,
unwanted sections.
Creating a Song
@@ -90,34 +90,34 @@ the LinnSequencer is designed to let you compose, record
and edit while devoting your undivided attention to your
music. See your Linn dealer today for a demonstration!
* Simple, easy to learn operation—the 32 character LCD display clearly guides you through all operations. If needed, the
0 Simple, easy to learn operation—the 32 character LCD display clearly guides you through all operations. If needed, the
HELP button displays additional explanations.
* Non-destructive recording—existing notes are not erased while recording.
¢ Two FOOTSWITCH INPUTS may be assigned to remotely control many of the commonly used functions, including
0 Non-destructive recording—existing notes are not erased while recording.
0 Two FOOTSWITCH INPUTS may be assigned to remotely control many of the commonly used functions, including
ERASE, REPEAT, PLAY/STOP, or LOCATE.
¢ Iwo TRIGGER OUTPUTS may be programmed to output pulses at any selected note value.
0 Two TRIGGER OUTPUTS may be programmed to output pulses at any selected note value.
© Will sync to standard LinnDrum or Linn 9000 sync tone.
0 Will sync to standard LinnDrum or Linn 9000 sync tone.
© Utilizes ultra high-speed, 8 MHz 80186 16 bit computer internally for FAST operation.
* TEMPO may be specified in BEATS-PER-MINUTE or FRAMES-PER-BEAT at 24, 25, or 30 frames per second,
' Utilizes ultra highspeed, 8 MHz 80186 16 bit computer internally for FAST operation.
0 TEMPO may be specified in BEATS-PERMINUTE or FRAMES-PERBEAT at 24, 25, or 30 frames per second,
(even drop frame!)
¢ TEMPO may be entered numerically, adjustable in tenths of a Beat-Per-Minute increments, or by tapping quarter notes
0 TEMPO may be entered numerically, adjustable in tenths of a Beat-Per-Minute increments, or by tapping quarter notes
on the TAP TEMPO button.
¢ TEMPO CHANGES may be programmed into a sequence, with smooth transitions if desired.
¢ Any TIME SIGNATURE may be used, and may be changed within a song.
0 TEMPO CHANGES may be programmed into a sequence, with smooth transitions if desired.
° Any TIME SIGNATURE may be used, and may be changed within a song.
linn
E1111
Linn Electronics, Inc.
18720 Oxnard Street, Tarzana, CA 91356
(818) 708-8131 TELEX #298949 LINN UR
(818) 7088131 T ELEX #298949 LINN UR
@@ -0,0 +1 @@
Tesseract Open Source OCR Engine v3.05.01 with Leptonica

Some files were not shown because too many files have changed in this diff Show More