![]() |
|
![]() |
|
|
Thread Tools | Display Modes |
|
|
|
|
#1 |
|
Newbie
Join Date: Apr 2006
Posts: 5
Rep Power: 0
![]() |
XCode-increase amplitude code required
hello
i have an XCode prgram which i have started. I want to get the program to read AIFF file (which i have working now), and increse the amplitude by a slider variable. Basically the slider will control how much the amplitude will be increased OR decreased (by a MAXIMUM of 3 times). I WOULD REALLY APPRECIATE THE HELP!!!! Can any PLEASE give me the code for this i have the following code to show you what i have so far: CARBON APPLICATION BY JAMES GREGSON #include <Carbon/Carbon.h> #define kControlSignature '????' // menus #define kFileMenuID 20 #define kFileOpenMenuID 2 #define kOpenFile 'open' #define kSaveAsFile 'svas' #define kQuit 'quit' // Text boxes #define kFORM_ID_Id 1 #define kFORM_ID 'fmid' #define kFORM_chunksizeID 2 #define kFORM_chunksize 'fmcs' #define kFORM_typeId 3 #define kFORM_type 'fmtp' #define kCOMM_ID_Id 4 #define kCOMM_ID 'cmid' #define kCOMM_chunksizeID 5 #define kCOMM_chunksize 'cmcs' #define kCOMM_numChannelsID 6 #define kCOMM_numChannels 'numc' #define kCOMM_numSampleFramesID 7 #define kCOMM_numSampleFrames 'numf' #define kCOMM_bitDepthID 8 #define kCOMM_bitDepth 'bitd' #define kCOMM_sampleRateID 9 #define kCOMM_sampleRate 'sprt' // took from ieee # define UnsignedToFloat(u) (((double)((long)(u - 2147483647L - 1))) + 2147483648.0) // this is needed for the sample rate // global variables NavEventUPP gNavEventHandlerPtr; ControlHandle FORM_ID_ControlHandle; ControlID FORM_ID_Id = { kControlSignature, kFORM_ID_Id }; ControlHandle FORM_chunksizeControlHandle; ControlID FORM_chunksizeID = { kControlSignature, kFORM_chunksizeID }; ControlHandle FORM_typeControlHandle; ControlID FORM_typeId = { kControlSignature, kFORM_typeId }; ControlHandle COMM_ID_ControlHandle; ControlID COMM_ID_Id = { kControlSignature, kCOMM_ID_Id }; ControlHandle COMM_chunksizeControlHandle; ControlID COMM_chunksizeID = { kControlSignature, kCOMM_chunksizeID }; ControlHandle COMM_numChannelsControlHandle; ControlID COMM_numChannelsID = { kControlSignature, kCOMM_numChannelsID }; ControlHandle COMM_numSampleFramesControlHandle; ControlID COMM_numSampleFramesID = { kControlSignature, kCOMM_numSampleFramesID }; ControlHandle COMM_bitDepthControlHandle; ControlID COMM_bitDepthID = { kControlSignature, kCOMM_bitDepthID }; ControlHandle COMM_sampleRateControlHandle; ControlID COMM_sampleRateID = { kControlSignature, kCOMM_sampleRateID }; pascal OSStatus CommandEventHandler ( EventHandlerCallRef handlerRef, EventRef event, void *userData); //OSStatus DisplayOpenInputFileDialog(void); pascal void ThisOpenDialogEventCallback(NavEventCallbackMessage callBackSelector, NavCBRecPtr callBackParms, void* callBackUD); short OpenMyInputfile( NavReplyRecord *reply ); void ReadMyInputFile(short MyInputFileRefNum); /*pascal void ThisSaveDialogEventCallback(NavEventCallbackMessage callBackSelector, NavCBRecPtr callBackParms, void* callBackUD);*/ /**********/ pascal void ThisSaveDialogEventCallback(NavEventCallbackMessage callBackSelector, NavCBRecPtr callBackParms, void* callBackUD) { OSStatus err = 0; NavReplyRecord reply; NavUserAction UserAction = 0; switch (callBackSelector) { case kNavCBUserAction :err= NavDialogGetReply (callBackParms->context, & reply); UserAction= NavDialogGetUserAction(callBackParms->context ); switch ( UserAction ) { case kNavUserActionSaveAs : err = CreateOutputAIFFfile( &reply ); break; } err = NavDisposeReply( &reply ); break; case kNavCBTerminate : NavDialogDispose (callBackParms->context); DisposeNavEventUPP(gNavEventHandlerPtr); break; } return err; } /**********/ // put this in 2 double ConvertFromIeeeExtended(unsigned char* bytes); WindowRef window; int main(int argc, char* argv[]) { IBNibRef nibRef; WindowRef window; OSStatus err; EventTargetRef target; EventHandlerUPP handlerUPP; EventTypeSpec cmdEvent = { kEventClassCommand, kEventProcessCommand }; // Create a Nib reference passing the name of the nib file (without the .nib extension) // CreateNibReference only searches into the application bundle. err = CreateNibReference(CFSTR("main"), &nibRef); require_noerr( err, CantGetNibRef ); // Once the nib reference is created, set the menu bar. "MainMenu" is the name of the menu bar // object. This name is set in InterfaceBuilder when the nib is created. err = SetMenuBarFromNib(nibRef, CFSTR("MenuBar")); require_noerr( err, CantSetMenuBar ); // Then create a window. "MainWindow" is the name of the window object. This name is set in // InterfaceBuilder when the nib is created. err = CreateWindowFromNib(nibRef, CFSTR("MainWindow"), &window); require_noerr( err, CantCreateWindow ); // We don't need the nib reference anymore. DisposeNibReference(nibRef); target = GetWindowEventTarget ( window ); handlerUPP = NewEventHandlerUPP ( CommandEventHandler ); InstallEventHandler ( target, handlerUPP, 1, &cmdEvent, (void *)window, NULL ); // The window was created hidden so show it. ShowWindow( window ); // Call the event loop RunApplicationEventLoop(); CantCreateWindow: CantSetMenuBar: CantGetNibRef: return err; } pascal OSStatus CommandEventHandler ( EventHandlerCallRef handlerRef, EventRef event, void *userData) { OSStatus result = eventNotHandledErr; HICommand command; WindowRef window; window = ( WindowRef ) userData; GetControlByID ( window,&FORM_ID_Id, &FORM_ID_ControlHandle); GetControlByID ( window,&FORM_chunksizeID, &FORM_chunksizeControlHandle); GetControlByID ( window,&FORM_typeId ,&FORM_typeControlHandle); GetControlByID ( window,&COMM_ID_Id ,&COMM_ID_ControlHandle); GetControlByID ( window,&COMM_chunksizeID, &COMM_chunksizeControlHandle); GetControlByID ( window,&COMM_numChannelsID, &COMM_numChannelsControlHandle); GetControlByID ( window,&COMM_numSampleFramesID,&COMM_numSampleFramesControlHandle); GetControlByID ( window,&COMM_bitDepthID, &COMM_bitDepthControlHandle); GetControlByID ( window,&COMM_sampleRateID, &COMM_sampleRateControlHandle); GetEventParameter (event, kEventParamDirectObject, typeHICommand, NULL, sizeof (HICommand), NULL, &command); switch (command.commandID ) { case kOpenFile: result = DisplayOpenInputFileDialog(); break; case kSaveAsFile: result = DisplaySaveAsOutputFileDialog(); break; } return result; } OSStatus DisplayOpenInputFileDialog() { OSStatus err; NavDialogRef openDialog; NavDialogCreationOptions dialogAttributes; err = noErr; err = NavGetDefaultDialogCreationOptions(&dialogAttributes); dialogAttributes.modality = kWindowModalityAppModal; gNavEventHandlerPtr = NewNavEventUPP(ThisOpenDialogEventCallback); err = NavCreateGetFileDialog(&dialogAttributes, NULL, gNavEventHandlerPtr, NULL, NULL, NULL, &openDialog); err = NavDialogRun( openDialog); if (err != noErr) { NavDialogDispose( openDialog); DisposeNavEventUPP(gNavEventHandlerPtr); } } OSStatus DisplaySaveAsOutputFileDialog() { OSStatus err; NavDialogRef saveDialog; NavDialogCreationOptions dialogAttributes; err = NavGetDefaultDialogCreationOptions(&dialogAttributes); dialogAttributes.modality = kWindowModalityAppModal; gNavEventHandlerPtr = NewNavEventUPP(ThisSaveDialogEventCallback); err = NavCreatePutFileDialog(&dialogAttributes, 'AIFF', '????', gNavEventHandlerPtr, NULL, &saveDialog); err = NavDialogRun( saveDialog); if (err != noErr) { NavDialogDispose( saveDialog); DisposeNavEventUPP(gNavEventHandlerPtr); } return err; } pascal void ThisOpenDialogEventCallback(NavEventCallbackMessage callBackSelector, NavCBRecPtr callBackParms, void* callBackUD) { OSStatus err = 0; NavReplyRecord reply; NavUserAction userAction = 0; short MyInputFileRefNum; switch (callBackSelector) { case kNavCBUserAction : err = NavDialogGetReply (callBackParms->context, &reply); userAction = NavDialogGetUserAction (callBackParms->context ); switch ( userAction ) { case kNavUserActionOpen : MyInputFileRefNum = OpenMyInputfile( &reply ); ReadMyInputFile(MyInputFileRefNum); break; } err = NavDisposeReply( &reply ); break; case kNavCBTerminate : NavDialogDispose (callBackParms->context); DisposeNavEventUPP(gNavEventHandlerPtr); break; } } /*pascal void ThisSaveDialogEventCallback(NavEventCallbackMessage callBackSelector, NavCBRecPtr callBackParms, void* callBackUD) { OSStatus err = 0; NavReplyRecord reply; NavUserAction UserAction = 0; switch (callBackSelector) { case kNavCBUserAction :err= NavDialogGetReply (callBackParms->context, & reply); UserAction= NavDialogGetUserAction(callBackParms->context ); switch ( UserAction ) { case kNavUserActionSaveAs : err = CreateOutputAIFFfile( &reply ); break; } err = NavDisposeReply( &reply ); break; case kNavCBTerminate : NavDialogDispose (callBackParms->context); DisposeNavEventUPP(gNavEventHandlerPtr); break; } return err; }*/ short OpenMyInputfile( NavReplyRecord *reply ) { OSStatus err; AEDesc newDescriptor; FSRef MyfileRef; short MyInputFileRefNum; FSSpec MyfileFSSpec; err = AECoerceDesc(&reply->selection, typeFSRef, &newDescriptor); err = AEGetDescData(&newDescriptor, (void *) (&MyfileRef), sizeof(FSRef) ); err = FSGetCatalogInfo(&MyfileRef, kFSCatInfoNone, NULL, NULL, &MyfileFSSpec, NULL); err = FSpOpenDF (&MyfileFSSpec, fsCurPerm, &MyInputFileRefNum); return MyInputFileRefNum; } void ReadMyInputFile(short MyInputFileRefNum) { OSStatus err; long count = 2; CFStringRef theCFString; Str255 formTypeString, channelTypeString, chunksizeString, SampleFramesString, bitDepthString, sampleRateString; int i; char byte, string[5]; long formType, chunkSize, SampleFrames; double sampleRate; short numOfChannels, bitDepth; // read the FORM chunk // first the ID... count = 1; for (i=0;i<4;i++) { FSRead(MyInputFileRefNum,&count, &byte); string[i] = byte; } string[4] = '\0' ; theCFString = CFStringCreateWithCString (kCFAllocatorDefault, &string, kCFStringEncodingASCII); SetControlData( FORM_ID_ControlHandle, kControlEntireControl, kControlEditTextCFStringTag, sizeof(CFStringRef), &theCFString ); //dont need to display these we have to READ and WRITE at the same time // then the chunk size count = 4; FSRead(MyInputFileRefNum,&count, &formType); NumToString(formType, formTypeString ); SetControlData( FORM_chunksizeControlHandle, 0, kControlEditTextTextTag, formTypeString[0], (Ptr)(formTypeString+1) ); // then the type count = 1; for (i=0;i<4;i++) { FSRead(MyInputFileRefNum,&count, &byte); string[i] = byte; } string[4] = '\0' ; theCFString = CFStringCreateWithCString (kCFAllocatorDefault, &string, kCFStringEncodingASCII); SetControlData( FORM_typeControlHandle, kControlEntireControl, kControlEditTextCFStringTag, sizeof(CFStringRef), &theCFString ); // we've finished with the FORM chunk // put the details on screen DrawOneControl (FORM_ID_ControlHandle); DrawOneControl (FORM_chunksizeControlHandle); DrawOneControl (FORM_typeControlHandle); // read the comm chunk....??? // first the chunk id?? ? count = 1; for (i=0;i<4;i++) { FSRead(MyInputFileRefNum,&count, &byte); string[i] = byte; } string[4] = '\0' ; theCFString = CFStringCreateWithCString (kCFAllocatorDefault, &string, kCFStringEncodingASCII); SetControlData( COMM_ID_ControlHandle, kControlEntireControl, kControlEditTextCFStringTag, sizeof(CFStringRef), &theCFString ); // comm chunk size count = 4; FSRead(MyInputFileRefNum,&count, &chunkSize); NumToString(chunkSize, chunksizeString ); SetControlData( COMM_chunksizeControlHandle, 0, kControlEditTextTextTag, chunksizeString[0], (Ptr)(chunksizeString+1) ); // num channels count = 2; FSRead(MyInputFileRefNum,&count, &numOfChannels); NumToString(numOfChannels, channelTypeString ); SetControlData( COMM_numChannelsControlHandle, 0, kControlEditTextTextTag, channelTypeString[0], (Ptr)(channelTypeString+1) ); // num sample frames count = 4; FSRead(MyInputFileRefNum,&count, &SampleFrames); NumToString(SampleFrames, SampleFramesString ); SetControlData( COMM_numSampleFramesControlHandle, 0, kControlEditTextTextTag, SampleFramesString[0], (Ptr)(SampleFramesString+1) ); // num sample size (bitdepth) count = 2; FSRead(MyInputFileRefNum,&count, &bitDepth); NumToString(bitDepth, bitDepthString ); SetControlData( COMM_bitDepthControlHandle, 0, kControlEditTextTextTag, bitDepthString[0], (Ptr)(bitDepthString+1) ); // sample rate... ... ... count = 1; for (i=0;i<10;i++) { FSRead(MyInputFileRefNum,&count, &byte); sampleRate = byte; } sampleRate = ConvertFromIeeeExtended(&sampleRate); NumToString(sampleRate, sampleRateString ); SetControlData( COMM_sampleRateControlHandle, 0, kControlEditTextTextTag, sampleRateString[0], (Ptr)(sampleRateString+1) ); // the sound data chunk must be taken care of next } // put this bit in from convert to Ieee double ConvertFromIeeeExtended(unsigned char* bytes) { double f; int expon; unsigned long hiMant, loMant; expon = ((bytes[0] & 0x7F) << 8) | (bytes[1] & 0xFF); hiMant = ((unsigned long)(bytes[2] & 0xFF) << 24) | ((unsigned long)(bytes[3] & 0xFF) << 16) | ((unsigned long)(bytes[4] & 0xFF) << 8) | ((unsigned long)(bytes[5] & 0xFF)); loMant = ((unsigned long)(bytes[6] & 0xFF) << 24) | ((unsigned long)(bytes[7] & 0xFF) << 16) | ((unsigned long)(bytes[8] & 0xFF) << 8) | ((unsigned long)(bytes[9] & 0xFF)); if (expon == 0 && hiMant == 0 && loMant == 0) { f = 0; } else { if (expon == 0x7FFF) { /* Infinity or NaN */ f = HUGE_VAL; } else { expon -= 16383; f = ldexp(UnsignedToFloat(hiMant), expon-=31); f += ldexp(UnsignedToFloat(loMant), expon-=32); } } if (bytes[0] & 0x80) return -f; else return f; } THANKYOU FOR READING!! I WOULD REALLY APPRECIATE THE HELP |
|
|
|
|
|
#2 |
|
Sexy Programmer
|
some [code] tag would help improve readability and add clarity to your code. Please use them.
__________________
I would love to change the world, but they won't give me the source code! |
|
|
|
|
|
#3 |
|
Resident Grouch
![]() ![]() ![]() ![]() ![]() ![]() Join Date: Jun 2005
Posts: 6,453
Rep Power: 10
![]() |
You'll learn about them by reading the forum's rules/FAQ. Read a "How to Post..." while you're at it. Bear in mind that the help here is voluntary. The use of the word, "required", might not be the best choice in many dialects. All that said, bear in mind that dinking with the amplitude up to 3x may very well cause clipping and distortion, depending upon the source's existing amplitude.
__________________
Abstraction doesn't make it impossible to write bad code; it makes it possible to write superior code. Contributor's Corner: Grumpy on C++ Exceptions DaWei on Pointers |
|
|
|
|
|
#4 |
|
Newbie
Join Date: Apr 2006
Posts: 5
Rep Power: 0
![]() |
hey
sorry about the 'required' thing didnt mean to annoy anyone... i am an absolute BEGINNER at this-it is for my uni assignment-i know i probably should do it all myself but the teacher here atmy uni is TERRIBLE and is only ewver one lecture ahead of us in learning!!!!!!!!!!!!!!!!!!!! PLEEEEEEEAAAAAASE help the amplitude modification doesnt matter if it makes it distort as long as the program works...also i am not goin to use a slider anymore i am going to use an input box to enter either + or - 2,3,4,5 and 6 maybe (or maybe only to 3 if easier!!) THANKYOU for reading all this-have a good day James |
|
|
|
|
|
#5 |
|
I eat cake for breakfast.
![]() ![]() ![]() ![]() Join Date: Jul 2004
Location: In my box.
Posts: 4,434
Rep Power: 9
![]() |
PLEEEEEEEAAAAAASE read the bloody How To Post thread.
|
|
|
|
|
|
#6 |
|
Newbie
Join Date: Apr 2006
Posts: 5
Rep Power: 0
![]() |
sorry bout that-didnt realise... :o :o
|
|
|
|
![]() |
| Bookmarks |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
| Thread Tools | |
| Display Modes | |
|
|