4

私は avaudioplayer と avaudiorecorder に必要な正確な機能を作成することができましたが、もちろん遅延の問題が発生しました。したがって、Web 上のほぼすべての記事を読み、サンプル コードのスタックを確認した後でも、次のことを実現する方法がわかりません。

  1. ユーザーは、プリロール/カウントインを使用して、長さ 2 小節 (小節あたり 4 ビート) のサンプルを録音することを選択します。
  2. ユーザーのクリック数の記録
  3. 4拍でカウントするメトロノームがスタート(アクセントは1拍目)
  4. アプリは次のバーの開始時に自動的に記録を開始します
  5. アプリは、3 小節目 (2 小節 + プレロール) の終わりに録音を自動的にオフにします。
  6. その後、ユーザーは録音を再生するか、削除してからやり直すことができます。

そのため、avaudioplayer と avaudiorecorder を使用して、正しい bpm に設定されたメトロノームを使用して audacity を使用して「カフェ」を作成しました (bpm はアプリに設定されています)。次に、avaudioplayer をセットアップして再生し、audiodidfinishsuccessfully デリゲート メソッドを使用して、レコーダーの開始、プレーヤーの再起動、ループ カウントの維持などのロジックを実行して、録音とオーディオをオフにしました。

前述したように、求めているユーザー エクスペリエンスをほぼ実現できましたが、遅延の問題は受け入れられません。

私はオーディオ ユニットとリモート IO を使用しており、再生コールバックとレコーダー コールバックなどを使用してプロジェクトをセットアップしましたが、上記の説明に基づいてこれを機能させる方法の問題に直面しています。手始めに、次のことを解決しようとしています。

  1. 1 ビートの caf ファイルを作成する場合、オーディオ ユニットとリモート IO を使用して x のビート数を再生してから停止するにはどうすればよいですか?
  2. プリロールを実行して、4 ビート後に録音コールバックを開始するにはどうすればよいですか

誰かが私にいくつかのアイデアを与えたり、正しい方向に向けたりすることはできますか? すでに述べたように、コア オーディオ ブックの購入、atastypixel.com、timbolstad.com などのすべての記事の読み取り、Apple ドキュメントのトロールなど、さまざまな調査を既に行っています。

よろしくお願いします。

4

1 に答える 1

-1

NSTimer を開始します。BPM (1 分あたりの拍数) / 60 に基づいた値を使用します。ユーザーが 2 小節のファイルをカウントで録音したい場合は、次のようにします。

//timer interval=100BPM/60secs per minute
timerInterval=100/60;

    metroTimer = [NSTimer scheduledTimerWithTimeInterval:timerinterval target:self selector:@selector(blinkMetroLight) userInfo:nil repeats:YES];




 - (void)blinkMetroLight
    {

        if(beatNumber == 0)
        {
            beatNumber = 1;


        }
        else if (beatNumber == 5)
        {
            [self audioProcessorStart];
        }
        if (beatNumber == 8)
        {

                [self audioProcessorStop];
                [metroTimer invalidate]; metroTimer = nil;
        }

    beatNumber++ 
    }
于 2014-03-21T16:12:37.870 に答える