オブジェクトの作成メソッド:
WMA ファイルを作成するオブジェクト。
ファイル作成の手順はおよそこのようになります:
// 入力音声 (選択範囲)
var clip = Application.ActiveDocument.CreateSoundClip();
// FileWriter_WMA オブジェクトを作成する.
var writer = Application.CreateFileWriter("wma");
var i, ci, ci_name, fmts;
// 標準 WMA コーデックを見つける.
for (i = 0; i < writer.CodecInfoList.Count; ++i) {
ci_name = writer.CodecInfoList(i).Name.toLowerCase();
if (ci_name.indexOf("windows media audio") >= 0) {
if (ci_name.indexOf("professional") >= 0)
continue;
if (ci_name.indexOf("lossless") >= 0)
continue;
if (ci_name.indexOf("voice") >= 0)
continue;
ci = writer.CodecInfoList(i);
break;
}
}
// 適当な圧縮フォーマットを選ぶ.
fmts = ci.GetCodecFormats(44100, 2);
fmts = fmts.toArray();
for (i in fmts) {
if (Math.round(fmts[i].Bitrate / 1000) == 128) {
// フォーマットをセットする.
writer.CodecFormat = fmts[i];
break;
}
}
Script.Echo("codec: " + ci.Name);
Script.Echo("format: " + writer.CodecFormat.Desc);
// ファイル作成
writer.Process(clip, "D:\\Sound Output\\test1.wma");
Dim clip, writer
' 入力音声 (選択範囲)
Set clip = Application.ActiveDocument.CreateSoundClip
' FileWriter_WMA オブジェクトを作成する.
Set writer = Application.CreateFileWriter("wma")
Dim ci, ci_name, fmts, f
' 標準 WMA コーデックを見つける.
For Each ci In writer.CodecInfoList
ci_name = ci.Name
If InStr(1, ci_name, "windows media audio", 1) = 0 Then
ci = Empty
Else
If InStr(1, ci_name, "professional", 1) >= 1 Then
ci = Empty
ElseIf InStr(1, ci_name, "lossless", 1) >= 1 Then
ci = Empty
ElseIf InStr(1, ci_name, "voice", 1) >= 1 Then
ci = Empty
End If
End If
If Not IsEmpty(ci) Then Exit For
Next
' 適当な圧縮フォーマットを選ぶ.
fmts = ci.GetCodecFormats(44100, 2)
For Each f In fmts
If Round(f.Bitrate / 1000) = 128 Then
' フォーマットをセットする.
writer.CodecFormat = f
Exit For
End If
Next
Script.Echo "codec: " & ci.Name
Script.Echo "format: " & writer.CodecFormat.Desc
' ファイル作成
writer.Process clip, "D:\Sound Output\test1.wma"
ラベルを同期歌詞 (Synchronized Lyrics) として添付するには以下のように SoundClip オブジェクトのテキスト情報を改変します。
// 入力音声 (選択範囲)
var clip = Application.ActiveDocument.CreateSoundClip();
var ap = clip.Text.GetAppPrivate();
ap = ap.toArray();
var i;
for (i = 0; i < ap.length; ++i) {
if (ap[i].substring(0, 7).toUpperCase() == "SYNLYR=")
break;
}
// 歌詞の場合 1.
ap[i] = "SYNLYR=1";
// 関数の実体は Text.SetAppPrivate メソッドの項を参照.
vararg_call(clip.Text, "SetAppPrivate", ap);
Dim clip, ap, i
' 入力音声 (選択範囲)
Set clip = Application.ActiveDocument.CreateSoundClip
ap = clip.Text.GetAppPrivate
For i = LBound(ap) To UBound(ap)
If StrComp(Left(ap(i), 7), "SYNLYR=", 1) = 0 Then
Exit For
End If
Next
If i > UBound(ap) Then
' 配列要素を追加する.
ReDim Preserve ap(i)
End If
' 歌詞の場合 1.
ap(i) = "SYNLYR=1"
' 手続きの実体は Text.SetAppPrivate メソッドの項を参照.
vararg_call clip.Text, "SetAppPrivate", ap
Sazanami Help
Copyright (c) 2023 Narumi Watanabe.
All Rights Reserved.