How To Write A Sine Wave On A Microsoft Macbook With Kwave On A Linux Computer (Amd64)



Similar documents
Het handboek van Kwave

Audacity Sound Editing Software

DiskPulse DISK CHANGE MONITOR

Tutorial. Part One -----Class1, 02/05/2015

Call Recorder Oygo Manual. Version

Recording Supervisor Manual Presence Software

Attix5 Pro Server Edition

Timm s Tracking Tool (TTT) Installation and Operating Instructions (July 2009)

Hermes.Net IVR Designer Page 2 36

How To Run A Factory I/O On A Microsoft Gpu 2.5 (Sdk) On A Computer Or Microsoft Powerbook 2.3 (Powerpoint) On An Android Computer Or Macbook 2 (Powerstation) On

Attix5 Pro Server Edition

Microsoft Visual Studio Integration Guide

TimeValue Software Due Date Tracking and Task Management Software

Event Record Monitoring and Analysis Software. Software Rev. 3.0 and Up. User s Guide

Excel 2003 Tutorial I

Ohio University Computer Services Center August, 2002 Crystal Reports Introduction Quick Reference Guide

Audio Editing. Using Audacity Matthew P. Fritz, DMA Associate Professor of Music Elizabethtown College

Hypercosm. Studio.

Hosted Voice Business Group Administrator Quick Start Guide

Introduction to Final Cut Pro 7 - Editing Basics

POOSL IDE User Manual

OFFICE KEYBOARD (MT1210 & MT1405) OFFICE FEATURES

AccXES Account Management Tool Administrator s Guide Version 10.0

PTC Integrity Eclipse and IBM Rational Development Platform Guide

Using Windows XP and File Management Handout (Staff)

Windows XP Pro: Basics 1

Table of Contents Getting Started... Recording...11 Playing Back...14

ZebraDesigner Pro. User Guide L-003 Rev. A

Finance Reporting. Millennium FAST. User Guide Version 4.0. Memorial University of Newfoundland. September 2013

13-1. This chapter explains how to use different objects.

Soft Call Recorder v3 Manual Version

VX Search File Search Solution. VX Search FILE SEARCH SOLUTION. User Manual. Version 8.2. Jan Flexense Ltd.

1. Online help for WorkZone Client What's new Getting started with WorkZone Client Working with the user interface 15

Multi Channel software

WS_FTP Professional 12

Password Memory 6 User s Guide

Manual Client Management Software HDR50-CMS

Desktop, Web and Mobile Testing Tutorials

OPERATION MANUAL. MV-410RGB Layout Editor. Version 2.1- higher

Getting Started with Vision 6

Exclaimer Mail Archiver User Manual

BIGPOND ONLINE STORAGE USER GUIDE Issue August 2005

Timed Organizer User s Manual

MyOra 3.0. User Guide. SQL Tool for Oracle. Jayam Systems, LLC

Recording and Editing Audio with Audacity

Writer Guide. Chapter 15 Using Forms in Writer

PART 1. Using USB Mixer with a Computer

Central Management Software CV3-M1024

StrikeRisk v6.0 IEC/EN Risk Management Software Getting Started

Mail Act-On 3. Quick Start Guide V: 3.0

Introduction to MS WINDOWS XP

Personal Call Manager User Guide. BCM Business Communications Manager

Handout: Word 2010 Tips and Shortcuts

User Management Resource Administrator 7.2

Code::Blocks Student Manual

Colligo Manager 6.0. Offline Mode - User Guide

Using Avaya Flare Experience for Windows

Page 1 S5.5 Monitoring Software Manual Rev 1.2 for Software Ver 1.0

Colligo Manager 6.0. Connected Mode - User Guide

Finding and Opening Documents

GelAnalyzer 2010 User s manual. Contents

Attix5 Pro. Your guide to protecting data with Attix5 Pro Desktop & Laptop Edition. V6.0 User Manual for Mac OS X

Remote Control 5.4 Setup Guide

Enterprise Interface User Guide

Building a Simulink model for real-time analysis V Copyright g.tec medical engineering GmbH

Avaya Network Configuration Manager User Guide

IP Camera Centralization Management. Client Application. (IPCMonitor) Feb, 2013 Version 1.9. User Manual

NVMS USER MANUAL. Version 2.1.0

Basics. Mbox 2. Version 7.0

CompleteView Admin Console Users Guide. Version Revised: 02/15/2008

Work. MATLAB Source Control Using Git

Chapter 15 Using Forms in Writer

Smart Board Basics. December, Rebecca Clemente Department of Education

Adobe Audition Workshop Instructor: Sam Fuqua

SMS (Server Management Software) Digital Video Recorder. User s Manual

Introduction to dobe Acrobat XI Pro

Enterprise Remote Control 5.6 Manual

DVR4C Remote Viewer Operation Manual Table of Contents EN 3 1. OVERVIEW MINIMUM PC REQUIREMENTS INSTALLING THE PROGRAM...

Network Probe User Guide

The Keyboard One of the first peripherals to be used with a computer and is still the primary input device for text and numbers.

ELAD FDM-SW1 USER MANUAL. Ver. 1.0

Chapter 9 Slide Shows

How to Create Custom Sound Effects for NXT Robots.

For keyboard and touchscreen BlackBerry devices User manual

CallRecorder User Guide

Universal Simple Control, USC-1

ACS CLIENT SOFTWARE USER MANUAL

Before you can use the Duke Ambient environment to start working on your projects or

3 IDE (Integrated Development Environment)

Appendix A. CMS(Client Management Software)

13 Managing Devices. Your computer is an assembly of many components from different manufacturers. LESSON OBJECTIVES

IP Camera Centralization Management. Client Application. (IPCMonitor) May, 2010 Version 1.1. User Manual

Hulbee Desktop guide. Version

LESSON 4 - FILE MANAGEMENT

Microsoft Outlook 2013 Part 1: Introduction to Outlook

Programming in Access VBA

4.3. Windows. Tutorial

5.1 Features Denver CO 80202

Appointment Scheduler

Quickstart Tutorial. Bradford Technologies, Inc. 302 Piercy Road, San Jose, California fax

Transcription:

Thomas Eschenbacher Nieuwe vertaler: Dit document is nog maar gedeeltelijk vertaald. Wilt u meehelpen, stuur een bericht naar: Vertaler/Nalezer: Freek de Kruijf K

2

Inhoudsopgave 1 Inleiding 15 1.1 Kwave hulpbronnen.................................... 16 1.2 Revisiegeschiedenis van Kwave.............................. 16 2 Installatie 17 2.1 Hoe Kwave te verkrijgen.................................. 17 2.2 Vereisten........................................... 17 2.3 Manual Compilation and installation........................... 18 2.4 Build options........................................ 19 2.5 Building RPM packages from tar.bz2 archives...................... 19 2.5.1 With working rpmbuild -ta............................ 19 2.5.2 With broken rpmbuild -ta support........................ 20 2.6 Building RPM packages from GIT............................ 20 2.6.1 Checking out the sources............................. 20 2.6.2 Updating fresh sources from GIT......................... 21 2.6.3 Compileren..................................... 21 2.7 Building a DEB package for testing and personal use................. 22 2.8 Building CPU optimized packages............................ 22 2.8.1 RPM optimizations................................. 23 2.8.2 How to pass optimizer options to the compiler manually........... 23 3 Basics about digital audio 24 3.1 The analogue world..................................... 24 3.2 Digitalization........................................ 25 3.3 Sample Encoding...................................... 26 3.4 Sample Formats....................................... 26

4 Using Kwave 28 4.1 User Interface Mode.................................... 28 4.2 Memory Setup........................................ 30 4.3 Opdrachtregel........................................ 31 4.3.1 List of Files or Commands............................. 31 4.3.2 GUI Type...................................... 31 4.3.3 Xt Toolkit options.................................. 31 4.3.4 Opstartopties.................................... 31 4.4 Bestanden openen en opslaan............................... 32 4.4.1 Ondersteunde bestandsformaten......................... 32 4.4.2 Converting to and from.wav........................... 32 4.4.3 Format of ASCII files................................ 33 4.5 Een nieuw bestand aanmaken............................... 33 4.6 Opnemen........................................... 34 4.7 Afspelen........................................... 35 4.8 Bestandseigenschappen.................................. 37 4.9 Zooming and navigating.................................. 37 4.9.1 Zooming in and out................................ 37 4.9.2 Scrolling left and right............................... 38 4.9.3 Using the overview................................. 38 4.9.4 Vertical zoom.................................... 38 4.10 How to select........................................ 39 4.10.1 Selecting channels................................. 39 4.10.2 Selecting samples.................................. 39 4.11 Klembord.......................................... 40 4.12 Slepen en neerzetten.................................... 40 5 Automization and Scripting with Kwave 41 5.1 General Syntax....................................... 41 5.2 Using the Command Line................................. 41 5.3 Script bestanden van Kwave................................ 42 5.3.1 Algemene structuur................................ 42 5.3.2 Comments and Empty Lines........................... 42 5.3.3 Termination..................................... 43 5.3.4 Labels........................................ 43 5.4 Overzicht van de opdrachten............................... 43 5.5 a................................................ 43 5.5.1 about_kde...................................... 43 5.5.1.1 Syntax: about_kde()........................... 43 5.5.2 add_label...................................... 43 5.5.2.1 Syntax: add_label(pos[,text])..................... 43 4

5.5.2.2 Parameters................................ 43 5.5.3 add_track...................................... 44 5.5.3.1 Syntax: add_track()........................... 44 5.5.3.2 Zie ook.................................. 44 5.6 c................................................ 44 5.6.1 clipboard_flush................................... 44 5.6.1.1 Syntax: clipboard_flush()........................ 44 5.6.2 close......................................... 44 5.6.2.1 Syntax: close().............................. 44 5.6.2.2 Zie ook.................................. 44 5.6.3 continue....................................... 44 5.6.3.1 Syntax: continue()............................ 44 5.6.3.2 Zie ook.................................. 44 5.6.4 copy......................................... 44 5.6.4.1 Syntax: copy().............................. 44 5.6.4.2 Zie ook.................................. 45 5.6.5 crop.......................................... 45 5.6.5.1 Syntax: crop().............................. 45 5.6.6 cut.......................................... 45 5.6.6.1 Syntax: cut()............................... 45 5.7 d................................................ 45 5.7.1 delayed....................................... 45 5.7.1.1 Syntax: delayed( milliseconds, command )............. 45 5.7.1.2 Parameters................................ 45 5.7.1.3 Zie ook.................................. 45 5.7.2 delete......................................... 46 5.7.2.1 Syntax: delete()............................. 46 5.7.3 delete_label..................................... 46 5.7.3.1 Syntax: delete_label(index)...................... 46 5.7.3.2 Parameters................................ 46 5.7.4 delete_track..................................... 46 5.7.4.1 Syntax: delete_label(index)...................... 46 5.7.4.2 Parameters................................ 46 5.7.5 dump_metadata.................................. 46 5.7.5.1 Syntax: dump_metadata()....................... 46 5.8 e................................................ 46 5.8.1 edit_label...................................... 46 5.8.1.1 Syntax: edit_label(index)....................... 46 5.8.1.2 Parameters................................ 47 5.8.2 expandtolabel.................................... 47 5.8.2.1 Syntax: expandtolabel()........................ 47 5.9 f................................................ 47 5

5.9.1 fileinfo........................................ 47 5.9.1.1 Syntax: fileinfo(index)......................... 47 5.9.1.2 Parameters................................ 47 5.9.2 forward....................................... 47 5.9.2.1 Syntax: forward()............................ 47 5.9.2.2 Zie ook.................................. 47 5.10 g................................................ 48 5.10.1 goto.......................................... 48 5.10.1.1 Syntax: goto(pos)............................ 48 5.10.1.2 Parameters................................ 48 5.11 i................................................ 48 5.11.1 insert_at....................................... 48 5.11.1.1 Syntax: insert_at(pos).......................... 48 5.11.1.2 Parameters................................ 48 5.11.1.3 Zie ook.................................. 48 5.11.2 insert_track..................................... 48 5.11.2.1 Syntax: insert_track(index)...................... 48 5.11.2.2 Parameters................................ 48 5.11.2.3 Zie ook.................................. 49 5.12 l................................................ 49 5.12.1 loadbatch...................................... 49 5.12.1.1 Syntax: loadbatch(filename)..................... 49 5.12.1.2 Parameters................................ 49 5.12.2 loop.......................................... 49 5.12.2.1 Syntax: loop().............................. 49 5.12.2.2 Zie ook.................................. 49 5.13 m............................................... 49 5.13.1 menu......................................... 49 5.13.1.1 Syntax: menu (command, path, [hotkey], [id])........... 49 5.13.1.2 Parameters................................ 49 5.13.1.3 Sub Commands............................. 50 5.13.2 msgbox........................................ 52 5.13.2.1 Syntax: msgbox(text)......................... 52 5.13.2.2 Parameters................................ 52 5.14 n................................................ 52 5.14.1 newsignal...................................... 52 5.14.1.1 Syntax: newsignal( samples, rate, bits, tracks)......... 52 5.14.1.2 Parameters................................ 52 5.14.2 next.......................................... 52 5.14.2.1 Syntax: next().............................. 52 5.14.2.2 Zie ook.................................. 52 5.15 o................................................ 53 5.15.1 open......................................... 53 6

5.15.1.1 Syntax: open([filename])....................... 53 5.15.1.2 Parameters................................ 53 5.15.1.3 Zie ook.................................. 53 5.15.2 openrecent...................................... 53 5.15.2.1 Syntax: openrecent(filename)..................... 53 5.15.2.2 Parameters................................ 53 5.15.2.3 Zie ook.................................. 53 5.16 p................................................ 53 5.16.1 paste......................................... 53 5.16.1.1 Syntax: paste().............................. 53 5.16.1.2 Zie ook.................................. 54 5.16.2 pause......................................... 54 5.16.2.1 Syntax: continue()............................ 54 5.16.2.2 Zie ook.................................. 54 5.16.3 playback_start.................................... 54 5.16.3.1 Syntax: playback_start()........................ 54 5.16.4 plugin........................................ 54 5.16.4.1 Syntax: plugin(name, [parameter...])................. 54 5.16.4.2 Parameters................................ 54 5.16.4.3 Zie ook.................................. 54 5.16.5 plugin:execute................................... 55 5.16.5.1 Syntax: plugin:execute(name, [parameter...])............ 55 5.16.5.2 Parameters................................ 55 5.16.6 plugin:setup..................................... 55 5.16.6.1 Syntax: plugin:setup(name, [parameter...])............. 55 5.16.6.2 Parameters................................ 55 5.16.7 prev......................................... 55 5.16.7.1 Syntax: prev().............................. 55 5.16.7.2 Zie ook.................................. 55 5.17 q................................................ 56 5.17.1 quit.......................................... 56 5.17.1.1 Syntax: quit()............................... 56 5.17.1.2 Zie ook.................................. 56 5.18 r................................................ 56 5.18.1 redo......................................... 56 5.18.1.1 Syntax: redo().............................. 56 5.18.1.2 Zie ook.................................. 56 5.18.2 redo_all....................................... 56 5.18.2.1 Syntax: redo_all()............................ 56 5.18.2.2 Zie ook.................................. 56 5.18.3 reenable_dna.................................... 56 7

5.18.3.1 Syntax: reenable_dna()......................... 56 5.18.4 reset_toolbars.................................... 56 5.18.4.1 Syntax: reset_toolbars()......................... 56 5.18.5 revert......................................... 57 5.18.5.1 Syntax: revert().............................. 57 5.18.6 rewind........................................ 57 5.18.6.1 Syntax: rewind()............................. 57 5.18.6.2 Zie ook.................................. 57 5.19 s................................................ 57 5.19.1 save.......................................... 57 5.19.1.1 Syntax: save().............................. 57 5.19.1.2 Zie ook.................................. 57 5.19.2 saveas........................................ 57 5.19.2.1 Syntax: saveas([filename])...................... 57 5.19.2.2 Parameters................................ 57 5.19.3 saveselect...................................... 58 5.19.3.1 Syntax: saveselect()........................... 58 5.19.3.2 Zie ook.................................. 58 5.19.4 select_gui_type................................... 58 5.19.4.1 Syntax: select_gui_type(mode).................... 58 5.19.4.2 Parameters................................ 58 5.19.5 select_track:all.................................... 58 5.19.5.1 Syntax: select_track:all()........................ 58 5.19.5.2 Zie ook.................................. 58 5.19.6 select_track:invert................................. 58 5.19.6.1 Syntax: select_track:all()........................ 58 5.19.6.2 Zie ook.................................. 58 5.19.7 select_track:none.................................. 59 5.19.7.1 Syntax: select_track:none()....................... 59 5.19.7.2 Zie ook.................................. 59 5.19.8 select_track:off................................... 59 5.19.8.1 Syntax: select_track:off(index)..................... 59 5.19.8.2 Parameters................................ 59 5.19.9 select_track:on................................... 59 5.19.9.1 Syntax: select_track:on(index)..................... 59 5.19.9.2 Parameters................................ 59 5.19.10 select_track:toggle................................. 59 5.19.10.1 Syntax: select_track:toggle(index)................... 59 5.19.10.2 Parameters................................ 59 5.19.11 selectall....................................... 60 5.19.11.1 Syntax: selectall()............................ 60 5.19.12 selectnext...................................... 60 8

5.19.12.1 Syntax: selectnext()........................... 60 5.19.12.2 Zie ook.................................. 60 5.19.13 selectnextlabels................................... 60 5.19.13.1 Syntax: selectnextlabels()....................... 60 5.19.13.2 Zie ook.................................. 60 5.19.14 selectnone...................................... 60 5.19.14.1 Syntax: selectnone()........................... 60 5.19.15 selectprev...................................... 60 5.19.15.1 Syntax: selectprev()........................... 60 5.19.15.2 Zie ook.................................. 61 5.19.16 selectprevlabels................................... 61 5.19.16.1 Syntax: selectprevlabels()....................... 61 5.19.16.2 Zie ook.................................. 61 5.19.17 selecttoleft...................................... 61 5.19.17.1 Syntax: selecttoleft().......................... 61 5.19.17.2 Zie ook.................................. 61 5.19.18 selecttoright..................................... 61 5.19.18.1 Syntax: selecttoright().......................... 61 5.19.18.2 Zie ook.................................. 61 5.19.19 selectvisible..................................... 61 5.19.19.1 Syntax: selectvisible().......................... 61 5.19.20 start.......................................... 62 5.19.20.1 Syntax: start().............................. 62 5.19.20.2 Zie ook.................................. 62 5.19.21 stop.......................................... 62 5.19.21.1 Syntax: stop().............................. 62 5.19.21.2 Zie ook.................................. 62 5.19.22 sync......................................... 62 5.19.22.1 Syntax: sync().............................. 62 5.19.22.2 Zie ook.................................. 62 5.20 u................................................ 62 5.20.1 undo......................................... 62 5.20.1.1 Syntax: undo().............................. 62 5.20.1.2 Zie ook.................................. 62 5.20.2 undo_all....................................... 63 5.20.2.1 Syntax: undo_all()............................ 63 5.20.2.2 Zie ook.................................. 63 5.21 v................................................ 63 5.21.1 view:scroll_end................................... 63 5.21.1.1 Syntax: view:scroll_end()....................... 63 5.21.1.2 Zie ook.................................. 63 5.21.2 view:scroll_left................................... 63 9

5.21.2.1 Syntax: view:scroll_left()........................ 63 5.21.2.2 Zie ook.................................. 63 5.21.3 view:scroll_next................................... 63 5.21.3.1 Syntax: view:scroll_next()....................... 63 5.21.3.2 Zie ook.................................. 63 5.21.4 view:scroll_next_label............................... 63 5.21.4.1 Syntax: view:scroll_next_label()................... 63 5.21.4.2 Zie ook.................................. 64 5.21.5 view:scroll_prev.................................. 64 5.21.5.1 Syntax: view:scroll_prev()....................... 64 5.21.5.2 Zie ook.................................. 64 5.21.6 view:scroll_prev_label............................... 64 5.21.6.1 Syntax: view:scroll_prev_label()................... 64 5.21.6.2 Zie ook.................................. 64 5.21.7 view:scroll_right.................................. 64 5.21.7.1 Syntax: view:scroll_right()....................... 64 5.21.7.2 Zie ook.................................. 64 5.21.8 view:scroll_start.................................. 64 5.21.8.1 Syntax: view:scroll_start()....................... 64 5.21.8.2 Zie ook.................................. 64 5.21.9 view:zoom_all.................................... 65 5.21.9.1 Syntax: view:zoom_all()........................ 65 5.21.10 view:zoom_in.................................... 65 5.21.10.1 Syntax: view:zoom_in([position]).................. 65 5.21.10.2 Parameters................................ 65 5.21.10.3 Zie ook.................................. 65 5.21.11 view:zoom_normal................................. 65 5.21.11.1 Syntax: view:zoom_normal()..................... 65 5.21.12 view:zoom_out................................... 65 5.21.12.1 Syntax: view:zoom_out([position])................. 65 5.21.12.2 Parameters................................ 65 5.21.12.3 Zie ook.................................. 66 5.21.13 view:zoom_selection................................ 66 5.21.13.1 Syntax: view:zoom_selection().................... 66 5.22 w............................................... 66 5.22.1 window:activate.................................. 66 5.22.1.1 Syntax: window:activate(titel])................... 66 5.22.1.2 Parameters................................ 66 5.22.2 window:cascade.................................. 66 5.22.2.1 Syntax: window:cascade()....................... 66 5.22.3 window:click.................................... 66 5.22.3.1 Syntax: window:click( klasse, x, y )................. 66 10

5.22.3.2 Parameters................................ 66 5.22.4 window:close.................................... 67 5.22.4.1 Syntax: window:close( klasse ).................... 67 5.22.4.2 Parameters................................ 67 5.22.5 window:minimize................................. 67 5.22.5.1 Syntax: window:minimize....................... 67 5.22.6 window:mousemove................................ 67 5.22.6.1 Syntax: window:resize( klasse, x, y )................ 67 5.22.6.2 Parameters................................ 67 5.22.7 window:next_sub.................................. 68 5.22.7.1 Syntax: window:next_sub()...................... 68 5.22.8 window:prev_sub................................. 68 5.22.8.1 Syntax: window:prev_sub()...................... 68 5.22.9 window:resize.................................... 68 5.22.9.1 Syntax: window:resize( class, width, height )........... 68 5.22.9.2 Parameters................................ 68 5.22.10 window:screenshot................................. 68 5.22.10.1 Syntax: window:screenshot( class, filename )........... 68 5.22.10.2 Parameters................................ 68 5.22.11 window:sendkey.................................. 69 5.22.11.1 Syntax: window:sendkey( class, key code )............ 69 5.22.11.2 Parameters................................ 69 5.22.11.3 Zie ook.................................. 69 5.22.12 window:tile..................................... 69 5.22.12.1 Syntax: window:tile().......................... 69 5.22.13 window:tile_vertical................................ 69 5.22.13.1 Syntax: window:tile_vertical()..................... 69 6 Plug-ins 70 6.1 Plugin Reference...................................... 70 6.2 about (About Kwave).................................... 70 6.3 amplifyfree (Amplify Free)................................. 71 6.4 band_pass (Band Pass Filter)............................... 72 6.5 codec_ascii (ASCII Codec)................................. 73 6.6 codec_audiofile (Audiofile Codec)............................ 73 6.7 codec_flac (FLAC Codec).................................. 74 6.8 codec_mp3 (MP3-codec).................................. 75 6.9 codec_ogg (Ogg Codec).................................. 76 6.10 codec_wav (WAV-codec).................................. 76 6.11 debug (Debugfuncties)................................... 77 6.12 fileinfo (Bestandsinformatie)................................ 77 6.13 goto (Ga naar positie).................................... 78 11

6.14 insert_at (Invoegen op)................................... 79 6.15 lowpass (Low Pass Filter)................................. 80 6.16 memory (Memory Settings)................................ 81 6.17 newsignal (New Signal).................................. 82 6.18 noise (Noise Generator).................................. 83 6.19 normalize (Normalisatie).................................. 83 6.20 notch_filter (Notch-filter).................................. 84 6.21 pitch_shift (Pitch Shift)................................... 85 6.22 playback (Afspelen)..................................... 86 6.23 record (Opnemen)...................................... 87 6.24 reverse (Omdraaien).................................... 87 6.25 samplerate (Conversie van samplesnelheid)....................... 87 6.26 saveblocks (Save Blocks).................................. 88 6.27 selectrange (Select Range)................................. 91 6.28 sonagram (Sonagram)................................... 92 6.29 stringenter (Voer commando in).............................. 93 6.30 volume (Volume)...................................... 94 6.31 zero (Nulgenerator)..................................... 95 7 Developer s Guide to Kwave 96 7.1 Creating API documentation............................... 96 7.2 Starting in a test environment............................... 96 8 Vragen en antwoorden 98 9 Dankbetuigingen en licentie 100 9.1 Belangrijkste auteurs.................................... 100 9.2 Major Contributors..................................... 100 9.3 Minor contributors, copyright holders and others................... 101 9.4 Met dank aan........................................ 102 A Bestandsinformatie 103 12

Lijst van tabellen 5.1 Vertaaltabel voor URL-codering............................. 42 A.1 List of File Info Identifiers................................. 106 13

Samenvatting Kwave is een eenvoudige geluidsbewerker voor KDE.

Hoofdstuk 1 Inleiding Dit is Kwave, een eenvoudige geluidsbewerker voor KDE-4. zijn functies omvatten: een gebruikersinterface dat omgeschakeld kan worden naar SDI-, MDI- of tabbladmodus eenvoudige functies voor knippen, kopiëren en plakken ongedaan maken/opnieuw op meerdere niveaus labeling van signalen Functies voor opnemen, inclusief vooraf opnemen Afspelen via ALSA en OSS Opnemen via ALSA en OSS Importeren/exporteren van/naar MP3 Importeren/exporteren van/naar Ogg/Vorbis Importeren/exporteren van/naar FLAC enige functies voor analyse zoals Sonagram gebruikt intern 24 bits vaste precisie voor gegevens in samples vrij te selecteren samplesnelheden ondersteuning voor bewerking van multikanaal bestanden afspelen van geluidsbestanden met meerder kanalen (geluidsuitvoer zal gemixt worden tot mono of stereo) uitbreidbaar via een gemakkelijk te gebruiken interface met plug-ins importeren/exporteren van andere audio-formaten via audiofile Als u geïnteresseerd bent in wat is gedaan en wat nog gedaan moet worden, kijk dan naar de bestanden CHANGES en TODO in het broncodepakket. Hulp en constructieve opmerkingen zijn altijd welkom. 15

1.1 Kwave hulpbronnen Dus als u in contact wilt komen met de ontwikkelaars, enige verdere hulp nodig heeft bij het gebruik van Kwave, patches, bugrapporten of andere zaken wilt bijdragen, dan kunnen de volgende hulpbronnen interessant voor u zijn: Homepagina van het project Voor informatie over nieuwe bijgewerkte uitgaven of andere informatie over dit project, neem een kijkje op de Kwave homepagina E-maillijst Als u enige hulp bij het gebruik van Kwave nodig hebt of mee wilt doen in het ontwikkelen, wordt dan lid van de e-mailijst van de ontwikkelaars van Kwave https://lists.sourceforge.net/lists/listinfo/kwave-devel. GIT-repository Er is ook een GIT-repository, gehost door SourceForge waar u de broncode van de laatste ontwikkelversie kunt vinden. Voor instructies over hoe toegang te krijgen tot de repository, lees in het hoofdstuk over bouwen vanuit GIT of kijk op http://sourceforge.net/p/kwave/code/. Er is ook een goed webinterface dat u kunt gebruiken om door de broncode te bladeren. 1.2 Revisiegeschiedenis van Kwave Dit project is gestart door Martin Wilz in de zomer van 1998 en is ontwikkeld en verbeterd door hem en enige andere mensen. In november 1999 is Thomas Eschenbacher hier en daar gestart met de reparatie van enige kleine bugs en steeds dieper in de broncode van het programma gestapt. Tot vandaag heeft hij bijna elke component van het programma uitgebreid, herschreven od herzien en veel tijd gestopt in de verbetering. Sinds Kwave v0.8.0 is de log met wijzigingen niet langer in deze handleiding ingevoegd. Dus als u geïnteresseerd bent in een complete lijst met wijzigingen, dan kunt u de volledige geschiedenis hier vinden: http://sourceforge.net/p/kwave/code/ci/head/tree/changes of zelf door de broncode bladeren in het GIT webinterface. 16

Hoofdstuk 2 Installatie 2.1 Hoe Kwave te verkrijgen Kwave heeft een eigen homepagina onder http://kwave.sourceforge.net/. Hier kunt u verdere informatie vinden over het project, evenals informatie over de huidige stabiele en bijgewerkte ontwikkelversies. If you want to get a Kwave release, you have the choice to visit http://kwave.sourceforge.net/ download.html and download a binary package of the latest stable version, if there is one for your distribution, download a source RPM package of the latest stable version, compile on your own, from a.tar.bz2 archive with the source code of the latest stable version, compile on your own, from the latest GIT source. Don t be afraid, compiling Kwave should be quite simple even if you are not a programmer. It just needs some developer packages to be installed. 2.2 Vereisten Om Kwave met succes te kunnen gebruiken hebt u nodig: een computer met Linux (Kwave kan ook werken onder een ander besturingssysteem, maar dat hebben we nooit getest, laat het ons weten als u dat hebt werken op een ander platform / besturingssysteem) werkend geluid afspelen (niet echt vereist voor gebruik maar wat zou u willen doen met een geluidsbewerker als u het resultaat van uw werk niet kan horen?) KDE-4.5 of hoger (minstens de bibliotheken, als u een fan van gnome bent, dan kunt u Kwave ook gebruiken als de juiste bibliotheken zijn geïnstalleerd). Qt-4.7 of hoger (komt normaal met KDE4) ALSA 1.0.14 or higher (for record/playback) PulseAudio 4.0 or higher (for record/playback) id3lib-3.8.1 or higher (for ID3 tags) 17

mad-0.15 or higher (optionally for MP3 import/export) flac-1.2.0 or higher (for FLAC import/export) libsamplerate-0.1.3 or higher (sample rate conversion) For a more complete and up-to-date list, please consult the README file that is included in the source distribution. This file also contains some special hints for getting Kwave running and/or building Kwave under some distributions. If you intend to compile Kwave from the sources, you will need at least: cmake-2.6.0 or newer A recent C/C++ compiler. GCC-4.x works fine, some older and any newer version (like gcc- 5.0) may work too. The glibc2 (libc-6) development environment. On SuSE systems the package is called libc, on other systems it might be called libc-devel. The KDE4 development environment: kdelibs4-devel, kdemultimedia4-devel, kdesdk4. The Qt4 development environment, the package is normally called qt4-devel or similar. pulseaudio-0.9.16 or newer id3lib-devel-3.8.1 or newer fftw-3.0 or newer mad-devel-0.15 or newer (if you have the permission to use MP3 code) flac-devel-1.2.0 newer If you intend to get the Kwave sources via GIT, you will also need a current git package....many other packages, please take a look at the README file included in the source package. 2.3 Manual Compilation and installation Since version 0.7.10 Kwave uses cmake, a make system that is also used by KDE itself. So if you know how to build other KDE applications, you should not have any difficulties in building Kwave. If you run into problems please report them to the Kwave mailing list. In order to compile and install Kwave on your system, it is best practice to do a out-of-tree build. This means that you hold the sources of Kwave in one directory and build the package in another (temporary) directory. For example, assuming that your sources are already unpacked in $HOME/src/kwave-0.9.0, you can do the following: % mkdir /tmp/kwave -build % cd /tmp/kwave -build % cmake $HOME/ src/ kwave -0.9.0 [ build options] % make % su root -c " make install" (Specifying build options is a way to enable or disable specific features. See the following section for descriptions) 18

2.4 Build options By specifying build options, you can enable or disable some features of Kwave, like excluding some components or plugins from the generated package. Here is a list of the available options: WITH_ALSA enable playback/recording via ALSA [on/off, default=on] WITH_DEBUG build a debug version [on/off, default=off] WITH_DOC build online documentation [on/off, default=on] WITH_FLAC enable support for FLAC files [on/off, default=on] WITH_MP3 enable support for mp3 files [on/off, default=off] Please note that you need the permission to use code covered by the MP3 software patents! WITH_OGG_OPUS enable support for Ogg/Opus files [on/off, default=on] WITH_OGG_VORBIS enable support for Ogg/Vorbis files [on/off, default=on] WITH_OPTIMIZED_MEMCPY use an optimized version of memcpy, available for X86, X86_64 and PPC platforms [on/off, default=on] WITH_OSS enable playback/recording via OSS [on/off, default=on] WITH_PHONON enable playback via Phonon (for testing only) [on/off, default=off] WITH_PULSEAUDIO enable playback/recording via PulseAudio [on/off, default=on] These options can be passed to cmake with -Doption=value. For example, if you want to enable MP3 support, you can pass the corresponding option as follows: % cmake [ source directory ] - DWITH_MP3 =ON [ other options...] 2.5 Building RPM packages from tar.bz2 archives 2.5.1 With working rpmbuild -ta If you are running a system with RPM support, the preferred way to install Kwave on your system will be the creation of a nice RPM package. First you should get the current source of Kwave, either as a tar.bz2 archive from the Kwave download page or check out an up-to-date copy via GIT (like described in the chapter about GIT) and read the next chapter. If you have downloaded tar.bz2 archives of Kwave, create and install the RPMs just by doing the following steps (where [arch] stands for the platform you have built the package and might be something like i586, i686, sparc or whatever, XXX stands for the version number you have downloaded). To build the Kwave package and install it do: % rpmbuild -ta kwave -XXX.tar.bz2 % rpm -i /usr/src/redhat/rpms /[ arch ]/kwave -XXX.[ arch ]. rpm OPMERKING Note for SuSE users: you have to specify the directory /usr/src/packages instead of /usr/src/r edhat! If you haven t seen any errors, then that s it and you can skip the rest of this chapter. If rpm was unable to build the packages and says something like spec file not found, then go on and read the rest of this section. 19

2.5.2 With broken rpmbuild -ta support If you cannot get rpmbuild -ta working, here are the steps for making that manually (the hard way): 1. Go to your RPM topdir. This normally is /usr/src/redhat for the redhat distribution or /usr/src/packages if you have the SuSE distribution. % cd /usr/src/redhat 2. Put the tar.bz2 archive into the SOURCES subdirectory (you have to replace somewhere with the real directory where the files are, of course). % cp / somewhere /kwave -XXX.tar.bz2 SOURCES 3. Extract the spec file from the archives and put it into the SPEC subdirectory. % tar -xojf SOURCES/kwave -XXX.tar.bz2 \*. spec > SPECS/kwave.spec 4. Let rpm do the compile job and generate the rpm of Kwave. If you only want to make a binary package, you can specify -bb instead of -ba, or just -bs to build only a source package. % rpmbuild -ba SPECS/ kwave. spec 5. If everything was ok, you can install the binary rpm of Kwave, it will be in the BUILD directory. If you already have a version of Kwave installed, please remove it first or use the parameter -U instead of -i for upgrading instead of installing. % rpm -ivh BUILD /[ arch ]/kwave -XXX.[ arch ]. rpm 2.6 Building RPM packages from GIT 2.6.1 Checking out the sources For initially checking out the sources you will need some disk space (about 25 megabytes) in a directory of your choice, the git package of your favorite distribution and full access to the Internet. If you get error messages about rejected connections you either have typed something wrong or your provider doesn t give you full access. A good place for the source files will be $HOME/src. 1. First create the directory that will receive the subdirectory with Kwave sources and change into it: % mkdir -p $HOME/ src % cd $HOME/ src 2. Then check out the latest sources from the GIT server: % git clone git :// git.code.sf.net/p/kwave/code kwave or you can check out a specific release with the following commands: 20

% git clone git :// git.code.sf.net/p/kwave/code kwave % cd kwave % git checkout tags /[ release - tag] You can look up the names of the release tags in the git web page at http://sourceforge.net/ p/kwave/code/ref/master~/tags/. The release tags are always built out of the word Rel ease- and the version number of the release, with underscores instead of dots. For example Release-0_9_0 for v0.9.0. WAARSCHUWING There must not be a directory named kwave under the directory you want to check out. Otherwise the git program will complain about already existing files and the checkout will not work. 2.6.2 Updating fresh sources from GIT The procedure described in the previous section is only necessary once. For further updates it is much easier. Just change into the directory where you have the checked out sources and do the following to update to the latest version: % git pull Then go on to the next section and compile as usual. OPMERKING If you think that you have messed up your local source tree or if there are conflicts during updating and you want to start through from a clean state, you can do the following to discard all local changes and switch back to the latest version from the master branch: % git clean -- force -d % git reset -- hard % git checkout master 2.6.3 Compileren Building rpm package from a GIT snapshot is quite simple. The procedure is nearly the same as described in the last section, so it unhappily also has the same problem with the rpmbuild -ta command our method internally uses. Like in the previous chapter, [arch] stands for the platform you have built the package and might be something like i386, i586, sparc or whatever, XXX stands for the version number you have checked out. OPMERKING Note for SuSE users: here you have to specify the directory /usr/src/packages instead of /usr/s rc/redhat too! Assuming that you are in the root of where you checked out from GIT, do the following to create a Makefile, the Kwave package and install it. If you already have a version of Kwave installed, please remove it first or use rpm -U instead of rpm -i for updating instead of installing. 21

% mkdir /tmp/kwave -build % cd /tmp/kwave -build % cmake $HOME/ src/ kwave % make rpm % rpm -ivh /usr/src/redhat/build /[ arch ]/kwave -XXX.[ arch ]. rpm OPMERKING If you still have problems with make rpm, you will find the tar.bz2 archive that was produced in /tmp. Please follow the instructions in the previous chapter. 2.7 Building a DEB package for testing and personal use If you want to create a deb package of Kwave, bijv. for testing a version that is not yet available via official package repositories, then you can create your own package quite easily. First of all, you need to install some required tools: % sudo apt - get install build - essential checkinstall Then you can install the required build dependencies by pretending to install the dependencies of the official Kwave version: % sudo apt - get build - dep kwave After installing the required packages, you can build Kwave as described in the chapters before. After building you can type this to get a.deb file in your current build directory: % make deb OPMERKING The.deb file you get from this step will not have the quality that a package from your official distribution has - it is just good enough for installing and safely uninstalling Kwave for testing purposes and for personal use. 2.8 Building CPU optimized packages If you are owner of a Pentium, an AMD K6, Athlon or Athlon-XP CPU, you might want to use compiler optimizations to compile your version of Kwave that is running some percents faster. The gain in speed will be up to 30% on some systems, whereas the functions dealing with signal manipulation and all functions that do complex time-frequency operations (like FFT and Sonagram) will profit most from it. You do not need to understand much about programming for using an optimized compiler to compile Kwave, but maybe you will need some time to get the compiler itself working and installed. 22

2.8.1 RPM optimizations You can easily compile the RPM package optimized for Athlon, Athlon-XP, Pentium and Pentium Pro (and some other CPUs) by using some defines in your rpmrc file. You can either modify your system s rpmrc file in /usr/lib/rpm or the.rpmrc file in your home directory. There you can specify option lines like these: optflags : i586 -O2 - march = pentium - DNDEBUG - fomit - frame - pointer optflags : i686 -O2 - march = pentiumpro - DNDEBUG - fomit - frame - pointer optflags : athlon -O2 - march = athlon - DNDEBUG - fomit - frame - pointer optflags : k6 -O3 - march =k6 - DNDEBUG - fomit - frame - pointer optflags : k7 -O3 -march=athlon -xp -DNDEBUG -fomit -frame -pointer (I found those nice tricks at http://www.keywarrior.net/duesti/rpmopt.en.html. Thanks to Matthias Düsterhöft!). This means that on a k7 architecture the rpm package will be compiled using -O3 -march=at hlon-xp -DNDEBUG -fomit-frame-pointer as compiler option and so on, you might extend or adapt these to your own needs. The settings apply to all of the sections before in all places where rpmbuild -ta is used or where a binary RPM is to be created out of a source rpm using rpmbuild --rebuild. OPMERKING If rpm refuses to install your package because it seems not to fit to your computer s architecture, you can normally just install an optimized package by specifying the additional parameter --ignorearch and don t care. 2.8.2 How to pass optimizer options to the compiler manually The invocation of the compiler is quite simple. It normally is sufficient to set the environment variables CFLAGS and CXXFLAGS in the correct way and then compile as usual. For the best settings please consult the documentation or homepage of the corresponding compiler. If you build Kwave from a source tree (unpacked tar.bz2 or from GIT) the flags need to be specified before the call. For example: % CFLAGS ="-O4 -march=athlon -xp -mcpu=athlon -xp -pipe" \ CXXFLAGS ="-O4 -march=athlon -xp -mcpu=athlon -xp -pipe" \ cmake [ source directory ] If you re-build Kwave from a source rpm package, please follow the instruction in the previous section. 23

Hoofdstuk 3 Basics about digital audio This chapter should give a short introduction about the basics of digital audio processing, without going too much into details. Of course this might be a bit incomplete, but if you have questions, you can ask at the Kwave mailing list or consult some further literature. 3.1 The analogue world First of all, one must know that the world is analogue - but computers work digitally. So there are several ways to convert analogue audio to digital audio and back again. As the way from digital to analogue normally is the reversion of the way from analogue to digital, we only describe the way from analogue to digital. Conversion from sound to bits Before continuing, analogue audio has to be transformed into electronic signals in order to find its way into a computer. One common way to do this is by using a microphone and an amplifier. This combination gets sound (changes of air pressure) at its input and a voltage at its output. Higher amplitude of the pressure changes will be represented by higher voltages at the amplifier s output. This output is also called a signal. Instead of a microphone you can of course also imagine other sources of audio. And the amplifier can be the one that is integrated into your sound card, where you normally cannot see it. 24

Conversion to electronic signal At this stage, the electrical signal has three limitations that one should keep in mind: 1. The amplitude (volume) is limited to some maximum level. This is a consequence of the electronic (amplifiers) that are only able to handle voltages within some specific range. That s no problem as long as sounds are not too loud. In that case the signal would be clipped, which means that the electrical signal will run against its margins and the result will be disturbed. 2. The frequency range is also limited. Due to the mechanical constrains of microphones and the limited frequency range of amplifiers, a signal s frequency range is limited. There are no hard borders besides which the sound abruptly disappears, but below some low and above some higher frequency the amplitude of the signal starts to decrease more and more. The existence of a maximum frequency can be easily understood as a limited speed of the electrical signal to rise and fall. By using high quality amplifiers and microphones, the limits can be spread into ranges where the human ear is no longer able to hear their results and thus get out of interest. The human ear normally is not able to hear sound above 20 khz. 3. The signal contains noise. Noise is the most ugly enemy of everyone who has to handle audio signals in any way. Noise is a typical analogue effect, that makes the audio signal unsharp and disturbed, it is always present and cannot be avoided. One can only try to use high quality components that produce as low noise as possible, so that one cannot hear it. Normally noise has a certain volume, so that the interesting sound should be much louder in comparison to the noise. This is called the signal to noise ratio (SNR), the higher it is the better the sound s quality will be. Sounds that have lower volume than the noise cannot be heart. 3.2 Digitalization When we want to store and play audio in a computer, we must convert the analogue sound into digital data first. This process is called digitalization. It converts an electronic signal into a sequence of digital values. Digitalization of the electronic signal The conversion can be understood as a repetitive measurement of the electronic signal s value at certain time, thus taking a sample of the signal. The result is then encoded as a digital value. The sampling could be done in arbitrary distances or in constant intervals. The later method is much easier to handle, and thus it is normally used, with a constant rate - the so-called sample rate. Usual sample rates are 8000, 11025, 22050, and 44100 samples per second. In practice sample rates are also given as frequencies, in Hz or khz. The sample rate limits the highest frequency a digitized signal can represent. Due to Shannon s theorem the highest usable frequency is half of the sample rate, so with 44.1 khz sample rate you cannot sample signals with more than 22 khz. To avoid a violation of that half-sample rate rule, 25

your soundcard already has built-in filters that filter away frequencies that are higher than half of the used sample rate. Sampled signal 3.3 Sample Encoding The result of the digital sampling process is a sequence of single samples. One sample is a digital representation of a signal s value at a certain time. The value of a sample can be interpreted and encoded in several ways. The simplest one is linear encoding. This means that each sample s value directly represents the analogue signal s value multiplied with a constant factor. This is easy to handle, but has the disadvantage that noise will be audible especially on low amplitudes, where it disturbs most, and less audible on high amplitudes, where it is less audible. One way to reduce the influence of noise is non-linear encoding. This means that lower amplitudes are amplified before processing. As lower amplitudes are amplified, their distance from noise increases and the quality improves. The most common methods for this are A-Law and U-Law encoding - some standardized logarithmic amplification curves, used in digital telephony (ITU G.711 standard). Nonlinear Encoding 3.4 Sample Formats Samples can be stored in different formats and precisions. The most common ones are integer (fixed-point) formats, that store values with fixed quantisations. Depending on where the zero line is defined, it has to be destinguished between unsigned (only positive values, zero line is at half of the numeric range) and signed (positive and negative values) integer formats. 26

Signed Format Unsigned Format As the quantisation loses some accuracy, it produces noise, the so-called quantisation noise. That kind of noise has more effect on low amplitudes, so this method of storing samples is not optimal, but quite easy and very fast to handle (computers are fast in calculating with fixed point numbers). The second way of encoding samples is with floating point numbers. With floating point numbers, noise is spread nearly equal over all ranges of amplitudes and has advantages especially on low amplitudes. However, this format is much slower when used for processing (computers are much slower on calculating with floating point values in comparison to fixed point numbers). OPMERKING Kwave internally uses signed integer format with 24 bit precision, stored in 32 bit integers. This has the disadvantage of higher memory consumption when processing files with lower precision (bijv. 8 bits), but processing 32 bit numbers is very fast and also leaves some reserves for internal calculations, as only 24 bits are normally used. 27

Hoofdstuk 4 Using Kwave Here is a little screenshot of the Kwave main window, so that you get an impression what Kwave looks like... 4.1 User Interface Mode Depending on your personal preferences or use cases you can configure how Kwave handles multiple open files. You can switch this setting on the fly through the menu Settings Show Files in... The three possible settings are: Separate Windows (SDI): When using the Single Document Interface (SDI), each file will be shown in a separate main window. 28

Same Window (MDI): When using the Multi Document Interface (MDI), there is only one Kwave main window, but within this window you have an area which shows sub windows, which can be resized, moved, tiled, cascaded or minimized. You can select a window from the Windows menu or cycle through the sub windows with Ctrl-Tab. Tabs: This is a variant of the MDI interface, where files are shown within separate tabs. You may know this mode from some popular Internet browsers. You can activate a tab via the Windows menu or cycle through the tabs with Ctrl-Tab. 29

4.2 Memory Setup When using Kwave for the first time, you should go to the memory setup dialog and modify the settings to be suitable for your needs and the installed memory of your computer. You can reach it under Settings Memory... Kwave is able to use two types of memory: physical and virtual memory. Physical memory is the memory (RAM) that is installed in your computer. You should limit the usage of physical memory to some reasonable size, as a rule of thumb, half of the installed me- 30

mory should be ok. If you set the limit too high, Linux will take memory from other applications, which means that it swaps out memory of other programs to the hard disk (swap), which is rather slow. If you set the limit too low, you might lose some performance when working with big files, because you use less of the fast physical memory than you could. If you enable virtual memory, Kwave is able to load and process files that are bigger than the amount of real installed physical memory. Kwave does this by using temporary files in a configurable directory, which is much faster and more cooperative to other applications than using the operating system s swapping. The directory that you configure should be on your local hard disk. 4.3 Opdrachtregel 4.3.1 List of Files or Commands If you start Kwave from the command line, you can specify a list of files that should be opened. The first specified file will be opened first, then the other files. Each file will be opened in an own new window or sub window of the same Kwave instance. If you specify wildcards, you can open a large number of files at once. For example, the following command starts a Kwave and opens all sounds of the KDE window manager, each in a new window or sub window: % kwave /usr/share/sounds/kde_window *. wav It is also possible to pass Kwave text commands, encoded as a special URI 1, this will be described in a later section. 4.3.2 GUI Type The parameter --gui-type=sdi MDI TAB lets Kwave start in one of the three possible GUI modes: SDI, MDI or TAB. 4.3.3 Xt Toolkit options In addition to a list of files, you can specify a list of Xt toolkit options like -geometry for specifying the size and/or position of the first opened Kwave window and/or -display for starting the Kwave on a different display. For example, the following command starts a Kwave window with an initial width of 600 pixels and a height of 400 pixels, with the right border positioned 30 pixels away from the right and 0 pixels away from the top of the screen. % kwave - geometry 600 x400-30+0 4.3.4 Opstartopties With the option --disable-splashscreen you can disable the splash screen that comes up when starting Kwave. This might be useful when you start Kwave from a script. 1 universal resource identifier 31

The command line option --iconic lets Kwave start up minimized (iconified). This might be useful when you want to start Kwave without GUI interaction, bijv. when running from a script. This option also implicitly disables the splash screen! By using the command line option --logfile=kwave.log you can log the sequence of actions of a Kwave session into a file. This is useful for debugging, you might be asked for such a logfile when reporting an error. 4.4 Bestanden openen en opslaan Bestanden openen met Kwave werkt hetzelfde als met de meeste andere toepassingen, u kunt een lijst bestanden op de opdrachtregel specificeren bij het starten van Kwave, een leeg venster met Kwave openen (bijvoorbeeld met Bestand Nieuw... (Ctrl-W) ) en daar een bestand in stoppen via slepen en loslaten of u kunt een bestand openen via het menu met Bestand Openen (Ctrl-O) of een van de laatste recent geopende bestanden onder Bestand Recent geopend sla het huidige bestand op met Bestand Opslaan (Ctrl-S), opslaan onder een andere naam met Bestand Opslaan als... (Shift-Ctrl-S) save all areas that are separated by markers, each one to an own file, with File Save Blocks... or only the current selection with File Save Selection... 4.4.1 Ondersteunde bestandsformaten Kwave supports the following file formats: The favourite file format of Kwave is (like you can guess from the name).wav. This format is very common to other operating systems and also is commonly used within the KDE environment. The second format that Kwave supports is ASCII. You can export to and also import from ASCII. Please be aware that storing in this format might produce very large files! The file format will be described below..mp3 and.mp2 import is available through libmad for the MP3 decoding in combination with id3lib for decoding ID3 tags and lame for encoding. Ogg/Vorbis (*.ogg) import and export. See http://www.xiph.org for details. FLAC (*.flac) import and export. See http://flac.sourceforge.net/ for details. Additionally Kwave supports many other common formats through the audiofile plugin. You can import files like *.au and *.snd (NeXT,Sun Audio), *.aiff (Audio Interchange Format) and *.sf (Berkeley,IRCAM,Carl Sound Format). 4.4.2 Converting to and from.wav The best way to work with formats other than those supported by Kwave is to use an external converter program. A good set of tools for this is in the SoX package, they have also some nice documentation! The plans for future include support for import and also export filters for more formats and maybe some filter that uses a user-definable script with a call to an external filter, so that even formats not supported by SoX (like MP3) can be read and/or written. 32

4.4.3 Format of ASCII files The ASCII format is quite useful for scientific and educational purposes. Due to it s simple format, you can either write simple files on your own with a text editor or you can use the output of some other application and convert it into ASCII. As the format is really simple, you should not have big problems in writing a converter and most scientific applications use to have some kind of their own ASCII format for export. The format of an ASCII file is quite simple and has the following rules: 1. At the start of the file comes a block of properties, with one property per line. 2. Each property line starts with ##. 3. After the properties comes a list of samples, with one sample per line. When using multiple channels, the samples are separated by commas. 4. Lines might end with a carriage return and/or a line feed character (so DOS files are supported too). But when saving, files will always be saved with line feed character as the end of the line. 5. Empty lines and characters after a # are treated as comments and are ignored. 6. Values have to be given in signed integer format with a 24 bit range, which is the internal storage format of Kwave. 7. Everything after a # (except property lines, see above) will be treated as comment and will be ignored. Empty lines will also be ignored. Here is an example of a simple ASCII file that represents a sine wave with eleven samples: Voorbeeld 4.1 content of an ASCII file with a single sine wave ## rate =44100 ## tracks =2 ## bits =16 ## length =11 ## Date = 2013-11 -09 ## Software = Kwave -0.8.11 for KDE 4.11.3 5930496, 5930496 # 0 0, 8388352 # 1-5930752, 5930496 # 2-8388608, 0 # 3-5930752, -5930752 # 4 0, -8388608 # 5 5930496, -5930752 # 6 8388352, 0 # 7 5930496, 5930496 # 8 0, 8388352 # 9-5930752, 5930496 # 10 # EOF 4.5 Een nieuw bestand aanmaken You can create a new and empty file menu under File New... 33

You can select the sample rate, resolution in bits per sample and the number of tracks. Per default the file format will be.wav, but it can still be changed at the time when the file is saved. The length of the new signal can be set by time (hours, minutes, seconds) or by the number of samples. Additionally you can select it relative to the highest possible length, which is limited by the available memory and Kwave s internal limit (2 GB). 4.6 Opnemen Kwave is able to record audio data from various sources, with all sample rates, sample formats and other modes that your sound hardware supports. Currently Kwave records through the old OSS sound interface, and since v0.7.4 also the newer and more powerful ALSA interface that is the preferred choice for linux kernel 2.6. The recording can be reached from the menu under File Record. Here is a screenshot of the Kwave record dialog, showing the first page with the recording controls during a running recording session. Like in most dialogs of Kwave you can get some help or see tooltips on the controls. Here you have the following controls: Screenshot of the Record Dialog Pre-Record: If the pre-recording feature of Kwave is enabled and the recording is started, Kwave records into an internal buffer which is some seconds long. If you press the Record ( ) button again, then the recording really starts, and also keeps the already pre-recorded data. This is useful for example if you want to record your favorite song from radio, but you recognize too late that the song has started. In this case you can still press the record button and get the start of the song from what Kwave has already pre-recorded before, so that you will no longer miss a start. 34

Record Time: If the length of the recording should be limited to some time, you can activate this setting and select a time in hours, minutes, seconds for your recording. If this option is not enabled, the recording runs until you press the Stop ( ) button. Start At: If this setting is activated, you can set a date and time when the recording will be started. Please keep in mind that if the configured time is in the past, the recording will start immediately. Record Trigger: If enabled, the recording starts only if the volume of the input goes over a certain limit, which can be defined from 0 to 100% of the highest possible input volume. This is useful if you do not want to record leading silence. (Hint: combine this with the prerecording feature mentioned above to catch also some seconds before reaching the trigger, so that you don t miss any silent fade-ins.) The New ( ) button is active when the recording is not running or is finished, to discard the current file content and start again. The Stop ( ) button is active when the recording or pre-recording is running or Kwave is waiting for the trigger. If pressed, the current progress will be stopped. The Pause ( ) button is active when the recording or pre-recording is running. The first time you press it, the recording will be halted and the button starts blinking. When you press it again the button will stop blinking and recording will continue immediately, without waiting for a trigger. The Record ( ) button starts the recording and/or prerecording, depending on the features enabled above: 1. If neither prerecording nor trigger level are used, the recording starts as soon as you press the record button. 2. If prerecording is not used and a trigger level is set, the first press will let Kwave wait for the trigger level to be reached. While waiting for a trigger, you can force the recording to start immediately by pressing the record button again, otherwise the recording will start automatically when the trigger level has been reached. 3. If prerecording is enabled, the first press starts only the prerecording and the second press really starts the recording. 4.7 Afspelen Depending on the compilation options Kwave is able to play sounds trough one of the following playback methods: ALSA (Advanced Linux Sound Architecture): Supercedes OSS, supports more features and more hardware. Might collide with KDE or other applications like OSS does, but has a plugin called dmix as a way out. Newer versions of ALSA use a dmix like plugin per default, so this should the best choice for you! OSS (Open Sound System): The oldest linux implementation, capable of mono and stereo output. Deprecated since linux kernel 2.6, but still wide spread. Might collide with KDE or other sound applications, only one application at a time can use OSS playback! 35

Before trying to play sounds, you should take a look on the playback configuration dialog: Currently Kwave supports only 8 and 16 bit playback, with mono or stereo output through the OSS interface, but many also all modes your sound hardware supports through the ALSA interface. If your sound file uses more or less channels than the playback allows, all channels will be mixed together during playback. For example if you have a file with three channels and you use stereo playback, the left channel will play channel 0 (upper) and half of channel 1 (middle), the right channel will play the half of channel 1 (middle) and channel 2 (lower). For getting a smooth playback without interruptions, you should also set the buffer size to an appropriate value. If you encounter problems with interrupted playback, you should increase the buffer size here. But the bigger you set the buffer, the bigger is the latency between the audible sound and the display of the playback position in the signal display. The playback settings dialog also provides a button for playing a simple test sound. You should hear a 440Hz tone that wanders over all speakers, from one to the next. Once you have configured playback, you can use the playback controls of the Kwave main window or through the Play menu or with keyboard shortcuts: Play Start (P): Start playback of the current selection from its beginning or the whole file from the current cursor position if nothing was selected. Play only once. Play Loop: Like before, but repeat in a loop. Play Pause (Space): Pause the playback at the current position. Only available when the playback is running. Play Continue (Space): Continue the playback from the position where it has been paused. Only available if the playback is paused. Play Stop (Esc): Stop the playback, go back to the start of the selection. 36

4.8 Bestandseigenschappen Kwave is able to handle several meta information that is stored within an audio file. It tries to import and export as much of that information as possible. For example, if you import an MP3 file with ID3 tags, you can keep that information when exporting to a Wave file. If Kwave would lose meta information when saving, it shows a warning. You can view and modify the meta information under Edit File Properties... There you can also change things like sample format, resolution and compression. 4.9 Zooming and navigating Kwave provides several ways to zoom and navigate, using keyboard shortcuts, menu commands, toolbar buttons and by using the mouse. The following sections should give an overview on how to use all of these functions. 4.9.1 Zooming in and out zoom to whole signal: selects a zoom factor that makes the whole signal visible in the current window. menu entry: View Zoom to whole signal toolbar button: zoom all button zoom to 100%: zooms in up to a scale where on sample is represented by on pixel on the screen. menu entry: View Zoom to 100% toolbar button: zoom to 100% button zoom in: zooms in to see more details, magnifies by factor 3. menu entry / keyboard shortcut: View Zoom In (Ctrl-+) 37

toolbar button: zoom in button zoom out: zooms in to see less details, shrinks by factor 3. menu entry / keyboard shortcut: View Zoom Out (Ctrl--) toolbar button: zoom out button zoom selection: zooms to a factor where the current selection is completely visible in the current view. menu entry / keyboard shortcut: View Zoom to Selection (Ctrl-Space) toolbar button: zoom to selection button select predefined zoom: select a zoom factor from the zoom combo box in the toolbar. 4.9.2 Scrolling left and right scroll left: scrolls to the start of the signal by 1/3 of the current view. menu entry / keyboard shortcut: View Scroll left (cursor Left) toolbar button: scroll left button scroll right: scrolls to the end of the signal by 1/3 of the current view. menu entry / keyboard shortcut: View Scroll right (cursor right) toolbar button: scroll right button previous page: scrolls to the position right before the current view (left). menu entry / keyboard shortcut: View Previous Page (Page up) toolbar button: previous page button next page: scrolls to the position right after the current view (right). menu entry / keyboard shortcut: View Next Page (Page down) toolbar button: next page button to begin: scrolls the current view so that it starts at the beginning of the signal. menu entry / keyboard shortcut: View Begin (Ctrl-Home) to end: scrolls the current view so that it ends at the end of the signal. menu entry / keyboard shortcut: View End (Ctrl-End) 4.9.3 Using the overview The main screen of Kwave shows a small overview of the whole signal above the horizontal scroll bar of the main window. This overview also provides some functionality for navigating: single click with left mouse button: directly move the current view to the clicked position. double click with left mouse button: directly move the current view to the clicked position and additionally zoom in. double click with left mouse button, with shift pressed: directly move the current view to the clicked position and additionally zoom out. 4.9.4 Vertical zoom You can zoom the current view vertically by pressing the Alt key and scrolling with the mouse wheel. 38

4.10 How to select Kwave allows you to select a continuous range of samples as well as any combination of channels (if you edit a multi-channel file). By selecting a range of samples (time scope) all following commands will be limited to that range and by de-selecting a channel its content will not be changed. 4.10.1 Selecting channels Selecting or de-selecting a channel is quite simple. Just click on the lamp symbol on the left side of the signal to toggle its state: a green lamp means enabled, whereas a red lamp means disabled. OPMERKING Note: If a channel is de-selected it will also not be audible for playback! 4.10.2 Selecting samples If you select a range of samples in Kwave, that range will be inclusive. That means that the first and the last selected sample both belong to the selection and will be used for the following actions. So even if you not selected a range but only a single sample, the selection will never be really empty. So for example if you see no selected range, the delete function applies to that single sample. The easiest way of selecting a range of samples is just to do that with mouse. It works like you are used from other applications: just press the left mouse button at the point you want to let the selection start and release the button where you want it to end. If you want to adjust or move the selection s start or end, you can move the mouse cursor near to the start or the end of the selection until it changes from the standard arrow cursor into the left-right arrow cursor and then press the left mouse button and adjust. You can also extend or shrink the selection to a specific point by holding down the Shift key while clicking with the left mouse button. Depending on which border is nearer, the left or right border of the selection will be set to a new position. There are also some functions available via the menu and of course some keyboard shortcuts: select the whole signal: Edit Selection All (Ctrl-A) remove any selection and select nothing : Edit Selection Nothing (N) the currently visible area: Edit Selection Visible (V) the next block of samples, starting one sample after the end of the current selection and with the same length: Edit Selection Next (Shift-+) (Hint: use the + key from the numeric keypad!) the previous block of samples, ending one sample before the start of the current selection and with the same length: Edit Selection Previous (Shift--) (Hint: use the - key from the numeric keypad!) expand the selection to the start of the signal (first sample): Edit Selection to start (Shift- Home) 39

expand the selection to the end of the signal (last sample): Edit Selection to end (Shift- End) expand the current selection left and right up to the next label (or start/end of the signal if there is none), starting at the current cursor position: Edit Selection Expand to labels (E) select the area between the next two labels that are right from the current selection or up to the end of the signal: Edit Selection to next labels (Shift-Ctrl-N) select the area between the previous two labels that are left from the current selection or up to the start of the signal: Edit Selection to previous labels (Shift-Ctrl-P) 4.11 Klembord Kwave since v0.8.1 uses the clipboard of KDE. This way it is possible to exchange audio data between different Kwave windows. It might be possible as well to exchange data between Kwave and other audio applications, depending on their ability to use the KDE clipboard. When copying data to the clipboard through the copy function Kwave uses the mime type aud io/vnd.wave as data format, conforming to RFC 2361 which is the same as the well known wav format. When pasting from the clipboard into Kwave all data formats that are available as file import formats are supported, like for example Ogg/Vorbis, FLAC and so on. 4.12 Slepen en neerzetten Kwave supports the KDE Drag and Drop protocol. This enables you to open files just by picking them up in a konqueror window or the Desktop and let them drop into a window of Kwave. Please note that if you drop a file into a Kwave window that already contains an opened file, the currently opened file will be closed first and then the file you dropped will be opened in it. If you don t want that, you should open a new empty Kwave window first. You can also select a range of samples and drag or drop them into a Kwave window. Per default the drag operation is done in move mode where the selected range is deleted from the original place and inserted at the drop position. By pressing the Ctrl key you can modify this and drag in copy mode instead. 40

Hoofdstuk 5 Automization and Scripting with Kwave Kwave since its first version uses an internal text command language. This command language is used internally for menu handling, GUI control, builtin effects and plugin invocations. The commands will be described later in the section. 5.1 General Syntax All commands consist of a command name and an optional parameter list in round brackets, depending on the command. Allowed characters for command names are letters, digits and colon. Commands are case sensitive and are always in lower case. Parameters within a parameter list are separated by comma. Numerical parameters can be given as fixed point numbers or as floating point numbers, using a dot as decimal separator. String parameters are automatically trimmed (all white space at the start and at the end is removed). If that is not wanted, they can be surrounded by double quotes ( ). If a string parameter contains special characters (like,, ;, # or a \ itself), these special characters have to be escaped by preceding a \. Multiple commands can be concatenated to a command list by using a ; as separator. Example: fileinfo ( Comments," This is an \" example \" comment.") This example consists of the command fileinfo and has two parameters: the keyword Comments and the text This is an \ example\ comment.. (These parameters are explained in the corresponding section in the command reference). 5.2 Using the Command Line In addition to the command line options listed in the section Command Line which are used to start Kwave in iconified mode or without splash screen, you can pass text commands on the command line, encoded in a special URI format: 41

kwave:command[?parameter[,parameter...] ] The rules for transforming a Kwave text command into a valid URI are as follows: The URI starts with the word kwave, followed by a : and the command name. If the command has parameters, they have to be appended after the command name, using a? as separator. Alle speciale tekens in de commandonaam en parameters moeten URL gecodeerd zijn. Hier is een lijst met de vertalingen: gecodeerd (spatie) Meerdere parameters kunnen achtergevoegd worden door een, als scheidingsteken te gebruiken. origineel gecodeerd origineel gecodeerd origineel gecodeerd origineel %20 ( %28 : %3A \ %5C! %21 ) %29 ; %3B ] %5D %22 * %2A < %3C ˆ %5E # %23 + %2B = %3D _ %5F $ %24, %2C > %3E %60 % %25 - %2D? %3F { %7B & %26. %3E @ %40 %7C %27 / %2F [ %5B } %7D ~ %7E Tabel 5.1: Vertaaltabel voor URL-codering 5.3 Script bestanden van Kwave 5.3.1 Algemene structuur A Kwave script consists of a list of lines, where each line can be: a single command, a command list, with two or more commands concatenated by a ;. a comment, a label or an empty line, that contains white space only 5.3.2 Comments and Empty Lines All characters that follow a # (except when used in quotes or when escaped) are treated as comments, they will be silently ignored. Lines that contain only white space or comments are ignored as well. 42

5.3.3 Termination A Kwave script terminates either when all commands have been executed successfully without an error or when a command has returned an error code. There is no special command for aborting the execution of a script. If you want to implement a possibility for the user to end a script, you can use the command msgbox(text). This shows a message box with the two buttons OK (which lets the script continue) and Cancel (which returns an error code and stops the script). 5.3.4 Labels Lines that consist only of an identifier, followed by a : are treated labels. They can be referenced later in the script by the special keyword GOTO 1, which makes the execution of the script continue at the location of that label (see example below). A line that contains a label must not contain any other content (except comments or white space) after the :. Voorbeeld: start: # <= this is a label # do something... msgbox( once again?) GOTO start 5.4 Overzicht van de opdrachten 5.5 a 5.5.1 about_kde 5.5.1.1 Syntax: about_kde() Shows a dialog window with information about the KDE version used by the computer Kwave is running at. 5.5.2 add_label 5.5.2.1 Syntax: add_label(pos[,text]) Add a new label at a given position. If the given position already contains a label, then this command does nothing. The label can be given an optional description. 5.5.2.2 Parameters pos: tekst: position in samples where to insert the label some descriptive text (optional) 1 Note: Please don t mix up the keyword GOTO with the text command goto (position)! 43

5.5.3 add_track 5.5.3.1 Syntax: add_track() Adds a new track after all existing tracks. 5.5.3.2 Zie ook insert_track() 5.6 c 5.6.1 clipboard_flush 5.6.1.1 Syntax: clipboard_flush() Discards the current content of the clipboard (might free some memory). 5.6.2 close 5.6.2.1 Syntax: close() Closes the current file. If the GUI is configured to MDI or Tab mode, this also closes the corresponding sub window. 5.6.2.2 Zie ook open(filename), quit() 5.6.3 continue 5.6.3.1 Syntax: continue() Corresponds to the Continue toolbar button and lets the playback continue if it is paused. 5.6.3.2 Zie ook pause() 5.6.4 copy 5.6.4.1 Syntax: copy() Copies the content of the current selection to the clipboard. If the selection is empty, this command does nothing and the content of the clipboard remains unchanged. Only the content of the currently selected tracks is copied to the clipboard! 44

5.6.4.2 Zie ook paste() 5.6.5 crop 5.6.5.1 Syntax: crop() Crops the signal to the current selection by deleting everything that is after and before the current selection. Affects all tracks. If nothing is selected this command does nothing. 5.6.6 cut 5.6.6.1 Syntax: cut() Copies the content of the current selection to the clipboard and removes it from the signal. If the selection is empty, this command does nothing and the content of the clipboard remains unchanged. Only the content of the currently selected tracks is copied to the clipboard, but the selected range is deleted from all tracks. 5.7 d 5.7.1 delayed 5.7.1.1 Syntax: delayed( milliseconds, command ) Executes a command after a given delay. Please note that the command is executed asynchronously after the given time has elapsed. Multiple commands can be queued, where the delays are relative to the last queued command. This command is intended to be used for queuing commands when taking screenshots for documentation purposes. 5.7.1.2 Parameters milliseconden: commando: number of whole milliseconds to wait before executing the command a command, including parameters to be executed after the given delay 5.7.1.3 Zie ook sync(), window:resize(), window:click(), window:sendkey(), window:close(), window:screenshot() 45

5.7.2 delete 5.7.2.1 Syntax: delete() Deletes the currently selected range of samples. If the selection is empty, this command does nothing. Affects all tracks. 5.7.3 delete_label 5.7.3.1 Syntax: delete_label(index) Deletes a label, identified by its index (starting from zero). If no label with the given index exists, this command does nothing. 5.7.3.2 Parameters index: index of the label to delete, starting with 0 5.7.4 delete_track 5.7.4.1 Syntax: delete_label(index) Deletes a track, identified by its index (starting from zero). If no track with the given index exists, this command exits with an error. 5.7.4.2 Parameters index: index of the track to delete, starting with 0 5.7.5 dump_metadata 5.7.5.1 Syntax: dump_metadata() Prints a list of all meta data entries to the console, for diagnostic purposes. (Only available when Kwave has been compiled with the option WITH_DEBUG switched on). 5.8 e 5.8.1 edit_label 5.8.1.1 Syntax: edit_label(index) Opens a window in which the user can edit the position and the description of a label, which is identified by its index (starting from zero). If no label with the given index exists, this command does nothing. 46

5.8.1.2 Parameters index: index of the label to edit, starting with 0 5.8.2 expandtolabel 5.8.2.1 Syntax: expandtolabel() Expands the current selection to the labels left and right from the current selection borders. If the border of selection already is on a label, it stays unchanged. If there is no label left or right of the current selection, it will be expanded to the start or end of the file. 5.9 f 5.9.1 fileinfo 5.9.1.1 Syntax: fileinfo(index) Set a file info entry to a new value. 5.9.1.2 Parameters trefwoord: waarde: keyword of the entry value of the entry 5.9.2 forward 5.9.2.1 Syntax: forward() Corresponds to the Forward toolbar button. If the playback is currently running, it skips forward by 1/10 of the visible range. If the playback is not running, this does the same as the command view:scroll_right. 5.9.2.2 Zie ook view:scroll_right(), rewind() 47

5.10 g 5.10.1 goto 5.10.1.1 Syntax: goto(pos) Sets the cursor to the given position and makes it visible in current view. After this the selection has zero length. 5.10.1.2 Parameters pos: position in samples where to go to 5.11 i 5.11.1 insert_at 5.11.1.1 Syntax: insert_at(pos) Inserts the content of the clipboard at the given position, like the command paste()(). If the clipboard is currently empty, this function does nothing. 5.11.1.2 Parameters pos: position in samples where to insert 5.11.1.3 Zie ook paste() 5.11.2 insert_track 5.11.2.1 Syntax: insert_track(index) Inserts a new track at the given index, using the current length and sample rate settings of the signal. If the index is higher than or equal to the current number of tracks, it will be appended as the last track, same as by the command add_track(). The index of all existing tracks at and after the given index will be incremented by one. 5.11.2.2 Parameters index: index of the track to insert, starting with 0 48

5.11.2.3 Zie ook add_track() 5.12 l 5.12.1 loadbatch 5.12.1.1 Syntax: loadbatch(filename) Opens a Kwave script file and processes the commands in it. Uses the context of the currently opened file or the current main window if no file is loaded. 5.12.1.2 Parameters bestandsnaam: name of the kwave script file including path and extension 5.12.2 loop 5.12.2.1 Syntax: loop() Corresponds to the Loop toolbar button. Starts the playback (if it is not already running) and lets it play in a loop. 5.12.2.2 Zie ook playback_start() 5.13 m 5.13.1 menu 5.13.1.1 Syntax: menu (command, path, [hotkey], [id]) This is a very powerful command, which is used to add a new entry to the menu or to modify an existing entry. It determines which command is executed when the menu entry is activated, which icon is shown in the menu and which hotkey is used. Each menu entry can be disabled or hidden, can be assigned a unique id and can also join a menu group. You normally do not need this command within a Kwave script! 5.13.1.2 Parameters 49

commando: pad: sneltoets: id: A text command (including parameters) or a command list that will be executed when the menu entry gets activated. If a menu entry does not have a corresponding command (for example if it is a sub menu and not menu entry), you should use the special command ignore(). The path within the menu, using a / as separator. The last part of the path can be a sub command which modifies some property of the menu entry (see below). The last portion of the path (that is not a sub command) produces a menu entry, the parts before produce the main menu entry or sub menus that lead to it. Main menu entries or sub menus are automatically created when a menu entry is created, you do not need them manually. A bitmask that consists of a combination of predefined keys and modifiers, concatenated with a +. The key can be either a digit, an upper case letter, a function key ( F1... F12 ) or any other key name understood by the Qt class QKeySequence, including key names for predefined actions (like for example ::Copy ). Typical modifiers are SHIFT, ALT and CTRL. A unique id that can be internally used to identify this menu entry or menu / sub menu. Only uppercase letters, digits and _ should be used and it should start with ID_. It is in your own responsibility to make sure that the same id is not used twice. 5.13.1.3 Sub Commands #checkable: #disabled: #enabled: #exclusive(groep): Makes a menu entry checkable, so that it can be switched on or off. Maakt het menu-item of menu/submenu uitgeschakeld. Maakt een menu-item of menu/submenu dat eerder was uitgeschakeld weer ingeschakeld. Makes a menu entry be part of an exclusivegroup (one of many selection). The group that is given as parameter should not be used for any other purpose. Only one entry within that group can be selected at a time. 50

#group(lijst): Adds the menu entry or menu/sub menu to one or more a groups, so that the application can enable/disable a bunch of menu entries without need to know all their unique ids. Multiple groups can be passed as a list with a, as separator. Group names have to start with a @. The following groups predefined: @CLIPBOARD: Only enabled when the clipboard is not empty. @LABELS: Only enabled when the current signal contains at least one label. @NOT_CLOSED: Enabled when the current signal is not closed (the signal might be empty or zero length). @SELECTION: Enabled when the selection is not empty (more than one sample is selected). @SIGNAL: Enabled when there is some signal loaded and it is not empty or zero length. #hidden: #icon(naam): #listmenu(id,command): #separator: Hides the menu entry or menu/sub menu. Assigns an icon to a menu entry. The icon name should correspond to an icon file (without path and file extension) that is installed with KDE or with Kwave. Inserts a placeholder for a list of menu entries into a sub menu. The unique id specified in this sub command is used to add/remove or clear the list of menu entries. The command parameter has to contain %1 as parameter, which will be replaced with the text of the menu entry when it is activated. (This sub command is internally used for the list of recent files, list of tracks and window list). Inserts a separator into a sub menu. 51

5.13.2 msgbox 5.13.2.1 Syntax: msgbox(text) Shows a message box with some text and the two buttons OK (returns without error code) and Cancel (returns and error code). You can use this command to give the user a possibility to abort a running script. 5.13.2.2 Parameters tekst: A message that will be shown in the message box, should contain a question that can be answered with OK or Cancel 5.14 n 5.14.1 newsignal 5.14.1.1 Syntax: newsignal( samples, rate, bits, tracks) Creates a new signal, with a given length in samples, a rate in samples per second (floating point number), a number of bits per sample and number of tracks. You can calculate the length in samples by multiplying the desired length in seconds with the sample rate. 5.14.1.2 Parameters samples: snelheid: bits: tracks: Length of the signal in samples. Sample rate in samples per second. Number of bits per sample, must not be zero, should be a number from 8...32. Number of tracks. 5.14.2 next 5.14.2.1 Syntax: next() Corresponds to the Next toolbar button. If the playback is currently running, it skips forward to the next label. If the playback is not running, this does the same as the command view:scroll_next_label. 5.14.2.2 Zie ook view:scroll_next_label(), prev() 52

5.15 o 5.15.1 open 5.15.1.1 Syntax: open([filename]) Opens a file, which can be either a sound file or a Kwave script. If no file name is passed, then a dialog window will be opened that allows to select an existing file. Depending on the GUI mode the file will be opened in the context of a new sub window (MDI and tab) or in a new main window (SDI, if there was already something loaded). 5.15.1.2 Parameters bestandsnaam: name of a file including path and extension 5.15.1.3 Zie ook close() 5.15.2 openrecent 5.15.2.1 Syntax: openrecent(filename) Practically the same as the command open, but intended to be used internally for the list of recently opened files in the menu File+Open Recent. In this command the parameter filename is not optional. 5.15.2.2 Parameters bestandsnaam: entry of the list of recently opened files 5.15.2.3 Zie ook open 5.16 p 5.16.1 paste 5.16.1.1 Syntax: paste() Replaces the current selection with the content of the clipboard. If the clipboard is empty, this command does nothing. The sample rate of the inserted data is adjusted to match the sample rate of the current signal if necessary. Only enabled tracks are affected, disabled tracks remain 53

unchanged. Please be aware that this might produce a time shift between enabled and disabled tracks! If the number of tracks of the clipboard data differs from the number of enabled tracks, then the data is mixed to be spread equally over all selected tracks. 5.16.1.2 Zie ook copy() 5.16.2 pause 5.16.2.1 Syntax: continue() Corresponds to the Pause toolbar button and lets the playback pause if it is currently running, or continue if it is currently paused. 5.16.2.2 Zie ook continue() 5.16.3 playback_start 5.16.3.1 Syntax: playback_start() Corresponds to the Start toolbar button and lets the playback start if it is currently paused. 5.16.4 plugin 5.16.4.1 Syntax: plugin(name, [parameter...]) Executes a plugin, with an optional list of parameters. If no parameter list is given, then the setup function of the plugin will be called, using the parameters of the previous invocation or default parameters as input (normally shows a setup dialog, depending on the plugin). Please refer to the chapter about plugins for a description of the various plugins. 5.16.4.2 Parameters naam: parameter: the (internal) name of a Kwave plugin a list of parameters understood by the plugin (optional) 5.16.4.3 Zie ook plugin:execute(), plugin:setup() 54

5.16.5 plugin:execute 5.16.5.1 Syntax: plugin:execute(name, [parameter...]) Similar to the command plugin(), but without calling the setup function of the plugin if no parameters were passed. 5.16.5.2 Parameters naam: parameter: the (internal) name of a Kwave plugin a list of parameters understood by the plugin 5.16.6 plugin:setup 5.16.6.1 Syntax: plugin:setup(name, [parameter...]) Calls the setup function of a plugin, with an optional list of parameters. If no parameter list is given, the parameters of the previous invocation or default parameters will be used as input. This normally shows a setup dialog, depending on the plugin. Please refer to the chapter about plugins for a description of the various plugins. 5.16.6.2 Parameters naam: parameter: the (internal) name of a Kwave plugin a list of parameters understood by the plugin (optional) 5.16.7 prev 5.16.7.1 Syntax: prev() Corresponds to the Previous toolbar button. If the playback is currently running, it skips back to the previous label or start of the selection. If the playback is not running, this does the same as the command view:scroll_prev_label. 5.16.7.2 Zie ook view:scroll_prev_label(), next() 55

5.17 q 5.17.1 quit 5.17.1.1 Syntax: quit() Closes the current main window, including all sub windows. In SDI mode this is the same as the command close(). 5.17.1.2 Zie ook close() 5.18 r 5.18.1 redo 5.18.1.1 Syntax: redo() Corresponds to the Redo toolbar button and repeats one operation that has been reverted with undo. 5.18.1.2 Zie ook undo() 5.18.2 redo_all 5.18.2.1 Syntax: redo_all() Similar to redo, but re-does as many operations as possible. 5.18.2.2 Zie ook undo() 5.18.3 reenable_dna 5.18.3.1 Syntax: reenable_dna() Some message boxes offer the possibility to prevent them from appearing again ( do not ask again ). This command makes all of them appear again. 5.18.4 reset_toolbars 5.18.4.1 Syntax: reset_toolbars() Resets all toolbar settings, like location, icon size and text location back to defaults. 56

5.18.5 revert 5.18.5.1 Syntax: revert() Reverts the currently loaded file back to the last saved state, discarding all changes that are not saved. 5.18.6 rewind 5.18.6.1 Syntax: rewind() Corresponds to the Rewind toolbar button. If the playback is currently running, it skips backward by 1/10 of the visible range. If the playback is not running, this does the same as the command view:scroll_left. 5.18.6.2 Zie ook view:scroll_left(), forward() 5.19 s 5.19.1 save 5.19.1.1 Syntax: save() Corresponds to the Save toolbar button. Saves the current file if it has modifications. If the file does not already have a name (bijv. a file that has just been created and does not yet have a file name), this command does the same as saveas. 5.19.1.2 Zie ook saveas() 5.19.2 saveas 5.19.2.1 Syntax: saveas([filename]) Saves the currently opened file under a given file name. If no file name is given as parameter, a dialog will be shown to select the directory and to enter a file name. 5.19.2.2 Parameters bestandsnaam: file name for saving (optional) 57

5.19.3 saveselect 5.19.3.1 Syntax: saveselect() This command does the same as save, but saves only the currently selected range and the activated tracks instead of the whole file. 5.19.3.2 Zie ook save() 5.19.4 select_gui_type 5.19.4.1 Syntax: select_gui_type(mode) Selecteer een GUI-modus, die of SDI, MDI of Tab kan zijn. Let erop dat deze wijziging onmiddellijk effect zal hebben! 5.19.4.2 Parameters bestandsnaam: naam van de modus, moet of SDI, MDI of TAB zijn. 5.19.5 select_track:all 5.19.5.1 Syntax: select_track:all() Markeert alle tracks als ingeschakeld Dit is hetzelfde als het commando select_track:on() aanroepen voor alle bestaande tracks. 5.19.5.2 Zie ook select_track:on() 5.19.6 select_track:invert 5.19.6.1 Syntax: select_track:all() Inverteert de status ingeschakeld van alle tracks. Dit is hetzelfde als het commando select_track:toggle() aanroepen voor alle bestaande tracks. 5.19.6.2 Zie ook select_track:toggle() 58

5.19.7 select_track:none 5.19.7.1 Syntax: select_track:none() Markeert alle tracks als uitgeschakeld. Dit is hetzelfde als het commando select_track:off() aanroepen voor alle bestaande tracks. 5.19.7.2 Zie ook select_track:off() 5.19.8 select_track:off 5.19.8.1 Syntax: select_track:off(index) Schakelt een enkele track uit, zodat de meeste bewerkingen daarop niet worden toegepast. 5.19.8.2 Parameters index: index van de track, beginnend bij nul 5.19.9 select_track:on 5.19.9.1 Syntax: select_track:on(index) Schakelt een enkele track in, zodat deze alle bewerkingen daarop worden toegepast. 5.19.9.2 Parameters index: index van de track, beginnend bij nul 5.19.10 select_track:toggle 5.19.10.1 Syntax: select_track:toggle(index) Schakelt een track in als deze nu is uitgeschakeld of schakelt deze uit als deze nu is ingeschakeld. 5.19.10.2 Parameters index: index van de track, beginnend bij nul 59

5.19.11 selectall 5.19.11.1 Syntax: selectall() Selecteert het bereik van het gehele signaal, van de eerste tot de laatste sample. 5.19.12 selectnext 5.19.12.1 Syntax: selectnext() Selecteert een reeks samples die starten direct achter de huidige selectie en dezelfde lengte gebruiken als de huidige selectie. De selectie wordt automatisch afgesneden aan het eind van het signaal. Bijvoorbeeld: als u de samples 1000... 1019 hebt geselecteerd, dan zal het resultaat een selectie van sample 1020... 1039 zijn. 5.19.12.2 Zie ook selectprev() 5.19.13 selectnextlabels 5.19.13.1 Syntax: selectnextlabels() Selects a range of samples between the next two labels after the current selection. If nothing is selected, it selects from the start of the signal up to the first label. Otherwise the left border of the new selection will be the position of first label after the selection (or the last label if there are no more labels right from the selection), and the right border of the new selection will be the first label after the left border of the new selection (or the end of the signal if there is none). This command returns an error when there are no labels at all. 5.19.13.2 Zie ook selectprevlabels() 5.19.14 selectnone 5.19.14.1 Syntax: selectnone() Stelt de selectie terug op lengte nul. 5.19.15 selectprev 5.19.15.1 Syntax: selectprev() Selecteert een reeks samples die starten links vanaf de huidige selectie en dezelfde lengte gebruiken als de huidige selectie. De selectie wordt automatisch afgesneden aan het begin van het signaal. Bijvoorbeeld: als u de samples 1000... 1019 hebt geselecteerd, dan zal het resultaat een selectie van sample 980... 999 zijn. 60

5.19.15.2 Zie ook selectnext() 5.19.16 selectprevlabels 5.19.16.1 Syntax: selectprevlabels() Selects a range of samples between the previous two labels before the current selection. If nothing is selected, it selects from the start of the signal up to the first label. Otherwise the right border of the new selection will be the position of first label before the selection (or the first label if there are no more labels left from the selection), and the left border of the new selection will be the first label before the right border of the new selection (or the start of the signal if there is none). This command returns an error when there are no labels at all. 5.19.16.2 Zie ook selectnextlabels() 5.19.17 selecttoleft 5.19.17.1 Syntax: selecttoleft() Stelt het begin van de selectie in op het begin van het signaal, het eind van de huidige selectie blijft ongewijzigd. 5.19.17.2 Zie ook selecttoright() 5.19.18 selecttoright 5.19.18.1 Syntax: selecttoright() Stelt het eind van de selectie in op het eind van het signaal, het begin van de huidige selectie blijft ongewijzigd. 5.19.18.2 Zie ook selecttoleft() 5.19.19 selectvisible 5.19.19.1 Syntax: selectvisible() Selecteert de reeks samples die zichtbaar zijn in het huidige venster. 61

5.19.20 start 5.19.20.1 Syntax: start() Komt overeen met het de knop Begin op de werkbalk en laat het afspelen beginnen vanaf het begin van de selectie of doorgaan als het is nu is gepauzeerd. 5.19.20.2 Zie ook stop() 5.19.21 stop 5.19.21.1 Syntax: stop() Komt overeen met het de knop Stop op de werkbalk en laat het afspelen stoppen als er nu wordt afgespeeld. 5.19.21.2 Zie ook start() 5.19.22 sync 5.19.22.1 Syntax: sync() Wacht totdat alle commando s die asynchroon zijn gestart zijn geëindigd. Als er nu niets in de wachtrij staat voor vertraagde uitvoering dan heeft dit commando geen effect. 5.19.22.2 Zie ook delayed() 5.20 u 5.20.1 undo 5.20.1.1 Syntax: undo() Komt overeen met de knop op de werkbalk Ongedaan maken en keert de laatste bewerking om. 5.20.1.2 Zie ook redo() 62

5.20.2 undo_all 5.20.2.1 Syntax: undo_all() Similar to undo, but reverts as many operations as possible. 5.20.2.2 Zie ook undo() 5.21 v 5.21.1 view:scroll_end 5.21.1.1 Syntax: view:scroll_end() Scrolls the current view to the end of the signal. 5.21.1.2 Zie ook view:scroll_start() 5.21.2 view:scroll_left 5.21.2.1 Syntax: view:scroll_left() Scrolls the current view by 1/10 of the currently visible range towards the start of the signal. If the start of the signal is reached the visible area starts at offset zero. 5.21.2.2 Zie ook view:scroll_right() 5.21.3 view:scroll_next 5.21.3.1 Syntax: view:scroll_next() Scrolls the current view towards the end of the signal by the currently visible range. 5.21.3.2 Zie ook view:scroll_prev() 5.21.4 view:scroll_next_label 5.21.4.1 Syntax: view:scroll_next_label() Scrolls right and tries to show the next label centered in the view. If there was no label right from the current position, it will scroll to the end of the signal. 63

5.21.4.2 Zie ook view:scroll_prev_label() 5.21.5 view:scroll_prev 5.21.5.1 Syntax: view:scroll_prev() Scrolls the current view towards the start of the signal by the currently visible range. 5.21.5.2 Zie ook view:scroll_next() 5.21.6 view:scroll_prev_label 5.21.6.1 Syntax: view:scroll_prev_label() Scrolls left and tries to show the previous label centered in the view. If there was no label left from the current position, it will scroll to the start of the signal. 5.21.6.2 Zie ook view:scroll_next_label() 5.21.7 view:scroll_right 5.21.7.1 Syntax: view:scroll_right() Scrolls the current view by 1/10 of the currently visible range towards the end of the signal. If the end of the signal is reached the visible area ends at the end of the signal. 5.21.7.2 Zie ook view:scroll_left() 5.21.8 view:scroll_start 5.21.8.1 Syntax: view:scroll_start() Scrolls the current view to the start of the signal. 5.21.8.2 Zie ook view:scroll_end() 64

5.21.9 view:zoom_all 5.21.9.1 Syntax: view:zoom_all() Adjusts the zoom factor so that the complete signal is visible in the current view. 5.21.10 view:zoom_in 5.21.10.1 Syntax: view:zoom_in([position]) Reduces the zoom factor (in samples per pixel) by 30%, so that more details get visible. If a posi tion is given, it tries to show that position centered in the current view, otherwise the center of the view before the zoom change is used for centering. The minimum zoom factor is limited to a minimum of five samples per width of the view. 5.21.10.2 Parameters positie: a zero based position in samples to center the view (optional) 5.21.10.3 Zie ook view:zoom_out() 5.21.11 view:zoom_normal 5.21.11.1 Syntax: view:zoom_normal() Sets the zoom factor to one pixel per sample (factor 1.0) and tries to keep the previous center of the view. 5.21.12 view:zoom_out 5.21.12.1 Syntax: view:zoom_out([position]) Increases the zoom factor (in samples per pixel) by 30%, so that less details get visible. If a posi tion is given, it tries to show that position centered in the current view, otherwise the center of the view before the zoom change is used for centering. The maximum zoom factor is limited to the number of samples of the complete signal and the width of the view. 5.21.12.2 Parameters positie: a zero based position is samples to center the view (optional) 65

5.21.12.3 Zie ook view:zoom_in() 5.21.13 view:zoom_selection 5.21.13.1 Syntax: view:zoom_selection() Adjusts the view (zoom factor and start of visible area) so that it matches the current selection. This command does nothing if the selection is empty. 5.22 w 5.22.1 window:activate 5.22.1.1 Syntax: window:activate(titel]) Activates a sub window, identified by its window title. If the sub window is minimized it will be restored. Only available if in MDI and tab mode. This command is internally used by the Window menu. 5.22.1.2 Parameters titel: the title of the sub window that should be activated 5.22.2 window:cascade 5.22.2.1 Syntax: window:cascade() Cascades all sub windows when in MDI mode. All sub windows that are currently minimized stay minimized, they will not be restored. 5.22.3 window:click 5.22.3.1 Syntax: window:click( klasse, x, y ) Sends a mouse click event to window, identified by its class name. The event will only be sent to the first window that has the given class name, therefore you should make sure that you have only one instance of the given window when this command gets executed. 5.22.3.2 Parameters klasse: x: naam van de vensterklasse x position, relative to the left border of the window (in pixels) 66

y: y position, relative to the top border of the window (in pixels) 5.22.4 window:close 5.22.4.1 Syntax: window:close( klasse ) Closes a window, identified by its class name. Only the first window that has the given class name will be closed, therefore you should make sure that you have only one instance of the given window when this command gets executed. 5.22.4.2 Parameters klasse: naam van de vensterklasse 5.22.5 window:minimize 5.22.5.1 Syntax: window:minimize Minimizes the currently active sub window when in MDI mode or the current toplevel window when in SDI or Tab mode. 5.22.6 window:mousemove 5.22.6.1 Syntax: window:resize( klasse, x, y ) Sends a mouse move event to window, identified by its class name. The event will only be sent to the first window that has the given class name, therefore you should make sure that you have only one instance of the given window when this command gets executed. 5.22.6.2 Parameters klasse: x: y: naam van de vensterklasse x position, relative to the left border of the window (in pixels) y position, relative to the top border of the window (in pixels) 67

5.22.7 window:next_sub 5.22.7.1 Syntax: window:next_sub() Activates the next sub window when in MDI or tab mode. If the next sub window is minimized it will be restored. 5.22.8 window:prev_sub 5.22.8.1 Syntax: window:prev_sub() Activates the previous sub window when in MDI or tab mode. If the previous sub window is minimized it will be restored. 5.22.9 window:resize 5.22.9.1 Syntax: window:resize( class, width, height ) Changes the size of a window, identified by its class name to a new width and height. The change will only be applied to the first window that has the given class name, therefore you should make sure that you have only one instance of the given window when this command gets executed. 5.22.9.2 Parameters klasse: breedte: hoogte: naam van de vensterklasse new width of the window (in pixels) new height of the window (in pixels) 5.22.10 window:screenshot 5.22.10.1 Syntax: window:screenshot( class, filename ) Takes a screenshot of a window, identified by its class and saves it to a file. The screenshot will be taken from the first window that has the given class name, therefore you should make sure that you have only one instance of the given window when this command gets executed. Currently the format of the file is hardcoded and has to be *.png. 5.22.10.2 Parameters klasse: bestandsnaam: naam van de vensterklasse name of the file to save the screenshot, must have the extension *.png 68

5.22.11 window:sendkey 5.22.11.1 Syntax: window:sendkey( class, key code ) Sends a key press and release event to a window, identified by its class name. The key will only be sent to the first window that has the given class name, therefore you should make sure that you have only one instance of the given window when this command gets executed. 5.22.11.2 Parameters klasse: key code: naam van de vensterklasse the key code that should be sent, using the same syntax as used for setting up menus 5.22.11.3 Zie ook description of the parameter hotkey of the menu command. 5.22.12 window:tile 5.22.12.1 Syntax: window:tile() Tiles all sub windows when in MDI mode, using some scheme of KDE. All sub windows that are currently minimized stay minimized, they will not be restored. 5.22.13 window:tile_vertical 5.22.13.1 Syntax: window:tile_vertical() Tiles all sub windows vertically when in MDI mode. All windows that are currently minimized stay minimized, they will not be restored. 69

Hoofdstuk 6 Plug-ins 6.1 Plugin Reference 6.2 about (About Kwave) Interne naam: about Type plug-in: gui Beschrijving: Shows a window with multiple tabs, including the following information: 70

algemene informatie over het programma authors, contributors and copyright holders all found plugins including their versions and authors informatie over het vertalingsteam copyright and licensing information 6.3 amplifyfree (Amplify Free) Interne naam: amplifyfree Type plug-in: effect Beschrijving: Amplifies the current selection with a curve that consists of a set of coordinates and an interpolation method. The coordinates on the time axis as well as on the amplitude axis must be normed between 0.0 and 1.0. Parameters: bewerking Internal name, for undo/redo handling. Possible values are: trefwoord beschrijving fade in fade in, curve from 0.0/0.0 to 1.0/1.0 fade out fade out, curve from 0.0/1.0 to 1.0/0.0 fade intro fade intro, one second pause, then fade in fade outro fade outro, first fade out, then one second pause amplify free user defined curve 71

interpolatie Interpolation type, possible values are: trefwoord linear spline n-polynom 3-polynom 5-polynom 7-polynom sample_hold beschrijving Lineair Spline Polynom, nth Degree Polynom, 3rd Degree Polynom, 5th Degree Polynom, 7th Degree Sample and Hold kromme A comma separated list of pairs of coordinates, normed between 0.0 and 1.0, must be sorted by time axis (ascending), should start at time 0.0 and end with time 1.0. 6.4 band_pass (Band Pass Filter) Interne naam: band_pass Type plug-in: effect Beschrijving: Applies a simple band pass filter to the current selection. A band pass lets a certain range of frequencies around a center frequency pass and filters out frequencies that are below or above the center frequency by more than half of the bandwidth of the filter. 72

The filter has grade two and is implemented as described in the book An introduction to digital filter theory by Julius O. Smith and in Moore s book, where the normalized version from Moore s book is used. Parameters:: frequentie Center frequency of the filter in Hz, must be below half of the sample rate of the file. bandbreedte Bandwidth of the filter in Hz. 6.5 codec_ascii (ASCII Codec) Interne naam: codec_ascii Type plug-in: codec Ondersteunde typen bestanden: Beschrijving: Bestandsextensies: Mime-typen: ASCII encoded audio *.ascii audio/x-audio-ascii Ondersteunde metagegevens: (all known file info items, see section ) 6.6 codec_audiofile (Audiofile Codec) Interne naam: codec_audiofile Type plug-in: codec [import only] Ondersteunde typen bestanden: Beschrijving: Bestandsextensies: Mime-typen: NeXT, Sun Audio *.au, *.snd audio/basis Beschrijving: Bestandsextensies: Mime-typen: Compressed Audio Interchange Format *.aifc audio/x-aifc 73

Beschrijving: Bestandsextensies: Mime-typen: Audio Interchange Format *.aif, *.aiff audio/x-aiff Beschrijving: Bestandsextensies: Mime-typen: Berkeley, IRCAM, Carl Sound Format *.sf audio/x-ircam Ondersteunde metagegevens: (geen) 6.7 codec_flac (FLAC Codec) Interne naam: codec_flac Type plug-in: codec Ondersteunde typen bestanden: Beschrijving: Bestandsextensies: Mime-typen: FLAC audio (Free Lossles Audio Codec) *.flac audio/x-flac Ondersteunde metagegevens: Datum, Naam, Versie, Album, Track, Auteur, Uitvoerder, Copyright, Licentie, Organisatie, Onderwerp, Genre, Broncode, Contactpersoon, ISRC, Software, Ingenieur, Basiskwaliteit 74

6.8 codec_mp3 (MP3-codec) Interne naam: codec_mp3 Type plug-in: codec Ondersteunde typen bestanden: Beschrijving: Bestandsextensies: Mime-typen: MPEG laag III-audio *.mp3 audio/x-mp3, audio/mpegs Beschrijving: Bestandsextensies: Mime-typen: MPEG laag II-audio *.mp2 audio/x-mp2, audio/mpeg Beschrijving: Bestandsextensies: Mime-typen: MPEG laag I-audio *.mp1, *.mpg, *.mpga audio/x-mpga, audio/mpeg Ondersteunde metagegevens: 75

Album, Annotatie, Auteur, Cd, Cd s, Commentaren, Opgedragen, Contactpersoon, Copyright, Datum, Genre, ISRC, Lengte, Licentie, Medium, Naam, Organisatie, Uitvoerder, Software, Technicus, Track, Tracks, Versie 6.9 codec_ogg (Ogg Codec) Interne naam: codec_ogg Type plug-in: codec Ondersteunde typen bestanden: Beschrijving: Bestandsextensies: Mime-typen: Ogg Opus-audio *.opus audio/ogg, application/ogg, audio/opus Beschrijving: Bestandsextensies: Mime-typen: Ogg Vorbis audio *.ogg audio/ogg, audio/x-ogg, application/x-ogg, audio/x-vorbis+ogg Ondersteunde metagegevens: Album, Auteur, Contactpersoon, Copyright, Datum, Ingenieur, Genre, ISRC, Licentie, Naam, Organisatie, Uitvoerder, Software, Broncode, Onderwerp, Track, Basiskwaliteit, Versie, 6.10 codec_wav (WAV-codec) Interne naam: codec_wav Type plug-in: codec Ondersteunde typen bestanden: Beschrijving: Bestandsextensies: Mime-typen: WAV-audio *.wav audio/x-wav, audio/vnd.wave, audio/wav 76

Ondersteunde metagegevens: Album, Annotatie, Locatie van archief, Auteur, Cd, Commentaren, Opgedragen, Contactpersoon, Copyright, Datum, Ingenieur, Genre, ISRC, Sleutelwoorden, Licentie, Medium, Naam, Organisatie, Uitvoerder, Product, Software, Broncode, Vorm van bron, Onderwerp, Technicus, Track, Versie, 6.11 debug (Debugfuncties) Interne naam: debug Type plug-in: functie Beschrijving: Provides various internal commands useful for debugging and scripting Kwave. These functions are only available through the main menu if Kwave has been compiled in debug mode (see build options). Commando s:,,,, 6.12 fileinfo (Bestandsinformatie) Interne naam: fileinfo 77

Type plug-in: gui Beschrijving: Provides a dialog window to view and change parameters and meta data of the currently opened file. See section in this manual. 6.13 goto (Ga naar positie) Interne naam: goto Type plug-in: functie Beschrijving: Shows a dialog with the possibility to set the current position of the selection to a new value, either by a time in milliseconds, by a position in samples or by percentage of the length of the current file. Commando s: Parameters:: modus waarde beschrijving 0 positie is gegeven in milliseconden 1 position is given in samples position is given in percentage of the 2 file length positie position to go to, in milliseconds, samples or percentage of the length of the file, depending on the parameter mode. 78

6.14 insert_at (Invoegen op) Interne naam: insert_at Type plug-in: functie Beschrijving: Similar to the plugin, but shows a dialog with the possibility to insert the current content of the clipboard at a given position, either by a time in milliseconds, by a position in samples or by percentage of the length of the current file. Commando s: Parameters:: modus waarde beschrijving 0 positie is gegeven in milliseconden 1 position is given in samples position is given in percentage of the 2 file length positie position where to insert the clipboard data, in milliseconds, samples or percentage of the length of the file, depending on the parameter mode. 79

6.15 lowpass (Low Pass Filter) Interne naam: lowpass Type plug-in: effect Beschrijving: Applies a simple low pass filter to the current selection. A low pass filter lets frequencies below a border frequency pass and filters out frequencies that are above the border frequency. The filter has grade two and is implemented as described in the book The manifold joys of conformal mapping, applications to digital filtering in the studio by James A. Moorer (JAES, Vol. 31, No. 11, 1983 November). Parameters:: frequentie The border frequency of the low pass filter in Hz. 80

6.16 memory (Memory Settings) Interne naam: memory Type plug-in: gui Beschrijving: Provides a dialog to set up the memory usage of Kwave. Please refer to the section about the in this manual for more information. Parameters:: physical limited If zero, the use of physical memory will not limited, otherwise the use of physical memory will be limited. physical limit Limitation of the physical memory in units of whole MB. Only has an effect when the parameter physical limited has been set to a non zero value. virtual enabled If zero, the use of virtual memory will be disabled, otherwise the use of virtual memory will be enabled. virtual limited If zero, the use of virtual memory will be not limited, otherwise the use of virtual memory will be limited. Only has an effect if the parameter virtual enabled has been set to a non zero value. virtual limit Limitation of the virtual memory in units of whole MB. Only has an effect if the parameters virtual enabled and virtual limited have both been set to a non zero value. virtual directory Directory to use for storing swap files that will be used for providing virtual memory. Only has an effect if the parameter virtual enabled has been set to a non zero value. 81

6.17 newsignal (New Signal) Interne naam: newsignal Type plug-in: functie Beschrijving: Provides a dialog to create a new file. Please refer to the section in this manual for more information. Commando s:, 82

6.18 noise (Noise Generator) Interne naam: noise Type plug-in: effect Beschrijving: Adds some amount of white noise to the current selection. The amount of noise can be selected between zero (no noise, original remains unchanged) and one (original will be replaced by 100% noise). Parameters:: niveau Ruisniveau, moet altijd een drijvendekommagetal zijn groter dan nul en kleiner of gelijk aan één. modus waarde 0 1 beschrijving Voer de ruis in als percentage van de amplitude, vanaf 0 tot 100. Voer de ruis in in decibel, vanaf -21 db tot 0 db. 6.19 normalize (Normalisatie) 83

Interne naam: normalize Type plug-in: effect Beschrijving: Normalizes the volume level of the current selection. Use this if the volume of your signal is too low or too high. The algorithm is taken from the normalize project, and was originally written by Chris Vaill. 6.20 notch_filter (Notch-filter) Interne naam: notch_filter Type plug-in: effect Beschrijving: Applies a notch filter to the current selection. A notch filter removes a small range of frequencies around a center frequency and lets all other frequencies below and above the center frequency by more than half of the bandwidth pass. Use this to filter out single distortion frequencies. The filter has grade two and is based on the implementation of Juhana Sadeharju. Parameters:: frequentie Center frequency of the filter in Hz, must be below half of the sample rate of the file. bandbreedte Bandwidth of the filter in Hz. 84

6.21 pitch_shift (Pitch Shift) Interne naam: pitch_shift Type plug-in: effect Beschrijving: The pitch shift effect modifies the signal by changing the speed of the content, but with keeping the original length. You can select the relative speed either by factor from 1/10 to x5, or as a percentage from 1% to 400% of the original speed. A speed factor below 1.0 pitches the signal down (lower voice, makes voices sound older), factor 1.0 does no change and a factor above 1.0 pitches the signal up (higher voice, mickey mouse effect). The implementation is based on the work of Jeff Tranter and Stefan Westerfeld Parameters:: snelheid Factor for changing the speed, has to be a floating point number between 0.001 and 4.0. frequentie Frequency internally used by the filter in Hz, has to be between 2.0 and 10.0. modus waarde 0 1 beschrijving Enter the speed value as factor from 1/10 to x5. Enter the speed value as percentage from 1 to 400. 85

6.22 playback (Afspelen) Interne naam: playback Type plug-in: functie Beschrijving: Provides a dialog to set up the playback parameters. Please refer to the section in this manual for more information. Parameters:: afspeelmethode The method used for playback, see PlayBackParam.h. afspeelapparaat A string that determines the playback device or channel. The meaning depends on the playback method. kanalen Het aantal te gebruiken kanalen voor afspelen, op dit moment slechts 1 (mono) of 2 (stereo). bits per sample The number of bits per sample for playback, should be 8, 16, 24 or 32. Depends on the playback method and the playback device. buffergrootte Determines the size of the playback buffer, used as exponent for calculating the real buffer size as 2ˆn, e.g. setting this to 16 gives a buffer size of 2ˆ16 = 64 kb. 86

6.23 record (Opnemen) Interne naam: record Type plug-in: functie Beschrijving: Provides a dialog to set up the record parameters and to do a recording. Please refer to the section in this manual for more information. 6.24 reverse (Omdraaien) Interne naam: reverse Type plug-in: effect Beschrijving: Dit eenvoudige effect draait de inhoud van de huidige selectie om. 6.25 samplerate (Conversie van samplesnelheid) Interne naam: samplerate 87

Type plug-in: effect Beschrijving: Wijzigt de samplesnelheid van de huidige selectie of het gehele signaal. Parameters:: nieuwe snelheid De nieuwe samplesnelheid in samples per seconde (drijvendekommagetal). modus (optioneel) If this parameter is used and set to the value all, then this effect will be applied to the whole signal. Otherwise it will be applied to the current selection only. 6.26 saveblocks (Save Blocks) Interne naam: saveblocks Type plug-in: functie Beschrijving: Saves all sections between markers, each into a separate file. Each file is given a name that can be customized by using a pattern that can contain the original file name, an index and the number of sections. Parameters:: naam The name of the original file, will be used as base name for the file names. 88

patroon A pattern that will be used for creating the names of the files. It can contain the following wildcards which will be replaced by the corresponding content when creating the final file name: 89

jokerteken [%nr] [%count] [%total] [%filename] beschrijving Will be replaced with the current index of the file to save. Will be replaced with the number of sections that will be saved. Will be replaced with the index of the last file to save. Will be replaced with the base file name, without path and without extension. All numeric wildcards can also contain a numerical argument after the % and the identifier, to force a certain number of digits. If the number is preceded by a 0 then the result will contain leading zeroes, otherwise it will contain leading spaces. Example: [%04nr] produces a number between 0001 and 9999. numbering mode Determines where the numbering should start. waarde 0 1 beschrijving Continue after the index of the highest index that already exists, this avoids overwriting existing files. Always start with index 1, with the risk of overwriting existing files. alleen selectie waarde beschrijving 0 Save all sections of the whole file. Save only the sections that are within 1 the current selection. If nothing is selected, the whole file will be saved. 90

6.27 selectrange (Select Range) Interne naam: selectrange Type plug-in: functie Beschrijving: Shows a dialog to select a range of samples. The start and the length of the selection can be set either by a time in milliseconds, in samples, or as a percentage of the total length of the file. Parameters:: start mode Determines the units in which the start of the selection will be given. waarde beschrijving 0 milliseconden 1 monsters 2 percentage of the length of the file range mode Determines the units in which the length of the selection will be given. See the description if the parameter start mode for a list of possible values. starten The start of the selection, in milliseconds, samples or percentage of the length of the file, depending on the parameter range mode. lengte The length of the selection, in milliseconds, samples or percentage of the length of the file, depending on the parameter range mode. 91

6.28 sonagram (Sonagram) Interne naam: sonagram Type plug-in: functie Beschrijving: 92

Evaluates the current selection by generating a sonagram. A sonagram is an evaluation of a signal over time (x axis), frequency (y axis) and intensity (color). Parameters:: FFT points Number of points of the FFT, a whole number between 4 and 32767 which determines the frequency resolution. vensterfunctie The window function used for the FFT calculation, supported values are: waarde geen hamming hanning blackman triangular beschrijving geen vensterfunctie Hamming-venster Hanning window Blackman window Driehoekige venster kleuren gebruiken If set to non-zero, use colors for intensity, if set to zero use grayscales. track changes If set to non-zero, the sonagram will be updated when the area that was evaluated has changed. If set to zero it will never be updated. selectie volgen Not yet implemented, use zero for this parameter. 6.29 stringenter (Voer commando in) Interne naam: stringenter Type plug-in: functie Beschrijving: A small dialog window that allows to enter a Kwave text command. Please refer to the chapter in this manual. Parameters:: voorinstelling (optioneel) A text that is shown in the edit field when entering the dialog. This parameter is optional, if omitted the edit field of the dialog will be empty at start. 93

6.30 volume (Volume) Interne naam: volume Type plug-in: effect Beschrijving: With this plugin you can change the volume of the current selection by a constant factor. The corresponding dialog allows to enter this factor as a numeric factor given as a floating point value between 0.10 and 10.0, a percentage between 1 and 1000, or in decibel between -21 and +21. Use a factor above 1.0 (or percentage above 100 or more than 0 db) if the file is too silent, or a factor below 1.0 (percentage below 100 or less than 0 db) if the file is too loud. Parameters:: factor A floating point value with the amplification factor. modus waarde beschrijving 0 factor 1 percentage 1 decibel 94

6.31 zero (Nulgenerator) Interne naam: zero Type plug-in: effect Beschrijving: This plugin has two modes of operation. If used without parameters it wipes the current selection by overwriting it with silence. When used with two parameters, it inserts some amount of silence at the start of the current selection. Parameters:: length mode Determines the units in which the length of the inserted silence will be given. waarde beschrijving 0 milliseconden 1 monsters 2 percentage of the length of the file lengte Length of the silence to insert, in milliseconds, samples or percentage of the length of the file, depending on the parameter length mode. 95

Hoofdstuk 7 Developer s Guide to Kwave Sorry, this chapter is still to be written... At the moment the source code is nearly completely documented with tags suitable with the KDE documentation tools. We currently prefer using doxygen. Maybe some day we will spend some time for writing a tool that converts the doxygen output into something we can include into the docbook source (the source this page has been built of). If you want to write a plugin, contribute something to this project (or maybe write the converter mentioned above), please feel free to contact one of the authors directly and / or subscribe to the Kwave mailing list. Help is always welcome! 7.1 Creating API documentation If you are interested in the internal of Kwave and you have doxygen installed, then you can type: % make apidoc to get a directory apicod/html, with documentation of the source and the internal API in your current build directory. 7.2 Starting in a test environment If you are developing or testing Kwave, then you do not necessarily need to uninstall/install Kwave after every build. Instead you can use the application from where it is built by using a wrapper script. This wrapper script can be built with the following command: % make wrapper The script will be named kw, feel free to modify it to match your system if needed. 96

WAARSCHUWING For this to work, you must not have Kwave installed on your system. If so, please uninstall the package before! 97

Hoofdstuk 8 Vragen en antwoorden 1. What do I need to compile Kwave? Read in the chapter mentioned before. 2. Which sound cards does Kwave support? Kwave does not need support for any special sound card. The sound card only has to be supported by your operating system and Kwave uses its interface to the operating system s sound driver through a OSS or ALSA interface. So Kwave can play on any sound card that KDE is able to play on. 3. Why does Kwave consume more memory than it can be expected from the size of the opened file? The reason for this is that Kwave internally stores all samples in 32-bit integers. This was easy to program, made the application faster and a bit more reliable. So if you load an 8-bit file with about one megabyte it will consume about four megabytes. Maybe we will change this somewhere in the future... 4. Which sound formats does Kwave support? Kwave currently supports.wav files with 8, 16 and 24 bits per sample, with any number of channels (of course including mono and stereo). Additionally it can import all file types that libaudiofile supports and some other formats like Ogg/Vorbis and MP3. 5. What if I have files with a format not supported by Kwave? If you have to work on a different format, you can convert it into.wav format. A good set of tools for this is in the SoX package, they have also some nice documentation! 6. I get errors when I want to do playback? Maybe you have chosen a combination of playback rate and sample size that is not supported by your sound driver and / or sound hardware. Try playback with 8 bits per sample and mono first, this should always work. Then try to increase the bits per sample and stereo playback step by step. Note that some playback rates are not at all supported by some sound hardware. 7. The playback seems to do something but I hear nothing? Maybe you have forgotten to increase the volume of the playback channel. Kwave is not responsible for changing the playback volume. 8. Some files are played with half-speed? Try choosing a different sound playback device. 9. The playback sometimes is disturbed and interrupted? You should increase the size of the playback buffer to get a smoother playback (this also makes the playback control reacting a bit slower). 98

10. The playback does not stop if I immediately press the stop button? The reason for this is that the sound driver already has received some playback data from Kwave at the moment when you press the stop button. Decrease the size of the playback buffer and it should react faster (but makes interruptions more probable). 11. Is ALSA supported? Yes, since v0.7.4 for playback and recording 12. What about playback with 18, 20, 24 or 32 bits per sample or more than two channels? This is possible through the ALSA interface, since v0.7.4. 13. What about MP3 support? Well, as long as there are patent issues, we support only MP3 import through the mad library and export via the external program lame. Additionally you need to have the permission to use code covered by the MP3 patents when generating a Kwave package for distributing! 99

Hoofdstuk 9 Dankbetuigingen en licentie Kwave Program copyright from 1998-2000 Martin Wilz martin@wilz.de Program copyright since 2000 Thomas Eschenbacher thomas.eschenbacher@gmx.de For a complete list of authors and licenses of all files, please refer to the LICENSES file, which is included in the sources. There also is a file with the name AUTHORS that lists all authors and contributors of Kwave. Documentation copyright (C) 2015 Thomas Eschenbacher thomas.eschenbacher@gmx.de Op- of aanmerkingen over de vertalingen van de toepassing en haar documentatie kunt u melden op http://www.kde.nl/bugs. Dit document is vertaald in het Nederlands door Freek de Kruijf freekdekruijf@kde.nl. Deze documentatie valt onder de bepalingen van de GNU vrije-documentatie-licentie. Deze toepassing valt onder de bepalingen van de GNU General Public License. 9.1 Belangrijkste auteurs Martin Wilz martin@wilz.de creator of the project, active development 1998-2000 Thomas Eschenbacher thomas.eschenbacher@gmx.de maintainer since 2000, core development 9.2 Major Contributors Aurelien Jarno aurel32@debian.org debian packager, patches Carlos R pureacetone@gmail.com spaanse vertaling David Flogeras dflogera@nbnet.nb.ca Notch Filter plugin 100

Gilles Caulier caulier.gilles@free.fr i18n, french translations, splashscreen, beta tester Pavel Fric pavelfric@seznam.cz Czech translation Ralf Waspe rwaspe@web.de Help/About plugin Sven-Steffen Arndt ssa29@gmx.de homepage, german translation 9.3 Minor contributors, copyright holders and others Aaron Holtzman aholtzma@ess.engr.uvic.ca libkwave/cpu_accel.cpp Bertrand Songis bsongis@gmail.com [historic] french translation fixes, substitutes for patented libaudiofile code, debian bug 419124 Carsten Lohrke carlo@gentoo.org svn r2163, patch for libaudiofile detection Chris Vaill chrisvaill@gmail code base for the normalize plugin David Faure faure@kde.org cmake/findalsa.cmake Diederick de Vries diederick76@gmail.com packaging for Crux Linux Espen Sand espen@kde.org + Mirko Boehm mirko@kde.org K3AboutContainer, base of KwaveAboutContainer Everaldo Coelho contact@everaldo.com het pictogramthema crystal http://www.everaldo.com/crystal/ Jaroslav Kysela onderdelen van plugins/playback/playback-alsa.cpp Jeff Tranter parts of plugins/pitch_shift/pitchshiftfilter.{h,cpp} Juhana Sadeharju kouhia@nic.funet.fi plugins/band_pass/bandpass.{h,cpp}, plugins/lowpass/lowpassfilter.cpp, plugins/- notch_filter/notchfilter.{h,cpp} Kurt Roeck Q@ping.be svn r1370, fix for debian bug#288781, compilation for amd64 Mark Donohoe (KDE) donohoe@kde.org some icons and bitmaps for toolbar and GUI Martin Hinsch vidas@sourceforge.net Matrix-klasse 101

Matthias Kretz kretz@kde.org cmake/findalsa.cmake Miguel Freitas onderdelen van libkwave/memcpy.c Paul Mackerras paulus@samba.org libkwave/ppcasm_string.h, libkwave/ppcasm_string.s, libkwave/ppc_asm.tmpl Richard Laerkaeng, richard@goteborg.utfors.se cmake/findoggvorbis.cmake Rik Hemsley rik@kde.org niveaumeter Stefan Westerfeld stefan@space.twc.de parts of plugins/pitch_shift/pitchshiftfilter.{h,cpp} Joerg-Christian Boehme joerg@chaosdorf.de plugins/record/record-pulseaudio.cpp plugins/record/record-pulseaudio.h 9.4 Met dank aan Martin Kuball makube@user.sourceforge.net betatester Jorge Luis Arzola arzolacub@gmx.de pakket maken voor SuSE Linux Michael Favreau michel.favreau@free.fr pakket maken voor Arch Linux Matthias Düsterhöft duesti@gmx.de voor informatie over RPM optimalisatie T.H.F. Klok en Cedric Tefft onderhouders van de bibliotheek id3lib Robert Leslie rob@mars.org auteur van de mad mp3-decodeerbibliotheek Robert M. Stockmann stock@stokkie.net pakket maken voor Mandrake / X86_64 Erik de Castro Lopo erikd@zip.com.au auteur van de bibliotheek sndfile Michael Pruett mpruett@sgi.com auteur van de bibliotheek audiofile 102

Bijlage A Bestandsinformatie Trefwoord Album Annotatie Locatie van archief Auteur Bitsnelheid verlagen Modus bitsnelheid Bitsnelheid Hoogste bitsnelheid Bits per sample cd cd s Commissioned Beschrijving Name of the album if the source is an album that consist of more medias. Provides general comments about the file or the subject of the file. If the comment is several sentences long, end each sentence with a period. Do not include newline characters! Indicates where the subject of the file is archived. Identifies the name of the author of the original subject of the file. Example: van Beethoven, Ludwig Specifies the lower limit in a VBR bitstream. Bitrate Mode (ABR, VBR, CBR, etc...) Nominal bitrate of the audio stream in bits per second Specifies the upper limit in a VBR bitstream. Specifies the number of bits per sample. Number of the CD, if the source is an album of more CDROMs Number of CDs, if the source is an album of more CDROMs Lists the name of the person or organization that commissioned the subject of the file. 103

Toelichting Compressie Contactpersoon Copyright Auteursrechtelijk beschermd Datum Technicus Geschatte lengte Bestandsnaam Bestandsgrootte Genre ISRC Trefwoorden Labels Provides general comments about the file or the subject of the file. If the comment is several sentences long, end each sentence with a period. Do not include newline characters! Sets a mode for compressing the audio data to reduce disk space. Contact information for the creators or distributors of the track. This could be a URL, an email address, the physical address of the producing label. Records the copyright information for the file. If there are multiple copyrights, separate them by a semicolon followed by a space. Example: Copyright Linux community 2002 Indicates whether the file is protected by copyright or not. Specifies the date the subject of the file was created. Example: 2001-12-24 Shows the name of the engineer who worked on the file. If there are multiple engineers, separate the names by a semicolon and a blank. Estimated length of the file in samples Name of the opened file Size of the file in bytes Describes the genre or style of the original work. Examples: classic, pop ISRC number for the track; see the ISRC intro page for more information on ISRC numbers. http://www.ifpi-.org/site-content/online/isrc_intro.html Provides a list of keywords that refer to the file or subject of the file. The list of labels/markers. 104

Length of the file in Lengte samples. License information, e.g., All Rights Reserved, Any Use Permitted, an URL to a license or the EFF Open Audio License Licentie ( distributed under the terms of the Open Audio License. See http://www.eff.org/ip/open_licenses/eff_oal.html for details ), etc. Describes the original subject of the file, where it Medium was first recorded. Example: orchestra Mime-type Mime type of the file format Accentuering Audio emphasis mode Laag MPEG Layer, I, II or III MPEG Mode Extension Extensie van modus (only if Joint Stereo) Versie MPEG Version, 1, 2 or 2.5 Stores the title of the subject of the file. Example: Naam Symphony No.6, Op.68 Pastoral Opus Frame Length in ms Framelengte van Opus (supported values are 2.5, 5, 10, 20, 40, or 60 ms) Name of the organization Organisatie producing the track (i.e. the record label ) Geeft aan of het bestand een Origineel origineel of een kopie is The artist(s) who performed the work. In classical music this would be the Artiest conductor, orchestra, soloists. In an audio book it would be the actor who did the reading. Geeft aan of het onderwerp Privé privé is Specifies the name or the title the file was originally Product intended for. Example: Linux audio collection Formaat gebruikt voor opslaan van de Formaat van sample gedigitaliseerde audio-samples. Voorbeeld: 32-bit IEEE floating-point Samplesnelheid Aantal samples per seconde 105

Software Broncode Vorm van broncode Onderwerp Technicus Track Tracks Kanalen Basiskwaliteit Versie Identifies the name of the software package used to create the file. Example: Kwave v0.6.4-1 Identifies the name of the person or organization who supplied the original subject of the file. Example: Chaotic Sound Research Identifies the original form of the material that was digitized. Examples: Record/Vinyl/90RPM, Audio DAT, tape/cro2/60min Describes the subject of the file. Example: Bird voices at early morning Identifies the technician who digitized the subject file. Example: Torvalds, Linus Track of the CD if the source was a CDROM. Number of tracks of the CD if the source was a CDROM. Specifies the number of channels of the signal. Base quality of the compression in VBR mode May be used to differentiate multiple versions of the same track title in a single collection. (e.g. remix info) Tabel A.1: List of File Info Identifiers 106