WAV
Wav Format

The wav format is used to play with a modern Diagital Analog Converter (DAC).
It is the CD-Format with 44,1 kHz and a sampling rate 16 Bit.
It is compressed but without any lost information, such as a mp3 file.

I hear music with flacs, dsf and wav file with a T&A DAC 8 DSD.
But the Media Player I choose want to regist all files.
For me, that was uncomfortable, so I wrote MY own audio player.

Properties:
- There is a tree list for the folder of the solngs
- One can choose one or many folder to read the songs.
- The are read recursivly.
- The program can stop, start, and play behind and forward to the song.
- The program can change the volume ot the music.
- The program show the title, samplingrate and bitrate from the songs.

Therefore I have to read the mp3, wav and flac file, to read the informations.

Description_Audioplayer.pdf

AudioPlayer.exe
AudioPlayer.zip
AudioPlayer-Source.zip




Source in c#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.IO;

namespace AudioPlayer.Tools {
  public class Wave {
    public String filename = "";
    public String album = "";
    public String artist = "";
    public String title = "";


    public int samplerate = 0;
    public int minutes = 0;
    public int seconds = 0;
    public int bitcount = 0;

    public Wave(String filename) {
      this.filename = filename;
    }

    /*  Little Endian-Format !!X
      *      R I F F ? ? ? ? W A V E f m t 
        000000 52 49 46 46 94 75 2D 02 57 41 56 45 66 6D 74 20  RIFF?u-.WAVEfmt_
            wchannel       44 kHZ
            -----      ----------- 
        000010 10 00 00 00  01 00 02 00 44 AC  00 00 10 B1 02 00  ........D¬...±..
        000020 04 00 10 00 64 61 74 61 70 75 2D 02 00 00 00 00  ....datapu-.....
    */
    public bool readSamplerate() {
      FileStream fin = new FileStream(this.filename, FileMode.Open, FileAccess.Read);
      BinaryReader bin = new BinaryReader(fin);
      // RIFF 36553660 2490707202

      byte[] headerSoll = { 0x52, 0x49, 0x46, 0x46 };
      byte[] header = new byte[headerSoll.Length];
      header = bin.ReadBytes(header.Length);
      for (int i = 0; i < headerSoll.Length; i++) {
        if (headerSoll[i] != header[i]) {
          Basis.ErrorMsg("Error, the audiofile is not a Wav-File (RIFF)\r\n" + filename, "Error");
          bin.Close();
          fin.Close();
          return false;
        }
      } // 94752D02
      byte[] waveSoll = { 0x57, 0x41, 0x56, 0x41 };
      byte[] waveIst = new byte[waveSoll.Length];
      waveIst = bin.ReadBytes(4); // dummy Bytes dazwishcen
      waveIst = bin.ReadBytes(waveIst.Length);
      for (int i = 0; i < headerSoll.Length; i++) {
        if (headerSoll[i] != header[i]) {
          Basis.ErrorMsg("Error, the audiofile is not a Wav-File (WAVE)\r\n" + filename, "Error");
          bin.Close();
          fin.Close();
          return false;
        }
      }

      byte[] ftm = new byte[4];
      ftm = bin.ReadBytes(ftm.Length); // 66 6D 74 20

      byte[] formatTag = new byte[2];
      formatTag = bin.ReadBytes(formatTag.Length); // 01 00 little endian

      byte[] channels = new byte[2];
      channels = bin.ReadBytes(channels.Length); // 01 00 little endian

      byte[] dummy = new byte[4];
      dummy = bin.ReadBytes(dummy.Length); // 01 00 little endian

      byte[] samplerates = new byte[4];
      dummy = bin.ReadBytes(dummy.Length); // 01 00 little endian
      samplerates[0] = dummy[3];
      samplerates[1] = dummy[2];
      samplerates[2] = dummy[1];
      samplerates[3] = dummy[0];
            
      int b0 = (int)samplerates[0];
      int b1 = (int)samplerates[1];
      int b2 = (int)samplerates[2];
      int b3 = (int)samplerates[3];
      samplerate = (b0 << 24) | (b1 << 16) | (b2 << 8) | (b3);

      //fin.Seek(0x12, SeekOrigin.Begin); // jump to the first byte of the sampleRate

      dummy = new byte[5];
      dummy = bin.ReadBytes(dummy.Length); // 01 00 little endian

      byte[] bitsPerSamples = new byte[2];
      bitsPerSamples = bin.ReadBytes(bitsPerSamples.Length); // 01 00 little endian
      int bc1 = bitsPerSamples[1];
      int bc0 = bitsPerSamples[0];


      bitcount = (bc0 << 8) | bc1;

      bin.Close();
      fin.Close();
      return true;
    }
    


  }
}