いろいろな方法でWAVファイルをマージ

いろいろな方法で,ふたつのWAVファイルをマージし,ひとつのWAVファイルを生成します.

 

1 交互にふたつのWAVファイルをマージ(square

squareは,ふたつのWAVファイルを交互に入れ替えながらマージします.本プログラムには,入力のWAVファイル名ふたつ,出力用のWAVファイル名,そして入れ換えを行う1周期をマイクロ秒の,都合四つの引数を指定しなければなりません.以降に入力例を示します.

square  <入力ファイル名1>  <入力ファイル名2>  <出力ファイル名>  <1サイクル:μ秒>

「1サイクル:μ秒」には,「入力WAVファイル1」と「入力WAVファイル2」を入れ替える一周期を入力します.たとえば,一秒を指定したければ1000000と指定します。ただし、サンプリング周波数との関係で、あまり短い周期を与えると分解能の関係で入れ替えることができなくなります。

ふたつのWAVファイルから,ひとつのWAVファイルを生成します.まず,合成処理の概要を示します.以降にWAVデータ入れ換えのタイミングと,引数の関係を示します.

 

この方法で,ファイルを交互に入れ替えるため,結果のファイルは以降のようになります.

ふたつのWAVファイルの長さが異なるのは良くあることです.このような場合の処理は,長い方の音が残るようにします.生成されるファイルは,長い方のWAVファイルと同じサイズになり,短い方のWAVファイルを超えた部分には,長い方の波形がそのままコピーされます.以降に,二番目のWAVファイルが長い場合の例を図で示します.

 

以降に、このプログラムを実行した例を示します.

 

まずは,ステレオの1002 [Hz]Sin波と,ある曲を一周期10000μ秒で入れ替えます.一周期が10,000μ秒ですので,曲は約5,000μ秒(=5m)で切り替わります.以降に動作の様子を示します.

C:\>square sin1002Hz_50msec.wav 異邦人_50msec.wav square01.wav 10000

 

ファイル名[sin1002Hz_50msec.wav]

 "fmt "の長さ: 16 [bytes]

             データ形式: 1 (1 = PCM)

           チャンネル数: 2

     サンプリング周波数: 44100 [Hz]

          バイト数 / : 176400 [bytes/sec]

 バイト数×チャンネル数: 4 [bytes]

    ビット数 / サンプル: 16 [bits/sample]

 

 "data" の長さ: 8820 [bytes]

 

 時間=0.050

 

ファイル名[異邦人_50msec.wav]

 "fmt "の長さ: 16 [bytes]

             データ形式: 1 (1 = PCM)

           チャンネル数: 2

     サンプリング周波数: 44100 [Hz]

          バイト数 / : 176400 [bytes/sec]

 バイト数×チャンネル数: 4 [bytes]

    ビット数 / サンプル: 16 [bits/sample]

 

 "data" の長さ: 8820 [bytes]

 

 時間=0.050

 

 デジタルで処理するため実際の周波数は 100.23 [Hz]です.

 1 cycle 0.009977 [sec.]です.

 

[sin1002Hz_50msec.wav] [異邦人_50msec.wav] [square01.wav] へ合成しました.

 

入力波形:

 

出力波形(一周期=10,000μ秒)

長さが50msecWAVファイルふたつを入力とします.そして,入れ替える一周期に10,000μ秒を指定します.一周期が10,000μ秒( = 10 m )ですので,曲は約5m秒で切り替わります.出力波形から,5周期含まれていることが分かります.


2 ノコギリ波を係数として,交互にふたつのWAVファイルをマージ(sawtooth)

sawtoothは、ふたつのWAVファイルを,ノコギリ波を係数としてマージします.引数は四つ必要です.以降に入力例を示します.

sawtooth  <入力ファイル名1>  <入力ファイル名2>  <出力ファイル名>  <1サイクル:μ秒>

 

ふたつのWAVファイルから,ひとつのWAVファイルを生成します。まず,合成処理の概要を示します.以降にWAVデータのマージ方法と,引数の関係を示します.

以降に、このプログラムを実行した例を示します.ステレオの1002 [Hz]Sin波と,ある曲を一周期10000μ秒で入れ替えます.一周期が10,000μ秒ですので,曲は約5,000μ秒(=5m)で切り替わります.以降に動作の様子を示します.

C:\>sawtooth sin1002Hz_50msec.wav 異邦人_50msec.wav sawtooth01.wav 10000

 

ファイル名[sin1002Hz_50msec.wav]

 "fmt "の長さ: 16 [bytes]

             データ形式: 1 (1 = PCM)

           チャンネル数: 2

     サンプリング周波数: 44100 [Hz]

          バイト数 / : 176400 [bytes/sec]

 バイト数×チャンネル数: 4 [bytes]

    ビット数 / サンプル: 16 [bits/sample]

 

 "data" の長さ: 8820 [bytes]

 

 時間=0.050

 

ファイル名[異邦人_50msec.wav]

 "fmt "の長さ: 16 [bytes]

             データ形式: 1 (1 = PCM)

           チャンネル数: 2

     サンプリング周波数: 44100 [Hz]

          バイト数 / : 176400 [bytes/sec]

 バイト数×チャンネル数: 4 [bytes]

    ビット数 / サンプル: 16 [bits/sample]

 

 "data" の長さ: 8820 [bytes]

 

 時間=0.050

 

 デジタルで処理するため実際の周波数は 100.00 [Hz]です.

 1 cycle 0.010000 [sec.]です.

 

[sin1002Hz_50msec.wav] [異邦人_50msec.wav] [sawtooth01.wav] へ合成しました.

 

入力波形:

 

出力波形(一周期=10,000μ秒=10m)

長さが50msecWAVファイルふたつを入力とします.そして,入れ替える一周期に10,000μ秒を指定します.ノコギリ波を係数として使用します.ノコギリ波は0.01.0の値を,指定した周期から計算した勾配で変化します.このため,図に示すような波形になります.出力波形から,5周期含まれていることが分かります.

 


3 サイン波を係数として,交互にふたつのWAVファイルをマージ(sin)

sinは,ふたつのWAVファイルを,サイン波を係数としてマージします.引数は四つ必要です.以降に入力例を示します.引数は四つ必要です.以降に入力例を示します.

sin  <入力ファイル名1>  <入力ファイル名2>  <出力ファイル名>  <1サイクル:μ秒>

「1サイクル:μ秒」には,強弱を入れ替える一周期を入力します.

 

ふたつのWAVファイルから,ひとつのWAVファイルを生成します.まず,合成処理の概要を示します.以降にWAVデータのマージ方法と,引数の関係を示します.

 

以降に、このプログラムを実行した例を示します.ステレオの1002 [Hz]Sin波と,ある曲を一周期(0°~360°)10000μ秒で合成します.一周期に10,000μ秒を指定すると,サイン関数は0.0~1.0を二往復してしまいます.ですので,曲の強弱の割合は約5,000μ秒(=5m)で切り替わります.以降に動作の様子を示します。

C:\>sin sin1002Hz_50msec.wav 異邦人_50msec.wav sin01.wav 10000

 

ファイル名[sin1002Hz_50msec.wav]

 "fmt "の長さ: 16 [bytes]

             データ形式: 1 (1 = PCM)

           チャンネル数: 2

     サンプリング周波数: 44100 [Hz]

          バイト数 / : 176400 [bytes/sec]

 バイト数×チャンネル数: 4 [bytes]

    ビット数 / サンプル: 16 [bits/sample]

 

 "data" の長さ: 8820 [bytes]

 

 時間=0.050

 

ファイル名[異邦人_50msec.wav]

 "fmt "の長さ: 16 [bytes]

             データ形式: 1 (1 = PCM)

           チャンネル数: 2

     サンプリング周波数: 44100 [Hz]

          バイト数 / : 176400 [bytes/sec]

 バイト数×チャンネル数: 4 [bytes]

    ビット数 / サンプル: 16 [bits/sample]

 

 "data" の長さ: 8820 [bytes]

 

 時間=0.050

 

 デジタルで処理するため実際の周波数は 100.00 [Hz]です.

 1 cycle 0.010000 [sec.]です.

 

[sin1002Hz_50msec.wav] [異邦人_50msec.wav] [sin01.wav] へ合成しました.

 

入力波形:

 

出力波形(一周期=5,000μ秒,サイン波を0°~360°なので10,000μ秒とはならない)

長さが50msecWAVファイルふたつを入力とします.そして,入れ替える一周期に10,000μ秒を指定します.サイン波を係数として使用します.サイン波は0.01.0の値を,指定した周期の二倍で繰り返します.このため,図に示すような波形になります.サイン波の一周期が10,000μ秒ですので,約5m秒間隔で曲の強弱の割合が切り替わります.出力波形から,10周期含まれていることが分かります.

 

続いて,ステレオのSin2004 [Hz]と,ある曲を一周期20,000μ秒で入れ替えます.一周期が20,000μ秒ですので,曲の強弱の割合は約10,000μ秒(=10 m)で切り替わります.以降に動作の様子を示します.

C:\>sin  sin2004Hz_50msec.wav 16_50msec.wav sin02.wav 20000

 

ファイル名[sin2004Hz_50msec.wav]

 "fmt "の長さ: 16 [bytes]

             データ形式: 1 (1 = PCM)

           チャンネル数: 2

     サンプリング周波数: 44100 [Hz]

          バイト数 / : 176400 [bytes/sec]

 バイト数×チャンネル数: 4 [bytes]

    ビット数 / サンプル: 16 [bits/sample]

 

 "data" の長さ: 8820 [bytes]

 

 時間=0.050

 

ファイル名[16_50msec.wav]

 "fmt "の長さ: 16 [bytes]

             データ形式: 1 (1 = PCM)

           チャンネル数: 2

     サンプリング周波数: 44100 [Hz]

          バイト数 / : 176400 [bytes/sec]

 バイト数×チャンネル数: 4 [bytes]

    ビット数 / サンプル: 16 [bits/sample]

 

 "data" の長さ: 8820 [bytes]

 

 時間=0.050

 

 デジタルで処理するため実際の周波数は 50.00 [Hz]です.

 1 cycle 0.020000 [sec.]です.

 

[sin2004Hz_50msec.wav] [16_50msec.wav] [sin02.wav] へ合成しました.

 

入力波形:

 

出力波形(一周期=10,000μ秒,サイン波を0°~360°なので20,000μ秒とはならない)

 

長さが50msecWAVファイルふたつを入力とします.そして,入れ替える一周期に20,000μ秒を指定します.サイン波を係数として使用します.サイン波は0.01.0の値を,指定した周期の二倍で繰り返します.サイン波の一周期が20,000μ秒(= 20 m)ですので,約10 m 間隔で曲の強弱の割合が切り替わります.出力波形から,5周期含まれていることが分かります.

 


4 三角波を係数として,交互にふたつのWAVファイルをマージ(triangle)

triangleは,ふたつのWAVファイルを,三角波を係数としてマージします.引数は四つ必要です.以降に入力例を示します.引数は四つ必要です.以降に入力例を示します.

triangle  <入力ファイル名1>  <入力ファイル名2>  <出力ファイル名>  <1サイクル:μ秒>

 

ふたつのWAVファイルから,ひとつのWAVファイルを生成します.まず,合成処理の概要を示します.以降にWAVデータのマージ方法と,引数の関係を示します.

 

以降に、このプログラムを実行した例を示します.ステレオの1002 [Hz]Sin波と,ある曲を一周期10000μ秒で合成します以降に動作の様子を示します。

C:\>triangle sin1002Hz_50msec.wav 異邦人_50msec.wav triangle01.wav 10000

 

ファイル名[sin1002Hz_50msec.wav]

 "fmt "の長さ: 16 [bytes]

             データ形式: 1 (1 = PCM)

           チャンネル数: 2

     サンプリング周波数: 44100 [Hz]

          バイト数 / : 176400 [bytes/sec]

 バイト数×チャンネル数: 4 [bytes]

    ビット数 / サンプル: 16 [bits/sample]

 

 "data" の長さ: 8820 [bytes]

 

 時間=0.050

 

ファイル名[異邦人_50msec.wav]

 "fmt "の長さ: 16 [bytes]

             データ形式: 1 (1 = PCM)

           チャンネル数: 2

     サンプリング周波数: 44100 [Hz]

          バイト数 / : 176400 [bytes/sec]

 バイト数×チャンネル数: 4 [bytes]

    ビット数 / サンプル: 16 [bits/sample]

 

 "data" の長さ: 8820 [bytes]

 

 時間=0.050

 

 デジタルで処理するため実際の周波数は 100.23 [Hz]です.

 1 cycle 0.009977 [sec.]です.

 

[sin1002Hz_50msec.wav] [異邦人_50msec.wav] [triangle01.wav] へ合成しました.

 

入力波形:

 

出力波形(一周期=10,000μ秒)

長さが50msecWAVファイルふたつを入力とします.そして,入れ替える一周期に10,000μ秒を指定します.三角波を係数として使用します.三角波は0.01.00.0の値を,指定した周期から計算した勾配で変化します.このため,図に示すような波形になります.三角波の一周期が10,000μ秒ですので,約5m秒でそれぞれの曲のピークが切り替わります.出力波形を観察すると,5周期のように見えますが,実際は振幅に大きなWAVデータと,振幅に大きなWAVデータをマージしていますので,実際の周期は10周期です.

 

続いて,ステレオのSin2004 [Hz]と,ある曲を一周期20,000μ秒で入れ替えます.以降に動作の様子を示します.

C:\>triangle sin2004Hz_50msec.wav 16_50msec.wav triangle02.wav 20000

 

ファイル名[sin2004Hz_50msec.wav]

 "fmt "の長さ: 16 [bytes]

             データ形式: 1 (1 = PCM)

           チャンネル数: 2

     サンプリング周波数: 44100 [Hz]

          バイト数 / : 176400 [bytes/sec]

 バイト数×チャンネル数: 4 [bytes]

    ビット数 / サンプル: 16 [bits/sample]

 

 "data" の長さ: 8820 [bytes]

 

 時間=0.050

 

ファイル名[16_50msec.wav]

 "fmt "の長さ: 16 [bytes]

             データ形式: 1 (1 = PCM)

           チャンネル数: 2

     サンプリング周波数: 44100 [Hz]

          バイト数 / : 176400 [bytes/sec]

 バイト数×チャンネル数: 4 [bytes]

    ビット数 / サンプル: 16 [bits/sample]

 

 "data" の長さ: 8820 [bytes]

 

 時間=0.050

 

 デジタルで処理するため実際の周波数は 50.00 [Hz]です.

 1 cycle 0.020000 [sec.]です.

 

[sin2004Hz_50msec.wav] [16_50msec.wav] [triangle02.wav] へ合成しました.

 

入力波形:

 

出力波形(一周期=10,000μ秒)

長さが50msecWAVファイルふたつを入力とします.そして,入れ替える一周期に20,000μ秒を指定します.三角波を係数として使用します.三角波は0.01.00.0の値を,指定した周期から計算した勾配で変化します.このため,図に示すような波形になります.三角波の一周期が20,000μ秒ですので,約10m秒でそれぞれの曲のピークが切り替わります.