JavaScript,Pascal 音声波形編集スクリプトの組み方
Posted: 2015年10月18日(日) 02:00
UTAU音源という、3~5秒程度の短く大量の人の肉声が収録されたwavファイルを効率よく加工したく、
手元にあったFL studioという作曲ソフトウェアの
EDISONという音声波形編集プラグインのスクリプト機能が使えるのではないかと考え
作成しています。
具体的にやろうとしていることは
0.音声ファイルのノーマライズ(最大化)
1.3~5秒程度の音声ファイルの発声開始手前の空白部分をカット
2.さらにそのファイルを頭から1.8秒でカット
3.0~2の工程を複数ファイルに対して一括操作
(おそらくこのツールで複数ファイルの一括操作は出来ないようなので、
工程0~2が作成でき次第、一ファイルずつ手動操作で取り組もうと考えています)
aikeの日記 (id:aike) http://d.hatena.ne.jp/aike/20101016
こちらでサンプルに出していただいているJavaSscriptの例文と考え方を編集することで、
工程の1、2は実現できたのですが、
工程、0.音声ファイルのノーマライズ(最大化)でつまずいております。
リファレンスにある、二つの関数
または、
この二つのどちらかの関数を使うのではないかと推測し、試していますが、そもそもコンパイルを通せません、
せめてNormalize関連の関数で動作するJavaScriptのサンプルコードがあればと思い探したのですが見つけられず、
FL Studio内のその他のサンプルコードも参照しているのですが、
Normalize関連の関数が記述されているはファイルは全てPascalで表記されており、
私の読解力、またはそれ以前の基礎知識の不足のため、読み替える事ができませんでした。
[1] 質問文
[1.1]したい事:EDISON上でJavaScriptの構文で音声ファイルのノーマライズ(最大化、正規化)
[1.2] プログラムコード:後述
[1.3] エラーメッセージ:後述
[1.4] 今は、Normalize系の関数が使用されているpascalのサンプルスクリプトを読み替え、
シンプルにノーマライズだけをするJavaScriptのサンプルを作成しようとしてますが、
基礎知識がないまま闇雲に試みているためエラーを無くすことができておりません。
問題解決に必要そうな道筋、基本的な考え方などを教えていただきたいです。
[2] 環境
[2.1] OS : Windows7 32bit
[2.2] コンパイラ名? :EDISON in FLstudio11有償エディション
体験版の最新バージョン12はこちらです:http://www.image-line.com/downloads/fls ... nload.html
[3] その他
・C言語の知識は初歩の表層をなぞったことがある程度です。Javaは舐めた程度 JavaScript pascal は今回初めて使用します
参考にしている主なページ
FL StudioとJavaScriptでサウンドプログラミング - aikeの日記 (id:aike) http://d.hatena.ne.jp/aike/20101016
FL Studio @ ウィキ - Edison #atwiki http://www42.atwiki.jp/fruity/pages/118.html
FL Studio @ ウィキ - Edison スクリプト・ツール #atwiki http://www42.atwiki.jp/fruity/pages/133.html
同梱されているサンプルファイル例
pascal ファイル名 Ring modulation.edscript
読み替えて自作してみた JavaScript
コンパイルエラーメッセージ:There was an error compiling the script.
";" expected but "NormSample" found at line 3: TSample NormSample;
[codeJScript]
script "Normalize" language "javascript";
//20151017
TSample NormSample;
EditorSample.LoadFromFile(ScriptPath+'HelloWorld.wav');
NormSample = TSample.Create;
NormSample.LoadFromClipboard;
EditorSample.NormalizeFormat(NormSample);
[/code]
EDISONの操作など不明な点がありましたらご指摘ください、
よろしくお願いします。
手元にあったFL studioという作曲ソフトウェアの
EDISONという音声波形編集プラグインのスクリプト機能が使えるのではないかと考え
作成しています。
具体的にやろうとしていることは
0.音声ファイルのノーマライズ(最大化)
1.3~5秒程度の音声ファイルの発声開始手前の空白部分をカット
2.さらにそのファイルを頭から1.8秒でカット
3.0~2の工程を複数ファイルに対して一括操作
(おそらくこのツールで複数ファイルの一括操作は出来ないようなので、
工程0~2が作成でき次第、一ファイルずつ手動操作で取り組もうと考えています)
aikeの日記 (id:aike) http://d.hatena.ne.jp/aike/20101016
こちらでサンプルに出していただいているJavaSscriptの例文と考え方を編集することで、
工程の1、2は実現できたのですが、
工程、0.音声ファイルのノーマライズ(最大化)でつまずいております。
リファレンスにある、二つの関数
function NormalizeFromTo(x1, x2: integer; Vol: single; OnlyIfAbove: boolean = FALSE): single;
//Normalize the wave between sample positions x1 and x2 (inclusive)
または、
procedure NormalizeFormat(Source: TSample; Mode: integer = nfAll);
//Change the format of this sample to be compatible with the format of the source sample. See the mode constants above
この二つのどちらかの関数を使うのではないかと推測し、試していますが、そもそもコンパイルを通せません、
せめてNormalize関連の関数で動作するJavaScriptのサンプルコードがあればと思い探したのですが見つけられず、
FL Studio内のその他のサンプルコードも参照しているのですが、
Normalize関連の関数が記述されているはファイルは全てPascalで表記されており、
私の読解力、またはそれ以前の基礎知識の不足のため、読み替える事ができませんでした。
[1] 質問文
[1.1]したい事:EDISON上でJavaScriptの構文で音声ファイルのノーマライズ(最大化、正規化)
[1.2] プログラムコード:後述
[1.3] エラーメッセージ:後述
[1.4] 今は、Normalize系の関数が使用されているpascalのサンプルスクリプトを読み替え、
シンプルにノーマライズだけをするJavaScriptのサンプルを作成しようとしてますが、
基礎知識がないまま闇雲に試みているためエラーを無くすことができておりません。
問題解決に必要そうな道筋、基本的な考え方などを教えていただきたいです。
[2] 環境
[2.1] OS : Windows7 32bit
[2.2] コンパイラ名? :EDISON in FLstudio11有償エディション
体験版の最新バージョン12はこちらです:http://www.image-line.com/downloads/fls ... nload.html
[3] その他
・C言語の知識は初歩の表層をなぞったことがある程度です。Javaは舐めた程度 JavaScript pascal は今回初めて使用します
参考にしている主なページ
FL StudioとJavaScriptでサウンドプログラミング - aikeの日記 (id:aike) http://d.hatena.ne.jp/aike/20101016
FL Studio @ ウィキ - Edison #atwiki http://www42.atwiki.jp/fruity/pages/118.html
FL Studio @ ウィキ - Edison スクリプト・ツール #atwiki http://www42.atwiki.jp/fruity/pages/133.html
同梱されているサンプルファイル例
pascal ファイル名 Ring modulation.edscript
script "Ring modulation" language "pascal";
procedure RM(Mix:Single;OverSample:Boolean);
var n,x,c,x1,x2,OldSampleRate:Integer;
s,s1,s2,v1,v2:Single;
CBSample:TSample;
Begin
// get sample from clipboard
CBSample:=TSample.Create;
CBSample.LoadFromClipboard;
if CBSample.Length<=0 then
Begin
CBSample.Free;
Exit;
End;
// oversample
if Oversample then
Begin
OldSampleRate:=EditorSample.SampleRate;
EditorSample.SampleRate:=EditorSample.SampleRate+CBSample.SampleRate;
End;
// normalize both to the same format
EditorSample.NormalizeFormat(CBSample);
Editor.GetSelectionS(x1,x2);
if x2-x1>=CBSample.Length then x2:=x1+CBSample.Length-1;
v1:=Mix;
v2:=1-v1;
for n:=x1 to x2 do
Begin
x:=n-x1;
if x mod 10000=0 then ProgressMsg('Processing',x,x2-x1);
for c:=0 to EditorSample.NumChans-1 do
Begin
s1:=EditorSample.GetSampleAt(n,c);
s2:=CBSample.GetSampleAt(x,c);
s:=(s1*s2)*v1+s1*v2;
EditorSample.SetSampleAt(n,c,s);
End;
End;
CBSample.Free;
if Oversample then EditorSample.SampleRate:=OldSampleRate;
End;
var Form:TScriptDialog;
Begin
Form:=CreateScriptDialog('Ring modulation','Oversampled ring modulation. Clipboard data is used as modulator.');
Form.AddInput('Mix',1);
Form.AddInputCombo('Oversample','No,Yes',0);
if Form.Execute then RM(Form.GetInputValue('Mix'),Form.GetInputValueAsInt('Oversample')=1);
Form.Free;
End.
読み替えて自作してみた JavaScript
コンパイルエラーメッセージ:There was an error compiling the script.
";" expected but "NormSample" found at line 3: TSample NormSample;
[codeJScript]
script "Normalize" language "javascript";
//20151017
TSample NormSample;
EditorSample.LoadFromFile(ScriptPath+'HelloWorld.wav');
NormSample = TSample.Create;
NormSample.LoadFromClipboard;
EditorSample.NormalizeFormat(NormSample);
[/code]
EDISONの操作など不明な点がありましたらご指摘ください、
よろしくお願いします。