7

10 曲の録音を無料でリリースする予定ですが、iPhone アプリにバンドルされています。それらは、現在、Web、iTunes、またはどこでも利用できません。

ご想像のとおり、私は iphone SDK (最新) を初めて使用するので、開発者向けドキュメント、さまざまなフォーラム、stackoverflow を調べて学習してきました。

Apple のavTouchサンプル アプリケーションは素晴らしいスタートでした。しかし、アプリで 10 トラックすべてを 1 つずつ再生する必要があります。すべての曲が resources フォルダーに追加され、track1、track2...track10 という名前が付けられます。

avTouch アプリ コードには、次の 2 つの部分があり、探しているものを実現するために変更が必要だと思います。しかし、私は迷っています。

// Load the array with the sample file
NSURL *fileURL = [[NSURL alloc] 
                 initFileURLWithPath: 
                 [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"m4a"]];


- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
if (flag == NO)
    NSLog(@"Playback finished unsuccessfully");

[player setCurrentTime:0.];
[self updateViewForPlayerState];
}


1.リソースフォルダーに追加された10個のトラックすべてを配列にロードする方法
2.再生を押すと、プレーヤーは最初のトラックを開始する必要があります。1 番目のトラックが終了すると、2 番目のトラックが開始され、残りのトラックも同様に開始されます。

ありがとうございました

4

2 に答える 2

8

inScript さん、これに対する解決策は見つかりましたか? if { // do something } else { // do something else }それらを続けて再生するステートメントのような単純なものに固執することをお勧めします。

配列にロードするには、新しい plist ファイルを作成します (ディレクトリ ツリーを右クリック -> [追加] -> [新しいファイル] を選択し、そこにあるプロパティ リストを見つけます。ファイルに soundlist という名前を付けます。次に、その新しいファイルを開き、その場所で右クリックします。デフォルトで「辞書」と表示されている場合は、「値の型」に移動して「配列」を選択します...その行の右端を見ると、小さな3本の棒のようなボタンが表示されます。それをクリックして追加します「track01」、「track02」など、1 行に 1 つずつ項目を追加します。

このコードは .h ファイルに入ります。

NSArray* soundsList;

このコードは .m ファイルに入ります。

NSString *soundsPath = [[NSBundle mainBundle] pathForResource:@"soundslist" ofType:@"plist"];
soundsList = [[NSArray alloc] initWithContentsOfFile:soundsPath];

配列は常にインデックス # 0 から始まります。したがって、5 つのトラックがある場合、track01 はインデックス 0、track02 はインデックス 1 などになります。配列をすばやくポーリングしてその内容を確認したい場合は、次のコードを追加できます。

int i = 0;

for (i; i <= ([soundsList count] - 1); i++) {

    NSLog(@"soundsList contains %@", [soundsList objectAtIndex:i]);

}

配列内の項目数 (つまり、5 または 10 または曲数) をカウントするだけで、objectAtIndex:送信したインデックス番号のオブジェクトが返されます。

連続して再生するには、if-then ステートメントをaudioPlayerDidFinishPlayingメソッドに入れるだけです。

ファイルを再生したい場合は、次のようにします。

NSString* filename = [soundsList objectAtIndex:YOURINDEXNUMBER];
NSString *path = [[NSBundle mainBundle] pathForResource:filename ofType:@"mp3"];  

AVAudioPlayer * newAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];  
self.theAudio = newAudio; // automatically retain audio and dealloc old file if new file is loaded

[newAudio release]; // release the audio safely

theAudio.delegate = self; 
[theAudio prepareToPlay];
[theAudio setNumberOfLoops:0];
[theAudio play];

YOURINDEXNUMBER は、再生したいトラック番号です (0 = track01、1 = track02 など)。

.h ファイル内の変数の設定についてサポートが必要な場合は、お知らせください。順を追って説明します。また、theAudioプログラムの終了時に解放されるように、必ず dealloc メソッドで解放してください。

于 2010-04-27T17:56:40.410 に答える
0

Your Code では、audioPlayerDidFinishPlaying でプレーヤーを呼び出してサウンドを再度再生し、どのくらいのトラックを再生するかを追跡できます (Counter を使用)。

コンディショニングコードを作成して、プレーヤーを管理して、10トラックを何度も繰り返し再生します.....

より多くの機能については、AVAudioプレーヤークラスリファレンスからリファレンスを取得してください...

見栄えを良くするために、別のボタンとカスタムボリューム回転noobを配置します.... CoreAnimationクラスを使用して....

ベスト・オブ・ラック

于 2011-04-15T04:58:12.713 に答える