3

私は現在、iOSでオーディオを録音する方法を考えています。多くの人がこれをマイクから録音して再生することとして理解していることを知っていますが、そうではありません。iPad用の録音アプリを作っています。AppleがiOSAppStoreにあるGarageBandアプリケーションでは、独自のサウンドを録音して、アプリケーション内から再生できます。これが意味をなさない場合は、次のように考えてください。

私がやろうとしているのは、音を鳴らすボタンを作ることだけです。そのボタンの音を録音し、サウンドシーケンスを再生できるようにする方法を知る必要があります。したがって、「録音」を押してから「A、F、J」ボタンを押し、次に「停止」を押してから「再生」を押すと、録音したもの(AFとJの音)が再生されます。

私はあなたがこのアプリ内であなた自身の音楽を録音して作ることができるようにそれを作ろうとしています。これが紛らわしい場合は申し訳ありませんが、あなたの能力の限りを尽くして私を助けてください。ありがとう!

4

1 に答える 1

1

2 つの NSMutableArray を作成し、レコードにヒットしたときにそれらを空にすることができます。NSTimer と int も必要です。したがって、ヘッダーで:

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

以下のすべての void と 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.
    }

}

少し手を加えるだけで (このコードが完璧だとは思えません)、これが機能するようになるかもしれません。おそらく、再生/録音ボタンのいずれかを押したら、それらを無効にしたいと思うでしょう。幸運を!

于 2012-05-27T23:56:25.403 に答える