Beispiel #1
0
        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);
        }
Beispiel #2
0
 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();
 }
Beispiel #3
0
 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);
 }
Beispiel #4
0
 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);
 }
Beispiel #5
0
        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);
        }