private void buttonSave_Click(object sender, EventArgs e) { WriteToFile("my.wav", (Int16[])buffer.Read( 0, Int16.MaxValue.GetType(), LockFlag.None, buffer.Caps.BufferBytes / 2 )); MessageBox.Show("Saved"); }
/// <summary> /// Retrieves the current data this buffer holds. /// </summary> byte[] ISampleBuffer.GetCurrentData() { if (_bufferLength == 0) { return(new byte[0]); } Stream stream = new MemoryStream(_bufferLength); _buffer.Read(0, stream, _bufferLength, LockFlag.EntireBuffer); byte[] data = new byte[_bufferLength]; stream.Read(data, 0, _bufferLength); stream.Close(); return(data); }
void RefreshBuffer() { int ReadPosition; // variable to count byte difference in compressed and non compressed data of audio file int reduction = 0; while (m_lPlayed < m_lLength) { //1 if (SoundBuffer.Status.BufferLost) { SoundBuffer.Restore(); } reduction = 0; Thread.Sleep(50); ReadPosition = SoundBuffer.PlayPosition; if (ReadPosition < ((m_SizeBuffer) - m_UpdateVMArrayLength)) { Array.Copy(SoundBuffer.Read(ReadPosition, typeof(byte), LockFlag.None, m_UpdateVMArrayLength), arUpdateVM, m_UpdateVMArrayLength); //if ( m_EventsEnabled == true) //ob_UpdateVuMeter.NotifyUpdateVuMeter ( this, ob_UpdateVuMeter ) ; UpdateVuMeter(this, new events.AudioPlayerEvents.UpdateVuMeter()); // JQ } // check if play cursor is in second half , then refresh first half else second if ((m_BufferCheck % 2) == 1 && SoundBuffer.PlayPosition > m_RefreshLength) { //2 // Checks if file is played or byteBuffer is played if (m_PlayFile == true) { //3 LoadStream(false); // check for normal or fast play if (m_FastPlay == false) { //4 SoundBuffer.Write(0, m_MemoryStream, m_RefreshLength, 0); } //-4 else { //4 for (int i = 0; i < m_RefreshLength; i = i + (m_Step * m_FrameSize)) { SoundBuffer.Write(i, m_MemoryStream, m_Step * m_FrameSize, 0); i = i - (2 * m_FrameSize); reduction = reduction + (2 * m_FrameSize); } //-4 } //-3 } //-2 m_lPlayed = m_lPlayed + m_RefreshLength + reduction + m_CompAddition; m_BufferCheck++; } //-1 else if ((m_BufferCheck % 2 == 0) && SoundBuffer.PlayPosition < m_RefreshLength) { //1 if (m_PlayFile == true) { //2 LoadStream(false); if (m_FastPlay == false) { //3 SoundBuffer.Write(m_RefreshLength, m_MemoryStream, m_RefreshLength, 0); } //-3 else { //3 for (int i = 0; i < m_RefreshLength; i = i + (m_Step * m_FrameSize)) { //4 SoundBuffer.Write(i + m_RefreshLength, m_MemoryStream, m_Step * m_FrameSize, 0); i = i - (2 * m_FrameSize); reduction = reduction + (2 * m_FrameSize); } //-4 // end of FastPlay check } //-3 } //-2 m_lPlayed = m_lPlayed + m_RefreshLength + reduction + m_CompAddition; m_BufferCheck++; // end of even/ odd part of buffer; } //-1 // end of while } // calculate time to stop according to remaining data int time; long lRemaining = (m_lPlayed - m_lLength); double dTemp; dTemp = ((m_RefreshLength + m_RefreshLength - lRemaining) * 1000) / m_RefreshLength; time = Convert.ToInt32(dTemp * 0.48); //if (m_FastPlay == true) //time = (time-250) * (1- (2/m_Step)); Thread.Sleep(time); // Stopping process begins SoundBuffer.Stop(); if (ob_VuMeter != null) { ob_VuMeter.Reset(); } if (m_PlayFile == true) { m_br.Close(); //ob_EndOfAudioAsset.NotifyEndOfAudioAsset ( this , ob_EndOfAudioAsset) ; } //Stop () ; // changes the state and trigger events //ob_StateChanged = new StateChanged (m_State) ; EndOfAudioAsset(this, new events.AudioPlayerEvents.EndOfAudioAsset()); // JQ events.AudioPlayerEvents.StateChanged e = new events.AudioPlayerEvents.StateChanged(m_State); m_State = AudioPlayerState.Stopped; TriggerStateChangedEvent(e); // RefreshBuffer ends }
void RefreshBuffer() { CalculationFunctions calc = new CalculationFunctions(); int ReadPosition; // variable to count byte difference in compressed and non compressed data of audio file int reduction = 0; while (m_lPlayed < m_lLength) { //1 if (SoundBuffer.Status.BufferLost) { SoundBuffer.Restore(); } reduction = 0; Thread.Sleep(50); ReadPosition = SoundBuffer.PlayPosition; if (ReadPosition < ((m_SizeBuffer) - m_UpdateVMArrayLength)) { Array.Copy(SoundBuffer.Read(ReadPosition, typeof(byte), LockFlag.None, m_UpdateVMArrayLength), arUpdateVM, m_UpdateVMArrayLength); ob_UpdateVuMeter.NotifyUpdateVuMeter(this, ob_UpdateVuMeter); } // check if play cursor is in second half , then refresh first half else second if ((m_BufferCheck % 2) == 1 && SoundBuffer.PlayPosition > m_RefreshLength) { //2 // Checks if file is played or byteBuffer is played if (m_PlayFile == true) { //3 // check for normal or fast play if (m_FastPlay == false) { //4 SoundBuffer.Write(0, fs, m_RefreshLength, 0); } //-4 else { //4 for (int i = 0; i < m_RefreshLength; i = i + (m_Step * m_FrameSize)) { SoundBuffer.Write(i, fs, m_Step * m_FrameSize, 0); i = i - (2 * m_FrameSize); reduction = reduction + (2 * m_FrameSize); } //-4 } //-3 } //-2 else { //2 for (int i = 0; i < m_RefreshLength; i++) { RefreshArray[i] = ByteBuffer [m_lArrayPosition + i]; } SoundBuffer.Write(0, RefreshArray, 0); m_lArrayPosition = m_lArrayPosition + m_RefreshLength; } //-2 m_lPlayed = m_lPlayed + m_RefreshLength + reduction; m_BufferCheck++; } //-1 else if ((m_BufferCheck % 2 == 0) && SoundBuffer.PlayPosition < m_RefreshLength) { //1 if (m_PlayFile == true) { //2 if (m_FastPlay == false) { //3 SoundBuffer.Write(m_RefreshLength, fs, m_RefreshLength, 0); } //-3 else { //3 for (int i = 0; i < m_RefreshLength; i = i + (m_Step * m_FrameSize)) { //4 SoundBuffer.Write(i + m_RefreshLength, fs, m_Step * m_FrameSize, 0); i = i - (2 * m_FrameSize); reduction = reduction + (2 * m_FrameSize); } //-4 // end of FastPlay check } //-3 } //-2 else { //2 for (int i = 0; i < m_RefreshLength; i++) { RefreshArray[i] = ByteBuffer [m_lArrayPosition + i]; } SoundBuffer.Write(m_RefreshLength, RefreshArray, 0); m_lArrayPosition = m_lArrayPosition + m_RefreshLength; // end of file check } //-2 m_lPlayed = m_lPlayed + m_RefreshLength + reduction; m_BufferCheck++; // end of even/ odd part of buffer; } //-1 // end of while } // calculate time to stop according to remaining data int time; long lRemaining = (m_lPlayed - m_lLength); double dTemp; dTemp = ((m_RefreshLength + m_RefreshLength - lRemaining) * 1000) / m_RefreshLength; time = Convert.ToInt32(dTemp * 0.48); //if (m_FastPlay == true) //time = (time-250) * (1- (2/m_Step)); Thread.Sleep(time); // Stopping process begins SoundBuffer.Stop(); if (m_PlayFile == true) { fs.Close(); ob_EndOfAudioAsset.NotifyEndOfAudioAsset(this, ob_EndOfAudioAsset); } else { m_lArrayPosition = 0; ByteBuffer = null; ob_EndOfAudioBuffer.NotifyEndOfAudioBuffer(this, ob_EndOfAudioBuffer); } //Stop () ; // changes the state and trigger events //ob_StateChanged = new StateChanged (m_State) ; //StateChanged ob_StateChanged = new StateChanged (m_State) ; StateChanged ob_StateChanged = StateChanged.From(m_State); m_State = AudioPlayerState.stopped; TriggerStateChangedEvent(ob_StateChanged); StateChangedEvent(this, ob_StateChanged); //ob_EndOfFile.TriggerEndOfFileEvent ( m_Asset.Path); // RefreshBuffer ends }