public static short[] ADPCMToPCM16(byte[] data) { var decoder = new ADPCMDecoder(data); short[] buffer = new short[(data.Length - 4) * 2]; for (int i = 0; i < buffer.Length; i++) { buffer[i] = decoder.GetSample(); } return(buffer); }
public AudioViewer(IDevice ADevice, IReadOnlyList <IService> services) { AllSamples = new List <short>(); Decoder = new ADPCMDecoder(32000 / 10); Player = DependencyService.Get <IPCMAudio>(); BleDevice = ADevice; InitUI(); service = services.First((s) => s.Id == GUID_SERVICE); Decoder.PCMOutput += Decoder_PCMOutput; Read(); }
public void StartPCM(SWAR.SWAV swav, int noteDuration) { Type = InstrumentType.PCM; _dataOffset = 0; _swav = swav; if (swav.Format == SWAVFormat.ADPCM) { _adpcmDecoder = new ADPCMDecoder(swav.Samples); } BaseTimer = swav.Timer; Start(noteDuration); }
public bool StartPCM(SWD localswd, SWD masterswd, byte voice, int key, uint noteLength) { SWD.IProgramInfo programInfo = localswd.Programs.ProgramInfos[voice]; if (programInfo != null) { for (int i = 0; i < programInfo.SplitEntries.Length; i++) { SWD.ISplitEntry split = programInfo.SplitEntries[i]; if (key >= split.LowKey && key <= split.HighKey) { sample = masterswd.Samples[split.SampleId]; Key = (byte)key; RootKey = split.SampleRootKey; BaseTimer = (ushort)(NDS.Utils.ARM7_CLOCK / sample.WavInfo.SampleRate); if (sample.WavInfo.SampleFormat == SampleFormat.ADPCM) { adpcmDecoder = new ADPCMDecoder(sample.Data); } //attackVolume = sample.WavInfo.AttackVolume == 0 ? split.AttackVolume : sample.WavInfo.AttackVolume; //attack = sample.WavInfo.Attack == 0 ? split.Attack : sample.WavInfo.Attack; //decay = sample.WavInfo.Decay == 0 ? split.Decay : sample.WavInfo.Decay; //sustain = sample.WavInfo.Sustain == 0 ? split.Sustain : sample.WavInfo.Sustain; //hold = sample.WavInfo.Hold == 0 ? split.Hold : sample.WavInfo.Hold; //decay2 = sample.WavInfo.Decay2 == 0 ? split.Decay2 : sample.WavInfo.Decay2; //release = sample.WavInfo.Release == 0 ? split.Release : sample.WavInfo.Release; //attackVolume = split.AttackVolume == 0 ? sample.WavInfo.AttackVolume : split.AttackVolume; //attack = split.Attack == 0 ? sample.WavInfo.Attack : split.Attack; //decay = split.Decay == 0 ? sample.WavInfo.Decay : split.Decay; //sustain = split.Sustain == 0 ? sample.WavInfo.Sustain : split.Sustain; //hold = split.Hold == 0 ? sample.WavInfo.Hold : split.Hold; //decay2 = split.Decay2 == 0 ? sample.WavInfo.Decay2 : split.Decay2; //release = split.Release == 0 ? sample.WavInfo.Release : split.Release; attackVolume = split.AttackVolume == 0 ? sample.WavInfo.AttackVolume == 0 ? (byte)0x7F : sample.WavInfo.AttackVolume : split.AttackVolume; attack = split.Attack == 0 ? sample.WavInfo.Attack == 0 ? (byte)0x7F : sample.WavInfo.Attack : split.Attack; decay = split.Decay == 0 ? sample.WavInfo.Decay == 0 ? (byte)0x7F : sample.WavInfo.Decay : split.Decay; sustain = split.Sustain == 0 ? sample.WavInfo.Sustain == 0 ? (byte)0x7F : sample.WavInfo.Sustain : split.Sustain; hold = split.Hold == 0 ? sample.WavInfo.Hold == 0 ? (byte)0x7F : sample.WavInfo.Hold : split.Hold; decay2 = split.Decay2 == 0 ? sample.WavInfo.Decay2 == 0 ? (byte)0x7F : sample.WavInfo.Decay2 : split.Decay2; release = split.Release == 0 ? sample.WavInfo.Release == 0 ? (byte)0x7F : sample.WavInfo.Release : split.Release; DetermineEnvelopeStartingPoint(); pos = 0; prevLeft = prevRight = 0; NoteLength = noteLength; return(true); } } } return(false); }
public static byte[]? Decompress(bool shouldDecompress, ref string audioFormat, byte[]?input) { if (input == null) { return(null); } if (!shouldDecompress) { return(input); } if (audioFormat.Equals("ADPCM", StringComparison.OrdinalIgnoreCase)) { using var archive = new FByteArchive("WhoDoesntLoveCats", input); switch (ADPCMDecoder.GetAudioFormat(archive)) { case EAudioFormat.WAVE_FORMAT_PCM: audioFormat = "WAV"; return(input); case EAudioFormat.WAVE_FORMAT_ADPCM: return(input); } } else if (audioFormat.Equals("OPUS", StringComparison.OrdinalIgnoreCase)) { return(input); } else if (audioFormat.Equals("WEM", StringComparison.OrdinalIgnoreCase)) { return(input); } else if (audioFormat.IndexOf("OGG", StringComparison.OrdinalIgnoreCase) > -1) { audioFormat = "OGG"; return(input); } return(null); }