Autor Beitrag
SharinganShuriken
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

Windows 7 Home Premium (64 Bit)
Visual Studio 2010 Professional, C# - SlimDX - Direct3D11
BeitragVerfasst: Mo 04.11.13 21:30 
Hallo liebe Community,

ich versuche gerade mit einem eigenen Code eine Wave Sound File zu lesen und abzuspielen nur ich bekomme beim abspielen der Sound File immer am Anfang ein kleines Knistern. :cry:

Voher habe ich das immer über diesen Code gemacht und da hat auch alles wunderbar geklappt nur ich will mich jetzt unabhängig von der WaveStream Klasse machen.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
            using (WaveStream waveFile = new WaveStream(fileName))
            {
                this.description = new SoundBufferDescription();
                this.description.Format = waveFile.Format;
                this.description.SizeInBytes = (int)waveFile.Length;
                this.description.Flags = BufferFlags.ControlFrequency | BufferFlags.ControlPan | BufferFlags.ControlVolume;

                this.buffer = new SecondarySoundBuffer(device, this.description);

                this.data = new byte[this.description.SizeInBytes];
                waveFile.Read(this.data, 0, (int)waveFile.Length);
                this.buffer.Write(this.data, 0, LockFlags.None);
            }


So sieht jetzt meine Version aus:
Quelle des Headers wo ich nachgeschaut habe: ccrma.stanford.edu/c...projects/WaveFormat/

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
            using (FileStream fileStream = new FileStream(fileName, FileMode.Open))
            {
                int length = (int)fileStream.Length;

                byte[] waveBuffer = new byte[length];
                fileStream.Read(waveBuffer, 0, length);

                WaveFormat waveFormat = new WaveFormat();
                waveFormat.FormatTag = WaveFormatTag.Pcm;
                waveFormat.Channels = (short)Mathhelper.GetShort(waveBuffer, 22);
                waveFormat.SamplesPerSecond = (int)Mathhelper.GetInt(waveBuffer, 24);
                waveFormat.BlockAlignment = (short)Mathhelper.GetShort(waveBuffer, 32);
                waveFormat.BitsPerSample = (short)Mathhelper.GetShort(waveBuffer, 34);
                waveFormat.AverageBytesPerSecond = waveFormat.SamplesPerSecond * waveFormat.BlockAlignment;

                this.description = new SoundBufferDescription();
                this.description.Format = waveFormat;
                this.description.SizeInBytes = length;
                this.description.Flags = BufferFlags.ControlFrequency | BufferFlags.ControlPan | BufferFlags.ControlVolume;

                this.buffer = new SecondarySoundBuffer(device, this.description);

                this.buffer.Write(waveBuffer, 0, LockFlags.None);
            }


Das Format das ich der SoundBufferDescription zuweiße ist genau die selbe wie im ersten Code, der einzige Unterschied jetzt zwischen diesen beiden Codes ist das der erste Code vom der File Länge 44940004 hat und der zweite 44944100, habe dann bei length 44940004 hingeschrieben um zu sehen ob es einen Unterschied macht, war aber erfolglos gewesen, jetzt frage ich mich zwei Dinge: 1. Wieso sind die Größen unterschiedlich und 2. Wieso bekomme ich immer ein kleines Knistern beim Abspielen am Anfang der Wave Sound File :cry: ???

Alles Liebe
SharinganShuriken
UeberEck
Hält's aus hier
Beiträge: 13
Erhaltene Danke: 7



BeitragVerfasst: Do 13.03.14 11:07 
Hi SharinganShuriken
Im unteren Code Castet du die länge ja in einen Integer. Genau desshalb entshtenen die unterschiedlichen Größen der Files.
Hast du schonmal versucht bei dem Code: "fileStream.Read(waveBuffer, 0, length);" den Reader ab 1 bzw 10 starten zu lassen?
Dürfte eigentlich das Problem sein was ich hier raussehe