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); }
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; }
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(); }
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; } }