Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            try
            {
                //var file = new NAudio.Wave.WaveFileReader("pocsag-short-2400.wav");
                //var file = new NAudio.Wave.WaveFileReader("SDRSharp_20210407_174912Z_153350000Hz_AF.wav");
                var file = new NAudio.Wave.WaveFileReader("POCSAG500_interference_tonyp.wav");

                var samples = new List <float>();

                while (true)
                {
                    var frame = file.ReadNextSampleFrame();

                    if (frame == null)
                    {
                        break;
                    }

                    samples.Add(frame[0]);
                }

                var decodes = 0;

                var pocsagManager =
                    new Manager(
                        file.WaveFormat.SampleRate,
                        (PocsagMessage message) =>
                {
                    if (!message.IsValid)
                    {
                        return;
                    }

                    Console.Write($"{message.Bps} {message.ErrorsCorrected} ");
                    Console.WriteLine(message.Payload);

                    decodes++;
                });

                foreach (var sample in samples)
                {
                    pocsagManager.Process(sample);
                }

                Console.WriteLine($"Decodes: {decodes}");
            }
            catch (Exception exception)
            {
                Log.LogException(exception);
                Console.WriteLine($"Exception: {exception.Message}");
            }

            Console.WriteLine("Done.");
            Console.ReadKey(true);
        }
Ejemplo n.º 2
0
        public void ProduceFullAudioClipData(FullAudioClipData fullAudioClipData)
        {
            string            ResourcesRootDirectory = BmsChartFolder;
            BmsAudioGenerator bmsAudioGenerator      = new BmsAudioGenerator(44100, 2);
            int TotalCount  = NativeBmsChart.Events.Count;
            int LoadedCount = 0;

            foreach (BMSEvent Event in NativeBmsChart.Events)
            {
                switch (Event.type)
                {
                case BMSEventType.LongNoteEnd:
                case BMSEventType.LongNoteStart:
                case BMSEventType.Note:
                case BMSEventType.WAV:
                    BMSResourceData resourceData = new BMSResourceData();
                    if (!NativeBmsChart.TryGetResourceData(ResourceType.wav, Event.data2, out resourceData))
                    {
                        continue;
                    }
                    string FileName        = Path.GetFileNameWithoutExtension(resourceData.dataPath);
                    string OggResourcePath = (ResourcesRootDirectory + "/" + FileName + ".ogg").Replace("\\", "/");
                    string WavResourcePath = (ResourcesRootDirectory + "/" + FileName + ".wav").Replace("\\", "/");
                    if (File.Exists(OggResourcePath))
                    {
                        NVorbis.VorbisReader vorbisReader = new NVorbis.VorbisReader(OggResourcePath);
                        float[] oggData = new float[vorbisReader.TotalSamples * vorbisReader.Channels];
                        vorbisReader.ReadSamples(oggData, 0, (int)(vorbisReader.TotalSamples * vorbisReader.Channels));
                        bmsAudioGenerator.PutAudioAt((float)Event.time.TotalSeconds, oggData);
                    }
                    else if (File.Exists(WavResourcePath))
                    {
                        List <float> wavData = new List <float>();
                        NAudio.Wave.WaveFileReader waveFileReader = new NAudio.Wave.WaveFileReader(WavResourcePath);
                        float[] wavFrame;
                        while (true)
                        {
                            wavFrame = waveFileReader.ReadNextSampleFrame();
                            if (wavFrame == null)
                            {
                                break;
                            }
                            wavData.AddRange(wavFrame);
                        }
                        bmsAudioGenerator.PutAudioAt((float)Event.time.TotalSeconds, wavData.ToArray());
                    }
                    break;
                }
                LoadedCount++;
                fullAudioClipData.Percent = 100f * LoadedCount / TotalCount;
            }
            fullAudioClipData.Data        = bmsAudioGenerator.Data;
            fullAudioClipData.IsCompleted = true;
        }
Ejemplo n.º 3
0
 static void Main(string[] args)
 {
     NAudio.Wave.WaveFileReader wave = new NAudio.Wave.WaveFileReader(@"C:\Users\Christoph Royer\Documents\Visual Studio 2017\Projects\Artsy Stuff\Audioframe\bin\Debug\Rick Astley - Never Gonna Give You Up.wav");
     wave.Skip(30);
     for (int i = 0; i < 5000; i++)
     {
         float[] frame = wave.ReadNextSampleFrame();
         Console.WriteLine(frame[0]);
     }
     Console.ReadLine();
 }
Ejemplo n.º 4
0
        public void nextRender(NAudio.Wave.WaveFileReader wavReader)
        {
            //[0] for right, [1] for left
            float[,] sample = new float[sampleSize, 2];

            for (int i = 0; i < sampleSize; i++)
            {
                float[] frame = wavReader.ReadNextSampleFrame();
                for (int x = 0; x < 2; x++)
                {
                    try
                    {
                        sample[i, x] = frame[x];
                    }
                    catch
                    {
                        vol   = null;
                        pitch = null;
                        return;
                    }
                }
            }
            passedSamples++;

            for (int side = 0; side < 2; side++)
            {
                float        avgPeak = 0, avgLow = 0;
                float        lastFrame = 0;
                int          curveCount = 0;
                bool         rising = true;
                List <float> peaks = new List <float>(), lows = new List <float>();

                for (int samplePos = 0; samplePos < sampleSize; samplePos++)
                {
                    float frame = sample[samplePos, side];
                    if (rising != (0 < frame))
                    {
                        if (rising)
                        {
                            lows.Add(frame);
                        }
                        else
                        {
                            peaks.Add(frame);
                        }

                        rising = !rising;
                        curveCount++;
                        lastFrame = frame;
                    }
                }

                if (lows.Count == 0)
                {
                    lows.Add(0);
                }

                if (peaks.Count == 0)
                {
                    peaks.Add(0);
                }

                foreach (float low in lows)
                {
                    avgLow += low;
                }
                avgLow /= curveCount;
                foreach (float peak in peaks)
                {
                    avgPeak += peak;
                }
                avgPeak  /= curveCount;
                vol[side] = avgPeak - avgLow;

                pitch[side] = (float)curveCount / (float)sampleSize;
            }
        }