나는 midi 파일을 생성하고 안드로이드에서 재생하려고합니다. android-midi-lib를 찾았지만이 라이브러리에 대한 문서는 거의 없습니다. 이 lib 예제를 실행하려고했습니다. 그것은 작동합니다. 하지만 내 노트에서 트랙이 재생되기 전에 약 6 초 가량 지연됩니다. 나는 노트와 미디 포맷에 대해 아무것도 모른다. 모든 것이 새로운 것입니다. 이러한 지연은 (어쩌면 너무 NoteOff) NoteOn 생성자에서 처음 PARAM에 따라 달라메모 전에 안드로이드 - 미디 lib 지연
public class MyActivity extends Activity {
private MediaPlayer player = new MediaPlayer();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MidiTrack tempoTrack = new MidiTrack();
MidiTrack noteTrack = new MidiTrack();
// 2. Add events to the tracks
// 2a. Track 0 is typically the tempo map
Tempo t = new Tempo();
t.setBpm(228);
tempoTrack.insertEvent(t);
// 2b. Track 1 will have some notes in it
for(int i = 0; i < 128; i++) {
int channel = 0, pitch = i, velocity = 100;
NoteOn on = new NoteOn(i*480, channel, pitch, velocity);
NoteOff off = new NoteOff(i*480 + 120, channel, pitch, 0);
noteTrack.insertEvent(on);
noteTrack.insertEvent(off);
}
// It's best not to manually insert EndOfTrack events; MidiTrack will
// call closeTrack() on itself before writing itself to a file
// 3. Create a MidiFile with the tracks we created
ArrayList<MidiTrack> tracks = new ArrayList<MidiTrack>();
tracks.add(tempoTrack);
tracks.add(noteTrack);
MidiFile midi = new MidiFile(MidiFile.DEFAULT_RESOLUTION, tracks);
// 4. Write the MIDI data to a file
File output = new File("/sdcard/example.mid");
try {
midi.writeToFile(output);
} catch(IOException e) {
Log.e(getClass().toString(), e.getMessage(), e);
}
try {
player.setDataSource(output.getAbsolutePath());
player.prepare();
} catch (Exception e) {
Log.e(getClass().toString(), e.getMessage(), e);
}
player.start();
}
@Override
protected void onDestroy() {
player.stop();
player.release();
super.onDestroy();
}
}
내가 알아 낸 :
여기 내 코드입니다. 나는 480 숫자가 무엇인지 이해하지 못한다. 나는이 숫자를 바꾸려고 노력했다. 트랙보다 짧은 딜레이보다 적은 수이지만, 전체 트랙은 더 짧다.
480 값을 갖는 노트 사이의 시간이 좋아 보이지만 그 전에는 지연이 필요하지 않습니다.
도와주세요!
onCreate 메서드에서 파일을 모두 생성, 저장,로드 및 재생하려고 할 때 지연이 발생한다는 것이 나에게 들립니다. 그것들은 즉각적인 조작이 아닙니다. MediaPlayer.start() 호출을 버튼에 의해 트리거 된 함수로 이동해보십시오. 플레이어가 재생을 초기화하는 동안 약간의 지연이 예상되지만 제공된 코드는 첫 번째 음표를 틱 0으로 지정하므로 경험 한 지연은 MIDI 파일 또는 라이브러리로 인해 발생하지 않습니다. 또한 480 값이 무엇인지 이해하지 못하는 경우 MIDI에 대해 더 자세히 알아야합니다. – LeffelMania