1*b7048bd1S猫头猫/** 2*b7048bd1S猫头猫 * 音质相关的所有工具代码 3*b7048bd1S猫头猫 */ 4*b7048bd1S猫头猫 5*b7048bd1S猫头猫export const qualityKeys: IMusic.IQualityKey[] = [ 6*b7048bd1S猫头猫 'low', 7*b7048bd1S猫头猫 'standard', 8*b7048bd1S猫头猫 'high', 9*b7048bd1S猫头猫 'super', 10*b7048bd1S猫头猫]; 11*b7048bd1S猫头猫 12*b7048bd1S猫头猫export const qualityText = { 13*b7048bd1S猫头猫 low: '低音质', 14*b7048bd1S猫头猫 standard: '标准音质', 15*b7048bd1S猫头猫 high: '高音质', 16*b7048bd1S猫头猫 super: '超高音质', 17*b7048bd1S猫头猫}; 18*b7048bd1S猫头猫 19*b7048bd1S猫头猫export function getQuality( 20*b7048bd1S猫头猫 qualities: IMusic.IQuality, 21*b7048bd1S猫头猫 qualityKey: IMusic.IQualityKey, 22*b7048bd1S猫头猫 sort: 'asc' | 'desc', 23*b7048bd1S猫头猫) { 24*b7048bd1S猫头猫 const quality = qualities[qualityKey]; 25*b7048bd1S猫头猫 if (quality) { 26*b7048bd1S猫头猫 return quality; 27*b7048bd1S猫头猫 } 28*b7048bd1S猫头猫 const idx = qualityKeys.indexOf(qualityKey); 29*b7048bd1S猫头猫 const left = qualityKeys.slice(0, idx); 30*b7048bd1S猫头猫 const right = qualityKeys.slice(idx + 1); 31*b7048bd1S猫头猫 /** 优先选择音质更高的 */ 32*b7048bd1S猫头猫 if (sort === 'asc') { 33*b7048bd1S猫头猫 for (let i = 0; i < right.length; ++i) { 34*b7048bd1S猫头猫 if (qualities[right[i]]) { 35*b7048bd1S猫头猫 return qualities[right[i]]; 36*b7048bd1S猫头猫 } 37*b7048bd1S猫头猫 } 38*b7048bd1S猫头猫 for (let i = left.length - 1; i >= 0; --i) { 39*b7048bd1S猫头猫 if (qualities[left[i]]) { 40*b7048bd1S猫头猫 return qualities[left[i]]; 41*b7048bd1S猫头猫 } 42*b7048bd1S猫头猫 } 43*b7048bd1S猫头猫 } 44*b7048bd1S猫头猫 /** 优先选择音质更低的 */ 45*b7048bd1S猫头猫 if (sort === 'desc') { 46*b7048bd1S猫头猫 for (let i = left.length - 1; i >= 0; --i) { 47*b7048bd1S猫头猫 if (qualities[left[i]]) { 48*b7048bd1S猫头猫 return qualities[left[i]]; 49*b7048bd1S猫头猫 } 50*b7048bd1S猫头猫 } 51*b7048bd1S猫头猫 for (let i = 0; i < right.length; ++i) { 52*b7048bd1S猫头猫 if (qualities[right[i]]) { 53*b7048bd1S猫头猫 return qualities[right[i]]; 54*b7048bd1S猫头猫 } 55*b7048bd1S猫头猫 } 56*b7048bd1S猫头猫 } 57*b7048bd1S猫头猫} 58*b7048bd1S猫头猫 59*b7048bd1S猫头猫export function getQualityUrl( 60*b7048bd1S猫头猫 qualities: IMusic.IQuality, 61*b7048bd1S猫头猫 qualityKey: IMusic.IQualityKey, 62*b7048bd1S猫头猫 sort: 'asc' | 'desc', 63*b7048bd1S猫头猫) { 64*b7048bd1S猫头猫 const quality = qualities[qualityKey]; 65*b7048bd1S猫头猫 if (quality?.url) { 66*b7048bd1S猫头猫 return quality.url; 67*b7048bd1S猫头猫 } 68*b7048bd1S猫头猫 const idx = qualityKeys.indexOf(qualityKey); 69*b7048bd1S猫头猫 const left = qualityKeys.slice(0, idx); 70*b7048bd1S猫头猫 const right = qualityKeys.slice(idx + 1); 71*b7048bd1S猫头猫 /** 优先选择音质更高的 */ 72*b7048bd1S猫头猫 if (sort === 'asc') { 73*b7048bd1S猫头猫 for (let i = 0; i < right.length; ++i) { 74*b7048bd1S猫头猫 if (qualities[right[i]]?.url) { 75*b7048bd1S猫头猫 return qualities[right[i]].url; 76*b7048bd1S猫头猫 } 77*b7048bd1S猫头猫 } 78*b7048bd1S猫头猫 for (let i = left.length - 1; i >= 0; --i) { 79*b7048bd1S猫头猫 if (qualities[left[i]]?.url) { 80*b7048bd1S猫头猫 return qualities[left[i]].url; 81*b7048bd1S猫头猫 } 82*b7048bd1S猫头猫 } 83*b7048bd1S猫头猫 } 84*b7048bd1S猫头猫 /** 优先选择音质更低的 */ 85*b7048bd1S猫头猫 if (sort === 'desc') { 86*b7048bd1S猫头猫 for (let i = left.length - 1; i >= 0; --i) { 87*b7048bd1S猫头猫 if (qualities[left[i]]?.url) { 88*b7048bd1S猫头猫 return qualities[left[i]].url; 89*b7048bd1S猫头猫 } 90*b7048bd1S猫头猫 } 91*b7048bd1S猫头猫 for (let i = 0; i < right.length; ++i) { 92*b7048bd1S猫头猫 if (qualities[right[i]]?.url) { 93*b7048bd1S猫头猫 return qualities[right[i]].url; 94*b7048bd1S猫头猫 } 95*b7048bd1S猫头猫 } 96*b7048bd1S猫头猫 } 97*b7048bd1S猫头猫} 98