/** GormSoundView Visualizes a sound. Copyright (C) 2004 Free Software Foundation, Inc. Author: Gregory John Casamento Date: May 2004 This file is part of GNUstep. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* All Rights reserved */ #include #include "GormSoundView.h" #include // add a data method to the NSSound class... @interface NSSound (SoundView) - (NSData *)data; @end @implementation NSSound (SoundView) - (NSData *)data { return _data; } @end static float findMax(NSData *data) { float max = 0.0; int index = 0; float *array = (float *)[data bytes]; int len = [data length]; // find the maximum... for(index = 0; index < len; index++) { float d = array[index]; if(d > max) { max = d; } } return max; } @implementation GormSoundView - (void) setSound: (NSSound *)sound { NSLog(@"Set sound..."); ASSIGN(_sound,sound); [self setNeedsDisplay: YES]; } - (NSSound *)sound { return _sound; } /* - (void) drawRect: (NSRect)aRect { float w = aRect.size.width; float h = aRect.size.height; float offset = (h/2); NSData *soundData = [_sound data]; float *data = 0; float x1 = 0, x2 = 0, y1 = offset, y2 = offset; float max = findMax(soundData); float multiplier = h/max; int length = [soundData length]; int index = 0; int step = (length/(int)w); [super drawRect: aRect]; PSsetrgbcolor(1.0,0,0); // red data = (float *)[soundData bytes]; if( length > 2 ) { x1 = (data[0] * multiplier); y1 = offset; for(index = step; index < w; index+=step) { int i = (int)index; float d = data[i]; // calc new position... x2 = d * multiplier; y2 = index + offset; PSmoveto(x1,y1); PSlineto(x2,y2); // move to old vars... x1 = x2; y1 = y2; } } } */ @end