0

次のコードを使用してメロディーを作成しようとしています。問題は、シーケンスに rhythmArray のリズム値を再生させようとすることです。私は基本的に音符を再生したいと思います。指定された時間のベロシティはオフになり、シーケンス内の次の音符を再生します。

どんな助けでも大歓迎です。

int playMidi()
{
 //pitch array with constants defined for pitch numbers: ex. C4 = 60
 int pitchArray[11] {C4, A5, E4, F3, D4, FS5, BF4, CS3, FS5, C3, DF4}; /

//velocity array with constants defined for velocity: ex. QN = 1, EN = 0.5
 int velocityArray[11] {FORTE, PIANISSIMO, MEZZO_FORTE, PIANISSIMO, FORTISSIMO,
 MEZZO_PIANO, PIANISSIMO, FORTE, MEZZO_PIANO,FORTE, FORTISSIMO};

//rhythm array with constants defined for rhythm values: ex.  = 110
double rhythmArray[11] {EN, SN, SN, EN, QN, EN, EN, EN, TSN,TSN, SN};


for(int i=0; i<11; i++)
{

    UInt32 noteOnCommand =  kMidiMessage_NoteOn << 4 | midiChannelInUse;


        std::cout<< "The current pitch is: " 
                 <<pitchArray[i]  << "The velocity is: " <<velocityArray[i]
                 << " and the rhythmic value is: "<<rhythmArray[i]<<  "\n";

        MusicDeviceMIDIEvent(synthUnit, 
                             noteOnCommand, 
                             pitchArray[i], 
                             velocityArray[i], 
                             0);

        // sleep for a second
        sleep(1);





}
 return 0;
}
4

2 に答える 2

3

単純に MIDI ノートを順番に再生したい場合は、同様の機能をゼロから作成するよりも、組み込みのMusicPlayerを使用することでより多くの作業を進めることができます。これは非常に柔軟なフレームワークであり、開発者は複数のMusicTracksMusicSequencesをオンザフライで作成し、トラックとノートのプロパティを変更し、.mid ファイルを保存することさえできます。エンドポイントは、サウンドフォントを使用する midi デバイスまたは AUGraph のいずれかです。

于 2013-04-11T14:50:01.833 に答える