TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua

 找回密码
 新人加入
查看: 6492|回复: 0
打印 上一主题 下一主题

[特效算法] 波形頻譜 [复制链接]

Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

跳转到指定楼层
楼主
发表于 2012-8-25 11:09:08 |显示全部楼层 |倒序浏览
嘛 ASS生成太大了 用處不大
只是結合這個 也比較好理解 頻譜是怎麼一回事
有興趣的可以寫一些 自己的頻譜
思路上建議不用拘泥于傳統頻譜 水波式的發散頻譜 或者是某種圖形 四周的點作為波形點 不規則拉升
  1. from tcaxPy import *

  2. from util.tcAudio import *

  3. SPECHEIGHT = 127   #頻譜高度
  4. SPECWIDTH = 300    #頻譜寬度(太寬了很卡 測試可以更小一點 到500 我就crash沒壓出來。。。)
  5. BANDS = 300        #柱狀條數(波形頻譜和寬度一樣)


  6. def Spectrum(fft):      # convert fft data to graph

  7.     bars = []

  8.     b0 = 0

  9.     for x in range(BANDS):

  10.         peak = 0        # peak of a certain bar

  11.         b1 = pow(2, x * 10.0 / (BANDS - 1))

  12.         if b1 > 1023:

  13.             b1 = 1023

  14.         if b1 <= b0:

  15.             b1 = b0 + 1    # make sure it uses at least 1 FFT bin

  16.         while b0 < b1:

  17.             if peak < fft[1 + b0]:

  18.                 peak = fft[1 + b0]

  19.             b0 += 1

  20.         y = int(sqrt(peak) * 3 * SPECHEIGHT - 4)   # scale it (sqrt to make low values more visible)

  21.         if y > SPECHEIGHT:

  22.             y = SPECHEIGHT     # cap it

  23.         bars.append(y)

  24.     return bars

  25. def tcaxPy_User():


  26.     file_name = GetVal(val_OutFile) + '.ass'

  27.     ass_header = GetVal(val_AssHeader)

  28.     ASS_FILE = CreateAssFile(file_name, ass_header)

  29.     tcAudioInit()

  30.     channel = tcAudioOpen('h.mp3')      # 此處修改 音頻文件名

  31.     freq = tcAudioGetFreq(channel)      # usually 44100 Hz

  32.     duration = tcAudioGetDuration(channel)

  33.     num = int(duration * freq / 2048)

  34.     hStr1 = "{\p1}m 0 0 l 0 -70 l 1 0 l 0 70 l 0 0"
  35.     hStr2 = "{\p1}m 0 0 l 0 -50 l 1 0 l 0 50 l 0 0"

  36.     for i in range(num):

  37.         ASS_BUF = []


  38.         fft = tcAudioGetFFT(channel, 2048)

  39.         bars = Spectrum(fft)

  40.         bar_width = int(SPECWIDTH / BANDS)

  41.         count = len(bars)

  42.         for j in range(count):

  43.             start = i * 100 * 2048 / freq

  44.             end = (i + 1) * 100 * 2048 / freq

  45.             x = (1280 - SPECWIDTH) / 2 + bar_width * j

  46.             y = 500

  47.             FSC = fsc((bar_width) * 100, bars[j] * 2)

  48.             CLR1 = color1("FFBD00") + alpha1(0)   

  49.             CLR2 = color1("FFFFFF") + alpha1(119)   
  50.             ass_main(ASS_BUF, SubL(start, end, 0, Pix_Style), an(7) +blur(0.8) + pos(x, y) + FSC + CLR1, hStr1)
  51.             ass_main(ASS_BUF, SubL(start, end, 1, Pix_Style), an(7) +blur(0.8) + pos(x, y) + FSC + CLR2, hStr2)
  52.         WriteAssFile(ASS_FILE, ASS_BUF)     # write the buffer in memory to the file

  53.         progress(i + 1, num)

  54.     tcAudioFin()

  55.     FinAssFile(ASS_FILE)
复制代码
1

查看全部评分

您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-5-5 01:07

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH