This commit is contained in:
Chikashi Miyama 2019-10-05 18:09:24 +02:00
parent 02c73bd350
commit cb599bf5ca
17 changed files with 137 additions and 110 deletions

View file

@ -66,8 +66,8 @@
<Compile Include="Assets\Scripts\PdConnection\DspController.cs" /> <Compile Include="Assets\Scripts\PdConnection\DspController.cs" />
<Compile Include="Assets\Scripts\PdConnection\MidiParser.cs" /> <Compile Include="Assets\Scripts\PdConnection\MidiParser.cs" />
<Compile Include="Assets\Scripts\PdConnection\PdReceiver.cs" /> <Compile Include="Assets\Scripts\PdConnection\PdReceiver.cs" />
<Compile Include="Assets\Scripts\PdConnection\SpectrumArrayContainer.cs" /> <Compile Include="Assets\Scripts\PdConnection\PdArrayContainer.cs" />
<Compile Include="Assets\Scripts\PdConnection\SpectrumArraySelector.cs" /> <Compile Include="Assets\Scripts\PdConnection\PdArraySelector.cs" />
<Compile Include="Assets\Scripts\PdConnection\ISpectrumGenerator.cs" /> <Compile Include="Assets\Scripts\PdConnection\ISpectrumGenerator.cs" />
<Compile Include="Assets\Scripts\PdConnection\PdArray.cs" /> <Compile Include="Assets\Scripts\PdConnection\PdArray.cs" />
<Compile Include="Assets\Scripts\PdConnection\PdBackend.cs" /> <Compile Include="Assets\Scripts\PdConnection\PdBackend.cs" />
@ -76,7 +76,6 @@
<Compile Include="Assets\Scripts\PdConnection\PdSender.cs" /> <Compile Include="Assets\Scripts\PdConnection\PdSender.cs" />
<Compile Include="Assets\Scripts\PdConnection\PdSpectrumBind.cs" /> <Compile Include="Assets\Scripts\PdConnection\PdSpectrumBind.cs" />
<Compile Include="Assets\Scripts\PdConnection\SpectrumGeneratorPlayMode.cs" /> <Compile Include="Assets\Scripts\PdConnection\SpectrumGeneratorPlayMode.cs" />
<Compile Include="Assets\Scripts\PdConnection\WaveformTexture.cs" />
<Compile Include="Assets\Scripts\TemplateLibrary\ChangeObserver.cs" /> <Compile Include="Assets\Scripts\TemplateLibrary\ChangeObserver.cs" />
<Compile Include="Assets\Scripts\Versioning\VersionToggleBehaviour.cs" /> <Compile Include="Assets\Scripts\Versioning\VersionToggleBehaviour.cs" />
<Compile Include="Assets\Scripts\VideoInput\ComponentFactory.cs" /> <Compile Include="Assets\Scripts\VideoInput\ComponentFactory.cs" />

View file

@ -7,7 +7,7 @@ namespace cylvester
[TestFixture] [TestFixture]
public class UnitTest_SpectrumGeneratorPlayMode public class UnitTest_SpectrumGeneratorPlayMode
{ {
private ISpectrumArraySelector spectrumArraySelector_; private IPdArraySelector pdArraySelector_;
private Rect selectionRect_; private Rect selectionRect_;
private Rect noSelectionRect_; private Rect noSelectionRect_;
private float[] dummyData_; private float[] dummyData_;
@ -17,8 +17,8 @@ namespace cylvester
public void SetUp() public void SetUp()
{ {
dummyData_ = new float[100]; dummyData_ = new float[100];
spectrumArraySelector_ = Substitute.For<ISpectrumArraySelector>(); pdArraySelector_ = Substitute.For<IPdArraySelector>();
spectrumArraySelector_.SelectedArray.Returns(dummyData_); pdArraySelector_.SelectedArray.Returns(dummyData_);
selectionRect_ = new Rect {x = 9, y = 9, width = 3, height = 3}; selectionRect_ = new Rect {x = 9, y = 9, width = 3, height = 3};
noSelectionRect_ = new Rect {width = 0, height = 0}; noSelectionRect_ = new Rect {width = 0, height = 0};
} }
@ -26,7 +26,7 @@ namespace cylvester
[Test] [Test]
public void Construction() public void Construction()
{ {
var spectrumGenerator = new SpectrumGeneratorPlayMode(100, 101, spectrumArraySelector_); var spectrumGenerator = new SpectrumGeneratorPlayMode(100, 101, pdArraySelector_);
Assert.AreEqual(100, spectrumGenerator.Spectrum.width); Assert.AreEqual(100, spectrumGenerator.Spectrum.width);
Assert.AreEqual(101, spectrumGenerator.Spectrum.height); Assert.AreEqual(101, spectrumGenerator.Spectrum.height);
@ -38,7 +38,7 @@ namespace cylvester
for (var i = 0; i < dummyData_.Length; ++i) for (var i = 0; i < dummyData_.Length; ++i)
dummyData_[i] = 100f; // loud sound dummyData_[i] = 100f; // loud sound
var spectrumGenerator = new SpectrumGeneratorPlayMode(100, 100, spectrumArraySelector_); var spectrumGenerator = new SpectrumGeneratorPlayMode(100, 100, pdArraySelector_);
var validPixel = spectrumGenerator.Update(selectionRect_); var validPixel = spectrumGenerator.Update(selectionRect_);
Assert.AreEqual(1, validPixel); Assert.AreEqual(1, validPixel);
@ -50,7 +50,7 @@ namespace cylvester
for (var i = 0; i < dummyData_.Length; ++i) for (var i = 0; i < dummyData_.Length; ++i)
dummyData_[i] = 0.001f; // soft sound dummyData_[i] = 0.001f; // soft sound
var spectrumGenerator = new SpectrumGeneratorPlayMode(100, 100, spectrumArraySelector_); var spectrumGenerator = new SpectrumGeneratorPlayMode(100, 100, pdArraySelector_);
var validPixel = spectrumGenerator.Update(selectionRect_); var validPixel = spectrumGenerator.Update(selectionRect_);
Assert.AreEqual(0, validPixel); Assert.AreEqual(0, validPixel);
@ -62,7 +62,7 @@ namespace cylvester
for (var i = 0; i < dummyData_.Length; ++i) for (var i = 0; i < dummyData_.Length; ++i)
dummyData_[i] = 100f; // loud sound dummyData_[i] = 100f; // loud sound
var spectrumGenerator = new SpectrumGeneratorPlayMode(100, 100, spectrumArraySelector_); var spectrumGenerator = new SpectrumGeneratorPlayMode(100, 100, pdArraySelector_);
var validPixel = spectrumGenerator.Update(noSelectionRect_); var validPixel = spectrumGenerator.Update(noSelectionRect_);
Assert.AreEqual(0, validPixel); Assert.AreEqual(0, validPixel);

View file

@ -131,7 +131,6 @@ GameObject:
- component: {fileID: 90124700} - component: {fileID: 90124700}
- component: {fileID: 90124699} - component: {fileID: 90124699}
- component: {fileID: 90124698} - component: {fileID: 90124698}
- component: {fileID: 90124697}
m_Layer: 0 m_Layer: 0
m_Name: Spectrogram m_Name: Spectrogram
m_TagString: Untagged m_TagString: Untagged
@ -139,19 +138,6 @@ GameObject:
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!114 &90124697
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 90124696}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 126d8ce7fcb65564f97a02ec1f5d7fde, type: 3}
m_Name:
m_EditorClassIdentifier:
spectrogram: {fileID: 130019220}
--- !u!23 &90124698 --- !u!23 &90124698
MeshRenderer: MeshRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -223,6 +209,7 @@ GameObject:
- component: {fileID: 130019219} - component: {fileID: 130019219}
- component: {fileID: 130019218} - component: {fileID: 130019218}
- component: {fileID: 130019220} - component: {fileID: 130019220}
- component: {fileID: 130019221}
m_Layer: 0 m_Layer: 0
m_Name: PdBackend m_Name: PdBackend
m_TagString: Untagged m_TagString: Untagged
@ -274,6 +261,20 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
pdBackend: {fileID: 130019218} pdBackend: {fileID: 130019218}
channel: 1 channel: 1
--- !u!114 &130019221
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 130019217}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 773d4bc755fe4e4a9ddf830af14ff758, type: 3}
m_Name:
m_EditorClassIdentifier:
pdBackend: {fileID: 130019218}
channel: 1
--- !u!1 &404245778 --- !u!1 &404245778
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -283,6 +284,7 @@ GameObject:
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 404245779} - component: {fileID: 404245779}
- component: {fileID: 404245780}
m_Layer: 0 m_Layer: 0
m_Name: Planes m_Name: Planes
m_TagString: Untagged m_TagString: Untagged
@ -307,6 +309,22 @@ Transform:
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 3 m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &404245780
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 404245778}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 126d8ce7fcb65564f97a02ec1f5d7fde, type: 3}
m_Name:
m_EditorClassIdentifier:
waveform: {fileID: 130019221}
spectrogram: {fileID: 130019220}
waveformPanel: {fileID: 2147024058}
spectrogramPanel: {fileID: 90124696}
--- !u!1 &555401020 --- !u!1 &555401020
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -318,7 +336,6 @@ GameObject:
- component: {fileID: 555401024} - component: {fileID: 555401024}
- component: {fileID: 555401023} - component: {fileID: 555401023}
- component: {fileID: 555401022} - component: {fileID: 555401022}
- component: {fileID: 555401021}
m_Layer: 0 m_Layer: 0
m_Name: Spectrum m_Name: Spectrum
m_TagString: Untagged m_TagString: Untagged
@ -326,20 +343,6 @@ GameObject:
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!64 &555401021
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 555401020}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
serializedVersion: 3
m_Convex: 0
m_CookingOptions: 14
m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &555401022 --- !u!23 &555401022
MeshRenderer: MeshRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -357,7 +360,7 @@ MeshRenderer:
m_RenderingLayerMask: 1 m_RenderingLayerMask: 1
m_RendererPriority: 0 m_RendererPriority: 0
m_Materials: m_Materials:
- {fileID: 2100000, guid: 73c176f402d2c2f4d929aa5da7585d17, type: 2} - {fileID: 2100000, guid: 416cd1054fe561246b9c57b0f3b4ad15, type: 2}
m_StaticBatchInfo: m_StaticBatchInfo:
firstSubMesh: 0 firstSubMesh: 0
subMeshCount: 0 subMeshCount: 0
@ -788,7 +791,6 @@ GameObject:
- component: {fileID: 2147024062} - component: {fileID: 2147024062}
- component: {fileID: 2147024061} - component: {fileID: 2147024061}
- component: {fileID: 2147024060} - component: {fileID: 2147024060}
- component: {fileID: 2147024059}
m_Layer: 0 m_Layer: 0
m_Name: Waveform m_Name: Waveform
m_TagString: Untagged m_TagString: Untagged
@ -796,20 +798,6 @@ GameObject:
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!64 &2147024059
MeshCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2147024058}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
serializedVersion: 3
m_Convex: 0
m_CookingOptions: 14
m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &2147024060 --- !u!23 &2147024060
MeshRenderer: MeshRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -827,7 +815,7 @@ MeshRenderer:
m_RenderingLayerMask: 1 m_RenderingLayerMask: 1
m_RendererPriority: 0 m_RendererPriority: 0
m_Materials: m_Materials:
- {fileID: 2100000, guid: f044463ea66a19c47aef13261142b54e, type: 2} - {fileID: 2100000, guid: 416cd1054fe561246b9c57b0f3b4ad15, type: 2}
m_StaticBatchInfo: m_StaticBatchInfo:
firstSubMesh: 0 firstSubMesh: 0
subMeshCount: 0 subMeshCount: 0

View file

@ -6,18 +6,26 @@ namespace cylvester
{ {
public class TextureMapper : MonoBehaviour public class TextureMapper : MonoBehaviour
{ {
[SerializeField] private Waveform waveform;
[SerializeField] private Spectrogram spectrogram; [SerializeField] private Spectrogram spectrogram;
private Renderer renderer_;
[SerializeField] private GameObject waveformPanel;
[SerializeField] private GameObject spectrogramPanel;
private Renderer waveFormRenderer_;
private Renderer spectroGramRenderer_;
private static readonly int baseColorMap_ = Shader.PropertyToID("_BaseColorMap"); private static readonly int baseColorMap_ = Shader.PropertyToID("_BaseColorMap");
void Start() void Start()
{ {
renderer_ = GetComponent<Renderer>(); waveFormRenderer_ = waveformPanel.GetComponent<Renderer>();
spectroGramRenderer_ = spectrogramPanel.GetComponent<Renderer>();
} }
void Update() void Update()
{ {
renderer_.material.SetTexture(baseColorMap_, spectrogram.Texture); waveFormRenderer_.material.SetTexture(baseColorMap_, waveform.Texture);
spectroGramRenderer_.material.SetTexture(baseColorMap_, spectrogram.Texture);
} }
} }
} }

View file

@ -1,6 +1,6 @@
namespace cylvester namespace cylvester
{ {
public interface ISpectrumArrayContainer public interface IPdArrayContainer
{ {
IPdArray this[int index] { get; } IPdArray this[int index] { get; }
} }
@ -10,19 +10,19 @@ namespace cylvester
void Update(); void Update();
} }
public class SpectrumArrayContainer : ISpectrumArrayContainer, IUpdater public class PdArrayContainer : IPdArrayContainer, IUpdater
{ {
private readonly IPdArray[] arrays_; private readonly IPdArray[] arrays_;
private readonly IUpdater[] updaters_; private readonly IUpdater[] updaters_;
public SpectrumArrayContainer() public PdArrayContainer(string prefix)
{ {
arrays_ = new IPdArray[PdConstant.NumMaxInputChannels]; arrays_ = new IPdArray[PdConstant.NumMaxInputChannels];
updaters_ = new IUpdater[PdConstant.NumMaxInputChannels]; updaters_ = new IUpdater[PdConstant.NumMaxInputChannels];
for (var i = 0; i < PdConstant.NumMaxInputChannels; ++i) for (var i = 0; i < PdConstant.NumMaxInputChannels; ++i)
{ {
arrays_[i] = new PdArray("fft_" + i, PdConstant.FftSize); arrays_[i] = new PdArray(prefix + i, PdConstant.BlockSize);
updaters_[i] = (IUpdater) arrays_[i]; updaters_[i] = (IUpdater) arrays_[i];
} }
} }

View file

@ -1,17 +1,17 @@
namespace cylvester namespace cylvester
{ {
public interface ISpectrumArraySelector public interface IPdArraySelector
{ {
int Selection { set; } int Selection { set; }
float[] SelectedArray { get; } float[] SelectedArray { get; }
} }
public class SpectrumArraySelector : ISpectrumArraySelector public class PdArraySelector : IPdArraySelector
{ {
private int selection_; private int selection_;
private readonly ISpectrumArrayContainer arrayContainer_; private readonly IPdArrayContainer arrayContainer_;
public SpectrumArraySelector(ISpectrumArrayContainer arrayContainer) public PdArraySelector(IPdArrayContainer arrayContainer)
{ {
arrayContainer_ = arrayContainer; arrayContainer_ = arrayContainer;
} }

View file

@ -1,13 +1,12 @@
using System; using System;
using UnityEngine; using UnityEngine;
using UnityEngine.Events;
namespace cylvester namespace cylvester
{ {
public interface IPdBackend public interface IPdBackend
{ {
ISpectrumArrayContainer SpectrumArrayContainer{ get; } IPdArrayContainer SpectrumArrayContainer{ get; }
IPdArrayContainer WaveformArrayContainer{ get; }
} }
public class PdBackend : MonoBehaviour, IPdBackend public class PdBackend : MonoBehaviour, IPdBackend
@ -15,7 +14,6 @@ namespace cylvester
[SerializeField] UnityControlEvent onControlMessageReceived = null; [SerializeField] UnityControlEvent onControlMessageReceived = null;
public int samplePlayback; public int samplePlayback;
private IUpdater spectrumArrayUpdater_;
private IChangeObserver<int> samplePlaybackObserver_; private IChangeObserver<int> samplePlaybackObserver_;
@ -23,15 +21,22 @@ namespace cylvester
private IPdReceiver pdReceiver_; private IPdReceiver pdReceiver_;
private IMidiParser midiParser_; private IMidiParser midiParser_;
private IDspController dspController_; private IDspController dspController_;
public ISpectrumArrayContainer SpectrumArrayContainer { get; private set; }
public IPdArrayContainer SpectrumArrayContainer { get; private set; }
private IUpdater spectrumArrayUpdater_;
public IPdArrayContainer WaveformArrayContainer { get; private set; }
private IUpdater waveformArrayUpdater_;
private Action onSamplePlaybackChanged_; private Action onSamplePlaybackChanged_;
private Action<ControlMessage> onControlMessageReceived_; private Action<ControlMessage> onControlMessageReceived_;
private void Awake() private void Awake()
{ {
SpectrumArrayContainer = new SpectrumArrayContainer(); SpectrumArrayContainer = new PdArrayContainer("fft_");
WaveformArrayContainer = new PdArrayContainer("wave_");
spectrumArrayUpdater_ = (IUpdater) SpectrumArrayContainer; spectrumArrayUpdater_ = (IUpdater) SpectrumArrayContainer;
waveformArrayUpdater_ = (IUpdater) WaveformArrayContainer;
pdSender_ = new PdSender(PdConstant.ip, PdConstant.sendPort); pdSender_ = new PdSender(PdConstant.ip, PdConstant.sendPort);
pdReceiver_ = new PdReceiver(PdConstant.receivedPort); pdReceiver_ = new PdReceiver(PdConstant.receivedPort);
@ -69,6 +74,7 @@ namespace cylvester
{ {
pdReceiver_.Update(); pdReceiver_.Update();
spectrumArrayUpdater_.Update(); spectrumArrayUpdater_.Update();
waveformArrayUpdater_.Update();
samplePlaybackObserver_.Value = samplePlayback; samplePlaybackObserver_.Value = samplePlayback;
} }
} }

View file

@ -12,6 +12,6 @@ namespace cylvester
public static readonly string ip = "127.0.0.1"; public static readonly string ip = "127.0.0.1";
public static readonly int sendPort = 54345; public static readonly int sendPort = 54345;
public static readonly int receivedPort = 56765; public static readonly int receivedPort = 56765;
public static readonly int FftSize = 512; public static readonly int BlockSize = 512;
} }
} }

View file

@ -15,7 +15,7 @@ namespace cylvester
[SerializeField] private int channel = 0; [SerializeField] private int channel = 0;
private ISpectrumGenerator spectrumGenerator_; private ISpectrumGenerator spectrumGenerator_;
private ISpectrumArraySelector arraySelector_; private IPdArraySelector arraySelector_;
public int TextureWidth { get; } = 512; public int TextureWidth { get; } = 512;
public int TextureHeight { get; } = 256; public int TextureHeight { get; } = 256;
@ -24,7 +24,7 @@ namespace cylvester
private void Start() private void Start()
{ {
arraySelector_ = new SpectrumArraySelector(pdBackend.SpectrumArrayContainer); arraySelector_ = new PdArraySelector(pdBackend.SpectrumArrayContainer);
spectrumGenerator_ = new SpectrumGeneratorPlayMode(TextureWidth, TextureHeight, arraySelector_); spectrumGenerator_ = new SpectrumGeneratorPlayMode(TextureWidth, TextureHeight, arraySelector_);
} }

View file

@ -14,14 +14,14 @@ namespace cylvester
[SerializeField] private PdBackend pdBackend; [SerializeField] private PdBackend pdBackend;
[SerializeField, Range(1, 16)] private int channel = 1; [SerializeField, Range(1, 16)] private int channel = 1;
private SpectrumArraySelector spectrumArraySelector_; private IPdArraySelector spectrumArraySelector_;
private Texture2D texture_; private Texture2D texture_;
private int index_; private int index_;
void Start() void Start()
{ {
spectrumArraySelector_ = new SpectrumArraySelector(pdBackend.SpectrumArrayContainer); spectrumArraySelector_ = new PdArraySelector(pdBackend.SpectrumArrayContainer);
texture_ = new Texture2D(PdConstant.FftSize, PdConstant.FftSize, TextureFormat.R8, false); texture_ = new Texture2D(PdConstant.BlockSize, PdConstant.BlockSize, TextureFormat.R8, false);
var pixels = texture_.GetPixels(); var pixels = texture_.GetPixels();
for (var i = 0;i < pixels.Length; ++i) for (var i = 0;i < pixels.Length; ++i)
@ -34,7 +34,7 @@ namespace cylvester
{ {
spectrumArraySelector_.Selection = channel - 1; spectrumArraySelector_.Selection = channel - 1;
var array = spectrumArraySelector_.SelectedArray; var array = spectrumArraySelector_.SelectedArray;
for (var i = 0; i < PdConstant.FftSize; i++) for (var i = 0; i < PdConstant.BlockSize; i++)
{ {
texture_.SetPixel(i, index_, new Color(array[i], 0f, 0f)); texture_.SetPixel(i, index_, new Color(array[i], 0f, 0f));
} }
@ -42,7 +42,7 @@ namespace cylvester
texture_.Apply(); texture_.Apply();
index_++; index_++;
index_ %= PdConstant.FftSize; index_ %= PdConstant.BlockSize;
} }
public Texture2D Texture => texture_; public Texture2D Texture => texture_;

View file

@ -4,9 +4,9 @@ namespace cylvester
{ {
public class SpectrumGeneratorPlayMode : SpectrumGenerator, ISpectrumGenerator public class SpectrumGeneratorPlayMode : SpectrumGenerator, ISpectrumGenerator
{ {
private ISpectrumArraySelector arraySelector_; private IPdArraySelector arraySelector_;
public SpectrumGeneratorPlayMode(int textureWidth, int textureHeight, ISpectrumArraySelector arraySelector) public SpectrumGeneratorPlayMode(int textureWidth, int textureHeight, IPdArraySelector arraySelector)
:base(textureWidth, textureHeight) :base(textureWidth, textureHeight)
{ {
arraySelector_ = arraySelector; arraySelector_ = arraySelector;

View file

@ -0,0 +1,51 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace cylvester
{
public interface IWaveform
{
Texture2D Texture { get; }
}
public class Waveform : MonoBehaviour, ISpectrogram
{
[SerializeField] private PdBackend pdBackend;
[SerializeField, Range(1, 16)] private int channel = 1;
private IPdArraySelector waveformArraySelector_;
private Texture2D texture_;
private int[] cache_;
void Start()
{
cache_ = new int[PdConstant.BlockSize];
waveformArraySelector_ = new PdArraySelector(pdBackend.WaveformArrayContainer);
texture_ = new Texture2D(PdConstant.BlockSize, PdConstant.BlockSize, TextureFormat.R8, false);
var pixels = texture_.GetPixels();
for (var i = 0;i < pixels.Length; ++i)
pixels[i] = Color.black;
texture_.SetPixels(pixels);
texture_.Apply();
}
void Update()
{
waveformArraySelector_.Selection = channel - 1;
var array = waveformArraySelector_.SelectedArray;
for (var i = 0; i < PdConstant.BlockSize; i++)
{
var y = (int)(256f * Mathf.Clamp(array[i], -1f, 1f)) + 256;
texture_.SetPixel(i , cache_[i], Color.black);
texture_.SetPixel(i , y, Color.white);
cache_[i] = y;
}
texture_.Apply();
}
public Texture2D Texture => texture_;
}
}

View file

@ -1,25 +0,0 @@
using UnityEngine;
namespace cylvester
{
public class WaveformTexture : MonoBehaviour
{
[SerializeField] PdBackend PdBackend = null;
[SerializeField, Range(1, 16)] private int channel = 1;
private Texture2D texture2D_;
private void Start()
{
texture2D_ = new Texture2D(PdConstant.FftSize, PdConstant.FftSize, TextureFormat.R16, false);
}
private void Update()
{
texture2D_.Apply();
}
}
}

View file

@ -1,4 +1,4 @@
#N canvas 800 326 670 468 10; #N canvas 412 304 670 468 10;
#X obj 217 251 adc~ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16; #X obj 217 251 adc~ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16;
#X obj 49 386 dac~, f 6; #X obj 49 386 dac~, f 6;
#N canvas 215 619 730 390 analyzers_______________________________ #N canvas 215 619 730 390 analyzers_______________________________