using System; using System.Threading; using SFML; using SFML.Audio; namespace sample_soundcapture { static class Program { /// /// The main entry point for the application. /// static void Main(string[] args) { // Check that the device can capture audio if (SoundRecorder.IsAvailable == false) { Console.WriteLine("Sorry, audio capture is not supported by your system"); return; } // Choose the sample rate Console.WriteLine("Please choose the sample rate for sound capture (44100 is CD quality) : "); uint sampleRate = uint.Parse(Console.ReadLine()); // Wait for user input... Console.WriteLine("Press enter to start recording audio"); Console.ReadLine(); // Here we'll use an integrated custom recorder, which saves the captured data into a SoundBuffer SoundBufferRecorder recorder = new SoundBufferRecorder(); // Audio capture is done in a separate thread, so we can block the main thread while it is capturing recorder.Start(sampleRate); Console.WriteLine("Recording... press enter to stop"); Console.ReadLine(); recorder.Stop(); // Get the buffer containing the captured data SoundBuffer buffer = recorder.SoundBuffer; // Display captured sound informations Console.WriteLine("Sound information :"); Console.WriteLine(" " + buffer.Duration + " seconds"); Console.WriteLine(" " + buffer.SampleRate + " samples / seconds"); Console.WriteLine(" " + buffer.ChannelsCount + " channels"); // Choose what to do with the recorded sound data Console.WriteLine("What do you want to do with captured sound (p = play, s = save) ? "); char choice = char.Parse(Console.ReadLine()); if (choice == 's') { // Choose the filename Console.WriteLine("Choose the file to create : "); string filename = Console.ReadLine(); // Save the buffer buffer.SaveToFile(filename); } else { // Create a sound instance and play it Sound sound = new Sound(buffer); sound.Play(); // Wait until finished while (sound.Status == SoundStatus.Playing) { // Display the playing position Console.CursorLeft = 0; Console.Write("Playing... " + sound.PlayingOffset + " sec "); // Leave some CPU time for other threads Thread.Sleep(100); } } // Finished ! Console.WriteLine("\nDone !"); } } }