2012-05-03 4 views
3

Мне сейчас интересно, как вы можете записывать аудио в iOS. Я знаю, что многие понимают это как запись с микрофона и воспроизведение его, но это не так. Я делаю приложение для записи звука для iPad. В приложении GarageBand, которое Apple имеет в магазине приложений iOS, вы можете записывать собственные звуки и воспроизводить их из приложения. Если это не имеет смысла, подумайте об этом так:Как записывать звук в iOS?

Все, что я пытаюсь сделать, это сделать кнопку, которая воспроизводит звук. Мне нужно знать, как записывать звук этой кнопки и иметь возможность воспроизводить звуковую последовательность. Поэтому, если я нажал «запись», затем кнопки «A, F, J», а затем «остановится», затем нажмите «play», чтобы воспроизвести записанное (звучит A F и J).

Я стараюсь сделать так, чтобы вы могли записывать и создавать свою собственную музыку в этом приложении. Извините, если это сбивает с толку, пожалуйста, помогите мне в меру своих способностей. Благодаря!

+0

Проводятся ли какие-либо исследования? –

+0

Возможный дубликат http://stackoverflow.com/questions/4215180/record-and-play-audio-simultaneous | Проверьте пример приложения Apple aurioTouch, например, код. –

ответ

1

Вы можете создать два NSMutableArrays и удалить их, когда попадете в запись. Вам также понадобится NSTimer и int. Поэтому в заголовке:

NSTimer *recordTimer; 
NSTimer *playTimer; 
int incrementation; 
NSMutableArray *timeHit; 
NSMutableArray *noteHit; 

Включите в свой заголовок все пустоты и IBActions и такие ниже.

Сделайте свои звуковые кнопки разными, уникальными тегами.

, а затем в главном файле:

-(void)viewDidLoad { 

    timeHit = [[NSMutableArray alloc] init]; 
    noteHit = [[NSMutableArray alloc] init]; 

} 

-(IBAction)record { 

    recordTimer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(timerSelector) userInfo:nil repeats:YES]; 
    [timeHit removeAllObjects]; 
    [noteHit removeAllObjects]; 
    incrementation = 0; 
} 

-(void)timerSelector { 

    incrementation += 1; 

} 

-(IBAction)hitSoundButton:(id)sender { 

    int note = [sender tag]; 
    int time = incrementation; 

    [timeHit addObject:[NSNumber numberWithInt:time]]; 
    [noteHit addObject:[NSNumber numberWithInt:note]]; 
    [self playNote:note]; 
} 

-(IBAction)stop { 

    if ([recordTimer isRunning]) { 

     [recordTimer invalidate]; 
    } else if ([playTimer isRunning]) { 

     [playTimer invalidate]; 
    } 

} 

-(IBAction)playSounds { 

    playTimer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(playback) userInfo:nil repeats:YES]; 

    incrementation = 0; 



} 


-(void)playback { 

    incrementation += 1; 

    if ([timeHit containsObject:[NSNumber numberWithInt:incrementation]]) { 

     int index = [timeHit indexOfObject:[NSNumber numberWithInt:incrementation]]; 

     int note = [[noteHit objectAtIndex:index] intValue]; 

     [self playNote:note]; 
    } 
} 


-(void)playNote:(int)note { 


    //These notes would correspond to the tags of the buttons they are played by. 

    if (note == 1) { 
     //Play your first note 
    } else if (note == 2) { 
     //Play second note 
    } else if (note == 3) { 
     //And so on 
    } else if (note == 4) { 
      //etc. 
    } 

} 

С немного возился (я сомневаюсь, что этот код является идеальным), вы можете получить эту работу. Как вы, вероятно, захотите, чтобы кнопки воспроизведения/записи были отключены после нажатия на один из них. Удачи!

Смежные вопросы