2012-01-03 15 views
0

波形を描画するために、オーディオファイルからサンプルを抽出しています。サンプル(waveDisplayArrayは下のコードにあります)を使用して配列を生成しました。配列から最大の要素を抽出する

このwaveDisplayArrayから最大の値を抽出したい場合、これを行うにはどうすればよいでしょうか?

(私はinitallyこのようwaveDisplayArrayを定義します。int waveDisplayArray [280] = {0};
私はこれはこれについて移動する最良の方法であるかわからない)事前に

感謝:)

for(int y=0; y<convertedData.mNumberBuffers; y++) 
{ 
    NSLog(@"buffer# %u", y); 
    AudioBuffer audioBuffer = convertedData.mBuffers[y]; 
    int bufferSize = audioBuffer.mDataByteSize/sizeof(Float32); 
    Float32 *frame = audioBuffer.mData; 
    NSLog(@"Buffer Size is: %i", bufferSize); 

    int numberOfPixels = 280; 
    int waveDisplayArray[280]={ 0 }; 
    int i; 

    for (i = 0; i<numberOfPixels; i++) 
    { 
     //NSLog(@"i is: %i", i); 
     int j; 
     int numberOfSamplesPerPixel = bufferSize/numberOfPixels; 
     float average = 0; 

     for (j=i*numberOfSamplesPerPixel; j<(i+1)*numberOfSamplesPerPixel; j++){ 

      average += frame[j]; 
      average = average/numberOfSamplesPerPixel; 
     } 

     waveDisplayArray[i] = average; 
     NSLog(@"Average %i is %f",i,average); 
     NSLog(@"waveDisplay Array %i: %f",i, waveDisplayArray[i]); 
    } 
} 
+0

あなたはNSSortDescriptorを使用して値およびすべてのvalues.NSSortDescriptorの間で最初の値を取る* DESC = [[[NSSortDescriptorのalloc] initWithKeyで配列をソートすることができます:YES セレクター: "ファイル名" 昇順@ @セレクタ(sortByFilenames :)] autorelease]; [myMutableArray sortArrayUsingDescriptors:[NSArray arrayWithObject:desc]]; – shivangi

答えて

1

最大の価値を見つけるために関連する部分だけを編集して投稿しました。

int i; 
float largest = 0; 

for (i = 0; i<numberOfPixels; i++) 
{ 
    //NSLog(@"i is: %i", i); 
    int j; 
    int numberOfSamplesPerPixel = bufferSize/numberOfPixels; 
    float average = 0; 

    for (j=i*numberOfSamplesPerPixel; j<(i+1)*numberOfSamplesPerPixel; j++){ 

     average += frame[j]; 
     average = average/numberOfSamplesPerPixel; 
    } 

    waveDisplayArray[i] = average; 

    if(largest < average) 
    { 
     largest = average; 
    } 

    NSLog(@"Average %i is %f",i,average); 
    NSLog(@"waveDisplay Array %i: %f",i, waveDisplayArray[i]); 

} 
NSLog(@"Largest %f",largest); 
+0

Aadhiraさん、ありがとうございました。私に最大の価値をもたらします。私が今問題となっているのは、配列の各要素を最大値で分割しようとするときです。私はこれを処理する新しいループを設定しました。 int k;用 \t \t \t \t(; K Octave1

+0

「waveDisplayArray」は整数配列です。要素がどのようなものであっても、配列の最大値で要素を分割しようとすると、要素はゼロになります。たとえば、2,4,6,3の要素を持つ配列があるとします。 6で各要素を分割して戻すと、すべての要素がゼロになります。 – Ilanchezhian

+0

あなたは 'float'配列を持っていると思いますが、状況は異なるかもしれません。お役に立てれば。 – Ilanchezhian

1

この場合AppleのAccelerate frameworkを使用することを考えましたか?例えば、ベクトル全体(配列)の最大値を計算する関数があります。 forループを1行で置き換えます。 vDSP_maxmgv(&maxValue, 1, waveDisplayArray, 280);

平均、最小などの計算に便利な関数もあります。これはずっと速くなければなりません。

関連する問題