Het handboek van Kwave

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

Handboek scripts voor kdesrc-build

Audacity Sound Editing Software

Virtualisatie. voor desktop en beginners. Gert Schepens Slides & Notities op gertschepens.be

Relationele Databases 2002/2003

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

Work. MATLAB Source Control Using Git

Analog Representations of Sound

AUDACITY SOUND EDITOR SOFTWARE A USER GUIDE FOR AUDIO-VISUAL WORKERS

Manual for the sound card oscilloscope V1.24 C. Zeitnitz english translation by P. van Gemmeren and K. Grady

OGH: : 11g in de praktijk

Uw partner in system management oplossingen

How To Design A 3D Model In A Computer Program

PCDJ Leverbaar. Bericht van Geplaatst door: Dieter Popelier. De producten van PCDJ zijn terug op stock!!

CS197U: A Hands on Introduction to Unix

K2 CW Filter Alignment Procedures Using Spectrogram 1 ver. 5 01/17/2002

Using VMware Player. VMware Player. What Is VMware Player?

Maximizer Synergy. BE Houwaartstraat 200/1 BE 3270 Scherpenheuvel. Tel: Fax:

The information in this report is confidential. So keep this report in a safe place!

DIGICLIENT 8.0 Remote Agent Software

Hosted Voice Business Group Administrator Quick Start Guide

Version Control with Subversion and Xcode

DiskPulse DISK CHANGE MONITOR

101 Inspirerende Quotes - Eelco de boer - winst.nl/ebooks/ Inleiding

Inhoud. Xclusief Verzekeringen 4. Xclusief Auto 7. Xclusief Wonen 8. Xclusief Jacht 11. Xclusief Evenementen 12. Contact 15

~ We are all goddesses, the only problem is that we forget that when we grow up ~

Using Your Fitting Software This guide provides comprehensive, task-based information about all the fitting software features.

jfqbi= = eqji=qççäâáí= = = aéîéäçééêûë=dìáçé=== oéäé~ëé=oko=

Preservation Handbook

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

How to resize, rotate, and crop images

Word -Introduction. Contents

GMP-Z Annex 15: Kwalificatie en validatie

How To Install An Aneka Cloud On A Windows 7 Computer (For Free)

Microsoft Visual Studio Integration Guide

i -CEN S USER S Manual

Acronis Backup & Recovery 10 Server for Linux. Update 5. Installation Guide

Inear Display Oxymore Version

IP-NBM. Copyright Capgemini All Rights Reserved

For full instructions on how to install Simsound please see the Technical Guide at the end of this document.

ELAD FDM-SW1 USER MANUAL. Ver. 1.0

Step by step guide to using Audacity

Online Backup Client User Manual Linux

Mbox Basics Guide. Version 6.7 for LE Systems on Windows XP or Mac OS X. Digidesign

CMMI version 1.3. How agile is CMMI?

Recording and Editing Audio with Audacity

DIGITAL-TO-ANALOGUE AND ANALOGUE-TO-DIGITAL CONVERSION

XTraffic Plugin Quick Start Guide

PMOD Installation on Linux Systems

Online Backup Client User Manual

Practice Fusion API Client Installation Guide for Windows

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

Using Git for Project Management with µvision

Version Control with Subversion

CallRecorder User Guide

Copyright Kinoma Inc. All rights reserved.

Red Hat Enterprise Linux Rebuild mini-howto

Audio Only Broadcast through Flash Media Live Encoder On Windows

Introduction to Git. Markus Kötter Notes. Leinelab Workshop July 28, 2015

Risk-Based Monitoring

How to Build an RPM OVERVIEW UNDERSTANDING THE PROCESS OF BUILDING RPMS. Author: Chris Negus Editor: Allison Pranger 09/16/2011

Flumes Short User Guide to Subversion

Examen Software Engineering /09/2011

ACADEMIC TECHNOLOGY SUPPORT

Local Playback Software User Manual (V2.0)

Setting up an online Java Jmonitor. server using the. EXPERIMENTAL code from. John Melton GØORX/N6LYT

Colligo Manager 6.2. Offline Mode - User Guide

1. Product Information

Citrix Access Gateway: Implementing Enterprise Edition Feature 9.0

Design Document. Developing a Recruitment campaign for IKEA. Solve-

Unbreakable Linux Network An Overview

IBM WebSphere Application Server Version 7.0

microgranny 2.0 manual draft

Visualizing molecular simulations

Transmitter Interface Program

Appendix A. CMS(Client Management Software)

Tivoli Endpoint Manager for Remote Control Version 8 Release 2. User s Guide

Java GPU Computing. Maarten Steur & Arjan Lamers

Partek Flow Installation Guide

CO-BRANDING RICHTLIJNEN

RecoveryVault Express Client User Manual

BIGPOND ONLINE STORAGE USER GUIDE Issue August 2005

Preserving music from LPs and tapes

Call Recorder Oygo Manual. Version

5.1 Features Denver CO 80202

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

Version Control with. Ben Morgan

Acronis Backup & Recovery 10 Server for Linux. Installation Guide

Roxio Easy LP to MP3 Getting Started Guide

Tutorial for Tracker and Supporting Software By David Chandler

LevelOne MUS GB Smart Flash. User Manual V

Proprietary Kroll Ontrack. Data recovery Data management Electronic Evidence

Voorbeeld. Preview ISO INTERNATIONAL STANDARD. Quality management Guidelines on people involvement and competence

EVENT LOG MANAGEMENT...

Online Backup Linux Client User Manual

Ons privacybier. Derde privacycafé Data Protection Institute 13 januari 2016 Thomas More Mechelen 21/01/16

Portable MP3 Player User's Guide

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........................................... 36 4.8 Bestandseigenschappen.................................. 37 4.9 Zooming and navigating.................................. 38 4.9.1 Zooming in and out................................ 38 4.9.2 Scrolling left and right............................... 39 4.9.3 Using the overview................................. 39 4.9.4 Vertical zoom.................................... 39 4.10 How to select........................................ 39 4.10.1 Selecting channels................................. 40 4.10.2 Selecting samples.................................. 40 4.11 Klembord.......................................... 41 4.12 Slepen en neerzetten.................................... 41 5 Automization and Scripting with Kwave 42 5.1 General Syntax....................................... 42 5.2 Using the Command Line................................. 42 5.3 Script bestanden van Kwave................................ 43 5.3.1 Algemene structuur................................ 43 5.3.2 Comments and Empty Lines........................... 43 5.3.3 Termination..................................... 44 5.3.4 Labels........................................ 44 5.4 Overzicht van de opdrachten............................... 44 5.5 a................................................ 44 5.5.1 about_kde...................................... 44 5.5.1.1 Syntax: about_kde()........................... 44 5.5.2 add_label...................................... 44 5.5.2.1 Syntax: add_label(pos[,text])..................... 44 4

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

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

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

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

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

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

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

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

Lijst van tabellen 5.1 Vertaaltabel voor URL-codering............................. 43 A.1 List of File Info Identifiers................................. 108 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. Als u een Kwave uitgave wilt hebben kunt u kiezen uit een bezoek aan http://kwave.sourceforge.net/download.html en een binair pakket met de laatste stabiele versie downloaden, als er een is voor uw distributie, een broncode RPM-pakket van de laatste stabiele versie downloaden, uw eigen versie compileren uit een.tar.bz2 archief met de broncode van de laatste stabiele versie, uw eigen versie compileren uit uit de laatste GIT-broncode. Wees niet bang, compileren van Kwave is tamelijk eenvoudig zelfs als u geen programmeur bent. Er zijn gewoon enige ontwikkelpakketten nodig om te worden geïnstalleerd. 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 of hoger (voor opnemen/afspelen) PulseAudio 4.0 of hoger (voor opnemen/afspelen) 17

id3lib-3.8.1 of hoger (voor ID3 tags) mad-0.15 of hoger (optioneel voor MP3 importeren/exporteren) flac-1.2.0 of hoger (voor FLAC importeren/exporteren) libsamplerate-0.1.3 of hoger (conversie van samplesnelheid) 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. Als u Kwave wilt compileren uit de broncode hebt u minstens nodig: cmake-2.6.0 of nieuwer 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