2017-05-03 99 views
0

我正在开发一个应用程序功能,以便将我的应用程序中的声音传递给whatsapp。我已经取得了一些进展,但我坚持要获取AudioClip的字节数组。Unity3D通过Whatsapp发送音频剪辑

SS

所以我需要从资源文件夹中的音频剪辑,并将其写入我给了路径,然后将其发送到WhatsApp的。

这会得到一个错误

FormatException:无效的长度。 System.Convert.FromBase64String(System.String S)(在/Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Convert.cs:146)

void sendProccess() 
    { 
     string s = Resources.Load<AudioClip>("Bava").ToString(); 

     byte[] dataToSave = System.Convert.FromBase64String(s); 

     string destination = Path.Combine(Application.persistentDataPath, System.DateTime.Now.ToString("yyyy-MM-dd-HHmmss") + ".mp3"); 

     File.WriteAllBytes(destination, dataToSave); 


     if (!Application.isEditor) 
     { 
      //instantiate the class Intent 
      AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent"); 
      AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent"); 
      intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND")); 

      //instantiate the class Uri 
      AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri"); 
      AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse", "file://" + destination); 

      //call putExtra with the uri object of the file 
      intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject); 
      intentObject.Call<AndroidJavaObject>("setType", "audio/mp3"); 

      //instantiate the class UnityPlayer 
      AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 

      //instantiate the object currentActivity 
      AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity"); 

      //call the activity with our Intent 
      currentActivity.Call("startActivity", intentObject); 
     } 
    } 

预先感谢。

+1

所以...你的问题是'如何将音频转换成Base64?'。还把你的代码放入问题中,而不是图像。 – Smartis

+0

是的,这是我有困难的部分,我添加了代码,对不起,我是新的。 –

回答

0

在下面的行 -

string s = Resources.Load<AudioClip>("Bava").ToString(); 

ToString方法returns the name of the object

您应该使用AudioClip.GetData方法从音频剪辑获得原始数据 -

AudioClip clip = Resources.Load<AudioClip>("Bava") 
float[] samples = new float[clip.samples * clip.channels]; 
clip.GetData(samples, 0); 

然后你可以samples数组转换为使用的BinaryWriter或BitConverter进一步使用其字节表示。