@@ -13,9 +13,9 @@ import { useMounted } from "@/composables/useMounted";
1313import { tickToBaseX , type ViewportInfo } from " @/sing/viewHelper" ;
1414import { secondToTick , tickToSecond } from " @/sing/music" ;
1515import {
16- generateWaveformPeaks ,
16+ generateWaveformPeaksMipmap ,
1717 resamplePeaks ,
18- type WaveformPeaks ,
18+ type WaveformPeaksMipmap ,
1919} from " @/sing/waveformPeaks" ;
2020import { Mutex } from " @/helpers/mutex" ;
2121import { createLogger } from " @/helpers/log" ;
@@ -99,13 +99,15 @@ const audioEvents = computed<ReadonlyMap<AudioEventId, AudioEvent>>(() => {
9999 return events ;
100100});
101101
102- // AudioBufferから算出した波形ピークのMap
103- const peaksMap = ref <ReadonlyMap <AudioEventId , WaveformPeaks >>(new Map ());
102+ // AudioBufferから算出した波形ピークmipmapのMap
103+ const peaksMipmaps = ref <ReadonlyMap <AudioEventId , WaveformPeaksMipmap >>(
104+ new Map (),
105+ );
104106
105- const updatePeaksMap = () => {
107+ const updatePeaksMipmaps = () => {
106108 const audioEventsValue = audioEvents .value ;
107109
108- const tempMap = new Map (peaksMap .value );
110+ const tempMap = new Map (peaksMipmaps .value );
109111
110112 // 不要なキーを削除
111113 for (const eventId of tempMap .keys ()) {
@@ -114,16 +116,16 @@ const updatePeaksMap = () => {
114116 }
115117 }
116118
117- // 新規キーについてpeaksを生成
119+ // 新規キーについてpeaksMipmapを生成
118120 // NOTE: sequenceIdに対応するAudioBufferは不変なので、既存キーの再計算は不要
119121 for (const [eventId, event] of audioEventsValue ) {
120122 if (! tempMap .has (eventId )) {
121123 // mipmapの最小のバケツサイズは、最大ズーム時にも解像度が足りる 16 を採用
122- tempMap .set (eventId , generateWaveformPeaks (event .buffer , 16 ));
124+ tempMap .set (eventId , generateWaveformPeaksMipmap (event .buffer , 16 ));
123125 }
124126 }
125127
126- peaksMap .value = tempMap ;
128+ peaksMipmaps .value = tempMap ;
127129};
128130
129131// 描画用の波形データのMap
@@ -136,7 +138,7 @@ const waveformDataMutex = new Mutex({ maxPending: 1 });
136138
137139const computeWaveformData = (
138140 event : AudioEvent ,
139- peaks : WaveformPeaks ,
141+ peaksMipmap : WaveformPeaksMipmap ,
140142 scaleXValue : number ,
141143 temposValue : readonly Tempo [],
142144 tpqnValue : number ,
@@ -167,7 +169,10 @@ const computeWaveformData = (
167169 );
168170 }
169171
170- const { minValues, maxValues } = resamplePeaks (peaks , pixelBoundarySamples );
172+ const { minValues, maxValues } = resamplePeaks (
173+ peaksMipmap ,
174+ pixelBoundarySamples ,
175+ );
171176
172177 return {
173178 startX: startScreenXAtZeroOffset ,
@@ -179,7 +184,7 @@ const computeWaveformData = (
179184
180185const updateWaveformDataMap = async () => {
181186 const audioEventsValue = audioEvents .value ;
182- const peaksMapValue = peaksMap .value ;
187+ const peaksMipmapsValue = peaksMipmaps .value ;
183188 const scaleXValue = scaleX .value ;
184189 // NOTE: Tempoが型レベルでイミュータブルになっていないので、cloneしている
185190 const temposValue = cloneWithUnwrapProxy (tempos .value );
@@ -212,10 +217,10 @@ const updateWaveformDataMap = async () => {
212217 // 新規キーについて描画用の波形データを計算
213218 for (const [key, { eventId, event }] of keyedEvents ) {
214219 if (! tempMap .has (key )) {
215- const peaks = getOrThrow (peaksMapValue , eventId );
220+ const peaksMipmap = getOrThrow (peaksMipmapsValue , eventId );
216221 const waveformData = computeWaveformData (
217222 event ,
218- peaks ,
223+ peaksMipmap ,
219224 scaleXValue ,
220225 temposValue ,
221226 tpqnValue ,
@@ -232,13 +237,13 @@ const { mounted } = useMounted();
232237// NOTE: mountedをwatchしているので、onMountedの直後に必ず1回実行される
233238watch ([mounted , audioEvents ], ([mountedValue ]) => {
234239 if (mountedValue ) {
235- updatePeaksMap ();
240+ updatePeaksMipmaps ();
236241 }
237242});
238243
239244// NOTE: mountedをwatchしているので、onMountedの直後に必ず1回実行される
240245watch (
241- [mounted , audioEvents , peaksMap , scaleX , tempos , tpqn ],
246+ [mounted , audioEvents , peaksMipmaps , scaleX , tempos , tpqn ],
242247 async ([mountedValue ]) => {
243248 if (mountedValue ) {
244249 try {
0 commit comments