0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VisionProでMIDIファイルを再生する

Last updated at Posted at 2024-07-31

はじめに

VisionProでMIDIファイルを再生しようと思って実装をしました。

今回実装したレポジトリはこちらです
https://github.com/kanakanho/PlayMIDI

プロジェクトの設定

image.png (746.3 kB)

音楽を流すコード

Play.swift
import AVFoundation

class Play {
    private let midiFile: String
    private let soundFontFile: String
    private var midiPlayer: AVMIDIPlayer?
    
    init(midiFile: String,soundFontFile: String) {
        self.midiFile = midiFile
        self.soundFontFile = soundFontFile
        
        // Ensure MIDI file URL is valid
        guard let midiFileURL = Bundle.main.url(forResource: midiFile, withExtension: "mid") else {
            print("MIDIファイルが見つかりません")
            fatalError("MIDIファイルが見つかりません")
        }
        
        // Ensure SoundFont file URL is valid
        guard let soundFontFileURL = Bundle.main.url(forResource: soundFontFile, withExtension: "sf2") else {
            print("SoundFontファイルが見つかりません")
            fatalError("SoundFontファイルが見つかりません")
        }
        
        do {
            midiPlayer = try AVMIDIPlayer(contentsOf: midiFileURL, soundBankURL: soundFontFileURL)
        } catch {
            print("AVMIDIPlayerの初期化エラー: \(error.localizedDescription)")
            return
        }
    }
    
    func play() {
        midiPlayer?.prepareToPlay()
        
        if let midiPlayer = midiPlayer, !midiPlayer.isPlaying {
            midiPlayer.play()
        }
    }
}

ContentView.swift
struct ContentView: View {
    @State private var player: Play = Play(midiFile: "audio",soundFontFile: "soundfont")
...
    var body: some View {
        VStack {
            Image(systemName: "waveform.circle")
                .resizable()
                .scaledToFit()
                .frame(width: 100)
                .onTapGesture {
                    player.play()
                }
...

音源の追加

プロジェクトのPlayMIDI以下に MIDI ファイルをドラッグアンドドロップ

すると下のようにポップアップが出てくる

image.png (1.2 MB)

Finishを選択

image.png (63.8 kB)

プロジェクトのAssetsを開く
image.png (653.2 kB)

Assetsを開き、プロジェクトに追加したファイルをドラッグして追加する

image.png (906.9 kB)

追加後
image.png (1.0 MB)

同様にsoundfontも追加する

動作確認

左上の実行マークからエミュを起動する

アプリが起動するとこのような画面になる
image.png (4.2 MB)

ウィンドウ上のアイコンをクリックすると音が流れます!

なおエミュレータではビープ音しか聴こません。
サウンドフォントを適応させるには実機での検証が必要になります。

終わりに

今回はVisionPro(Swift)でのMIDIファイルの再生を試してみました。サウンドフォントが使えるので鳴らしたい楽器で音が流せますね!

参考にした記事

お借りしたsf2ファイル

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?