Esempio n. 1
0
        public void RemoveChunk(AudioChunk chunk)
        {
            Init();
            if (_audioChunks.Contains(chunk))
            {
                _audioChunks.Remove(chunk);
            }

            TreeNode nodeToRemove = null;

            foreach (TreeNode item in _rootNode.Nodes)
            {
                if (item.Tag is AudioChunk)
                {
                    AudioChunk chunkItem = item.Tag as AudioChunk;
                    if (chunk == chunkItem)
                    {
                        nodeToRemove = item;
                        break;
                    }
                }
            }

            if (nodeToRemove != null)
            {
                _rootNode.Nodes.Remove(nodeToRemove);
            }
        }
Esempio n. 2
0
        private void btnSaveChunkWave_Click(object sender, EventArgs e)
        {
            AudioChunk chunk = GetSelectedChunk();

            if (chunk != null)
            {
                SaveFileDialog dlg = new SaveFileDialog();

                dlg.Filter           = "wave files (*.wav)|*.wav|All files (*.*)|*.*";
                dlg.RestoreDirectory = true;
                dlg.FileName         = "chunk";
                dlg.DefaultExt       = ".wav";

                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    using (FileStream stream = new FileStream(dlg.FileName, FileMode.Create, FileAccess.Write))
                    {
                        WaveStreamWriter streamWriter = new WaveStreamWriter(stream);

                        if (chunk.Oscillators.Count > 0)
                        {
                            streamWriter.WriteChunk(chunk);
                        }

                        streamWriter.Close();
                    }
                }
            }
        }
Esempio n. 3
0
        public void AddChunk(AudioChunk chunk)
        {
            Init();
            if (chunk == null)
            {
                return;
            }

            _audioChunks.Add(chunk);

            TreeNode chunkNode = new TreeNode("Chunk " + (_audioChunks.Count).ToString());

            chunkNode.Checked = true;
            chunkNode.Tag     = chunk;

            foreach (var osc in chunk.Oscillators)
            {
                TreeNode oscNode = new TreeNode(osc.ToString());

                oscNode.Checked = true;
                oscNode.Tag     = osc;

                chunkNode.Nodes.Add(oscNode);
            }


            _rootNode.Nodes.Add(chunkNode);
            chunkNode.ExpandAll();
            SelectedNode = chunkNode;
            TopNode      = chunkNode;
        }
Esempio n. 4
0
        private void btnAddOscListToChunk_Click(object sender, EventArgs e)
        {
            AudioChunk chunk = GetSelectedChunk();

            if (chunk == null)
            {
                return;
            }

            int freq     = (int)waveFormControl.Frequency;
            int duration = (int)waveFormControl.Duration;
            int amp      = (int)waveFormControl.Amplitude;

            List <WaveType> types = lvWaveForms.GetSelectedForms();

            foreach (var item in types)
            {
                chunk.AddOscillator(item, duration, freq, amp, 2);

                //chunk.AddOscillator(item, duration, freq, -amp, 2);
            }

            chunkTree.RemoveChunk(chunk);
            chunkTree.AddChunk(chunk);
        }
Esempio n. 5
0
        private AudioChunk Read_AudioChunk(BinaryReader reader)
        {
            var result = new AudioChunk();

            result.Version = ReadVersion(reader, 1, 0x1411A0F20);
            result.EnvironmentPrecomputeParameters = Read_EnvironmentPrecomputeParameters(reader);
            result.DoEnvironmentPrecompute         = reader.ReadBoolean();

            return(result);
        }
Esempio n. 6
0
        private void chunkTree_AfterSelect(object sender, TreeViewEventArgs e)
        {
            AudioChunk chunk = GetSelectedChunk();

            btnAddOscListToChunk.Enabled = (chunk != null);
            btnTestFullChunk.Enabled     = (chunk != null);

            if (e.Node.Level == 2)
            {
                waveFormSelected.SetForm((Oscillator)e.Node.Tag);
            }
        }
 public TransformerCodec( uint dataSize, PrimitiveReader reader, int frequency, int channels,
     int bitsPerSample, Transformer transformer, int codecBitsPerSample)
 {
     info = new AudioChunk();
     this.dataSize = dataSize;
     this.reader = reader;
     info.Frequency = frequency;
     info.Channels = channels;
     info.BitsPerSample = bitsPerSample;
     this.transformer = transformer;
     this.codecBitsPerSample = codecBitsPerSample;
     bufferSize = (int)( frequency * channels * codecBitsPerSample / 8 );
 }
Esempio n. 8
0
        private AudioChunk GetSelectedChunk()
        {
            AudioChunk chunk = null;

            if (chunkTree.SelectedNode != null)
            {
                TreeNode node = chunkTree.SelectedNode;

                if (node.Level == 1)
                {
                    chunk = (AudioChunk)node.Tag;
                }
            }

            return(chunk);
        }
Esempio n. 9
0
        private void btnLoadChunk_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();

            dlg.Filter           = "xml files (*.xml)|*.xml|All files (*.*)|*.*";
            dlg.RestoreDirectory = true;
            dlg.FileName         = "chunk";
            dlg.DefaultExt       = ".xml";

            if (dlg.ShowDialog() == DialogResult.OK)
            {
                using (FileStream stream = new FileStream(dlg.FileName, FileMode.Open, FileAccess.Read))
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(AudioChunk));
                    AudioChunk    chunk      = (AudioChunk)serializer.Deserialize(stream);

                    chunkTree.AddChunk(chunk);
                }
            }
        }
Esempio n. 10
0
        private void btnSaveChunk_Click(object sender, EventArgs e)
        {
            AudioChunk chunk = GetSelectedChunk();

            if (chunk != null)
            {
                SaveFileDialog dlg = new SaveFileDialog();

                dlg.Filter           = "xml files (*.xml)|*.xml|All files (*.*)|*.*";
                dlg.RestoreDirectory = true;
                dlg.FileName         = "chunk";
                dlg.DefaultExt       = ".xml";

                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    using (FileStream stream = new FileStream(dlg.FileName, FileMode.Create, FileAccess.Write))
                    {
                        XmlSerializer serializer = new XmlSerializer(typeof(AudioChunk));
                        serializer.Serialize(stream, chunk);
                    }
                }
            }
        }
Esempio n. 11
0
        private void btnTestFullChunk_Click(object sender, EventArgs e)
        {
            AudioChunk chunk = GetSelectedChunk();

            if (chunk == null)
            {
                return;
            }

            using (MemoryStream stream = new MemoryStream())
            {
                WaveStreamWriter streamWriter = new WaveStreamWriter(stream);

                if (chunk.Oscillators.Count > 0)
                {
                    streamWriter.WriteChunk(chunk);
                }

                streamWriter.Close();

                PlayStream(stream);
            }
        }
Esempio n. 12
0
        public IEnumerable<AudioChunk> StreamData( Stream source )
        {
            info = new AudioChunk();
            PrimitiveReader reader = new PrimitiveReader( source );
            while( true ) {
                // Read frame header
                BitReader bitReader = new BitReader( reader );
                bitReader.BigEndian = true;
                //Console.WriteLine( "start pos" + reader.Position );

                // Skip any padding('00') bytes before the start of a frame
                byte data = 0;
                while( ( data = reader.ReadByte() ) == 0 );

                // Make sure that the 'data' byte is the first 8 bits of the sync word.
                if( data != 0xFF ) {
                    throw new InvalidDataException( "Invalid frame sync value." );
                }
                int frameSync = bitReader.ReadBits( 3/*11*/ );
                if( frameSync != 0x7/*FF*/ ) {
                    throw new InvalidDataException( "Invalid frame sync value." );
                }
                int versionId = bitReader.ReadBits( 2 );
                int layerIndex = bitReader.ReadBits( 2 );
                bool crcProtection = bitReader.ReadBit() == 0;
                int bitrateIndex = bitReader.ReadBits( 4 );
                int samplingRateIndex = bitReader.ReadBits( 2 );

                bool padded = bitReader.ReadBit() != 0;
                int privateBit = bitReader.ReadBit();
                int channelMode = bitReader.ReadBits( 2 );
                int modeExtension = bitReader.ReadBits( 2 );
                int copyrightBit = bitReader.ReadBit();
                int originalBit = bitReader.ReadBit();
                int emphasis = bitReader.ReadBits( 2 );

                int bitrate = GetBitRate( (MpegVersion)versionId, layerIndex, bitrateIndex );
                info.Frequency = samplingRates[versionId][samplingRateIndex];

                ushort crc = 0;
                if( crcProtection ) {
                    crc = (ushort)bitReader.ReadBits( 16 );
                }
                MpegFrame frame = new MpegFrame();
                frame.Bitrate = bitrate;
                frame.ChannelMode = (ChannelMode)channelMode;
                frame.Channels = Common.GetNumberOfChannels( frame.ChannelMode );
                frame.CrcProtected = crcProtection;
                frame.Padding = padded;
                frame.ModeExtension = modeExtension;
                frame.SampleRate = info.Frequency;
                frame.Emphasis = emphasis;
                frame.Version = (MpegVersion)versionId;

                LayerIndex index2 = (LayerIndex)layerIndex;
                info.Data = null;
                //Console.WriteLine( "padding: {0}, type: {1}, sr: {2}, br: {3}",
                //frame.Padding, index2, frame.SampleRate, frame.Bitrate );
                if( layerIndex == (int)LayerIndex.Layer1 ) {
                    info.Data = decoder1.Decode( frame, bitReader );
                } else if( layerIndex == (int)LayerIndex.Layer2 ) {
                    info.Data = decoder2.Decode( frame, bitReader );
                } else if( layerIndex == (int)LayerIndex.Layer3 ) {
                    throw new NotSupportedException( "Layer III not supported" );
                } else {
                    throw new InvalidDataException( "Invalid layer" );
                }
                info.Channels = frame.Channels;
                info.BitsPerSample = 16;
                //if( bitReader.offset == 8 ) {
                //reader.ReadByte();
                //}
                yield return info;
            }
        }
Esempio n. 13
0
        private void button_Click(object sender, RoutedEventArgs e)
        {
            using (FileStream stream = new FileStream(".\\output.wav", FileMode.Create, FileAccess.Write, FileShare.None, 8 * 1024 * 1024))
            {
                WaveStreamWriter streamWriter = new WaveStreamWriter(stream);

                int duration          = 100;
                int repeatGlobalCount = 10;
                int freq = 60;

                AudioChunk motorChunk      = SampleHelper.MakeChordChunk(400, 30, 6000);
                Oscillator silence600      = SampleHelper.MakeSilenceOscillator(600);
                AudioChunk smallBassChunk1 = SampleHelper.MakeBassChunk(40, 80, 12000);
                Oscillator silence200      = SampleHelper.MakeSilenceOscillator(200);
                Oscillator silence100      = SampleHelper.MakeSilenceOscillator(100);
                AudioChunk smallBassChunk2 = SampleHelper.MakeBassChunk2(40, 80, 12000);


                Oscillator sine     = new Oscillator(WaveType.Sine, 40, 80, 12000, 2);
                Oscillator square   = new Oscillator(WaveType.Square, 40, 80, 12000, 2);
                Oscillator triangle = new Oscillator(WaveType.Triangle, 40, 80, 12000, 2);
                Oscillator sawtooth = new Oscillator(WaveType.Sawtooth, 40, 80, 12000, 2);

                streamWriter.WriteOscillator(sine);
                streamWriter.WriteOscillator(silence200);

                streamWriter.WriteOscillator(sine);
                streamWriter.WriteOscillator(silence200);
                streamWriter.WriteOscillator(silence200);

                streamWriter.WriteOscillator(square);
                streamWriter.WriteOscillator(silence200);

                streamWriter.WriteOscillator(square);
                streamWriter.WriteOscillator(silence200);
                streamWriter.WriteOscillator(silence200);

                streamWriter.WriteOscillator(triangle);
                streamWriter.WriteOscillator(silence200);

                streamWriter.WriteOscillator(triangle);
                streamWriter.WriteOscillator(silence200);
                streamWriter.WriteOscillator(silence200);


                streamWriter.WriteOscillator(sawtooth);
                streamWriter.WriteOscillator(silence200);

                streamWriter.WriteOscillator(sawtooth);
                streamWriter.WriteOscillator(silence200);
                streamWriter.WriteOscillator(silence200);



                //for (int j = 0; j < 1; j++)
                //{
                //    for (int i = 0; i < 2; i++)
                //    {
                //        for (int z = 0; z < 3; z++)
                //        {
                //            streamWriter.WriteChunk(smallBassChunk1);
                //            streamWriter.WriteOscillator(silence200);
                //        }

                //        for (int z = 0; z < 2; z++)
                //        {
                //            streamWriter.WriteChunk(smallBassChunk1);
                //            streamWriter.WriteOscillator(silence100);
                //        }
                //    }


                //    for (int i = 0; i < 4; i++)
                //    {
                //        for (int z = 0; z < 3; z++)
                //        {
                //            streamWriter.WriteChunk(smallBassChunk2);
                //            streamWriter.WriteOscillator(silence200);
                //        }

                //        for (int z = 0; z < 2; z++)
                //        {
                //            streamWriter.WriteChunk(smallBassChunk2);
                //            streamWriter.WriteOscillator(silence100);
                //        }
                //    }

                //}


                //for (int i = 0; i < 3; i++)
                //{
                //    streamWriter.WriteChunk(motorChunk);
                //    streamWriter.WriteOscillator(silence600);
                //}

                //for (int z = 0; z < 10; z++)
                //{
                //    streamWriter.WriteChunk(smallBassChunk2);
                //    streamWriter.WriteOscillator(silence200);
                //}


                //freq = 60;

                //for (int z = 0; z < 5; z++)
                //{
                //    streamWriter.WriteChunk(SampleHelper.MakeChordChunk(duration * 2, freq, 3000));
                //    streamWriter.WriteSilenceChunk(100);
                //    streamWriter.WriteChunk(SampleHelper.MakeChordChunk(duration * 2, freq, 3000));
                //    streamWriter.WriteSilenceChunk(50);
                //    streamWriter.WriteChunk(SampleHelper.MakeChordChunk(duration * 2, freq, 3000));
                //    streamWriter.WriteSilenceChunk(duration);
                //}


                //for (int j = 0; j < 2; j++)
                //{
                //    freq = 60;
                //    for (int k = 0; k < 3; k++)
                //    {
                //        //WriteSample(MakeSample(duration, 50, 300), writer);
                //        //WriteSample(MakeSilenceSample(200), writer);
                //        SequenceHelper.WriteSample(SequenceHelper.MakeSample(duration * 2, freq, 3000), writer);
                //        SequenceHelper.WriteSilenceSample(100, writer);
                //        SequenceHelper.WriteSample(SequenceHelper.MakeSample(duration * 2, freq, 3000), writer);
                //        SequenceHelper.WriteSilenceSample(50, writer);
                //        SequenceHelper.WriteSample(SequenceHelper.MakeSample(duration * 2, freq, 3000), writer);
                //        SequenceHelper.WriteSilenceSample(duration, writer);

                //    }

                //    freq = ((j % 2) != 0) ? 180 : 260;
                //    int repeatSeq = ((j % 2) == 0) ? 2 : 2;
                //    duration = ((j % 2) == 0) ? 100 : 100;

                //    SequenceHelper.WriteUpDownSample(4000, 1500, 500, freq, 1000, writer);

                //    SequenceHelper.WriteSilenceSample(duration * 2, writer);



                //    //for (int i = 0; i < repeatSeq; i++)
                //    //{
                //    //    WriteSample(MakeSample(duration * 3, 50, 300), writer);

                //    //    //if (j != (repeatGlobalCount - 1))
                //    //    //    WriteSample(MakeSample(duration, 30, 3000), writer);
                //    //}


                //}
                streamWriter.Close();
            }

            SoundPlayer player = new SoundPlayer(".\\output.wav");

            player.Load();

            player.PlaySync();

            Application.Current.MainWindow.Close();

            //OscToFile(@".\SampleSine.wav", new Oscillator(WaveType.Sine, 1000, 4000, 300, 2));
            //OscToFile(@".\SampleSawtooth.wav", new Oscillator(WaveType.Sawtooth, 1000, 4000, 300, 2));
            //OscToFile(@".\SampleSquare.wav", new Oscillator(WaveType.Square, 1000, 4000, 300, 2));
        }
Esempio n. 14
0
        private void btnTestForm_Click(object sender, EventArgs e)
        {
            using (MemoryStream stream = new MemoryStream())
            {
                WaveStreamWriter streamWriter = new WaveStreamWriter(stream);

                //   streamWriter.WriteSilenceChunk(5);

                int freq     = (int)waveFormControl.Frequency;
                int duration = (int)waveFormControl.Duration;
                int amp      = (int)waveFormControl.Amplitude;

                List <Tone> tones = new List <Tone>();

                tones.Add(Tones.Item("Do3"));
                tones.Add(Tones.Item("Ré3"));
                tones.Add(Tones.Item("Mi3"));
                tones.Add(Tones.Item("Fa3"));
                tones.Add(Tones.Item("Sol3"));
                tones.Add(Tones.Item("La3"));
                tones.Add(Tones.Item("Si3"));
                tones.Add(Tones.Item("Do4"));

                //foreach (var item in tones)
                //{
                ////streamWriter.WriteOscillator(new Oscillator(WaveType.Sine, (int)numDuration.Value, item.Frequency, (int)numAmplitude.Value, 2));
                //streamWriter.WriteChunk(SampleHelper.MakeChordChunk(duration, freq, amp, 2));
                ////streamWriter.WriteChunk(SampleHelper.MakeChordChunk(duration, freq, -amp, 2));
                //streamWriter.WriteSilenceChunk(10);
                //}


                //foreach (var item in Tones.ToneList())
                //{
                //      streamWriter.WriteOscillator(new Oscillator(WaveType.Sine, 200, item.Frequency, item.Amplitude, 2));
                //      streamWriter.WriteSilenceChunk(100);

                //}
                List <WaveType> types = lvWaveForms.GetSelectedForms();
                AudioChunk      chunk = new AudioChunk();

                foreach (var item in types)
                {
                    chunk.AddOscillator(item, duration, freq, amp, 2);

                    //chunk.AddOscillator(item, duration, freq, -amp, 2);
                }
                ////chunk.AddOscillator(WaveType.Noise, duration, 40, 2000, 2);
                ////chunk.AddOscillator(WaveType.Noise, duration, 20, 1000, 2);

                ////for (int i = 0; i < 15; i++)
                ////{
                ////    chunk.AddOscillator(WaveType.Square, duration, freq - i, amp - (i * 200), 2);
                ////    chunk.AddOscillator(WaveType.Sawtooth, duration, freq - i, amp - (i * 200), 2);
                ////    //chunk.AddOscillator(WaveType.Sine, duration, freq -i, amp - (i * 100), 2);
                ////}

                if (chunk.Oscillators.Count > 0)
                {
                    streamWriter.WriteChunk(chunk);
                    streamWriter.WriteChunk(chunk);
                    streamWriter.WriteChunk(chunk);
                }

                streamWriter.Close();

                PlayStream(stream);
            }
        }
Esempio n. 15
0
        private void btnNewChunk_Click(object sender, EventArgs e)
        {
            AudioChunk chunk = new AudioChunk();

            chunkTree.AddChunk(chunk);
        }