はじめに
VisionProでMIDIファイルを再生しようと思って実装をしました。
今回実装したレポジトリはこちらです
https://github.com/kanakanho/PlayMIDI
プロジェクトの設定
音楽を流すコード
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 ファイルをドラッグアンドドロップ
すると下のようにポップアップが出てくる
Finish
を選択
Assets
を開き、プロジェクトに追加したファイルをドラッグして追加する
同様にsoundfontも追加する
動作確認
左上の実行マークからエミュを起動する
ウィンドウ上のアイコンをクリックすると音が流れます!
なおエミュレータではビープ音しか聴こません。
サウンドフォントを適応させるには実機での検証が必要になります。
終わりに
今回はVisionPro(Swift)でのMIDIファイルの再生を試してみました。サウンドフォントが使えるので鳴らしたい楽器で音が流せますね!
参考にした記事
お借りしたsf2ファイル