Просмотр исходного кода

支持导入音乐封面读取同目录的封面

onecold 6 месяцев назад
Родитель
Сommit
549b610601

+ 2 - 1
entry/src/main/ets/common/util/FFTAnalyzer.ets

@@ -34,7 +34,8 @@ export class SpectrumData {
    */
   getBands(bandCount: number): number[] {
     const bands: number[] = new Array<number>(bandCount)
-    const minFreq: number = 32.0
+    // 可调整: 提高最小频率可减少低频段的相似性
+    const minFreq: number = 64.0  // 从 32Hz 提高到 64Hz,低频区分度更好
     const maxFreq: number = Math.min(16000.0, this.sampleRate / 2.0)
     const logMin: number = Math.log(minFreq)
     const logMax: number = Math.log(maxFreq)

+ 28 - 1
entry/src/main/ets/common/util/Utility.ets

@@ -773,9 +773,36 @@ export class Utility {
             imagePath = await ImageUtil.savePixelMap(pixelMap, context.filesDir, md5Name);
             return fileUri.getUriFromPath(imagePath);
           }
+        } else {
+          // 这里如果判断同个目录下是否有同名的图片格式存在 如果有 返回这个图片的路径
+          try {
+            // 获取文件所在目录
+            const fileDir = Utility.getParentDirectory(filePath);
+            const fileName = FileUtil.getFileName(filePath);
+            const baseName = getFileNameWithoutExtension(fileName);
+            console.info('readMetaInfoFFmpeg', '正在查找本地图片');
+            // 定义常见的图片格式
+            const imageExtensions = ['.jpg', '.jpeg', '.png', '.webp', '.bmp'];
+
+            // 检查同名图片文件
+            for (let i = 0; i < imageExtensions.length; i++) {
+              const imageExt = imageExtensions[i];
+              const imagePath = fileDir + FileUtil.separator + baseName + imageExt;
+              if (FileUtil.accessSync(imagePath)) {
+                console.info('readMetaInfoFFmpeg', `找到同名封面图片: ${imagePath}`);
+                return fileUri.getUriFromPath(imagePath);
+              }
+            }
+            console.info('readMetaInfoFFmpeg', '未找到同名图片文件');
+            return '';
+          } catch (error) {
+            console.error('readMetaInfoFFmpeg', `检查同名图片失败: ${error instanceof Error ? error.message : String(error)}`);
+            return '';
+          }
         }
       } catch (error) {
-        Logger.error('readMetaInfoFFmpeg', `提取封面失败: ${error instanceof Error ? error.message : String(error)}`);
+        console.error('readMetaInfoFFmpeg', `提取封面失败: ${error instanceof Error ? error.message : String(error)}`);
+        return '';
       }
 
       return '';

+ 3 - 2
entry/src/main/ets/view/LocalMusic.ets

@@ -13041,9 +13041,10 @@ export struct LocalMusic {
                   .visibility(more.id === 26 ? Visibility.Visible : Visibility.None)
                   .selected(this.spectrumModeIndex)
                   .value(['柱状', '波形', '圆形', '粒子', '脉冲', '镜像柱', '影子柱', '轨道线', '点阵', '星爆'][this.spectrumModeIndex])
-                  .onSelect(async (index: number, _text?: string) => {
+                  .onSelect((index: number, _text?: string) => {
                     this.spectrumModeIndex = index;
-                    PreferencesUtil.put('spectrumModeIndex', this.spectrumModeIndex);
+                    // 使用同步方法保存,确保立即生效
+                    PreferencesUtil.putSync('spectrumModeIndex', this.spectrumModeIndex);
                     AppStorage.setOrCreate<number>('spectrumMode', this.spectrumModeIndex);
                     const modeNames = ['柱状', '波形', '圆形', '粒子', '脉冲', '镜像柱', '影子柱', '轨道线', '点阵', '星爆'];
                     Logger.info('heanup-LocalMusic', '频谱特效已切换为: ' + modeNames[index]);