• Keine Ergebnisse gefunden

The SoundView class provides a mechanism for displaying the sound data contained in a Sound object. While SoundView inherits from the Application Kit's View class, it implements a number of methods that are also defined in Sound, such as play:, record:, and stop:. In addition, it implements editing methods such as cut:, copy:, and paste:.

SoundViews are designed to be used within a ScrollView. While you can create a

SoundView without placing it in a ScrollView, its utility-particularly as it's used to display a large Sound-is limited.

Creating and Displaying a SoundView

To display a sound, you create a new SoundView with a particular frame, give it a Sound object to display (through setSound:), and then send the display message to the

SoundView:

/* Create a new SoundView object. */

id mySoundView = [[SoundView alloc] initFrame:&svRect);

/* Set its Sound object. */

[mySoundView setSound:mySound];

/* Display the Sound object's sound data. */

[mySoundView display];

In the example, svRect is a previously defined NXRect. If autodisplaying is turned on (as set through View's setAutodisplay: method), you needn't send the display message;

simply setting the Sound will cause the SoundView to be displayed.

For most complete sounds, the length of the Sound's data in samples is greater than the horizontal length of the SoundView in display units. The SoundView employs a reduction factor to determine the ratio of samples to display units and plots the minimum and maximum amplitude values of the samples within that ratio. For example, a reduction factor of 10.0 means that the minimum and maximum values among the first ten samples are plotted in the first display unit, the minimum and maximum values of the next ten samples are displayed in the second display unit and so on. You can set the reduction factor through the setReductionFactor: method.

Changing the reduction factor changes the time scale of the object. As you increase the reduction factor, more "sound-per-inch" is displayed. Of course, since more samples are used in computing the average amplitude, the resolution in a SoundView with a heightened reduction factor is degraded. Conversely, reducing the reduction factor displays fewer samples per display unit but with an improved resolution. You should be aware that changing the reduction factor on a large sound can take a noticeably long time.

2-22 Chapter 2: Sound

SoundView Dimensions

In a SoundView, time runs from left to right; amplitude is represented on the y-axis, with 0.0 amplitude in the (vertical) center. When you set a SoundView's Sound, the amplitude data that's displayed is automatically scaled to fit within the given height of the SoundView.

The manner in which a SoundView's horizontal dimension is computed depends on the object's autoscale flag. If auto scaling is turned off, the length of a SoundView's frame is resized to fit the length of the Sound object's data while maintaining a constant reduction factor. In other words, a SoundView that's displaying a Sound that contains 10000 samples will be twice as long as one with a Sound that contains 5000 samples, given the same reduction factor in either SoundView.

Whenever the displayed data changes, due to editing or recording, the SoundView is resized to fit the length of the new data. This is particularly useful in a SoundView that's inside a ScrollView: The Scroll View determines the portion of data that's actually displayed, while the SoundView maintains a constant time scale. Changing the reduction factor with autoscaling turned off causes the SoundView to zoom in or out on the displayed data.

You can enable auto scaling by sending the message

/* Enable autoscale. */

[mySoundView setAutoscale:YES];

With autoscale enabled, the SoundView's frame size is maintained regardless of the length of the SoundView's Sound data. Instead, the reduction factor is recomputed so the length of the data will fit within the frame. When auto scaling is on, invoking

setReductionFactor: has no effect.

Display Modes

A SoundView can display a sound as a continuous waveform, such as you would see on an oscilloscope, or as an outline of its maximum and minimum amplitudes. You set a SoundView's display mode by sending it the setDisplayMode: message with one of the following Sound Kit constants as an argument:

Constant

SK_DISPLAY_WAVE SK_DISPLAY _MINMAX Waveform display is the default.

Meaning

Waveform display

Amplitude outline display

The Sound Kit 2-23

The

Sound View

Selection

The SoundView class provides a selection mechanism. You can selectively enable the selection mechanism for each SoundView object by sending the setEnabled: YES message.

When you drag in an enabled SoundView display, the selected region is highlighted. The method getSelection:size: returns, by reference, the number of the first sample and the number of samples in the selection.

2-24 Chapter 2: Sound

Chapter 3

3-8 Frequency and Pitch 3-9 Pitch Variables

3-9 Correspondence Between Pitch Variables and Frequencies

3-10 Key Numbers

3-10 Specifying Pitch in a Note 3-11 Retrieving Pitch from a Note

3-11 Loudness

3-11 Amplitude

3-12 Brightness

3-12 Begin Time and Duration 3-13 Note Type and Note Tag 3-14 NoteDur

3-14 NoteOn and NoteOff 3-15 NoteUpdate

3-15 Mute

3-16 The Envelope Class 3-18 Defining an Envelope 3-19 Envelopes and the DSP 3-19 Scale and Offset 3-21 The Stickpoint 3-23 Attack and Release

3-26 Modeling a Note without Sustain

3-27 Portamento

3-27 Smoothing

3-29 Sampling Period 3-29 Discrete Value Lookup 3-30 Envelopes in Scorefile Format 3-31 The WaveTable Class

3-31 Summary of Musical Acoustics 3-33 Constructing a WaveTable 3-33 The Partials Class 3-34 The Samples Class

3-34 Setting a WaveTable in a Note

3-1