http://forum.unity3d.com/threads/119295-Writing-AudioListener.GetOutputData-to-wav-problem?p=806734&viewfull=1#post806734
var samples = new float[clip.samples];
clip.GetData(samples, 0);
Int16[] intData = new Int16[samples.Length];
//converting in 2 float[] steps to Int16[], //then Int16[] to Byte[]
Byte[] bytesData = new Byte[samples.Length * 2];
//bytesData array is twice the size of
//dataSource array because a float converted in Int16 is 2 bytes.
int rescaleFactor = 32767; //to convert float to Int16
for (int i = 0; i<samples.Length; i++) {
intData[i] = (short)( (samples[i] * rescaleFactor)); //(short)
Byte[] byteArr = new Byte[2];
byteArr = BitConverter.GetBytes(intData[i]);
byteArr.CopyTo(bytesData, i * 2);
}
i use that’s it’s working but i got little noise
someone can help about this look comming from convertion
short to int
intData = (short)( (samples * rescaleFactor)); //(short)
```csharp
* float array = new float[clip.samples];
clip.GetData(array, 0);
Byte bytesData = new Byte[array.Length * 2];
bool flag = false;
float num = 0f;
for (int i = 0; i < clip.samples; i++)
{
float num2 = array[i] * 32767f;
if (num2 > 32767f)
{
flag = true;
num = Mathf.Max(num, num2 - 32767f);
num2 = 32767f;
}
if (num2 < -32768f)
{
flag = true;
num = Mathf.Max(num, -32768f - num2);
num2 = -32768f;
}
short value = Convert.ToInt16(num2);
fileStream.Write(LittleEndianBinary(value) ,0, (int)fileStream.Length);
}*</em>
```
another try not working
public static void ExportWAV(AudioClip audioClip, string wavFilename)
{
FileStream output = new FileStream(wavFilename, FileMode.Create);
BinaryWriter binaryWriter = new BinaryWriter(output);
binaryWriter.Write(Encoding.ASCII.GetBytes(“RIFF”));
binaryWriter.Write(LittleEndianBinary(36 + audioClip.samples * 2));
binaryWriter.Write(Encoding.ASCII.GetBytes(“WAVE”));
binaryWriter.Write(Encoding.ASCII.GetBytes("fmt "));
binaryWriter.Write(LittleEndianBinary(16));
binaryWriter.Write(LittleEndianBinary(1));
binaryWriter.Write(LittleEndianBinary(1));
binaryWriter.Write(LittleEndianBinary(audioClip.frequency ));
binaryWriter.Write(LittleEndianBinary(audioClip.frequency * 2));
binaryWriter.Write(LittleEndianBinary(2));
binaryWriter.Write(LittleEndianBinary(16));
binaryWriter.Write(Encoding.ASCII.GetBytes(“data”));
binaryWriter.Write(LittleEndianBinary(audioClip.samples * 2));
float[ ] array = new float[audioClip.samples];
audioClip.GetData(array, 0);
bool flag = false;
float num = 0f;
for (int i = 0; i < audioClip.samples; i++)
{
float num2 = array * 32767f;
if (num2 > 32767f)
{
flag = true;
num = Mathf.Max(num, num2 - 32767f);
num2 = 32767f;
}
if (num2 < -32768f)
{
flag = true;
num = Mathf.Max(num, -32768f - num2);
num2 = -32768f;
}
short value = Convert.ToInt16(num2);
binaryWriter.Write(LittleEndianBinary(value));
}
binaryWriter.Close();
if (flag)
{
int num3 = Mathf.Min(Mathf.Abs(-32768), 32767);
float num4 = num * 100f / ((float)num3 + num);
Debug.LogWarning(string.Format(“Sample overflow while exporting WAV: Reduce volume by about {0}% to avoid data loss!”, num4));
}
}
private static byte[ ] LittleEndianBinary(int value)
{
byte[ ] bytes = BitConverter.GetBytes(value);
if (!BitConverter.IsLittleEndian)
{
Array.Reverse(bytes);
}
return bytes;
}
private static byte[ ] LittleEndianBinary(short value)
{
byte[ ] bytes = BitConverter.GetBytes(value);
if (!BitConverter.IsLittleEndian)
{
Array.Reverse(bytes);
}
return bytes;
}
looking for info please help