可爱老人网

 找回密码
 注册会员
搜索
楼主: 肖燕

梅花摄影集萃:《梅花赋》

[复制链接]
发表于 2026-4-15 14:05 | 显示全部楼层
欣赏老师新作,点赞
 楼主| 发表于 2026-4-15 14:46 | 显示全部楼层
晚霞美景 发表于 2026-4-15 14:05
欣赏老师新作,点赞

谢谢老师的到访点评。向您问好!
发表于 2026-4-15 14:51 | 显示全部楼层
欣赏老友精美音画制作!美不胜收!大赞!向您学习啦!遥祝春安!
 楼主| 发表于 2026-4-15 18:31 | 显示全部楼层
本帖最后由 肖燕 于 2026-4-15 18:35 编辑
老知青自强不息 发表于 2026-4-15 14:51
欣赏老友精美音画制作!美不胜收!大赞!向您学习啦!遥祝春安!

谢谢朋友的到访鼓励。我现在年龄大了,腿脚也不行了,就想着将以往拍摄的照片集结收藏。要制作得比较满意,很花时间。
发表于 2026-4-15 21:40 | 显示全部楼层
肖燕 发表于 2026-4-15 09:32
谢谢真真的到访点评。我现在年龄大了,腿脚也不行了,就想着将以往拍摄的照片集结收藏。要制作得比较满意 ...

原创音画制作费时费力,不要太辛苦了。
 楼主| 发表于 2026-4-15 22:39 | 显示全部楼层
真真 发表于 2026-4-15 21:40
原创音画制作费时费力,不要太辛苦了。

因为要长久保存,所以必须用心制作,多花些时间就是。
发表于 2026-4-16 22:23 | 显示全部楼层
肖燕 发表于 2026-4-15 22:39
因为要长久保存,所以必须用心制作,多花些时间就是。

您的作品都有保存价值,注意休息眼睛。

点评

谢谢关心。我会注意的。  发表于 2026-4-16 22:28
发表于 2026-4-17 19:18 | 显示全部楼层
全屏欣赏
发表于 2026-4-17 19:24 | 显示全部楼层
本帖最后由 九品莲花 于 2026-4-17 19:26 编辑

尊敬的肖燕老师,我非常欣赏这幅音画,很漂亮!只是帖子位置偏右,盖住头像,影响帖子美观,我改了一下数据,您如果不介意按下面代码重新编辑一下主帖。代码如下:

  1. <font size="2"><div style="WIDTH: 900px; POSITION: relative;left:-155px; TOP:-30px;">

  2. <style>
  3. #papa { margin: 150px 0 20px calc(50% - 521px); background:#800 url(' ')no-repeat center/cover;width: 1050px; height: 788px;   box-shadow: 3px 3px 6px gray; overflow: hidden; z-index: 1; position: relative; display: grid; place-items: center; }
  4. #mdiv {z-index: 10;
  5.         --size: 0px;
  6.         --color: teal;
  7.         position: relative;
  8.         left: calc(-35% - var(--size) / 2);
  9.         top: 330var(--size);
  10.         height: var(--size);
  11.         display: grid;
  12.         place-items: center;
  13.         animation: rot 8s linear infinite ;
  14.         cursor: pointer;
  15. }
  16. #mdiv::before, #mdiv::after {
  17.         position: absolute;
  18.         content: '';
  19.         width: 0;
  20.         height: 0;
  21.         border-style: solid;
  22.         border-width: calc(var(--size) / 2) calc(var(--size) / 2 - 35px);
  23.         border-color: var(--color) transparent;
  24.       
  25.         border-radius: 100% 100% 100% 100%;
  26.         filter:drop-shadow(#000 1px 0 0)drop-shadow(#000 0 1px 0)drop-shadow(#000 -1px 0 0) drop-shadow(#000 0 -1px  0);
  27. }
  28. #mdiv::after { transform: rotate(90deg) }
  29. @keyframes rot { 100% { transform: rotate(360deg);filter:hue-rotate(360deg); } }
  30. #vid {z-index: 2;
  31.         position: absolute;
  32.         width: 100%;
  33.         height: 100%;
  34.         object-fit: cover;
  35.         -webkit-mask-image: radial-gradient(black 10% ,transparent 90%);
  36. }
  37. #vido {z-index: 1;
  38.         position: absolute;
  39.         width: 100%;
  40.         height: 100%;
  41.         object-fit: cover;
  42.         }
  43. #fullscreen { position: absolute; top: 50px; right:30px;font: normal 2em/0em 楷体;color:#000; opacity: 1; cursor: pointer; z-index: 111}
  44. </style>
  45. <div id="papa">
  46. <div id="mdiv" title=""></div>
  47. <div data-lrc=" " id="lrc" title="歌词显示"> </div>   
  48. <span id="fullscreen">全屏欣赏</span>
  49. <audio id="aud" src="https://music.163.com/song/media/outer/url?id=2080090551
  50. .mp3"                                       autoplay loop></audio>
  51. <video id="vid" src="" autoplay loop muted></video>
  52. <video id="vido" src="https://ali2.a.kwimgs.com/upic/2026/04/13/13/BMjAyNjA0MTMxMzU5MDFfMTY5ODU5NjIyNl8xOTI5ODI2NzYyMjNfMl8z_b_B95977b52b317a957ecae3757a6ab4b6c.mp4    " autoplay loop muted></video>
  53. </div>
  54.    
  55. <script>
  56. mdiv.onclick = () => aud.paused ?( aud.play(),vid.play(),vido.play()):(aud.pause(),vid.pause(),vido.pause());
  57. mdiv.style.animationPlayState = aud.paused ? 'paused' : 'running';
  58. aud.addEventListener('playing', () =>mdiv.style.animationPlayState = 'running');
  59. aud.addEventListener('pause', () =>mdiv.style.animationPlayState = 'paused');
  60. let fs = true;
  61.         fullscreen.onclick = () => {
  62.                 fs ? (fullscreen.innerText = '退出全屏', papa.requestFullscreen()) : (fullscreen.innerText = '全屏欣赏', document.exitFullscreen());
  63.                 fs = !fs;
  64.         };
  65. </script>
  66. <style type="text/css">
  67. #lrc {--state: paused;--motion: cover2;--tt: 2s;--bg: linear-gradient(0deg, #880000, #880000, #880000);
  68. position: absolute;z-index: 6;left: 50%; top: 85%;transform: translate(-50%);font:normal 2em 华文新魏; font-weight:400;color: #000080;white-space: pre;-webkit-background-clip: text;filter:drop-shadow(#FFFFFF 1px 0 0)drop-shadow(#FFFFFF 0 1px 0)drop-shadow(#FFFFFF -1px 0 0) drop-shadow(#FFFFFF 0 -1px  0);}
  69. #lrc::before {position: absolute;content: attr(data-lrc);width: 95%; height: 95%;color: transparent;overflow: hidden;white-space: pre;background: var(--bg);clip-path: inset(0 100% 0 0);-webkit-background-clip: text;animation: var(--motion) var(--tt) linear forwards;animation-play-state: var(--state);}
  70. @keyframes cover1{ to { clip-path: inset(0 0 0 0); } }@keyframes cover2 { to { clip-path: inset(0 0 0 0); } }
  71. </style>
  72. <script >
  73. (function() {
  74. /*原始lrc歌词*/
  75. let lrcStr = `[00:06.00] 作词 : 安华
  76. [00:12.00] 作曲 : 王艺歌
  77. [00:29.88]几度春风里  看花谢花开
  78. [00:38.14]含羞的春蕾  令人爱
  79. [00:46.40]这前世的缘  怎能不在
  80. [00:54.69]今生呵护你  永不残 败
  81. [01:03.01]倘若风雨 他日来
  82. [01:11.24]枝叶凋零 还有 傲骨在
  83. [01:19.51]即便寒 冷  雪花飞
  84. [01:27.76]我伴 梅花  报春来
  85. [01:56.82]一抹斜阳下  谁婀娜多彩
  86. [02:05.12]百媚千姿  涂粉黛
  87. [02:13.21]俏不争春  立两岸
  88. [02:21.62]花香直挂  云天 外
  89. [02:29.89]倘若风雨 他日来
  90. [02:38.10]枝叶凋零 还有 傲骨在
  91. [02:46.37]即便寒冷  雪花飞
  92. [02:54.70]我伴 梅花 报春 来
  93. [03:02.97]倘若风雨 他日来
  94. [03:11.24]枝叶凋零 还有傲骨在
  95. [03:19.50]即便寒冷  雪花飞
  96. [03:27.83]我伴 梅花  报春 来
  97. [03:36.15]我伴 梅花  报春 来
  98. `;
  99. /*变量 :mKey - 当前歌词索引;mFlag :调用关键帧动画索引;averAdd :平均值补偿*/
  100. let mKey = 0, mFlag = true, averAdd = 0.3;
  101. /*函数 :获取每句歌词用时,歌词用时若超过平均值则取平均值,最后一句歌词则取平均值*/
  102. let lrcTime = (ar) => { let tmpAr = [];
  103. for(j = 0; j <ar.length - 1; j ++) { if(j !== ar.length - 1) tmpAr[j] = parseFloat((ar[j+1][0] - ar[j][0]).toFixed(1));}
  104. let aver = parseInt(tmpAr.reduce((a,b) => a + b) / (tmpAr.length - 1)) + averAdd;
  105. tmpAr.push(aver);
  106. tmpAr.forEach((item,key) => {ar[key][2] = item > aver ? aver : item; });
  107. return ar;};
  108. /*函数 :从原始lrc歌词获取信息并存入 n*3 数组*/
  109. let getLrcAr = (text) => {
  110.        let lrcAr = [];
  111.         let calcRule = [60,1,0.001];
  112.        for(x of text.split('\n')) {
  113.               let ar = [];
  114.                let re = /\d+[\.:]\d+([\.:]\d+)?/g;
  115.                let geci = x.replace(re,'');
  116.                if(geci) {
  117.                        geci = geci.replace(/[\[\]\'"\t,]s?/g,'');
  118.                         let time = x.match(re);
  119.                        if(time != null) {
  120.                                for(y of time) {
  121.                                         let tmp = y.match(/\d+/g);
  122.                                        let sec = 0;
  123.                                        for(z in tmp) sec += tmp[z] * calcRule[z];
  124.                                        ar[0] = [parseFloat(sec.toFixed(2)), geci];
  125.                                        lrcAr.push(ar[0]);
  126.                                 }
  127.                        }
  128.                 }
  129.         }
  130.         lrcAr.sort((a,b)=> a[0] - b[0]);
  131.         return(lrcTime(lrcAr));
  132. };
  133. /*函数 :模拟显示同步歌词*/
  134. let showLrc = (time) => {
  135.         let name = mFlag ? 'cover1' : 'cover2';
  136.        lrc.innerHTML = lrcAr[mKey][1];
  137.         lrc.dataset.lrc = lrcAr[mKey][1];
  138.         lrc.style.setProperty('--motion', name);
  139.         lrc.style.setProperty('--tt', time + 's');
  140.         lrc.style.setProperty('--state', 'running');
  141.         mKey += 1;
  142.        mFlag = !mFlag;
  143. };
  144. /*函数 :处理当前歌词索引 mKey*/
  145. let calcKey = () => {
  146.         for (j = 0; j < lrcAr.length; j++) {
  147.                 if (aud.currentTime <= lrcAr[j][0]) {
  148.                         mKey = j - 1;
  149.                         break;
  150.                }
  151.       }
  152.        if (mKey < 0) mKey = 0;
  153.         if (mKey > lrcAr.length - 1) mKey = lrcAr.length - 1;
  154.        let time = lrcAr[mKey][2] - (aud.currentTime - lrcAr[mKey][0]);
  155.         showLrc(time);
  156. };
  157. /*格式化时间信息*/
  158. let toMin = (val) => {
  159.       if (!val) return '00:00';
  160.       val = Math.floor(val);
  161.        let min = parseInt(val / 60),
  162.         sec = parseFloat(val % 60);
  163.        if (min < 10) min = '0' + min;
  164.         if (sec < 10) sec = '0' + sec;
  165.         return min + ':' + sec;
  166. }
  167. /*函数 :关键帧动画状态切换*/
  168. let mState = () => aud.paused ? (lrc.style.setProperty('--state','paused'),mdiv.style.animationPlayState = 'paused') : (lrc.style.setProperty('--state','running'),mdiv.style.animationPlayState = 'running');
  169. /*监听播放进度*/
  170. aud.addEventListener('timeupdate', () => {
  171.         for (j = 0; j < lrcAr.length; j++) {
  172.                 if (aud.currentTime >= lrcAr[j][0]) {
  173.                         cKey = j;
  174.                         if (mKey === j) showLrc(lrcAr[j][2]);
  175.          else continue;
  176.        }
  177.     }
  178. });
  179. aud.addEventListener('pause', () => mState());/*监听暂停事件*/
  180. aud.addEventListener('play', () => mState());/*监听播放事件*/
  181. aud.addEventListener('seeked', () => calcKey());/*监听查询事件*/
  182. let lrcAr = getLrcAr(lrcStr); /*获得歌词数组*/
  183. })();
  184. </script></font>
复制代码


 楼主| 发表于 2026-4-17 19:54 | 显示全部楼层
九品莲花 发表于 2026-4-17 19:24
尊敬的肖燕老师,我非常欣赏这幅音画,很漂亮!只是帖子位置偏右,盖住头像,影响帖子美观,我改了一下数据 ...

谢谢老师的指导。我对代码音画的知识了解甚少,做得也少,纯属“照猫画虎”的水平。这次的制作还是请教了山水人家老师才完成的。当时我调数据的时候,感觉没有盖住头像,现在看是盖住了,也不知怎么回事。我现在按您告知的代码进行修改,非常感谢您。我知道您对代码音画懂得很多,还希望您以后多给我指点。也希望您能在影音版发贴,让我们的影音版块更繁荣!

点评

谢谢您的宽容大度  发表于 2026-4-17 20:06
        
下一页 发布主题 快速回复

手机版|公众号|小黑屋|可爱老人网

GMT+8, 2026-6-21 18:46

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表