音声波形script

方法だけメモ。考察とかはブログの方で。

音声波形の取得

ローカル変数bufに音声データのテーブルが、sizeに実際に取得した配列のサイズが入る。

local buf = {}
local size = 32
size = obj.getaudio(buf, "audiobuffer", "spectrum", size)

音声波形を以降のフレームに残す(上限を設ける版)

[レイヤー][いくつ前のデータか]を添え字としたグローバルな多次元配列を作り、波形データを記録する。

レイヤーを添え字としているのは複数同時に使用した場合に別々にデータを保持するため。オブジェクトごとに被らない数字を使うのであればレイヤーでなくてもよい。

「いくつ前のデータか」と同時にフレーム数も記録しているのは、動画作成時の再生チェックなどではコマ飛びが発生し、1つ前のデータが1フレーム前のデータとは限らないため。記録しておけば何フレーム飛んだか分かるため、描画にも生かせる。

--引き継ぎ用テーブル
local ol = obj.layer
inheritWaveform = obj.time~=0 and inheritWaveform or {}
inheritWaveform[ol] = obj.time~=0 and inheritWaveform[ol] or {}
local ibuf = inheritWaveform[ol]

--音声データを取得
local buf = {}
local size = 32
size = obj.getaudio(buf, "audiobuffer", "spectrum", size)
 
--保持するデータ数
local limit = 10
--配列の一番最初に現フレームのデータを入れ、残りを後ろに1つずつずらす
table.insert(ibuf, 1, {obj.frame, buf})
--ibuf の長さが limit より大きければ、後ろから削除していく
for i=1, #ibuf-limit do
    table.remove(ibuf)
end

--使い方
--ibuf[いくつ前のデータか][1:データのフレーム番号, 2:データ]
ibuf[1][1] --最新のデータのフレーム番号(=obj.frame)
ibuf[4][1] --3つ前に処理したデータのフレーム番号
ibuf[1][2] --最新の音声データの配列
ibuf[5][2][32] --4つ前の音声データ配列の32番目の周波数帯域の音量

全フレームの音声波形データを中間ファイルに出力する

整数値を、その整数値が文字コードとなる文字列に変換した方が容量を節約できるが、少々面倒。 FIXME

software/aviutl/inherit_waveform.txt · 最終更新: 2017/05/26 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0