AudioUtility.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885
  1. #if UNITY_EDITOR
  2. using System;
  3. using System.Reflection;
  4. using UnityEditor;
  5. using UnityEngine;
  6. namespace UnityEditor
  7. {
  8. public static class AudioUtility
  9. {
  10. public static void PlayClip(AudioClip clip, int startSample, bool loop)
  11. {
  12. if (clip == null) return;
  13. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  14. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  15. MethodInfo method = audioUtilClass.GetMethod(
  16. "PlayClip",
  17. BindingFlags.Static | BindingFlags.Public,
  18. null,
  19. new System.Type[] {
  20. typeof(AudioClip),
  21. typeof(Int32),
  22. typeof(Boolean)
  23. },
  24. null
  25. );
  26. method.Invoke(
  27. null,
  28. new object[] {
  29. clip,
  30. startSample,
  31. loop
  32. }
  33. );
  34. }
  35. public static void PlayClip(AudioClip clip, int startSample)
  36. {
  37. if (clip == null) return;
  38. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  39. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  40. MethodInfo method = audioUtilClass.GetMethod(
  41. "PlayClip",
  42. BindingFlags.Static | BindingFlags.Public,
  43. null,
  44. new System.Type[] {
  45. typeof(AudioClip),
  46. typeof(Int32)
  47. },
  48. null
  49. );
  50. method.Invoke(
  51. null,
  52. new object[] {
  53. clip,
  54. startSample
  55. }
  56. );
  57. }
  58. public static void PlayClip(AudioClip clip)
  59. {
  60. if (clip == null) return;
  61. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  62. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  63. MethodInfo method = audioUtilClass.GetMethod(
  64. "PlayClip",
  65. BindingFlags.Static | BindingFlags.Public,
  66. null,
  67. new System.Type[] {
  68. typeof(AudioClip)
  69. },
  70. null
  71. );
  72. method.Invoke(
  73. null,
  74. new object[] {
  75. clip
  76. }
  77. );
  78. }
  79. public static void StopClip(AudioClip clip)
  80. {
  81. if (clip == null) return;
  82. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  83. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  84. MethodInfo method = audioUtilClass.GetMethod(
  85. "StopClip",
  86. BindingFlags.Static | BindingFlags.Public,
  87. null,
  88. new System.Type[] {
  89. typeof(AudioClip)
  90. },
  91. null
  92. );
  93. method.Invoke(
  94. null,
  95. new object[] {
  96. clip
  97. }
  98. );
  99. }
  100. public static void PauseClip(AudioClip clip)
  101. {
  102. if (clip == null) return;
  103. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  104. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  105. MethodInfo method = audioUtilClass.GetMethod(
  106. "PauseClip",
  107. BindingFlags.Static | BindingFlags.Public,
  108. null,
  109. new System.Type[] {
  110. typeof(AudioClip)
  111. },
  112. null
  113. );
  114. method.Invoke(
  115. null,
  116. new object[] {
  117. clip
  118. }
  119. );
  120. }
  121. public static void ResumeClip(AudioClip clip)
  122. {
  123. if (clip == null) return;
  124. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  125. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  126. MethodInfo method = audioUtilClass.GetMethod(
  127. "ResumeClip",
  128. BindingFlags.Static | BindingFlags.Public,
  129. null,
  130. new System.Type[] {
  131. typeof(AudioClip)
  132. },
  133. null
  134. );
  135. method.Invoke(
  136. null,
  137. new object[] {
  138. clip
  139. }
  140. );
  141. }
  142. public static void LoopClip(AudioClip clip, bool on)
  143. {
  144. if (clip == null) return;
  145. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  146. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  147. MethodInfo method = audioUtilClass.GetMethod(
  148. "LoopClip",
  149. BindingFlags.Static | BindingFlags.Public,
  150. null,
  151. new System.Type[] {
  152. typeof(AudioClip),
  153. typeof(bool)
  154. },
  155. null
  156. );
  157. method.Invoke(
  158. null,
  159. new object[] {
  160. clip,
  161. on
  162. }
  163. );
  164. }
  165. public static bool IsClipPlaying(AudioClip clip)
  166. {
  167. if (clip == null) return false;
  168. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  169. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  170. MethodInfo method = audioUtilClass.GetMethod(
  171. "IsClipPlaying",
  172. BindingFlags.Static | BindingFlags.Public
  173. );
  174. bool playing = (bool)method.Invoke(
  175. null,
  176. new object[] {
  177. clip,
  178. }
  179. );
  180. return playing;
  181. }
  182. public static void StopAllClips()
  183. {
  184. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  185. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  186. MethodInfo method = audioUtilClass.GetMethod(
  187. "StopAllClips",
  188. BindingFlags.Static | BindingFlags.Public
  189. );
  190. method.Invoke(
  191. null,
  192. null
  193. );
  194. }
  195. public static float GetClipPosition(AudioClip clip)
  196. {
  197. if (clip == null) return 0;
  198. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  199. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  200. MethodInfo method = audioUtilClass.GetMethod(
  201. "GetClipPosition",
  202. BindingFlags.Static | BindingFlags.Public
  203. );
  204. float position = (float)method.Invoke(
  205. null,
  206. new object[] {
  207. clip
  208. }
  209. );
  210. return position;
  211. }
  212. public static int GetClipSamplePosition(AudioClip clip)
  213. {
  214. if (clip == null) return 0;
  215. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  216. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  217. MethodInfo method = audioUtilClass.GetMethod(
  218. "GetClipSamplePosition",
  219. BindingFlags.Static | BindingFlags.Public
  220. );
  221. int position = (int)method.Invoke(
  222. null,
  223. new object[] {
  224. clip
  225. }
  226. );
  227. return position;
  228. }
  229. public static void SetClipSamplePosition(AudioClip clip, int iSamplePosition)
  230. {
  231. if (clip == null) return;
  232. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  233. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  234. MethodInfo method = audioUtilClass.GetMethod(
  235. "SetClipSamplePosition",
  236. BindingFlags.Static | BindingFlags.Public
  237. );
  238. method.Invoke(
  239. null,
  240. new object[] {
  241. clip,
  242. iSamplePosition
  243. }
  244. );
  245. }
  246. public static int GetSampleCount(AudioClip clip)
  247. {
  248. if (clip == null) return 0;
  249. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  250. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  251. MethodInfo method = audioUtilClass.GetMethod(
  252. "GetSampleCount",
  253. BindingFlags.Static | BindingFlags.Public
  254. );
  255. int samples = (int)method.Invoke(
  256. null,
  257. new object[] {
  258. clip
  259. }
  260. );
  261. return samples;
  262. }
  263. public static int GetChannelCount(AudioClip clip)
  264. {
  265. if (clip == null) return 0;
  266. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  267. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  268. MethodInfo method = audioUtilClass.GetMethod(
  269. "GetChannelCount",
  270. BindingFlags.Static | BindingFlags.Public
  271. );
  272. int channels = (int)method.Invoke(
  273. null,
  274. new object[] {
  275. clip
  276. }
  277. );
  278. return channels;
  279. }
  280. public static int GetBitRate(AudioClip clip)
  281. {
  282. if (clip == null) return 0;
  283. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  284. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  285. MethodInfo method = audioUtilClass.GetMethod(
  286. "GetChannelCount",
  287. BindingFlags.Static | BindingFlags.Public
  288. );
  289. int bitRate = (int)method.Invoke(
  290. null,
  291. new object[] {
  292. clip
  293. }
  294. );
  295. return bitRate;
  296. }
  297. public static int GetBitsPerSample(AudioClip clip)
  298. {
  299. if (clip == null) return 0;
  300. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  301. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  302. MethodInfo method = audioUtilClass.GetMethod(
  303. "GetBitsPerSample",
  304. BindingFlags.Static | BindingFlags.Public
  305. );
  306. int bits = (int)method.Invoke(
  307. null,
  308. new object[] {
  309. clip
  310. }
  311. );
  312. return bits;
  313. }
  314. public static int GetFrequency(AudioClip clip)
  315. {
  316. if (clip == null) return 0;
  317. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  318. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  319. MethodInfo method = audioUtilClass.GetMethod(
  320. "GetFrequency",
  321. BindingFlags.Static | BindingFlags.Public
  322. );
  323. int frequency = (int)method.Invoke(
  324. null,
  325. new object[] {
  326. clip
  327. }
  328. );
  329. return frequency;
  330. }
  331. public static int GetSoundSize(AudioClip clip)
  332. {
  333. if (clip == null) return 0;
  334. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  335. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  336. MethodInfo method = audioUtilClass.GetMethod(
  337. "GetSoundSize",
  338. BindingFlags.Static | BindingFlags.Public
  339. );
  340. int size = (int)method.Invoke(
  341. null,
  342. new object[] {
  343. clip
  344. }
  345. );
  346. return size;
  347. }
  348. public static Texture2D GetWaveForm(AudioClip clip, int channel, float width, float height)
  349. {
  350. if (clip == null) return null;
  351. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  352. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  353. MethodInfo method = audioUtilClass.GetMethod(
  354. "GetWaveForm",
  355. BindingFlags.Static | BindingFlags.Public
  356. );
  357. string path = AssetDatabase.GetAssetPath(clip);
  358. AudioImporter importer = (AudioImporter)AssetImporter.GetAtPath(path);
  359. Texture2D texture = (Texture2D)method.Invoke(
  360. null,
  361. new object[] {
  362. clip,
  363. importer,
  364. channel,
  365. width,
  366. height
  367. }
  368. );
  369. return texture;
  370. }
  371. public static Texture2D GetWaveFormFast(AudioClip clip, int channel, int fromSample, int toSample, float width, float height)
  372. {
  373. if (clip == null) return null;
  374. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  375. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  376. MethodInfo method = audioUtilClass.GetMethod(
  377. "GetWaveFormFast",
  378. BindingFlags.Static | BindingFlags.Public
  379. );
  380. Texture2D texture = (Texture2D)method.Invoke(
  381. null,
  382. new object[] {
  383. clip,
  384. channel,
  385. fromSample,
  386. toSample,
  387. width,
  388. height
  389. }
  390. );
  391. return texture;
  392. }
  393. public static void ClearWaveForm(AudioClip clip)
  394. {
  395. if (clip == null) return;
  396. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  397. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  398. MethodInfo method = audioUtilClass.GetMethod(
  399. "ClearWaveForm",
  400. BindingFlags.Static | BindingFlags.Public
  401. );
  402. method.Invoke(
  403. null,
  404. new object[] {
  405. clip
  406. }
  407. );
  408. }
  409. public static bool HasPreview(AudioClip clip)
  410. {
  411. if (clip == null) return false;
  412. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  413. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  414. MethodInfo method = audioUtilClass.GetMethod(
  415. "GetSoundSize",
  416. BindingFlags.Static | BindingFlags.Public
  417. );
  418. bool hasPreview = (bool)method.Invoke(
  419. null,
  420. new object[] {
  421. clip
  422. }
  423. );
  424. return hasPreview;
  425. }
  426. public static bool IsCompressed(AudioClip clip)
  427. {
  428. if (clip == null) return false;
  429. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  430. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  431. MethodInfo method = audioUtilClass.GetMethod(
  432. "IsCompressed",
  433. BindingFlags.Static | BindingFlags.Public
  434. );
  435. bool isCompressed = (bool)method.Invoke(
  436. null,
  437. new object[] {
  438. clip
  439. }
  440. );
  441. return isCompressed;
  442. }
  443. public static bool IsStramed(AudioClip clip)
  444. {
  445. if (clip == null) return false;
  446. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  447. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  448. MethodInfo method = audioUtilClass.GetMethod(
  449. "IsStramed",
  450. BindingFlags.Static | BindingFlags.Public
  451. );
  452. bool isStreamed = (bool)method.Invoke(
  453. null,
  454. new object[] {
  455. clip
  456. }
  457. );
  458. return isStreamed;
  459. }
  460. public static double GetDuration(AudioClip clip)
  461. {
  462. if (clip == null) return 0;
  463. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  464. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  465. MethodInfo method = audioUtilClass.GetMethod(
  466. "GetDuration",
  467. BindingFlags.Static | BindingFlags.Public
  468. );
  469. double duration = (double)method.Invoke(
  470. null,
  471. new object[] {
  472. clip
  473. }
  474. );
  475. return duration;
  476. }
  477. public static int GetFMODMemoryAllocated()
  478. {
  479. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  480. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  481. MethodInfo method = audioUtilClass.GetMethod(
  482. "GetFMODMemoryAllocated",
  483. BindingFlags.Static | BindingFlags.Public
  484. );
  485. int memoryAllocated = (int)method.Invoke(
  486. null,
  487. null
  488. );
  489. return memoryAllocated;
  490. }
  491. public static float GetFMODCPUUsage()
  492. {
  493. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  494. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  495. MethodInfo method = audioUtilClass.GetMethod(
  496. "GetFMODCPUUsage",
  497. BindingFlags.Static | BindingFlags.Public
  498. );
  499. float cpuUsage = (float)method.Invoke(
  500. null,
  501. null
  502. );
  503. return cpuUsage;
  504. }
  505. public static bool Is3D(AudioClip clip)
  506. {
  507. if (clip == null) return false;
  508. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  509. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  510. MethodInfo method = audioUtilClass.GetMethod(
  511. "Is3D",
  512. BindingFlags.Static | BindingFlags.Public
  513. );
  514. bool is3D = (bool)method.Invoke(
  515. null,
  516. new object[] {
  517. clip
  518. }
  519. );
  520. return is3D;
  521. }
  522. public static bool IsMovieAudio(AudioClip clip)
  523. {
  524. if (clip == null) return false;
  525. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  526. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  527. MethodInfo method = audioUtilClass.GetMethod(
  528. "IsMovieAudio",
  529. BindingFlags.Static | BindingFlags.Public
  530. );
  531. bool isMovieAudio = (bool)method.Invoke(
  532. null,
  533. new object[] {
  534. clip
  535. }
  536. );
  537. return isMovieAudio;
  538. }
  539. public static bool IsMOD(AudioClip clip)
  540. {
  541. if (clip == null) return false;
  542. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  543. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  544. MethodInfo method = audioUtilClass.GetMethod(
  545. "IsMOD",
  546. BindingFlags.Static | BindingFlags.Public
  547. );
  548. bool isMOD = (bool)method.Invoke(
  549. null,
  550. new object[] {
  551. clip
  552. }
  553. );
  554. return isMOD;
  555. }
  556. public static int GetMODChannelCount()
  557. {
  558. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  559. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  560. MethodInfo method = audioUtilClass.GetMethod(
  561. "GetMODChannelCount",
  562. BindingFlags.Static | BindingFlags.Public
  563. );
  564. int channels = (int)method.Invoke(
  565. null,
  566. null
  567. );
  568. return channels;
  569. }
  570. public static AnimationCurve GetLowpassCurve(AudioLowPassFilter lowPassFilter)
  571. {
  572. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  573. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  574. MethodInfo method = audioUtilClass.GetMethod(
  575. "GetLowpassCurve",
  576. BindingFlags.Static | BindingFlags.Public
  577. );
  578. AnimationCurve curve = (AnimationCurve)method.Invoke(
  579. null,
  580. new object[] {
  581. lowPassFilter
  582. }
  583. );
  584. return curve;
  585. }
  586. public static Vector3 GetListenerPos()
  587. {
  588. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  589. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  590. MethodInfo method = audioUtilClass.GetMethod(
  591. "GetListenerPos",
  592. BindingFlags.Static | BindingFlags.Public
  593. );
  594. Vector3 position = (Vector3)method.Invoke(
  595. null,
  596. null
  597. );
  598. return position;
  599. }
  600. public static void UpdateAudio()
  601. {
  602. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  603. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  604. MethodInfo method = audioUtilClass.GetMethod(
  605. "UpdateAudio",
  606. BindingFlags.Static | BindingFlags.Public
  607. );
  608. method.Invoke(
  609. null,
  610. null
  611. );
  612. }
  613. public static void SetListenerTransform(Transform t)
  614. {
  615. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  616. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  617. MethodInfo method = audioUtilClass.GetMethod(
  618. "SetListenerTransform",
  619. BindingFlags.Static | BindingFlags.Public
  620. );
  621. method.Invoke(
  622. null,
  623. new object[] {
  624. t
  625. }
  626. );
  627. }
  628. public static AudioType GetClipType(AudioClip clip)
  629. {
  630. if (clip == null) return AudioType.UNKNOWN;
  631. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  632. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  633. MethodInfo method = audioUtilClass.GetMethod(
  634. "GetClipType",
  635. BindingFlags.Static | BindingFlags.Public
  636. );
  637. AudioType type = (AudioType)method.Invoke(
  638. null,
  639. new object[] {
  640. clip
  641. }
  642. );
  643. return type;
  644. }
  645. public static AudioType GetPlatformConversionType(AudioType inType, BuildTargetGroup targetGroup, AudioImporterFormat format)
  646. {
  647. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  648. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  649. MethodInfo method = audioUtilClass.GetMethod(
  650. "GetPlatformConversionType",
  651. BindingFlags.Static | BindingFlags.Public
  652. );
  653. AudioType type = (AudioType)method.Invoke(
  654. null,
  655. new object[] {
  656. inType,
  657. targetGroup,
  658. format
  659. }
  660. );
  661. return type;
  662. }
  663. public static bool HaveAudioCallback(MonoBehaviour behaviour)
  664. {
  665. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  666. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  667. MethodInfo method = audioUtilClass.GetMethod(
  668. "HaveAudioCallback",
  669. BindingFlags.Static | BindingFlags.Public
  670. );
  671. bool hasCallback = (bool)method.Invoke(
  672. null,
  673. new object[] {
  674. behaviour
  675. }
  676. );
  677. return hasCallback;
  678. }
  679. public static int GetCustomFilterChannelCount(MonoBehaviour behaviour)
  680. {
  681. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  682. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  683. MethodInfo method = audioUtilClass.GetMethod(
  684. "GetCustomFilterChannelCount",
  685. BindingFlags.Static | BindingFlags.Public
  686. );
  687. int channels = (int)method.Invoke(
  688. null,
  689. new object[] {
  690. behaviour
  691. }
  692. );
  693. return channels;
  694. }
  695. public static int GetCustomFilterProcessTime(MonoBehaviour behaviour)
  696. {
  697. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  698. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  699. MethodInfo method = audioUtilClass.GetMethod(
  700. "GetCustomFilterProcessTime",
  701. BindingFlags.Static | BindingFlags.Public
  702. );
  703. int processTime = (int)method.Invoke(
  704. null,
  705. new object[] {
  706. behaviour
  707. }
  708. );
  709. return processTime;
  710. }
  711. public static float GetCustomFilterMaxIn(MonoBehaviour behaviour, int channel)
  712. {
  713. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  714. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  715. MethodInfo method = audioUtilClass.GetMethod(
  716. "GetCustomFilterMaxIn",
  717. BindingFlags.Static | BindingFlags.Public
  718. );
  719. float maxIn = (float)method.Invoke(
  720. null,
  721. new object[] {
  722. behaviour,
  723. channel
  724. }
  725. );
  726. return maxIn;
  727. }
  728. public static float GetCustomFilterMaxOut(MonoBehaviour behaviour, int channel)
  729. {
  730. Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
  731. Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
  732. MethodInfo method = audioUtilClass.GetMethod(
  733. "GetCustomFilterMaxOut",
  734. BindingFlags.Static | BindingFlags.Public
  735. );
  736. float maxOut = (float)method.Invoke(
  737. null,
  738. new object[] {
  739. behaviour,
  740. channel
  741. }
  742. );
  743. return maxOut;
  744. }
  745. }
  746. }
  747. #endif