You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
3.6 KiB
138 lines
3.6 KiB
//
|
|
// ViewController.m
|
|
// SpectogramPrototype
|
|
//
|
|
// Created by Joshua Moerman on 21/12/13.
|
|
// Copyright (c) 2013 Joshua Moerman. All rights reserved.
|
|
//
|
|
|
|
#import <MediaPlayer/MPMediaPickerController.h>
|
|
#import <AudioToolbox/ExtendedAudioFile.h>
|
|
|
|
#import "ViewController.h"
|
|
#import "RuledScrollView.h"
|
|
#import "Spectographer.h"
|
|
|
|
typedef enum {
|
|
iPad,
|
|
iPod,
|
|
Simulator
|
|
} device;
|
|
|
|
// NOTE: the simulator has no media, so we cant use MPMediaPicker
|
|
// and the iPad has to use a popover, while the iPod/iPhone doesn't
|
|
// So that's why we check the device
|
|
device get_device(){
|
|
device device = iPad;
|
|
|
|
NSRange range = [[[UIDevice currentDevice] model] rangeOfString:@"Simulator"];
|
|
if(range.location != NSNotFound) {
|
|
device = Simulator;
|
|
}
|
|
|
|
if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
|
|
device = iPod;
|
|
}
|
|
|
|
return device;
|
|
}
|
|
|
|
@interface ViewController () <MPMediaPickerControllerDelegate> {
|
|
Spectographer * spectographer;
|
|
UIPopoverController * pop;
|
|
}
|
|
- (void) openAudioFile:(NSURL*)filePath;
|
|
@property (nonatomic, strong) UILabel* header;
|
|
@end
|
|
|
|
@implementation ViewController
|
|
|
|
@synthesize scrollView, contentView, header;
|
|
|
|
- (void)viewDidLoad{
|
|
[super viewDidLoad];
|
|
|
|
if(!contentView){
|
|
[[NSBundle mainBundle] loadNibNamed:@"ContentView" owner:self options:nil];
|
|
[scrollView.content addSubview:contentView];
|
|
contentView.autoresizingMask = UIViewAutoresizingNone;
|
|
scrollView.contentSize = contentView.bounds.size;
|
|
}
|
|
}
|
|
|
|
- (void)didReceiveMemoryWarning{
|
|
[super didReceiveMemoryWarning];
|
|
}
|
|
|
|
- (void)openAudioFile:(NSURL *)filePath{
|
|
if(!spectographer)
|
|
spectographer = [[Spectographer alloc] init];
|
|
|
|
[spectographer openAudioFile:filePath];
|
|
CGImageRef image = [spectographer generate];
|
|
|
|
UIImage * newUIImage = [UIImage imageWithCGImage:image];
|
|
assert(newUIImage);
|
|
|
|
CGImageRelease(image);
|
|
|
|
UIImageView * view = [[UIImageView alloc] initWithImage:newUIImage];
|
|
|
|
[contentView removeFromSuperview];
|
|
contentView = view;
|
|
scrollView.zoomScale = 1.0;
|
|
|
|
[scrollView.content addSubview:contentView];
|
|
contentView.autoresizingMask = UIViewAutoresizingNone;
|
|
scrollView.contentSize = contentView.bounds.size;
|
|
}
|
|
|
|
- (void)mediaButtonPressed:(UIButton*)sender{
|
|
MPMediaPickerController * mppc = nil;
|
|
device device = get_device();
|
|
|
|
switch (device) {
|
|
case iPad:
|
|
mppc = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeAnyAudio];
|
|
mppc.delegate = self;
|
|
mppc.allowsPickingMultipleItems = NO;
|
|
mppc.showsCloudItems = NO;
|
|
|
|
if(pop){
|
|
[pop dismissPopoverAnimated:YES];
|
|
pop = nil;
|
|
}
|
|
|
|
pop = [[UIPopoverController alloc] initWithContentViewController:mppc];
|
|
[pop presentPopoverFromRect:sender.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
|
|
break;
|
|
case iPod:
|
|
mppc = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeAnyAudio];
|
|
mppc.delegate = self;
|
|
mppc.allowsPickingMultipleItems = NO;
|
|
mppc.showsCloudItems = NO;
|
|
|
|
[self presentViewController:mppc animated:YES completion:nil];
|
|
break;
|
|
case Simulator:
|
|
NSLog(@"WARNING: No MPMediaPicker in Simulator, opening some file");
|
|
[self openAudioFile:[[NSBundle mainBundle] URLForResource:@"testMusic" withExtension:@".mp3"]];
|
|
break;
|
|
}
|
|
}
|
|
|
|
- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection {
|
|
for(MPMediaItem * mediaItem in mediaItemCollection.items){
|
|
NSURL * url = [mediaItem valueForProperty:MPMediaItemPropertyAssetURL];
|
|
[self openAudioFile:url];
|
|
}
|
|
[pop dismissPopoverAnimated:YES];
|
|
pop = nil;
|
|
}
|
|
|
|
- (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker {
|
|
[pop dismissPopoverAnimated:YES];
|
|
pop = nil;
|
|
}
|
|
|
|
@end
|
|
|