diff --git a/src/core/audio-interface/KGAudioInterface.test.ts b/src/core/audio-interface/KGAudioInterface.test.ts index 798fae7..f002d31 100644 --- a/src/core/audio-interface/KGAudioInterface.test.ts +++ b/src/core/audio-interface/KGAudioInterface.test.ts @@ -24,6 +24,23 @@ import { ConfigManager } from '../config/ConfigManager'; import { KGAudioInterface } from './KGAudioInterface'; import { MIDI_PITCH_BEND_CENTER, midiPitchBendToNormalized } from '../../util/midiUtil'; +function createMockAudioBus() { + return { + resetLiveMidiPitchBend: vi.fn(), + setLiveMidiPitchBend: vi.fn(), + scheduleLiveMidiPitchBend: vi.fn(), + setLiveMidiExpression: vi.fn(), + scheduleLiveMidiExpression: vi.fn(), + setLiveMidiSustain: vi.fn(), + setAutomationVolume: vi.fn(), + setAutomationPan: vi.fn(), + scheduleAutomationPan: vi.fn(), + applyEffectiveVolume: vi.fn(), + getSolo: vi.fn().mockReturnValue(false), + shouldPlayWithSolo: vi.fn().mockReturnValue(true), + }; +} + describe('KGAudioInterface preroll playback', () => { beforeEach(() => { vi.useFakeTimers(); @@ -125,14 +142,7 @@ describe('KGAudioInterface preroll playback', () => { const track = createMockMidiTrack({ id: 1, regions: [region] }); const project = createMockProject({ tracks: [track] }); const audio = KGAudioInterface.instance(); - const audioBus = { - resetLiveMidiPitchBend: vi.fn(), - setLiveMidiPitchBend: vi.fn(), - scheduleLiveMidiPitchBend: vi.fn(), - setLiveMidiExpression: vi.fn(), - setLiveMidiSustain: vi.fn(), - shouldPlayWithSolo: vi.fn().mockReturnValue(true), - }; + const audioBus = createMockAudioBus(); ;(audio as unknown as { trackAudioBuses: Map }).trackAudioBuses.set('1', audioBus); audio.preparePlayback(project, 0); @@ -152,14 +162,7 @@ describe('KGAudioInterface preroll playback', () => { const track = createMockMidiTrack({ id: 1, regions: [region] }); const project = createMockProject({ tracks: [track] }); const audio = KGAudioInterface.instance(); - const audioBus = { - resetLiveMidiPitchBend: vi.fn(), - setLiveMidiPitchBend: vi.fn(), - scheduleLiveMidiPitchBend: vi.fn(), - setLiveMidiExpression: vi.fn(), - setLiveMidiSustain: vi.fn(), - shouldPlayWithSolo: vi.fn().mockReturnValue(true), - }; + const audioBus = createMockAudioBus(); ;(audio as unknown as { trackAudioBuses: Map }).trackAudioBuses.set('1', audioBus); audio.preparePlayback(project, 0); @@ -178,14 +181,7 @@ describe('KGAudioInterface preroll playback', () => { const track = createMockMidiTrack({ id: 1, regions: [region] }); const project = createMockProject({ tracks: [track] }); const audio = KGAudioInterface.instance(); - const audioBus = { - resetLiveMidiPitchBend: vi.fn(), - setLiveMidiPitchBend: vi.fn(), - scheduleLiveMidiPitchBend: vi.fn(), - setLiveMidiExpression: vi.fn(), - setLiveMidiSustain: vi.fn(), - shouldPlayWithSolo: vi.fn().mockReturnValue(true), - }; + const audioBus = createMockAudioBus(); ;(audio as unknown as { trackAudioBuses: Map }).trackAudioBuses.set('1', audioBus); audio.preparePlayback(project, 2); @@ -206,14 +202,7 @@ describe('KGAudioInterface preroll playback', () => { project.setLoopingRange([1, 1]); const audio = KGAudioInterface.instance(); - const audioBus = { - resetLiveMidiPitchBend: vi.fn(), - setLiveMidiPitchBend: vi.fn(), - scheduleLiveMidiPitchBend: vi.fn(), - setLiveMidiExpression: vi.fn(), - setLiveMidiSustain: vi.fn(), - shouldPlayWithSolo: vi.fn().mockReturnValue(true), - }; + const audioBus = createMockAudioBus(); ;(audio as unknown as { trackAudioBuses: Map }).trackAudioBuses.set('1', audioBus); audio.preparePlayback(project, 5); diff --git a/src/test/mocks/tone.ts b/src/test/mocks/tone.ts index e29846a..0733dfa 100644 --- a/src/test/mocks/tone.ts +++ b/src/test/mocks/tone.ts @@ -102,6 +102,18 @@ export const MockGain = vi.fn().mockImplementation((initialValue: number = 1) => dispose: vi.fn() })); +// Mock Panner node +export const MockPanner = vi.fn().mockImplementation((initialValue: number = 0) => ({ + pan: { + value: initialValue, + setValueAtTime: vi.fn(), + }, + connect: vi.fn(), + disconnect: vi.fn(), + dispose: vi.fn(), + toDestination: vi.fn(), +})); + // Mock Meter export const MockMeter = vi.fn().mockImplementation(() => ({ getValue: vi.fn().mockReturnValue(-Infinity), @@ -120,6 +132,7 @@ export const ToneMock = { Destination: MockDestination, ToneAudioBuffer: MockToneAudioBuffer, Gain: MockGain, + Panner: MockPanner, Meter: MockMeter, // Context management