summaryrefslogtreecommitdiff
path: root/examples/sound_capture/SoundCapture.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/sound_capture/SoundCapture.cpp')
-rw-r--r--examples/sound_capture/SoundCapture.cpp95
1 files changed, 95 insertions, 0 deletions
diff --git a/examples/sound_capture/SoundCapture.cpp b/examples/sound_capture/SoundCapture.cpp
new file mode 100644
index 0000000..a6946ac
--- /dev/null
+++ b/examples/sound_capture/SoundCapture.cpp
@@ -0,0 +1,95 @@
+
+////////////////////////////////////////////////////////////
+// Headers
+////////////////////////////////////////////////////////////
+#include <SFML/Audio.hpp>
+#include <iomanip>
+#include <iostream>
+
+
+////////////////////////////////////////////////////////////
+/// Entry point of application
+///
+/// \return Application exit code
+///
+////////////////////////////////////////////////////////////
+int main()
+{
+ // Check that the device can capture audio
+ if (sf::SoundRecorder::isAvailable() == false)
+ {
+ std::cout << "Sorry, audio capture is not supported by your system" << std::endl;
+ return EXIT_SUCCESS;
+ }
+
+ // Choose the sample rate
+ unsigned int sampleRate;
+ std::cout << "Please choose the sample rate for sound capture (44100 is CD quality) : ";
+ std::cin >> sampleRate;
+ std::cin.ignore(10000, '\n');
+
+ // Wait for user input...
+ std::cout << "Press enter to start recording audio";
+ std::cin.ignore(10000, '\n');
+
+ // Here we'll use an integrated custom recorder, which saves the captured data into a SoundBuffer
+ sf::SoundBufferRecorder recorder;
+
+ // Audio capture is done in a separate thread, so we can block the main thread while it is capturing
+ recorder.start(sampleRate);
+ std::cout << "Recording... press enter to stop";
+ std::cin.ignore(10000, '\n');
+ recorder.stop();
+
+ // Get the buffer containing the captured data
+ const sf::SoundBuffer& buffer = recorder.getBuffer();
+
+ // Display captured sound informations
+ std::cout << "Sound information :" << std::endl;
+ std::cout << " " << buffer.getDuration().asSeconds() << " seconds" << std::endl;
+ std::cout << " " << buffer.getSampleRate() << " samples / seconds" << std::endl;
+ std::cout << " " << buffer.getChannelCount() << " channels" << std::endl;
+
+ // Choose what to do with the recorded sound data
+ char choice;
+ std::cout << "What do you want to do with captured sound (p = play, s = save) ? ";
+ std::cin >> choice;
+ std::cin.ignore(10000, '\n');
+
+ if (choice == 's')
+ {
+ // Choose the filename
+ std::string filename;
+ std::cout << "Choose the file to create : ";
+ std::getline(std::cin, filename);
+
+ // Save the buffer
+ buffer.saveToFile(filename);
+ }
+ else
+ {
+ // Create a sound instance and play it
+ sf::Sound sound(buffer);
+ sound.play();
+
+ // Wait until finished
+ while (sound.getStatus() == sf::Sound::Playing)
+ {
+ // Display the playing position
+ std::cout << "\rPlaying... " << std::fixed << std::setprecision(2) << sound.getPlayingOffset().asSeconds() << " sec";
+ std::cout << std::flush;
+
+ // Leave some CPU time for other threads
+ sf::sleep(sf::milliseconds(100));
+ }
+ }
+
+ // Finished !
+ std::cout << std::endl << "Done !" << std::endl;
+
+ // Wait until the user presses 'enter' key
+ std::cout << "Press enter to exit..." << std::endl;
+ std::cin.ignore(10000, '\n');
+
+ return EXIT_SUCCESS;
+}