FileWriter_WMA オブジェクト

オブジェクトの作成メソッド: Application.CreateFileWriter

WMA ファイルを作成するオブジェクト。


■プロパティ

CodecFormat (object)
使用する圧縮フォーマット。これにオブジェクトを代入することでフォーマットを設定します。

CodecInfoList (object)
CodecInfo オブジェクトをまとめているオブジェクト。

■メソッド

Process
圧縮ファイルを作成します。

■ファイル作成の手順

ファイル作成の手順はおよそこのようになります:

  1. 入力 SoundClip オブジェクトを作成する。
  2. 必要なら SoundClip.Labels, SoundClip.Text を変更する。
  3. FileWriter_WMA オブジェクトを作成する。
  4. 圧縮フォーマット (CodecFormat) のリストを取得する。
  5. FileWriter_WMA.CodecFormat プロパティに選んだフォーマットをセットする。
  6. FileWriter_WMA.Process メソッドを実行する。
例 (JScript)
// 入力音声 (選択範囲)
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");

例 (VBScript)
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 オブジェクトのテキスト情報を改変します。

例 (JScript)
// 入力音声 (選択範囲)
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);

例 (VBScript)
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