在Sound forge编写脚本
本文关键字:脚本 forge Sound | 更新日期: 2023-09-27 18:08:28
我是一个全新的声音锻造脚本。我需要混合两个。wav文件。
例如,1.wav文件与倒置的 2.wav文件混合。我需要得到混合输出文件的统计信息。
所有通道的最小样本值、最大样本值等统计信息。
下面是混合两个.wav文件的代码。
有没有人可以帮助我在c#中编写上述脚本?或者如果有人可以共享一个文档与标准API的声音伪造脚本也将是有帮助的。
using System;
using System.IO;
using System.Windows.Forms;
using System.Collections.Generic;
using SoundForge;
public class EntryPoint
{
public void Begin(IScriptableApp app)
{
//choose the first file.
OpenFileDialog openFile = new OpenFileDialog();
openFile.Title = "Open the input file.";
String inputFilePath = String.Empty;
if (openFile.ShowDialog() == DialogResult.OK)
{
inputFilePath = openFile.FileName.ToString();
}
OpenFileDialog openOutputFile = new OpenFileDialog();
openOutputFile.Title = "Open the output file.";
String outputFilePath = String.Empty;
if (openOutputFile.ShowDialog() == DialogResult.OK)
{
outputFilePath = openOutputFile.FileName.ToString();
}
ISfFileHost backFile = app.OpenFile(outputFilePath, true, false);
ISfFileHost file = app.OpenFile(inputFilePath, false, false);
long fileLen = file.Length;
SfAudioSelection asel = new SfAudioSelection(file);
file.DoMixReplace(SfAudioSelection.All, 1, 1, backFile, new SfAudioSelection(0, file.Length), null, null, EffectOptions.EffectOnly | EffectOptions.WaitForDoneOrCancel);
backFile.Close(CloseOptions.DiscardChanges);
}
public void FromSoundForge(IScriptableApp app)
{
ForgeApp = app; //execution begins here
app.SetStatusText(String.Format("Script '{0}' is running.", Script.Name));
Begin(app);
app.SetStatusText(String.Format("Script '{0}' is done.", Script.Name));
}
public static IScriptableApp ForgeApp = null;
public static void DPF(string sz) { ForgeApp.OutputText(sz); }
public static void DPF(string fmt, params object[] args) {
ForgeApp.OutputText(String.Format(fmt, args)); }
} //EntryPoint
使用下面的代码可以实现这个需求。
的要求是:1.wav文件与倒置的2.wav文件混合。获取结果混合输出文件的统计信息。
所有通道的最小样本值、最大样本值等统计信息。
using System;
using System.IO;
using System.Windows.Forms;
using System.Collections.Generic;
using SoundForge;
public class EntryPoint
{
public void Begin(IScriptableApp app)
{
string strOutFile = GETARG("outfile", "path to save file at");
if ("" == strOutFile)
{
MessageBox.Show("invald output path");
return;
}
OpenFileDialog openFile = new OpenFileDialog();
openFile.Title = "Open the input file.";
////string to hold the path of input file.
String strFile1 = String.Empty;
if (openFile.ShowDialog() == DialogResult.OK)
{
strFile1 = openFile.FileName.ToString();
}
OpenFileDialog openOutputFile = new OpenFileDialog();
openOutputFile.Title = "Open the output file.";
////string to hold the path of output file.
String strFile2 = String.Empty;
if (openOutputFile.ShowDialog() == DialogResult.OK)
{
strFile2 = openOutputFile.FileName.ToString();
}
ISfFileHost fhOne = app.OpenFile(strFile1, true, true);
if (null == fhOne)
return;
ISfFileHost fhTwo = app.OpenFile(strFile2, true, true);
if (null == fhTwo)
{
fhOne.Close(CloseOptions.DiscardChanges);
return;
}
ISfFileHost fhOut = app.NewFile(fhOne.DataFormat, false);
fhOut.ReplaceAudio(new SfAudioSelection(0, 0), fhOne, new SfAudioSelection(fhOne));
fhOut.DoEffect("Invert/Flip", 0, new SfAudioSelection(fhOut), EffectOptions.EffectOnly);
fhOut.WaitForDoneOrCancel();
fhOut.MixAudio(new SfAudioSelection(fhOut), 1.0, 1.0, fhTwo, new SfAudioSelection(fhTwo));
fhOut.WaitForDoneOrCancel();
fhOut.SaveAs(strOutFile, fhOne.SaveFormat.Guid, "Default Template", RenderOptions.RenderOnly);
fhOut.WaitForDoneOrCancel();
fhOne.Close(CloseOptions.DiscardChanges);
fhTwo.Close(CloseOptions.DiscardChanges);
SfAudioStatistics[] stat = new SfAudioStatistics[fhOut.Channels];
fhOut.UpdateStatistics(SfAudioSelection.All);
stat[0] = fhOut.GetStatistics(0);
stat[1] = fhOut.GetStatistics(1);
stat[2] = fhOut.GetStatistics(2);
stat[3] = fhOut.GetStatistics(3);
stat[4] = fhOut.GetStatistics(4);
stat[5] = fhOut.GetStatistics(5);
stat[6] = fhOut.GetStatistics(6);
stat[7] = fhOut.GetStatistics(7);
MessageBox.Show(String.Format("Max Sample Value Channel 1 - {0},Channel 2 - {1},Channel 3 - {2},Channel 4 - {3},Channel 5 - {4},Channel 6 - {5},Channel 7 - {6},Channel 8 - {7}", stat[0].MaxValue, stat[1].MaxValue, stat[2].MaxValue, stat[3].MaxValue, stat[4].MaxValue, stat[5].MaxValue, stat[6].MaxValue, stat[7].MaxValue));
MessageBox.Show(String.Format("Min Sample Value Channel 1 - {0},Channel 2 - {1},Channel 3 - {2},Channel 4 - {3},Channel 5 - {4},Channel 6 - {5}, Channel 7 - {6}, Channel 8 - {7}", stat[0].MinValue, stat[1].MinValue, stat[2].MinValue, stat[3].MinValue, stat[4].MaxValue, stat[5].MinValue, stat[6].MinValue, stat[7].MinValue));
System.Diagnostics.Process curr = System.Diagnostics.Process.GetCurrentProcess();
}
public void FromSoundForge(IScriptableApp app)
{
ForgeApp = app; //execution begins here
app.SetStatusText(String.Format("Script '{0}' is running.", Script.Name));
Begin(app);
app.SetStatusText(String.Format("Script '{0}' is done.", Script.Name));
}
public static IScriptableApp ForgeApp = null;
public static void DPF(string sz) { ForgeApp.OutputText(sz); }
public static void DPF(string fmt, object o) { ForgeApp.OutputText(String.Format(fmt, o)); }
public static void DPF(string fmt, object o, object o2) { ForgeApp.OutputText(String.Format(fmt, o, o2)); }
public static void DPF(string fmt, object o, object o2, object o3) { ForgeApp.OutputText(String.Format(fmt, o, o2, o3)); }
public static string GETARG(string k, string d) { string val = Script.Args.ValueOf(k); if (val == null || val.Length == 0) val = d; return val; }
public static int GETARG(string k, int d) { string s = Script.Args.ValueOf(k); if (s == null || s.Length == 0) return d; else return Script.Args.AsInt(k); }
public static bool GETARG(string k, bool d) { string s = Script.Args.ValueOf(k); if (s == null || s.Length == 0) return d; else return Script.Args.AsBool(k); }
} //EntryPoint