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); } }
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(); } } } }
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; }
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); }
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); }
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 ); }
private AudioChunk GetSelectedChunk() { AudioChunk chunk = null; if (chunkTree.SelectedNode != null) { TreeNode node = chunkTree.SelectedNode; if (node.Level == 1) { chunk = (AudioChunk)node.Tag; } } return(chunk); }
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); } } }
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); } } } }
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); } }
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; } }
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)); }
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); } }
private void btnNewChunk_Click(object sender, EventArgs e) { AudioChunk chunk = new AudioChunk(); chunkTree.AddChunk(chunk); }