2014-11-08 2 views
0

Я хочу создать собственный пользовательский интерфейс, который отправляет MIDI-сигналы (или OSC или что-то еще), которые вызовут галочку или гараж или другие программы, которые я установил на своем ipad, (или Galaxy), чтобы воспроизвести музыку, которую я создаю. Как мне это сделать? Какие способы доступны. Какой язык программирования я должен использовать для создания моего «контроллера» приложения? Какой API. Какой самый быстрый способ добиться этого.Управление музыкальным синтезатором в фоновом режиме на Android и IOS

Похоже, что OSC - это то, что я должен делать, по крайней мере для iPad, но мне кажется, что он работает только между машинами в сети. Я хочу, чтобы он работал между запущенными приложениями, например, я видел с помощью SampleWiz от Jordan Rudess, контролируемым из другой программы, или https://www.youtube.com/watch?v=ZMyRS9y20mw thumbjam control sampleTank (теперь я снова посмотрел на это видео и увидел, что его MIDI)

+0

возможно дубликат [Может кто-нибудь показать мне, как использовать CoreMIDI на прошивке?] (Http://stackoverflow.com/questions/13952151/can-anyone-show-me-how-to-use-coremidi -on-ios) –

+0

Нет. Это говорит о том, как подключиться с вашего устройства IOS (т. Е. IPad или iPhone) к внешнему устройству (т. Е. К цифровой музыкальной клавиатуре). – pashute

+0

"вы можете использовать локальный сеанс CoreMIDI для отправки или получения сообщений из/в другое совместимое с CoreMIDI приложение" –

ответ

0

Вот проект Android с barebone который создает MIDI-файл, который затем может воспроизводиться внешним MIDI-синтезатором. Для целей тестирования включен playNewMIDIFile(). Это использует собственный MediaPlayer для воспроизведения нового файла.

Оригинальный вопрос, который включает этот экстракт, можно найти here.

package com.example.midi; 

import java.io.File; 
import java.io.FileDescriptor; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 

import android.app.Activity; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.view.View; 

public class Main extends Activity { 

    private String file = "midi.mid"; 
    private MediaPlayer mediaPlayer; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mediaPlayer = new MediaPlayer(); 
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

    createNewMIDIFile(); 
    playNewMIDIFile(); 
    } 

    public void createNewMIDIFile() { 
    Integer[] stream = new Integer[]{ 
     // 
     0x4d, 0x54, 0x68, 0x64, // MThd = MIDI file designator 
     0x00, 0x00, 0x00, 0x06, // Standard MIDI File (SMF) 
     0x00, 0x01, 0x00, 0x02, // multiple-track format: 2 tracks 
     0x00, 0x40, // 64 ticks per beat (quarter note) 
     0x4D, 0x54, 0x72, 0x6B, // Header for track 1 
     0x00, 0x00, 0x00, 0x0B, // 11 bytes to describe the track 
     0x00, 0xFF, 0x51, 0x03, // set tempo: 
     0x0F, 0x42, 0x40, // 1,000,000 microseconds/beat: 60 bpm 
     0x00, 0xFF, 0x2F, 0x00, // End of track 1 
     0x4D, 0x54, 0x72, 0x6B, // Header for track 2 
     0x00, 0x00, 0x00, 0x0F, // 15 bytes to describe the track 
     0x00, // Immediately 
     0xC1, 0x01, // change instrument for track 2 to piano 
     0x00, // Immediately 
     0x91, 0x3C, 0x7F, // play middle C with a velocity of 127 
     0x30, // 48 ticks later (dotted eighth note) 
     0x81, 0x3C, 0x00, // stop playing the middle C 
     0x00, 0xFF, 0x2F, 0x00 // End of track 2 
    }; 

    int length = stream.length; 
    byte[] byteStream = new byte[length]; 
    for (int ii = 0; ii < length; ii++) { 
     byteStream[ii] = (byte) (stream[ii] % 256); 
    } 

    try { 
     FileOutputStream outputStream = openFileOutput(file, MODE_PRIVATE); 
     outputStream.write(byteStream); 
     outputStream.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 

    public void play(View view) { 
    /* Triggered by a button defined in activity_main.xml as 
    <Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:onClick="play" 
    android:text="Play MIDI" /> 
    */ 
    playNewMIDIFile(); 
    } 

    public void playNewMIDIFile() { 
    try { 
     String filename = getFilesDir() + "/" + file; 
     File midifile = new File(filename); 
     FileInputStream inputStream = new FileInputStream(midifile); 
     FileDescriptor fileDescriptor = inputStream.getFD(); 
     mediaPlayer.reset(); 
     mediaPlayer.setDataSource(fileDescriptor); 
     inputStream.close(); 
     mediaPlayer.prepare(); 
     mediaPlayer.start(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 
}