Я пытаюсь сделать простую игру в Unity, и одна из вещей, которые я хочу иметь, - это игра, реагирующая на звук из -за пределов игры, используя системные аудиоканалы. В настоящее время то, что у меня есть, не работает, и оно бросает кнопку, я не мог найти никакого объяснения для других мест в Интернете (0x88890008).
Полная ошибка заключается в следующем: < /p>
System.Runtime.InteropServices.COMException (0x88890008)
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHR (System.Int32 errorCode) [0x0000a] in :0
at NAudio.CoreAudioApi.AudioClient.Initialize (NAudio.CoreAudioApi.AudioClientShareMode shareMode, NAudio.CoreAudioApi.AudioClientStreamFlags streamFlags, System.Int64 bufferDuration, System.Int64 periodicity, NAudio.Wave.WaveFormat waveFormat, System.Guid audioSessionGuid) [0x0001b] in :0
at NAudio.CoreAudioApi.WasapiCapture.InitializeCaptureDevice () [0x000b2] in :0
at NAudio.CoreAudioApi.WasapiCapture.StartRecording () [0x0001e] in :0
at PlayerAttacks.Start () [0x0003f] in C:\Users\goali\My project\Assets\PlayerAttacks.cs:25
UnityEngine.Debug:Log (object)
PlayerAttacks:Start () (at Assets/PlayerAttacks.cs:28)
< /code>
Я просто очень смущен, так как нигде не было никакой документации, за исключением некоторых относительно бесполезных проблем с GitHub с другими проектами, которые также используют Naudio и получают ту же ошибку . < /p>
рассматриваемый код следующим образом: < /p>
using UnityEngine;
using NAudio.Wave;
using UnityEngine.Rendering.Universal;
using System;
using NAudio.CoreAudioApi;
using System.Runtime.InteropServices;
using System.Diagnostics;
public class GetAudioData : MonoBehaviour
{
private WasapiLoopbackCapture capture = new();
private AudioSource source;
public int bufferSize = 64;
float[] nextData;
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
try
{
capture.ShareMode = AudioClientShareMode.Shared;
capture.DataAvailable += OnDataAvailable;
capture.RecordingStopped += RecordingStopped;
capture.StartRecording();
} catch(COMException e)
{
Debug.Log(e);
}
// Prefill audio data
nextData = new float[bufferSize];
ResetNextData();
source = GetComponent();
source.clip = AudioClip.Create("WasapiLoopbackCapture", nextData.Length, capture.WaveFormat.Channels, capture.WaveFormat.SampleRate, true, OnDataRead);
source.Play();
}
private void RecordingStopped(object sender, StoppedEventArgs e)
{
capture.Dispose();
ResetNextData();
}
private void OnDataAvailable(object sender, WaveInEventArgs e)
{
Debug.Log("Data Available");
Debug.Log(e.BytesRecorded);
// Record Data
}
void OnDataRead(float[] data)
{
Debug.Log("Data Read");
for(int i = 0; i < nextData.Length; i++)
{
data = nextData;
}
ResetNextData();
}
void ResetNextData()
{
for (int i = 0; i < nextData.Length; i++)
{
nextData = 0f;
}
}
private void Update()
{
float[] spectrum = float[64];
source.GetSpectrumData(spectrum, 0, FFTWindow.Hanning);
// Process Data from audio spectrum here
}
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... in-unity-6