CreateAudioClip

Hi,
I am trying to create a audioclip through bytes of array converting to float of array via
AudioClip.Create function but all i am getting noise of that sound And sound is in the Hard Disk.
Any Help , Please .
Thanks.

Please post some code, so we can see where things go wrong.

Also, if what you need is to load a clip at runtime from the hard drive, it’ll be much easier to use the WWW class.

Cheers,

Gregzo

Thanks For Your Answer
But I already Did that using www and it worked but I want to try this in a different way like below code.

using UnityEngine;
using System.IO;
using System;
using System.Collections;

public class LoadMp3 : MonoBehaviour {
public string FilePathToMp3;
public AudioClip OwnAudioClip;
private byte[ ] bytesArray;
private float[ ] floatArray;

void Start()
{
if (!FilePathToMp3.Equals(“”))
{
bytesArray = File.ReadAllBytes(FilePathToMp3);
print("Total Bytes: " + bytesArray.Length);
floatArray = ConvertByteToFloat(bytesArray);
print("Total Float: " + floatArray.Length);

OwnAudioClip = AudioClip.Create(Path.GetFileName(FilePathToMp3), floatArray.Length, 1, 44100, false, false);
OwnAudioClip.SetData(floatArray, 0);
print("Fre: " + OwnAudioClip.frequency + " Chan: " + OwnAudioClip.channels);
}
else
{
Debug.LogWarning(“File Path Set First”);
}
if (OwnAudioClip.isReadyToPlay)
{
GetComponent().clip = OwnAudioClip;
GetComponent().Play();
}
}

private float[ ] ConvertByteToFloat(byte[ ] ArrayOfBytes)
{
float[ ] FloatArrayOf = new float[ArrayOfBytes.Length / 4];
for (int i = 0; i < FloatArrayOf.Length; i++)
{
if (BitConverter.IsLittleEndian)
{
Array.Reverse(ArrayOfBytes, i * 4, 4);
}
FloatArrayOf = BitConverter.ToSingle(ArrayOfBytes, i * 4) / 0x80000000;
//if (i < 10)
//{
// print("Float Before: " + FloatArrayOf*);*
//}
//FloatArrayOf = Mathf.Clamp(FloatArrayOf*, -1.0f, 1.0f);*
//if (i < 10)
//{
// print("Float After: " + FloatArrayOf*);*
//}
}
return FloatArrayOf;
}
}

Hi again,

Do insert code using the Insert button, it’ll be a lot more readable!

When you use SetData, it is implicit that the data you set is raw pcm data, a float[ ] where values range from -1f to 1f. If you load a compressed file as a byte array and convert that to a float array, of course you’ll get little else than noise.

Cheers,

Gregzo

Hi ,
Can you help me how to get raw pcm data from mp3 , I just read byte [ ] array from mp3 and decode to float [ ] array.
Thank you for helping me.

You can’t - MP3 is a compressed format. Unless you can get your hands on an MP3 library, you’re better off just loading WAV files.

I made an mp3 importer a while back. It should do what you want.

http://hellomeow.net/unity-mp3-importer/