'カンマ区切りの数字の文字列からwaveFile() as byte を返す関数 '"166,95,16,28,16,28,15,71,17,70,17"のようなStringを受け取り、 'On,Off,On,Off…という状態になっていると仮定してWAVEファイルのバイト列を作って返す。 Function makeWave(ByVal readBuffString As String) As Byte() ' カンマ区切りで分割して配列に格納する Dim readBuffArray() As String = Split(readBuffString, ",") '48kサンプリングで、48/5*4=38.4kHzの正弦波8bit WAVファイルをつくる。 Dim onData() As Byte = {&H80, &H80, &H35, &HCB, &HF9, &H7, &H7, &HF9, &HCB, &H35} ' バイト配列の定義 Dim offData() As Byte = {&H80, &H80, &H80, &H80, &H80, &H80, &H80, &H80, &H80, &H80} ' バイト配列の定義 'waveFile作成用の配列を準備する。 Dim waveDataArray() As Byte = {} For arrayIndex = 0 To readBuffArray.Length - 1 For binaryIndex = 0 To CInt(readBuffArray(arrayIndex)) Array.Resize(waveDataArray, waveDataArray.Length + 2) If arrayIndex Mod 2 = 0 Then waveDataArray(waveDataArray.Length - 2) = onData((binaryIndex Mod 5) * 2) waveDataArray(waveDataArray.Length - 1) = onData((binaryIndex Mod 5) * 2 + 1) Else waveDataArray(waveDataArray.Length - 2) = offData((binaryIndex Mod 5) * 2) waveDataArray(waveDataArray.Length - 1) = offData((binaryIndex Mod 5) * 2 + 1) End If Next Next 'データ部分の長さを取得して、バイト列に変換(waveファイルのヘッダ用の長さ) Dim waveDataLengthArray() As Byte = BitConverter.GetBytes(waveDataArray.Length) '配列からwavefileの作成 'ヘッダを読み込んで Dim waveFileByteArray() As Byte = File.ReadAllBytes("WAVE_HEAD_48000_8BIT_STEREO") '結合 Array.Resize(waveFileByteArray, waveFileByteArray.Length + waveDataLengthArray.Length) Array.Copy(waveDataLengthArray, 0, waveFileByteArray, waveFileByteArray.Length - waveDataLengthArray.Length, waveDataLengthArray.Length) Array.Resize(waveFileByteArray, waveFileByteArray.Length + waveDataArray.Length) Array.Copy(waveDataArray, 0, waveFileByteArray, waveFileByteArray.Length - waveDataArray.Length, waveDataArray.Length) Return waveFileByteArray End Function