2016-04-30 6 views
0

При попытке воспроизвести звук с CSCore, загруженным внутри проекта Unity3D, редактор завершается.CSCore вылетает из-за вызова «soundOut.Play» изнутри Unity

 IWaveSource audio = CodecFactory.Instance.GetCodec(pathToMP3File); 
     ISoundOut device = new WasapiOut(); 
     device.Initialize(audio); 

     device.Play(); // the call causing the crash 

Какой выход я выбираю (WasapiOut, DirectSoundOut, WaveOut) не меняет результата.


CSCore.dll был собран с «Unity 3.5 .net Полный базовый класс библиотеки» целевой параметр в VS 2015. Это полный сценарий:

using UnityEngine; 

using CSCore; 
using CSCore.Codecs; 
using CSCore.SoundOut; 
using System.Threading; 

public class CScorePlayback : MonoBehaviour { 

    static string testAudio = "C:/Path/to/audio.mp3"; 

    IWaveSource audioSource; 
    ISoundOut audioDevice; 
    Thread audioThread; 

    void Start() { 
     audioThread = new Thread(PlaySoundTest); 
     audioThread.Start(); 
    } 

    void PlaySoundTest() 
    { 
     audioSource = CodecFactory.Instance.GetCodec(testAudio); 
     audioDevice = new WaveOut(); 
     audioDevice.Initialize(audioSource); 

     try 
     { 
      audioDevice.Play(); 
      Debug.Log("Sound Played!"); 
     } 
     catch (System.Exception e) 
     { 
      Debug.Log("Error playing sound: " + e.Message); 
     } 
    } 

    void OnDestroy() 
    { 
     if (audioThread != null) audioThread.Join(); 
     if (audioDevice != null) 
     { 
      audioDevice.Dispose(); 
     } 
     if (audioSource != null) 
     { 
      audioSource.Dispose(); 
     } 
    } 
} 
+0

Код, который у вас есть в вашем вопросе, работает ли он в Visual Studio? Я не имею в виду Единство. Я имею в виду компиляцию с помощью MS Visual Studio. Он работает там? – Programmer

+0

@ Программист Да, код работает в обычном проекте C#. – Appleshell

ответ

0

Первое, что я хотел бы предложить вам сделайте это, чтобы поместить функцию Play(), которая падает в блоке try catch.

void Start() 
{ 

    IWaveSource audio = CodecFactory.Instance.GetCodec(pathToMP3File); 
    ISoundOut device = new WasapiOut(); 
    device.Initialize(audio); 

    try 
    { 
     device.Play(); // the call causing the crash 
     Debug.Log("Sound Played!"); 
    } 
    catch (System.Exception e) 
    { 
     Debug.Log("Error playing sound: " + e.Message); 
    } 
} 

Если он сработает, посмотрите, пожалуйста, распечатано ли сообщение. Измените свой вопрос и опубликуйте сообщение об ошибке.

Теперь попробуйте также вызвать целую функцию в другой теме, чтобы убедиться, что это не проблема. Позвольте мне знать, что происходит в обоих случаях.

void Start() 
{ 
    playSound(); 
} 

void playSound() 
{ 
    new System.Threading.Thread(___playSound) 
    { 

    }.Start(); 
} 

void ___playSound() 
{ 

    IWaveSource audio = CodecFactory.Instance.GetCodec(pathToMP3File); 
    ISoundOut device = new WasapiOut(); 
    device.Initialize(audio); 

    try 
    { 
     device.Play(); // the call causing the crash 
     Debug.Log("Sound Played!"); 
    } 
    catch (System.Exception e) 
    { 
     Debug.Log("Error playing sound: " + e.Message); 
    } 
} 
+0

Спасибо за ваш ответ, к сожалению, в обоих случаях результат тот же. Редактор завершается без сообщения, показанного в прикрепленной Visual Studio, кроме «Приложения« Единство », закрытого с кодом 0'. – Appleshell

+0

@Appleshell Если вы закомментируете функцию Play(), она все еще закрыта? – Programmer

+0

Нет, это, безусловно, призыв к «Play». – Appleshell

 Смежные вопросы

  • Нет связанных вопросов^_^